protected override void OnPreRender(EventArgs e) { SharedBasePage requestPage = Page as SharedBasePage; base.OnPreRender(e); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "script")) { string prefix = String.Format("var ct_img_expanded = '{0}';\nvar ct_img_collapsed = '{1}';", requestPage.GetThemedImageUrl("outlinedown"), requestPage.GetThemedImageUrl("outlinearrow")); string script; using (StreamReader rs = new StreamReader(GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".CategoryListJS.txt"))) { script = rs.ReadToEnd(); } Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", String.Format("<script type=\"text/javascript\">\n<!--\n{0}\n{1}\n// --></script>", prefix, script)); } if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "style")) { string script; using (StreamReader rs = new StreamReader(GetType().Assembly.GetManifestResourceStream(GetType().Namespace + ".CategoryListCSS.txt"))) { script = rs.ReadToEnd(); } Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "style", ""); requestPage.InsertInPageHeader(String.Format("<style type=\"text/css\">{0}</style>", script)); } }
private PlaceHolder RenderCategoryHeader(string cat, string displayName, bool renderLink) { PlaceHolder header = new PlaceHolder(); // anchor for easy navigation string anchor = String.Format("<a name=\"{0}\"></a>", HttpUtility.UrlEncode(cat)); header.Controls.Add(new LiteralControl(anchor)); // category link if (renderLink) { HyperLink catLink = new HyperLink(); catLink.CssClass = "date"; catLink.Text = String.Format("{0} ({1})", displayName, sorted[cat].Count); catLink.NavigateUrl = SiteUtilities.GetCategoryViewUrl(requestPage.SiteConfig, cat); header.Controls.Add(catLink); } else { header.Controls.Add(new LiteralControl(String.Format("<span class=\"date\">{0} ({1})</span>", displayName, sorted[cat].Count))); } header.Controls.Add(new LiteralControl(" ")); if (renderLink) { // category feed HyperLink rssLink = new HyperLink(); rssLink.CssClass = "categoryListXmlLinkStyle"; rssLink.NavigateUrl = SiteUtilities.GetRssCategoryUrl(requestPage.SiteConfig, cat); System.Web.UI.WebControls.Image rssImg = new System.Web.UI.WebControls.Image(); rssImg.ImageUrl = requestPage.GetThemedImageUrl("rssButton"); rssLink.Controls.Add(rssImg); header.Controls.Add(rssLink); } header.Controls.Add(new LiteralControl("<hr size=\"1\">")); return(header); }
private void RenderCategoriesIntoTable(Table table, string[] parentPath) { SharedBasePage requestPage = Page as SharedBasePage; int parentPathLength = parentPath.Length; foreach (CategoryCacheEntry categoryEntry in categories) { string[] entryPath = categoryEntry.CategoryPath; int entryPathLength = categoryEntry.CategoryPath.Length; // If the path shorter of equal to the parent path or if // the path is more than one item longer than the parent path, // we can skip this item. We seek for descendants only. if (entryPathLength != parentPathLength + 1) { continue; } bool identicalSubpaths = true; // if we don't have the right subpath, skip as well for (int j = 0; j < parentPath.Length; j++) { if (entryPath[j].Trim().ToUpper() != parentPath[j].Trim().ToUpper()) { identicalSubpaths = false; break; } } if (!identicalSubpaths) { continue; } TableRow row = new TableRow(); TableCell cell = new TableCell(); cell.CssClass = "categoryListCellStyle"; table.Rows.Add(row); row.Cells.Add(cell); HyperLink rssLink = new HyperLink(); if (showFeedBadge) { rssLink.CssClass = "categoryListXmlLinkStyle"; if (requestPage.SiteConfig.UseFeedSchemeForSyndication) { rssLink.NavigateUrl = SiteUtilities.GetFeedCategoryUrl(requestPage.SiteConfig, categoryEntry.Name); } else { rssLink.NavigateUrl = SiteUtilities.GetRssCategoryUrl(requestPage.SiteConfig, categoryEntry.Name); } System.Web.UI.WebControls.Image rssImg = new System.Web.UI.WebControls.Image(); rssImg.ImageUrl = requestPage.GetThemedImageUrl("feedButton"); rssImg.AlternateText = "[RSS]"; rssLink.Attributes.Add("rel", "tag"); rssLink.Controls.Add(rssImg); } /* PARKED * HyperLink atomLink = new HyperLink(); * atomLink.CssClass = "categoryListXmlLinkStyle"; * atomLink.NavigateUrl = Utils.GetAtomCategoryUrl(requestPage.SiteConfig,categoryEntry.Name); * System.Web.UI.WebControls.Image atomImg = new System.Web.UI.WebControls.Image(); * atomImg.ImageUrl = requestPage.GetThemedImageUrl("atomButton"); * atomLink.Controls.Add(atomImg); */ // the entryPath is a leaf on the parentPath ? if (!categories.HasChildrenInCollection(categoryEntry)) { // we just emit the link if (showFeedBadge) { cell.Controls.Add(rssLink); } cell.Controls.Add(new LiteralControl(" ")); /*cell.Controls.Add(atomLink); * cell.Controls.Add( new LiteralControl(" "));*/ HyperLink catLink = new HyperLink(); catLink.CssClass = "categoryListLinkStyle"; catLink.Text = categoryEntry.DisplayName; catLink.NavigateUrl = SiteUtilities.GetCategoryViewUrl(requestPage.SiteConfig, categoryEntry.Name); catLink.Attributes.Add("rel", "tag"); cell.Controls.Add(catLink); } else { // if there are subitems, we ignore this link and render // it as an categoryEntry NamingPanel panel = new NamingPanel(); cell.Controls.Add(panel); Table categoryEntryHead = new Table(); categoryEntryHead.CellPadding = 0; categoryEntryHead.CellSpacing = 0; categoryEntryHead.CssClass = "categoryListNestedOutlineHeaderTableStyle"; panel.Controls.Add(categoryEntryHead); Panel collapsablePanel = new Panel(); Panel containerPanel = new Panel(); panel.Controls.Add(collapsablePanel); containerPanel.CssClass = "categoryListNestedOutlineContainer"; collapsablePanel.Controls.Add(containerPanel); collapsablePanel.CssClass = "categoryListExpanded"; collapsablePanel.ID = "panel"; TableCell categoryEntryBadge; TableCell categoryEntryTitle; categoryEntryHead.Rows.Add(new TableRow()); categoryEntryHead.Rows[0].Cells.Add(categoryEntryBadge = new TableCell()); categoryEntryHead.Rows[0].Cells.Add(categoryEntryTitle = new TableCell()); categoryEntryBadge.CssClass = "categoryListNestedOutlineBadgeCellStyle"; categoryEntryTitle.CssClass = "categoryListNestedOutlineTitleCellStyle"; HyperLink expandableLink = new HyperLink(); categoryEntryBadge.Controls.Add(rssLink); categoryEntryBadge.Controls.Add(new LiteralControl(" ")); categoryEntryBadge.Controls.Add(expandableLink); categoryEntryBadge.Controls.Add(new LiteralControl(" ")); /*categoryEntryBadge.Controls.Add(atomLink); * categoryEntryBadge.Controls.Add( new LiteralControl(" "));*/ expandableLink.CssClass = "categoryListNestedOutlineBadgeStyle"; System.Web.UI.WebControls.Image imgBadge = new System.Web.UI.WebControls.Image(); expandableLink.Controls.Add(imgBadge); imgBadge.ID = "img"; expandableLink.NavigateUrl = "javascript:ct_toggleExpansionStatus( '" + collapsablePanel.ClientID + "', '" + imgBadge.ClientID + "' )"; imgBadge.ImageUrl = requestPage.GetThemedImageUrl("outlinedown"); imgBadge.ToolTip = requestPage.CoreStringTables.GetString("tooltip_expand"); HyperLink hlHead = new HyperLink(); hlHead.CssClass = "categoryListNestedOutlineTitleStyle"; categoryEntryTitle.Controls.Add(hlHead); hlHead.NavigateUrl = SiteUtilities.GetCategoryViewUrl(requestPage.SiteConfig, categoryEntry.Name); hlHead.Text = categoryEntry.DisplayName; Table list = new Table(); list.CellPadding = 0; list.CellSpacing = 0; list.CssClass = "categoryListNestedOutlineBodyTableStyle"; containerPanel.Controls.Add(list); RenderCategoriesIntoTable(list, categoryEntry.CategoryPath); } } }
protected void Page_PreRender(object sender, System.EventArgs e) { SharedBasePage requestPage = Page as SharedBasePage; Control root = this; HtmlGenericControl entry = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entry.Attributes["class"] = "commentBoxStyle"; } else { entry.Attributes["class"] = "commentBoxStyle commentBoxAuthorStyle"; } root.Controls.Add(entry); HtmlGenericControl entryTitle = new HtmlGenericControl("div"); entryTitle.Attributes["class"] = "commentDateStyle"; //Add the unique anchor for each comment HtmlAnchor anchor = new HtmlAnchor(); anchor.Name = comment.EntryId; entryTitle.Controls.Add(anchor); if (requestPage.SiteConfig.AdjustDisplayTimeZone) { entryTitle.Controls.Add(new LiteralControl(requestPage.SiteConfig.GetConfiguredTimeZone().FormatAdjustedUniversalTime(comment.CreatedUtc))); } else { entryTitle.Controls.Add(new LiteralControl(comment.CreatedUtc.ToString("U") + " UTC")); } entry.Controls.Add(entryTitle); HtmlGenericControl entryBody = new HtmlGenericControl("div"); if (SiteSecurity.GetUserByEmail(comment.AuthorEmail) == null) { entryBody.Attributes["class"] = "commentBodyStyle"; } else { entryBody.Attributes["class"] = "commentBodyStyle commentBodyAuthorStyle"; } if (comment.Content != null) { entryBody.Controls.Add(new LiteralControl(Regex.Replace(comment.Content, "\n", "<br />"))); } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { HtmlGenericControl spamStatus = new HtmlGenericControl("div"); spamStatus.Attributes["class"] = "commentSpamStateStyle"; spamStatus.InnerText = ApplicationResourceTable.GetSpamStateDescription(comment.SpamState); entryBody.Controls.Add(spamStatus); } entry.Controls.Add(entryBody); HtmlGenericControl footer = new HtmlGenericControl("div"); footer.Attributes["class"] = "commentBoxFooterStyle"; entry.Controls.Add(footer); if (requestPage.SiteConfig.CommentsAllowGravatar && String.IsNullOrEmpty(comment.AuthorEmail) == false) { string hash = ""; byte[] data, enc; data = Encoding.Default.GetBytes(comment.AuthorEmail.ToLowerInvariant()); using (MD5 md5 = new MD5CryptoServiceProvider()) { enc = md5.TransformFinalBlock(data, 0, data.Length); foreach (byte b in md5.Hash) { hash += Convert.ToString(b, 16).ToLower().PadLeft(2, '0'); } md5.Clear(); } string nogravpath = ""; if (requestPage.SiteConfig.CommentsGravatarNoImgPath != null) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath != "") { if (requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } } if (String.IsNullOrEmpty(requestPage.SiteConfig.CommentsGravatarNoImgPath) == false) { if (requestPage.SiteConfig.CommentsGravatarNoImgPath == "identicon" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "wavatar" || requestPage.SiteConfig.CommentsGravatarNoImgPath == "monsterid" || requestPage.SiteConfig.CommentsGravatarNoImgPath.Substring(0, 4) == "http") { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.CommentsGravatarNoImgPath); } else { nogravpath = "&default=" + Server.UrlEncode(requestPage.SiteConfig.Root + requestPage.SiteConfig.CommentsGravatarNoImgPath); } } string gravborder = ""; if (requestPage.SiteConfig.CommentsGravatarBorder != null) { if (requestPage.SiteConfig.CommentsGravatarBorder != "") { gravborder = "&border=" + requestPage.SiteConfig.CommentsGravatarBorder; } } string gravsize = ""; if (requestPage.SiteConfig.CommentsGravatarSize != null) { if (requestPage.SiteConfig.CommentsGravatarSize != "") { gravsize = "&size=" + requestPage.SiteConfig.CommentsGravatarSize; } } string gravrating = ""; if (requestPage.SiteConfig.CommentsGravatarRating != null) { if (requestPage.SiteConfig.CommentsGravatarRating != "") { gravrating = "&rating=" + requestPage.SiteConfig.CommentsGravatarRating; } } HtmlGenericControl entryGRAVATAR = new HtmlGenericControl("span"); entryGRAVATAR.Attributes["class"] = "commentGravatarBlock"; entryGRAVATAR.InnerHtml = "<img class=\"commentGravatar\" src=\"http://www.gravatar.com/avatar.php?gravatar_id=" + hash + gravrating + gravsize + nogravpath + gravborder + "\"/>"; footer.Controls.Add(entryGRAVATAR); } string authorLink = null; if (comment.AuthorHomepage != null && comment.AuthorHomepage.Length > 0) { authorLink = FixUrl(comment.AuthorHomepage); } else if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { authorLink = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); } } if (authorLink != null) { HyperLink link = new HyperLink(); link.Attributes["class"] = "commentPermalinkStyle"; link.NavigateUrl = authorLink; link.Text = comment.Author; link.Attributes.Add("rel", "nofollow"); footer.Controls.Add(link); if (comment.OpenId) { System.Web.UI.WebControls.Image i = new System.Web.UI.WebControls.Image(); i.ImageUrl = "~/images/openid-icon-small.gif"; i.CssClass = "commentOpenId"; link.Controls.Add(i); Literal l = new Literal(); l.Text = comment.Author; link.Controls.Add(l); } } else { Label l = new Label(); l.Attributes["class"] = "commentPermalinkStyle"; l.Text = comment.Author; footer.Controls.Add(l); } if (!requestPage.SiteConfig.SupressEmailAddressDisplay) { if (comment.AuthorEmail != null && comment.AuthorEmail.Length > 0) { footer.Controls.Add(new LiteralControl(" | ")); HtmlGenericControl mailto = new HtmlGenericControl("span"); footer.Controls.Add(mailto); HyperLink link = new HyperLink(); link.CssClass = "commentMailToStyle"; link.NavigateUrl = "mailto:" + SiteUtilities.SpamBlocker(comment.AuthorEmail); link.Text = SiteUtilities.SpamBlocker(comment.AuthorEmail); mailto.Controls.Add(link); } } if (!requestPage.HideAdminTools && SiteSecurity.IsInRole("admin")) { if (!string.IsNullOrEmpty(comment.AuthorIPAddress)) { try { if (requestPage.SiteConfig.ResolveCommenterIP == true) { System.Net.IPHostEntry hostInfo = System.Net.Dns.GetHostEntry(comment.AuthorIPAddress); footer.Controls.Add( new LiteralControl(" (" + comment.AuthorIPAddress + " " + hostInfo.HostName + ") ")); } else { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } catch { footer.Controls.Add(new LiteralControl(" (" + comment.AuthorIPAddress + ") ")); } } footer.Controls.Add(new LiteralControl(" ")); // create delete hyperlink HyperLink deleteHl = new HyperLink(); deleteHl.CssClass = "deleteLinkStyle"; System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); img.CssClass = "deleteLinkImageStyle"; img.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("deletebutton")).ToString(); img.BorderWidth = 0; deleteHl.Controls.Add(img); deleteHl.NavigateUrl = String.Format("javascript:deleteComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); ResourceManager resmgr = resmgr = ApplicationResourceTable.Get(); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "deleteCommentScript")) { // add the javascript to allow deletion of the comment string scriptString = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; scriptString += "function deleteComment(entryId, commentId, commentFrom)\n"; scriptString += "{\n"; scriptString += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_delete_confirm")); scriptString += " {\n"; scriptString += " location.href=\"deleteItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; scriptString += " }\n"; scriptString += "}\n"; scriptString += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "deleteCommentScript", scriptString); } footer.Controls.Add(deleteHl); // create approve hyperlink, when a comment is not public or if its marked as spam if ((!Comment.IsPublic) || (Comment.SpamState == SpamState.Spam)) { HyperLink approveHl = new HyperLink(); approveHl.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image okImg = new System.Web.UI.WebControls.Image(); okImg.CssClass = "approveImageStyle"; okImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("okbutton-list")).ToString(); okImg.BorderWidth = 0; approveHl.Controls.Add(okImg); approveHl.NavigateUrl = String.Format("javascript:approveComment(\"{0}\", \"{1}\")", Comment.TargetEntryId, Comment.EntryId); if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "approveCommentScript")) { string approveScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; approveScript += "function approveComment(entryId, commentId)\n"; approveScript += "{\n"; approveScript += " location.href=\"approveItem.ashx?entryid=\" + entryId + \"&commentId=\" + commentId\n"; approveScript += "}\n"; approveScript += "</script>"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "approveCommentScript", approveScript); } footer.Controls.Add(approveHl); } ISpamBlockingService spamBlockingService = requestPage.SiteConfig.SpamBlockingService; if ((spamBlockingService != null) && (comment.SpamState != SpamState.Spam)) { HyperLink reportSpamLink = new HyperLink(); reportSpamLink.CssClass = "approveLinkStyle"; System.Web.UI.WebControls.Image spamImg = new System.Web.UI.WebControls.Image(); spamImg.CssClass = "approveImageStyle"; spamImg.ImageUrl = new Uri(new Uri(SiteUtilities.GetBaseUrl(requestPage.SiteConfig)), requestPage.GetThemedImageUrl("reportspambutton")).ToString(); spamImg.BorderWidth = 0; reportSpamLink.Controls.Add(spamImg); reportSpamLink.NavigateUrl = String.Format("javascript:reportComment(\"{0}\", \"{1}\", \"{2}\")", Comment.TargetEntryId, Comment.EntryId, Comment.Author == null ? String.Empty : Comment.Author.Replace("\"", "\\\"")); string reportScript = "<script type=\"text/javascript\" language=\"JavaScript\">\n"; reportScript += "function reportComment(entryId, commentId, commentFrom)\n"; reportScript += "{\n"; reportScript += String.Format(" if(confirm(\"{0} \\n\\n\" + commentFrom))\n", resmgr.GetString("text_reportspam_confirm")); reportScript += " {\n"; reportScript += " location.href=\"deleteItem.ashx?report=true&entryid=\" + entryId + \"&commentId=\" + commentId\n"; reportScript += " }\n"; reportScript += "}\n"; reportScript += "</script>"; if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "reportCommentScript")) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "reportCommentScript", reportScript); } footer.Controls.Add(reportSpamLink); } } }
private void RenderOutlinesIntoTable(Table table, OpmlOutlineCollection outlines, int depth, bool renderDescription) { SharedBasePage requestPage = Page as SharedBasePage; foreach (OpmlOutline outline in outlines) { TableRow row = new TableRow(); TableCell cell = new TableCell(); cell.CssClass = "blogRollCellStyle"; table.Rows.Add(row); row.Cells.Add(cell); if (outline.outline == null || outline.outline.Count == 0) { // if there are no sub items, we just emit the link if (outline.xmlUrl != null && outline.xmlUrl.Length > 0) { HyperLink xmlLink = new HyperLink(); xmlLink.CssClass = "blogRollXmlLinkStyle"; xmlLink.NavigateUrl = outline.xmlUrl; if (requestPage.SiteConfig.UseFeedSchemeForSyndication) { if (outline.xmlUrl.StartsWith("https")) { xmlLink.NavigateUrl = String.Concat("feed:", new Uri(outline.xmlUrl).ToString()); } else { xmlLink.NavigateUrl = String.Concat("feed:", new Uri(outline.xmlUrl).ToString().Remove(0, 5)); } } System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image(); img.AlternateText = "[Feed]"; switch (outline.type != null ? outline.type.ToLower() : "") { case "rss": img.ImageUrl = requestPage.GetThemedImageUrl("feedButton"); break; case "atom": img.ImageUrl = requestPage.GetThemedImageUrl("atomButton"); break; case "opml": img.ImageUrl = requestPage.GetThemedImageUrl("opmlButton"); break; default: img.ImageUrl = requestPage.GetThemedImageUrl("feedButton"); break; } xmlLink.Controls.Add(img); cell.Controls.Add(xmlLink); } cell.Controls.Add(new LiteralControl(" ")); HyperLink catLink = new HyperLink(); catLink.CssClass = "blogRollLinkStyle"; catLink.Text = outline.title; catLink.NavigateUrl = outline.htmlUrl; cell.Controls.Add(catLink); if (renderDescription) { if (outline.description != null && outline.description.Length > 0) { HtmlGenericControl outlineDesc = new HtmlGenericControl("div"); outlineDesc.Attributes.Add("class", "blogRollDescriptionStyle"); outlineDesc.InnerText = outline.description; cell.Controls.Add(new LiteralControl("<br />")); cell.Controls.Add(outlineDesc); } } } else { // if there are subitems, we ignore this link and render // it as an outline NamingPanel panel = new NamingPanel(); cell.Controls.Add(panel); Table outlineHead = new Table(); outlineHead.CssClass = "blogRollNestedOutlineHeaderTableStyle"; panel.Controls.Add(outlineHead); Panel collapsablePanel = new Panel(); panel.Controls.Add(collapsablePanel); collapsablePanel.CssClass = "blogRollCollapsed"; collapsablePanel.ID = "panel"; TableCell outlineBadge; TableCell outlineTitle; outlineHead.Rows.Add(new TableRow()); outlineHead.Rows[0].Cells.Add(outlineBadge = new TableCell()); outlineHead.Rows[0].Cells.Add(outlineTitle = new TableCell()); outlineBadge.CssClass = "blogRollNestedOutlineBadgeCellStyle"; outlineTitle.CssClass = "blogRollNestedOutlineTitleCellStyle"; if (outline.description != null && outline.description.Length > 0) { TableCell outlineDesc; outlineHead.Rows.Add(new TableRow()); outlineHead.Rows[1].Cells.Add(new TableCell()); outlineHead.Rows[1].Cells.Add(outlineDesc = new TableCell()); outlineDesc.CssClass = "blogRollDescriptionStyle"; outlineDesc.Text = outline.description; } HyperLink hlBadge = new HyperLink(); hlBadge.CssClass = "blogRollNestedOutlineBadgeStyle"; outlineBadge.Controls.Add(hlBadge); System.Web.UI.WebControls.Image imgBadge = new System.Web.UI.WebControls.Image(); hlBadge.Controls.Add(imgBadge); imgBadge.ID = "img"; imgBadge.AlternateText = ""; hlBadge.NavigateUrl = "javascript:br_toggleExpansionStatus( '" + collapsablePanel.ClientID + "', '" + imgBadge.ClientID + "' )"; imgBadge.ImageUrl = requestPage.GetThemedImageUrl("outlinearrow"); imgBadge.ToolTip = requestPage.CoreStringTables.GetString("tooltip_expand"); HyperLink hlHead = new HyperLink(); hlHead.CssClass = "blogRollNestedOutlineTitleStyle"; outlineTitle.Controls.Add(hlHead); hlHead.NavigateUrl = outline.htmlUrl; hlHead.Text = outline.title; Table list = new Table(); list.CssClass = "blogRollNestedOutlineBodyTableStyle"; collapsablePanel.Controls.Add(list); RenderOutlinesIntoTable(list, outline.outline, depth + 1, renderDescription); } } }