You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Services/DOM/DSL/Model/TContentElement.cs

165 lines
5.2 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using ZeroLevel.DocumentObjectModel;
using ZeroLevel.DocumentObjectModel.Flow;
namespace DOM.DSL.Model
{
internal class TContentElement
{
private readonly Document _document;
public TContentElement(Document document)
{
_document = document;
}
private static void TraversElement(IContentElement element, ContentElementType type, Action<IContentElement> handler)
{
if (element.Type == type)
{
handler(element);
}
switch (element.Type)
{
// Containers
case ContentElementType.Section:
var section = (element as Section);
foreach (var item in section!.Parts)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.Paragraph:
var paragraph = (element as Paragraph);
foreach (var item in paragraph!.Parts)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.List:
var list = (element as List);
foreach (var item in list!.Items)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.Gallery:
var gallery = (element as Gallery);
foreach (var item in gallery!.Images)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.Audioplayer:
var audioplayer = (element as Audioplayer);
foreach (var item in audioplayer!.Tracks)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.Videoplayer:
var videoplayer = (element as Videoplayer);
foreach (var item in videoplayer!.Playlist)
{
TraversElement(item, type, handler);
}
break;
case ContentElementType.Table:
var table = (element as Table);
foreach (var column in table!.Columns)
{
TraversElement(column, type, handler);
}
foreach (var row in table.Rows)
{
TraversElement(row, type, handler);
foreach (var cell in row.Cells)
{
TraversElement(cell, type, handler);
}
}
break;
}
}
private ContentElementType ParseContentElementType(string element_name)
{
switch (element_name)
{
case "section":
return ContentElementType.Section;
case "paragraph":
return ContentElementType.Paragraph;
case "link":
return ContentElementType.Link;
case "list":
return ContentElementType.List;
case "table":
return ContentElementType.Table;
case "audio":
return ContentElementType.Audio;
case "audioplayer":
return ContentElementType.Audioplayer;
case "form":
return ContentElementType.Form;
case "gallery":
return ContentElementType.Gallery;
case "image":
return ContentElementType.Image;
case "video":
return ContentElementType.Video;
case "videoplayer":
return ContentElementType.Videoplayer;
case "quote":
return ContentElementType.Quote;
case "text":
return ContentElementType.Text;
case "column":
return ContentElementType.Column;
case "row":
return ContentElementType.Row;
}
return ContentElementType.Unknown;
}
public IEnumerable<IContentElement> Find(string elementName, string index)
{
var type = ParseContentElementType(elementName);
if (type == ContentElementType.Unknown) return Enumerable.Empty<IContentElement>();
var list = new List<IContentElement>();
foreach (var section in _document.Content.Sections)
{
TraversElement(section, type, e => list.Add(e));
}
return list;
}
public override string ToString()
{
return "Content";
}
}
}

Powered by TurnKey Linux.