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