124 lines
2.9 KiB
C#
124 lines
2.9 KiB
C#
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<string, string>? pathVariables = null) : base(pathVariables) { }
|
|
|
|
public IList<Control> HeaderControls { get; set; } = new List<Control>();
|
|
public IList<Control> Controls { get; set; } = new List<Control>();
|
|
|
|
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<Control> 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<Control> ctls = new List<Control>();
|
|
|
|
IEnumerable<Control> 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<string, string>[] { new KeyValuePair<string, string>("type", ss.ContentType) }, null, ss.Content));
|
|
}
|
|
}
|
|
|
|
foreach (Control control in ctls)
|
|
{
|
|
control.Context = Context;
|
|
control.Render(writer);
|
|
}
|
|
|
|
writer.WriteEndElement();
|
|
|
|
writer.WriteStartElement("body");
|
|
|
|
List<string> 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();
|
|
}
|
|
}
|