using System.Xml; using MBS.Web.UI.HtmlControls; namespace MBS.Web.UI; public class WebPage : Control { public bool MobileFriendly { get; set; } = true; public WebPage(Dictionary? pathVariables = null) : base(pathVariables) { } public IList HeaderControls { get; set; } = new List(); public IList Controls { get; set; } = new List(); public WebStyleSheet.WebStyleSheetCollection StyleSheets { get; } = new WebStyleSheet.WebStyleSheetCollection(); public string Title { get; set; } = ""; private bool ChildControlsCreated { get; set; } = false; protected virtual void CreateChildControls() { } protected override void PersistentInitializeInternal() { base.PersistentInitializeInternal(); Controls.Clear(); CreateChildControls(); /* if (!ChildControlsCreated) { CreateChildControls(); ChildControlsCreated = true; } */ } protected virtual IEnumerable GetHeaderControls() { return new Control[0]; } protected override string TagName => "html"; protected override void RenderBeginTag(XmlWriter writer) { EnsureInitialized(); writer.WriteStartElement(TagName, "http://www.w3.org/1999/xhtml"); writer.WriteStartElement("head"); writer.WriteElementString("title", Title); if (MobileFriendly) { writer.WriteStartElement("meta"); writer.WriteAttributeString("name", "viewport"); writer.WriteAttributeString("content", "width=device-width, initial-scale=1.0"); writer.WriteEndElement(); } List ctls = new List(); IEnumerable headerCtls = GetHeaderControls(); ctls.AddRange(headerCtls); foreach (WebStyleSheet ss in StyleSheets) { if (ss.FileName != null) { ctls.Add(new HtmlLink("stylesheet", ss.ContentType, ss.FileName)); } else if (ss.Content != null) { ctls.Add(new HtmlGenericControl("style", new KeyValuePair[] { new KeyValuePair("type", ss.ContentType) }, null, ss.Content)); } } foreach (Control control in ctls) { control.Context = Context; control.Render(writer); } writer.WriteEndElement(); writer.WriteStartElement("body"); List styleClasses = GetStyleClasses().ToList(); if (styleClasses.Count > 0) { writer.WriteStartAttribute("class"); for (int i = 0; i < styleClasses.Count; i++) { writer.WriteValue(styleClasses[i]); if (i < styleClasses.Count - 1) { writer.WriteValue(" "); } } writer.WriteEndAttribute(); } writer.WriteStartElement("form"); writer.WriteAttributeString("method", "POST"); } protected override void RenderContents(XmlWriter writer) { foreach (Control control in Controls) { control.Context = Context; control.Render(writer); } } protected override void RenderEndTag(XmlWriter writer) { base.RenderEndTag(writer); writer.WriteEndElement(); writer.WriteEndElement(); } }