namespace Aven;
using Aven.HTML;
using System;
using System.Collections;
/**
An instance of this class represents a single .html website
*/
abstract class Page
{
private String _Title = new .("") ~ delete _;
private List _Elements = new .() ~ DeleteContainerAndItems!(_);
private List _Scripts = new .() ~ DeleteContainerAndItems!(_);
private List _InlineStyle = new .() ~ DeleteContainerAndItems!(_);
private List _Styles = new .() ~ DeleteContainerAndItems!(_);
public StringView Title
{
get => _Title;
set
{
_Title.Clear();
_Title.Append(value);
}
}
public void AddElement(params Span elmt)
{
for(var i in elmt)
_Elements.Add(i);
}
public void AddScripts(params Span scripts)
{
for(var i in scripts)
_Scripts.Add(new .(i));
}
public void AddStyles(params Span styles)
{
for(var i in styles)
_Styles.Add(new .(i));
}
public void AddInlineStyle(StringView style)
{
_InlineStyle.Add(new .(style));
}
public void Build(String buffer)
{
buffer.Append(scope $"""
{Title}
{BuildStyles(.. scope .())}
{BuildElements(.. scope .())}
""");
}
private void BuildElements(String buffer)
{
for(var i in _Elements)
{
i.Build(buffer);
buffer.Append("\n");
}
}
private void BuildStyles(String buffer)
{
for(var i in _Styles)
buffer.Append(scope $"\n");
for(var i in _InlineStyle)
buffer.Append(scope $"""
""");
}
private void BuildScripts(String buffer)
{
for(var i in _Scripts)
buffer.Append(scope $"\n");
}
}