public bool Render(object o, string description, int depth, XhtmlTextWriter writer) { //there are two principal ways of rendering an object, // if it's an enumerable we render each object as a row in a table // if it's jut an object we render each property of the object as a row in a table if (!String.IsNullOrWhiteSpace(description)) { writer.RenderBeginTag(HtmlTextWriterTag.H3); writer.Write(description); writer.RenderEndTag(); writer.WriteLine(); } if (depth <= 0) { return(true); } if (o is IEnumerable && !(o is String)) { return(RenderEnumerable((IEnumerable)o, depth, writer)); } else { return(RenderObject(o, depth, writer)); } }
public bool RenderObject(object o, int depth, XhtmlTextWriter writer) { var objectType = o.GetType(); if (IsSimpleType(objectType)) { writer.RenderBeginTag(HtmlTextWriterTag.P); writer.Write(o.ToString()); writer.RenderEndTag(); writer.WriteLine(); return(true); } //get the members (fields and properties) var members = GetMembers(objectType); //create a two column table containing member and then value writer.RenderBeginTag(HtmlTextWriterTag.Table); //write a header containing the class name writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2"); writer.RenderBeginTag(HtmlTextWriterTag.Th); writer.Write(objectType.Name); writer.RenderEndTag(); //th writer.RenderEndTag(); //tr foreach (var member in members) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.AddAttribute(HtmlTextWriterAttribute.Class, "left"); writer.RenderBeginTag(HtmlTextWriterTag.Th); writer.Write(member.Name); writer.RenderEndTag(); //th writer.RenderBeginTag(HtmlTextWriterTag.Td); RenderMember(member, o, depth, writer); writer.RenderEndTag(); //td writer.RenderEndTag(); //tr } writer.RenderEndTag(); //table writer.WriteLine(); return(true); }
private void InitHeader() { writer.WriteLineNoTabs("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); writer.AddAttribute("xmlns", "http://www.w3.org/1999/xhtml"); writer.AddAttribute("xml:lang", "en"); writer.RenderBeginTag(HtmlTextWriterTag.Html); writer.RenderBeginTag(HtmlTextWriterTag.Head); writer.RenderBeginTag(HtmlTextWriterTag.Title); writer.Write("XhtmlDumper"); writer.RenderEndTag(); writer.AddAttribute("http-equiv", "content-type"); writer.AddAttribute(HtmlTextWriterAttribute.Content, "text/html;charset=utf-8"); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); writer.WriteLine(); writer.AddAttribute(HtmlTextWriterAttribute.Name, "generator"); writer.AddAttribute(HtmlTextWriterAttribute.Content, "XhtmlDumper"); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); writer.WriteLine(); writer.AddAttribute(HtmlTextWriterAttribute.Name, "description"); writer.AddAttribute(HtmlTextWriterAttribute.Content, "Generated on: " + DateTime.Now); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); writer.WriteLine(); writer.AddAttribute("type", "text/css"); writer.RenderBeginTag(HtmlTextWriterTag.Style); writer.WriteLineNoTabs(Resources.StyleSheet); writer.RenderEndTag(); // style writer.RenderEndTag(); // Head writer.WriteLine(); writer.RenderBeginTag(HtmlTextWriterTag.Body); }
private string GenerateHtmlReport() { string htmlFullFilePath = Path.GetTempFileName() + Guid.NewGuid().ToString() + ".html"; //_testsSummary = SummarizeRun(); using (StreamWriter htmlStreamWriter = new StreamWriter(htmlFullFilePath)) { using (System.Web.UI.XhtmlTextWriter writer = new XhtmlTextWriter(htmlStreamWriter, " ")) { writer.WriteLine("<!DOCTYPE xhtml>"); writer.RenderBeginTag(HtmlTextWriterTag.Html); // Begin Html //Write html Head: writer.RenderBeginTag(HtmlTextWriterTag.Head); // Begin Head writer.WriteLine(WriteHtmlReportHead()); writer.RenderEndTag(); // End Head //Write html Body: using (HtmlGenericControl body = new HtmlGenericControl("body")) // Begin Body content { #region Header Creation //body.Controls.Add(GenerateHeaderSection()); GenerateHeaderSection(body); #endregion Header Creation #region Navigation Creation //body.Controls.Add(GenerateNavSection()); GenerateNavSection(body); #endregion Navigator Creation #region Article Creation //body.Controls.Add(GenerateArticleSection()); GenerateArticleSection(body); #endregion Article Creation #region Modal Creation using (HtmlGenericControl modal = new HtmlGenericControl("div")) { modal.Attributes.Add("id", "modal"); modal.Attributes.Add("class", "modal"); modal.Controls.Add( new LiteralControl( "<span class=\"close\" onclick=\"closeModal()\">×</span>")); modal.Controls.Add( new LiteralControl("<img class=\"modal-content\" id=\"modalImg\">")); modal.Controls.Add(new LiteralControl("<div id=\"caption\"></div>")); body.Controls.Add(modal); } #endregion Modal Creation #region footer Creation using (HtmlGenericControl footer = new HtmlGenericControl("footer")) { body.Controls.Add(footer); } #endregion footer Creation body.RenderControl(writer); // End Body content } writer.RenderEndTag(); // End Html } } return(htmlFullFilePath); }
public bool RenderEnumerable(IEnumerable enumerable, int depth, XhtmlTextWriter writer) { var elementType = GetElementTypeOfEnumerable(enumerable); if (elementType == null) { return(false); } //get the members (fields and properties) var members = GetMembers(elementType); //write the headers and start the table writer.RenderBeginTag(HtmlTextWriterTag.Table); //if the element type is an element that needs to be rendered atomically we use a different method if (IsSimpleType(elementType)) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.RenderBeginTag(HtmlTextWriterTag.Th); writer.Write(elementType.Name); writer.RenderEndTag(); writer.RenderEndTag(); foreach (var element in enumerable) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write(element.ToString()); writer.RenderEndTag(); writer.RenderEndTag(); } } else { writer.RenderBeginTag(HtmlTextWriterTag.Tr); foreach (var member in members) { writer.RenderBeginTag(HtmlTextWriterTag.Th); writer.Write(member.Name); writer.RenderEndTag(); } writer.RenderEndTag(); //tr writer.WriteLine(); //write all the members foreach (var element in enumerable) { writer.RenderBeginTag(HtmlTextWriterTag.Tr); foreach (var member in members) { writer.RenderBeginTag(HtmlTextWriterTag.Td); RenderMember(member, element, depth, writer); writer.RenderEndTag(); //td } writer.RenderEndTag(); //tr writer.WriteLine(); } } //end the table writer.RenderEndTag(); writer.WriteLine(); return(true); }