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"); } }