Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / HtmlControls / HtmlHead.cs / 1305376 / HtmlHead.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.HtmlControls { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; public class HtmlHeadBuilder : ControlBuilder { public override Type GetChildControlType(string tagName, IDictionary attribs) { if (String.Equals(tagName, "title", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlTitle); if (String.Equals(tagName, "link", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlLink); if (String.Equals(tagName, "meta", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlMeta); return null; } public override bool AllowWhitespaceLiterals() { return false; } } ////// Represents the HEAD element. /// [ ControlBuilderAttribute(typeof(HtmlHeadBuilder)) ] public sealed class HtmlHead : HtmlGenericControl { private StyleSheetInternal _styleSheet; private HtmlTitle _title; private String _cachedTitleText; private HtmlMeta _description; private String _cachedDescription; private HtmlMeta _keywords; private String _cachedKeywords; ////// Initializes an instance of an HtmlHead class. /// public HtmlHead() : base("head") { } public HtmlHead(string tag) : base(tag) { if (tag == null) { tag = String.Empty; } _tagName = tag; } public IStyleSheet StyleSheet { get { if (_styleSheet == null) { _styleSheet = new StyleSheetInternal(this); } return _styleSheet; } } public String Title { get { if (_title == null) { return _cachedTitleText; } return _title.Text; } set { if (_title == null) { // Side effect of adding a title to the control assigns _title _cachedTitleText = value; } else { _title.Text = value; } } } public String Description { get { if (_description == null) { return _cachedDescription; } return _description.Content; } set { if (_description == null) { // Side effect of adding a description to the control assigns _description _cachedDescription = value; } else { _description.Content = value; } } } public String Keywords { get { if (_keywords == null) { return _cachedKeywords; } return _keywords.Content; } set { if (_keywords == null) { // Side effect of adding a title to the control assigns _title _cachedKeywords = value; } else { _keywords.Content = value; } } } protected internal override void AddedControl(Control control, int index) { base.AddedControl(control, index); if (control is HtmlTitle) { if (_title != null) { throw new HttpException(SR.GetString(SR.HtmlHead_OnlyOneTitleAllowed)); } _title = (HtmlTitle)control; } else if (control is HtmlMeta) { // We will only use the first matching meta tag per, and ignore any others HtmlMeta meta = (HtmlMeta)control; if (_description == null && string.Equals(meta.Name, "description", StringComparison.OrdinalIgnoreCase)) { _description = meta; } else if (_keywords == null && string.Equals(meta.Name, "keywords", StringComparison.OrdinalIgnoreCase)) { _keywords = meta; } } } ////// /// Allows the HEAD element to register itself with the page. /// protected internal override void OnInit(EventArgs e) { base.OnInit(e); Page p = Page; if (p == null) { throw new HttpException(SR.GetString(SR.Head_Needs_Page)); } if (p.Header != null) { throw new HttpException(SR.GetString(SR.HtmlHead_OnlyOneHeadAllowed)); } p.SetHeader(this); } internal void RegisterCssStyleString(string outputString) { ((StyleSheetInternal)StyleSheet).CSSStyleString = outputString; } protected internal override void RemovedControl(Control control) { base.RemovedControl(control); if (control is HtmlTitle) { _title = null; } // There can be many meta tags, so we only clear it if its the correct meta else if (control == _description) { _description = null; } else if (control == _keywords) { _keywords = null; } } ////// /// Notifies the Page when the HEAD is being rendered. /// protected internal override void RenderChildren(HtmlTextWriter writer) { base.RenderChildren(writer); if (_title == null) { // Always render out atag since it is required for xhtml 1.1 compliance writer.RenderBeginTag(HtmlTextWriterTag.Title); if (_cachedTitleText != null) { writer.Write(_cachedTitleText); } writer.RenderEndTag(); } if (_description == null && !String.IsNullOrEmpty(_cachedDescription)) { // Go ahead and render out a meta tag if they set description but don't have a meta tag writer.AddAttribute(HtmlTextWriterAttribute.Name, "description"); writer.AddAttribute(HtmlTextWriterAttribute.Content, _cachedDescription); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); } if (_keywords == null && !String.IsNullOrEmpty(_cachedKeywords)) { // Go ahead and render out a meta tag if they set keywords but don't have a meta tag writer.AddAttribute(HtmlTextWriterAttribute.Name, "keywords"); writer.AddAttribute(HtmlTextWriterAttribute.Content, _cachedKeywords); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); } if ((string)Page.Request.Browser["requiresXhtmlCssSuppression"] != "true") { RenderStyleSheet(writer); } } internal void RenderStyleSheet(HtmlTextWriter writer) { if(_styleSheet != null) { _styleSheet.Render(writer); } } internal static void RenderCssRule(CssTextWriter cssWriter, string selector, Style style, IUrlResolutionService urlResolver) { cssWriter.WriteBeginCssRule(selector); CssStyleCollection attrs = style.GetStyleAttributes(urlResolver); attrs.Render(cssWriter); cssWriter.WriteEndCssRule(); } /// /// Implements the IStyleSheet interface to represent an embedded /// style sheet within the HEAD element. /// private sealed class StyleSheetInternal : IStyleSheet, IUrlResolutionService { private HtmlHead _owner; private ArrayList _styles; private ArrayList _selectorStyles; private int _autoGenCount; public StyleSheetInternal(HtmlHead owner) { _owner = owner; } // CssStyleString registered by the PartialCachingControl private string _cssStyleString; internal string CSSStyleString { get { return _cssStyleString; } set { _cssStyleString = value; } } public void Render(HtmlTextWriter writer) { if ((_styles == null) && (_selectorStyles == null) && CSSStyleString == null) { return; } writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css"); writer.RenderBeginTag(HtmlTextWriterTag.Style); CssTextWriter cssWriter = new CssTextWriter(writer); if (_styles != null) { for (int i = 0; i < _styles.Count; i++) { StyleInfo si = (StyleInfo)_styles[i]; string cssClass = si.style.RegisteredCssClass; if (cssClass.Length != 0) { RenderCssRule(cssWriter, "." + cssClass, si.style, si.urlResolver); } } } if (_selectorStyles != null) { for (int i = 0; i < _selectorStyles.Count; i++) { SelectorStyleInfo si = (SelectorStyleInfo)_selectorStyles[i]; RenderCssRule(cssWriter, si.selector, si.style, si.urlResolver); } } if (CSSStyleString != null) { writer.Write(CSSStyleString); } writer.RenderEndTag(); } #region Implementation of IStyleSheet void IStyleSheet.CreateStyleRule(Style style, IUrlResolutionService urlResolver, string selector) { if (style == null) { throw new ArgumentNullException("style"); } if (selector.Length == 0) { throw new ArgumentNullException("selector"); } if (_selectorStyles == null) { _selectorStyles = new ArrayList(); } if (urlResolver == null) { urlResolver = this; } SelectorStyleInfo styleInfo = new SelectorStyleInfo(); styleInfo.selector = selector; styleInfo.style = style; styleInfo.urlResolver = urlResolver; _selectorStyles.Add(styleInfo); Page page = _owner.Page; // If there are any partial caching controls on the stack, forward the styleInfo to them if (page.PartialCachingControlStack != null) { foreach (BasePartialCachingControl c in page.PartialCachingControlStack) { c.RegisterStyleInfo(styleInfo); } } } void IStyleSheet.RegisterStyle(Style style, IUrlResolutionService urlResolver) { if (style == null) { throw new ArgumentNullException("style"); } if (_styles == null) { _styles = new ArrayList(); } else if (style.RegisteredCssClass.Length != 0) { // if it's already registered, throw an exception throw new InvalidOperationException(SR.GetString(SR.HtmlHead_StyleAlreadyRegistered)); } if (urlResolver == null) { urlResolver = this; } StyleInfo styleInfo = new StyleInfo(); styleInfo.style = style; styleInfo.urlResolver = urlResolver; int index = _autoGenCount++; string name = "aspnet_s" + index.ToString(NumberFormatInfo.InvariantInfo); style.SetRegisteredCssClass(name); _styles.Add(styleInfo); } #endregion #region Implementation of IUrlResolutionService string IUrlResolutionService.ResolveClientUrl(string relativeUrl) { return _owner.ResolveClientUrl(relativeUrl); } #endregion private sealed class StyleInfo { public Style style; public IUrlResolutionService urlResolver; } } } internal sealed class SelectorStyleInfo { public string selector; public Style style; public IUrlResolutionService urlResolver; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.HtmlControls { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Globalization; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; public class HtmlHeadBuilder : ControlBuilder { public override Type GetChildControlType(string tagName, IDictionary attribs) { if (String.Equals(tagName, "title", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlTitle); if (String.Equals(tagName, "link", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlLink); if (String.Equals(tagName, "meta", StringComparison.OrdinalIgnoreCase)) return typeof(HtmlMeta); return null; } public override bool AllowWhitespaceLiterals() { return false; } } ////// Represents the HEAD element. /// [ ControlBuilderAttribute(typeof(HtmlHeadBuilder)) ] public sealed class HtmlHead : HtmlGenericControl { private StyleSheetInternal _styleSheet; private HtmlTitle _title; private String _cachedTitleText; private HtmlMeta _description; private String _cachedDescription; private HtmlMeta _keywords; private String _cachedKeywords; ////// Initializes an instance of an HtmlHead class. /// public HtmlHead() : base("head") { } public HtmlHead(string tag) : base(tag) { if (tag == null) { tag = String.Empty; } _tagName = tag; } public IStyleSheet StyleSheet { get { if (_styleSheet == null) { _styleSheet = new StyleSheetInternal(this); } return _styleSheet; } } public String Title { get { if (_title == null) { return _cachedTitleText; } return _title.Text; } set { if (_title == null) { // Side effect of adding a title to the control assigns _title _cachedTitleText = value; } else { _title.Text = value; } } } public String Description { get { if (_description == null) { return _cachedDescription; } return _description.Content; } set { if (_description == null) { // Side effect of adding a description to the control assigns _description _cachedDescription = value; } else { _description.Content = value; } } } public String Keywords { get { if (_keywords == null) { return _cachedKeywords; } return _keywords.Content; } set { if (_keywords == null) { // Side effect of adding a title to the control assigns _title _cachedKeywords = value; } else { _keywords.Content = value; } } } protected internal override void AddedControl(Control control, int index) { base.AddedControl(control, index); if (control is HtmlTitle) { if (_title != null) { throw new HttpException(SR.GetString(SR.HtmlHead_OnlyOneTitleAllowed)); } _title = (HtmlTitle)control; } else if (control is HtmlMeta) { // We will only use the first matching meta tag per, and ignore any others HtmlMeta meta = (HtmlMeta)control; if (_description == null && string.Equals(meta.Name, "description", StringComparison.OrdinalIgnoreCase)) { _description = meta; } else if (_keywords == null && string.Equals(meta.Name, "keywords", StringComparison.OrdinalIgnoreCase)) { _keywords = meta; } } } ////// /// Allows the HEAD element to register itself with the page. /// protected internal override void OnInit(EventArgs e) { base.OnInit(e); Page p = Page; if (p == null) { throw new HttpException(SR.GetString(SR.Head_Needs_Page)); } if (p.Header != null) { throw new HttpException(SR.GetString(SR.HtmlHead_OnlyOneHeadAllowed)); } p.SetHeader(this); } internal void RegisterCssStyleString(string outputString) { ((StyleSheetInternal)StyleSheet).CSSStyleString = outputString; } protected internal override void RemovedControl(Control control) { base.RemovedControl(control); if (control is HtmlTitle) { _title = null; } // There can be many meta tags, so we only clear it if its the correct meta else if (control == _description) { _description = null; } else if (control == _keywords) { _keywords = null; } } ////// /// Notifies the Page when the HEAD is being rendered. /// protected internal override void RenderChildren(HtmlTextWriter writer) { base.RenderChildren(writer); if (_title == null) { // Always render out atag since it is required for xhtml 1.1 compliance writer.RenderBeginTag(HtmlTextWriterTag.Title); if (_cachedTitleText != null) { writer.Write(_cachedTitleText); } writer.RenderEndTag(); } if (_description == null && !String.IsNullOrEmpty(_cachedDescription)) { // Go ahead and render out a meta tag if they set description but don't have a meta tag writer.AddAttribute(HtmlTextWriterAttribute.Name, "description"); writer.AddAttribute(HtmlTextWriterAttribute.Content, _cachedDescription); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); } if (_keywords == null && !String.IsNullOrEmpty(_cachedKeywords)) { // Go ahead and render out a meta tag if they set keywords but don't have a meta tag writer.AddAttribute(HtmlTextWriterAttribute.Name, "keywords"); writer.AddAttribute(HtmlTextWriterAttribute.Content, _cachedKeywords); writer.RenderBeginTag(HtmlTextWriterTag.Meta); writer.RenderEndTag(); } if ((string)Page.Request.Browser["requiresXhtmlCssSuppression"] != "true") { RenderStyleSheet(writer); } } internal void RenderStyleSheet(HtmlTextWriter writer) { if(_styleSheet != null) { _styleSheet.Render(writer); } } internal static void RenderCssRule(CssTextWriter cssWriter, string selector, Style style, IUrlResolutionService urlResolver) { cssWriter.WriteBeginCssRule(selector); CssStyleCollection attrs = style.GetStyleAttributes(urlResolver); attrs.Render(cssWriter); cssWriter.WriteEndCssRule(); } /// /// Implements the IStyleSheet interface to represent an embedded /// style sheet within the HEAD element. /// private sealed class StyleSheetInternal : IStyleSheet, IUrlResolutionService { private HtmlHead _owner; private ArrayList _styles; private ArrayList _selectorStyles; private int _autoGenCount; public StyleSheetInternal(HtmlHead owner) { _owner = owner; } // CssStyleString registered by the PartialCachingControl private string _cssStyleString; internal string CSSStyleString { get { return _cssStyleString; } set { _cssStyleString = value; } } public void Render(HtmlTextWriter writer) { if ((_styles == null) && (_selectorStyles == null) && CSSStyleString == null) { return; } writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/css"); writer.RenderBeginTag(HtmlTextWriterTag.Style); CssTextWriter cssWriter = new CssTextWriter(writer); if (_styles != null) { for (int i = 0; i < _styles.Count; i++) { StyleInfo si = (StyleInfo)_styles[i]; string cssClass = si.style.RegisteredCssClass; if (cssClass.Length != 0) { RenderCssRule(cssWriter, "." + cssClass, si.style, si.urlResolver); } } } if (_selectorStyles != null) { for (int i = 0; i < _selectorStyles.Count; i++) { SelectorStyleInfo si = (SelectorStyleInfo)_selectorStyles[i]; RenderCssRule(cssWriter, si.selector, si.style, si.urlResolver); } } if (CSSStyleString != null) { writer.Write(CSSStyleString); } writer.RenderEndTag(); } #region Implementation of IStyleSheet void IStyleSheet.CreateStyleRule(Style style, IUrlResolutionService urlResolver, string selector) { if (style == null) { throw new ArgumentNullException("style"); } if (selector.Length == 0) { throw new ArgumentNullException("selector"); } if (_selectorStyles == null) { _selectorStyles = new ArrayList(); } if (urlResolver == null) { urlResolver = this; } SelectorStyleInfo styleInfo = new SelectorStyleInfo(); styleInfo.selector = selector; styleInfo.style = style; styleInfo.urlResolver = urlResolver; _selectorStyles.Add(styleInfo); Page page = _owner.Page; // If there are any partial caching controls on the stack, forward the styleInfo to them if (page.PartialCachingControlStack != null) { foreach (BasePartialCachingControl c in page.PartialCachingControlStack) { c.RegisterStyleInfo(styleInfo); } } } void IStyleSheet.RegisterStyle(Style style, IUrlResolutionService urlResolver) { if (style == null) { throw new ArgumentNullException("style"); } if (_styles == null) { _styles = new ArrayList(); } else if (style.RegisteredCssClass.Length != 0) { // if it's already registered, throw an exception throw new InvalidOperationException(SR.GetString(SR.HtmlHead_StyleAlreadyRegistered)); } if (urlResolver == null) { urlResolver = this; } StyleInfo styleInfo = new StyleInfo(); styleInfo.style = style; styleInfo.urlResolver = urlResolver; int index = _autoGenCount++; string name = "aspnet_s" + index.ToString(NumberFormatInfo.InvariantInfo); style.SetRegisteredCssClass(name); _styles.Add(styleInfo); } #endregion #region Implementation of IUrlResolutionService string IUrlResolutionService.ResolveClientUrl(string relativeUrl) { return _owner.ResolveClientUrl(relativeUrl); } #endregion private sealed class StyleInfo { public Style style; public IUrlResolutionService urlResolver; } } } internal sealed class SelectorStyleInfo { public string selector; public Style style; public IUrlResolutionService urlResolver; } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpContextWrapper.cs
- ApplicationManager.cs
- ViewBox.cs
- RIPEMD160Managed.cs
- Keywords.cs
- TreeNode.cs
- XmlText.cs
- ComboBoxAutomationPeer.cs
- XmlSchemaExporter.cs
- WmlTextViewAdapter.cs
- CodeNamespaceImport.cs
- WebConfigurationManager.cs
- StylusTouchDevice.cs
- XmlSchemaAnnotation.cs
- ScriptingAuthenticationServiceSection.cs
- Native.cs
- TextCompositionManager.cs
- TrackingMemoryStreamFactory.cs
- AutomationFocusChangedEventArgs.cs
- TTSEngineProxy.cs
- OdbcFactory.cs
- WeakReference.cs
- ContentElement.cs
- bidPrivateBase.cs
- Registry.cs
- Literal.cs
- ListViewUpdateEventArgs.cs
- XmlSerializerImportOptions.cs
- PingReply.cs
- MenuScrollingVisibilityConverter.cs
- Int16.cs
- BuildManagerHost.cs
- IdentityNotMappedException.cs
- MenuRendererClassic.cs
- StoreItemCollection.Loader.cs
- MetaModel.cs
- HandleValueEditor.cs
- ObjectDataProvider.cs
- baseshape.cs
- SqlDelegatedTransaction.cs
- MonitoringDescriptionAttribute.cs
- DataTablePropertyDescriptor.cs
- SortKey.cs
- RsaKeyIdentifierClause.cs
- SortQueryOperator.cs
- TextProperties.cs
- SiteMapDataSource.cs
- ChtmlFormAdapter.cs
- GridSplitter.cs
- CommandValueSerializer.cs
- AssemblyCache.cs
- ProtectedConfigurationSection.cs
- MemoryMappedViewStream.cs
- DiffuseMaterial.cs
- GenericUriParser.cs
- ChangePassword.cs
- EmptyStringExpandableObjectConverter.cs
- SevenBitStream.cs
- BaseCodePageEncoding.cs
- StorageSetMapping.cs
- DataTableMappingCollection.cs
- ClientUtils.cs
- LicFileLicenseProvider.cs
- ClientFormsIdentity.cs
- FaultHandlingFilter.cs
- SystemTcpStatistics.cs
- XmlSchemaRedefine.cs
- PeerSecurityManager.cs
- SelectionProviderWrapper.cs
- XmlSchemaAll.cs
- SafeRightsManagementEnvironmentHandle.cs
- StylusPointPropertyInfoDefaults.cs
- SafePointer.cs
- LinkedResource.cs
- RenderDataDrawingContext.cs
- CommandHelpers.cs
- XamlWriter.cs
- InkPresenter.cs
- PlanCompiler.cs
- NativeCompoundFileAPIs.cs
- EntityObject.cs
- WebPartDesigner.cs
- KeyboardEventArgs.cs
- MetadataUtil.cs
- EntitySetBase.cs
- ControlBindingsCollection.cs
- RectAnimationClockResource.cs
- ListItem.cs
- DocumentViewerBase.cs
- NamedPermissionSet.cs
- PointLightBase.cs
- RightsManagementResourceHelper.cs
- QilList.cs
- CachedPathData.cs
- CreateRefExpr.cs
- CodeValidator.cs
- ProviderBase.cs
- SchemaTableOptionalColumn.cs
- SoapSchemaMember.cs
- PatternMatcher.cs