using System; using System.Collections; using System.Configuration; using System.Web; using System.Web.UI; using BulletinX.Components; namespace BulletinX.Controls { [PersistChildren(true), ParseChildren(false)] public class Head : Control { #region Private Members.... public static readonly string titleKey = ConfigurationManager.AppSettings["SiteTitle"]; public static readonly string faviconKey = ConfigurationManager.AppSettings["Favicon"]; public static string styleFormat = ""; #endregion #region Override Methods.... protected override void Render(HtmlTextWriter writer) { writer.Write( "" ); writer.Write( "\n" ); RenderTitle( writer ); RenderFavicon( writer ); RenderStyleSheets( writer ); writer.Write( "" ); } #endregion #region Virtual Methods.... protected virtual void RenderTitle(HtmlTextWriter writer) { string title = titleKey; if (title == null) throw new ApplicationException( "Site Title is blank please enter a title in the web.config" ); writer.Write( "\t{0}\n", title ); } protected virtual void RenderFavicon(HtmlTextWriter writer) { writer.Write("\t\n", faviconKey); } protected virtual void RenderStyleSheets(HtmlTextWriter writer) { RenderStyleSheets( writer, StyleFlags.First ); RenderStyleSheets( writer, StyleFlags.Unknown ); RenderStyleSheets( writer, StyleFlags.Last ); } protected virtual void RenderStyleSheets(HtmlTextWriter writer, StyleFlags flags) { Queue queue = (Queue)Context.Items[ styleFormat ]; if(queue != null && queue.Count > 0) { IEnumerator ie = queue.GetEnumerator( ); while(ie.MoveNext()) { StyleQueue si = (StyleQueue)ie.Current; if (si.position == flags) writer.WriteLine( si.styleTag ); } } } #endregion #region Static Methods.... public static void AddStyle(string url, string media) { AddStyle( url, media, StyleFlags.Unknown ); } public static void AddStyle(string url, string media, StyleFlags flags) { HttpContext context = HttpContext.Current; Queue styleQueue = (Queue)context.Items[ styleFormat ]; if(styleQueue == null) { styleQueue = new Queue( ); context.Items[ styleFormat ] = styleQueue; } styleQueue.Enqueue( new StyleQueue( string.Format( styleFormat, url, media ), flags ) ); } #endregion } }