X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem.Web%2FSystem.Web.UI.HtmlControls%2FHtmlHead.cs;h=a890fc10f4b80edf848071aabceea5ece6eb4b25;hb=811674bc6331c98d33134e2a37a7c7dd66402227;hp=b5e89415311f1fb27a63fd38603fec848832c7d3;hpb=dbf19eb41dbd299c4c33d4de35ffe3cf6c669832;p=mono.git diff --git a/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlHead.cs b/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlHead.cs index b5e89415311..a890fc10f4b 100644 --- a/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlHead.cs +++ b/mcs/class/System.Web/System.Web.UI.HtmlControls/HtmlHead.cs @@ -4,7 +4,7 @@ // Authors: // Lluis Sanchez Gual (lluis@novell.com) // -// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com) +// Copyright (C) 2004-2010 Novell, Inc (http://www.novell.com) // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the @@ -26,8 +26,6 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -#if NET_2_0 - using System.ComponentModel; using System.Collections; using System.Security.Permissions; @@ -39,12 +37,15 @@ namespace System.Web.UI.HtmlControls [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] // attributes [ControlBuilder (typeof(HtmlHeadBuilder))] - public sealed class HtmlHead: HtmlGenericControl, IParserAccessor { - + public sealed class HtmlHead: HtmlGenericControl, IParserAccessor + { + string descriptionText; + string keywordsText; + HtmlMeta descriptionMeta; + HtmlMeta keywordsMeta; string titleText; HtmlTitle title; - Hashtable metadata; - ArrayList styleSheets; + //Hashtable metadata; StyleSheetBag styleSheet; public HtmlHead(): base("head") {} @@ -55,26 +56,40 @@ namespace System.Web.UI.HtmlControls protected internal override void OnInit (EventArgs e) { + base.OnInit (e); + Page page = Page; + + if (page == null) + throw new HttpException ("The control requires a page."); + //You can only have one control on a page. - if(Page.Header!=null) + if(page.Header != null) throw new HttpException ("You can only have one control on a page."); - Page.SetHeader (this); + page.SetHeader (this); } protected internal override void RenderChildren (HtmlTextWriter writer) { - EnsureTitleControl (); - base.RenderChildren (writer); - if (metadata != null) { - foreach (DictionaryEntry entry in metadata) { - writer.AddAttribute ("name", entry.Key.ToString ()); - writer.AddAttribute ("content", entry.Value.ToString ()); - writer.RenderBeginTag (HtmlTextWriterTag.Meta); - writer.RenderEndTag (); - } + if (title == null) { + writer.RenderBeginTag (HtmlTextWriterTag.Title); + if (!String.IsNullOrEmpty (titleText)) + writer.Write (titleText); + writer.RenderEndTag (); + } + if (descriptionMeta == null && descriptionText != null) { + writer.AddAttribute ("name", "description"); + writer.AddAttribute ("content", HttpUtility.HtmlAttributeEncode (descriptionText)); + writer.RenderBeginTag (HtmlTextWriterTag.Meta); + writer.RenderEndTag (); + } + + if (keywordsMeta == null && keywordsText != null) { + writer.AddAttribute ("name", "keywords"); + writer.AddAttribute ("content", HttpUtility.HtmlAttributeEncode (keywordsText)); + writer.RenderBeginTag (HtmlTextWriterTag.Meta); + writer.RenderEndTag (); } - if (styleSheet != null) styleSheet.Render (writer); } @@ -89,6 +104,13 @@ namespace System.Web.UI.HtmlControls title = t; } + HtmlMeta meta = control as HtmlMeta; + if (meta != null) { + if (String.Compare ("keywords", meta.Name, StringComparison.OrdinalIgnoreCase) == 0) + keywordsMeta = meta; + else if (String.Compare ("description", meta.Name, StringComparison.OrdinalIgnoreCase) == 0) + descriptionMeta = meta; + } base.AddedControl (control, index); } @@ -97,29 +119,39 @@ namespace System.Web.UI.HtmlControls if (title == control) title = null; + if (keywordsMeta == control) + keywordsMeta = null; + else if (descriptionMeta == control) + descriptionMeta = null; base.RemovedControl (control); } - - void EnsureTitleControl () { - if (title != null) - return; - - HtmlTitle t = new HtmlTitle (); - t.Text = titleText; - Controls.Add (t); + public string Description { + get { + if (descriptionMeta != null) + return descriptionMeta.Content; + return descriptionText; + } + + set { + if (descriptionMeta != null) + descriptionMeta.Content = value; + else + descriptionText = value; + } } - IList LinkedStyleSheets { + public string Keywords { get { - if (styleSheets == null) styleSheets = new ArrayList (); - return styleSheets; + if (keywordsMeta != null) + return keywordsMeta.Content; + return keywordsText; } - } - - IDictionary Metadata { - get { - if (metadata == null) metadata = new Hashtable (); - return metadata; + + set { + if (keywordsMeta != null) + keywordsMeta.Content = value; + else + keywordsText = value; } } @@ -184,7 +216,7 @@ namespace System.Web.UI.HtmlControls public void Render (HtmlTextWriter writer) { - writer.AddAttribute ("type", "text/css"); + writer.AddAttribute ("type", "text/css", false); writer.RenderBeginTag (HtmlTextWriterTag.Style); foreach (StyleEntry entry in entries) { @@ -197,4 +229,3 @@ namespace System.Web.UI.HtmlControls } } -#endif