All pastes #227147 Raw Edit

Shin-Ra

public text v1 · immutable
#227147 ·published 2006-10-29 02:11 UTC
rendered paste body
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 = "<link rel=\"stylesheet\" href=\"{0}\" type=\"text/css\" media=\"{1}\" />";
        #endregion
        #region Override Methods....
        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write( "" );
            writer.Write( "<head>\n" );
            RenderTitle( writer );
            RenderFavicon( writer );
            RenderStyleSheets( writer );
            writer.Write( "</head>" );
        }
        #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<title>{0}</title>\n", title );
        }
        protected virtual void RenderFavicon(HtmlTextWriter writer)
        {
            writer.Write("\t<link rel=\"shortcut icon\" type=\"image/ico\" href=\"{0}\"/>\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
    }
}