| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- //
- // System.Web.UI.RootBuilder
- //
- // Authors:
- // Gonzalo Paniagua Javier ([email protected])
- //
- // (C) 2003 Ximian, Inc. (http://www.ximian.com)
- using System;
- using System.Collections;
- using System.Web.Compilation;
- using System.Web.UI.HtmlControls;
- namespace System.Web.UI
- {
- public sealed class RootBuilder : TemplateBuilder
- {
- static Hashtable htmlControls;
- static Hashtable htmlInputControls;
- AspComponentFoundry foundry;
- static RootBuilder ()
- {
- htmlControls = new Hashtable (new CaseInsensitiveHashCodeProvider (),
- new CaseInsensitiveComparer ());
- htmlControls.Add ("A", typeof (HtmlAnchor));
- htmlControls.Add ("BUTTON", typeof (HtmlButton));
- htmlControls.Add ("FORM", typeof (HtmlForm));
- htmlControls.Add ("IMG", typeof (HtmlImage));
- htmlControls.Add ("INPUT", "INPUT");
- htmlControls.Add ("SELECT", typeof (HtmlSelect));
- htmlControls.Add ("TABLE", typeof (HtmlTable));
- htmlControls.Add ("TD", typeof (HtmlTableCell));
- htmlControls.Add ("TH", typeof (HtmlTableCell));
- htmlControls.Add ("TR", typeof (HtmlTableRow));
- htmlControls.Add ("TEXTAREA", typeof (HtmlTextArea));
- htmlInputControls = new Hashtable (new CaseInsensitiveHashCodeProvider (),
- new CaseInsensitiveComparer ());
- htmlInputControls.Add ("BUTTON", typeof (HtmlInputButton));
- htmlInputControls.Add ("SUBMIT", typeof (HtmlInputButton));
- htmlInputControls.Add ("RESET", typeof (HtmlInputButton));
- htmlInputControls.Add ("CHECKBOX", typeof (HtmlInputCheckBox));
- htmlInputControls.Add ("FILE", typeof (HtmlInputFile));
- htmlInputControls.Add ("HIDDEN", typeof (HtmlInputHidden));
- htmlInputControls.Add ("IMAGE", typeof (HtmlInputImage));
- htmlInputControls.Add ("RADIO", typeof (HtmlInputRadioButton));
- htmlInputControls.Add ("TEXT", typeof (HtmlInputText));
- htmlInputControls.Add ("PASSWORD", typeof (HtmlInputText));
- }
- public RootBuilder (TemplateParser parser)
- {
- foundry = new AspComponentFoundry ();
- line = 1;
- fileName = parser.InputFile;
- Init (parser, null, null, null, null, null);
- }
- public override Type GetChildControlType (string tagName, IDictionary attribs)
- {
- string prefix;
- string cname;
- int colon = tagName.IndexOf (':');
- if (colon != -1) {
- if (colon == 0)
- throw new Exception ("Empty TagPrefix is not valid");
- if (colon + 1 == tagName.Length)
- return null;
- prefix = tagName.Substring (0, colon);
- cname = tagName.Substring (colon + 1);
- } else {
- prefix = "";
- cname = tagName;
- }
- Type t = foundry.GetComponentType (prefix, cname);
- if (t != null)
- return t;
- else if (prefix != "")
- throw new Exception ("TagPrefix " + prefix + " not registered");
-
- return LookupHtmlControls (tagName, attribs);
- }
- static Type LookupHtmlControls (string tagName, IDictionary attribs)
- {
- object o = htmlControls [tagName];
- if (o is string) {
- if (attribs == null)
- throw new HttpException ("Unable to map input type control to a Type.");
- string ctype = attribs ["TYPE"] as string;
- if (ctype == null)
- ctype = "TEXT"; // The default used by MS
- Type t = htmlInputControls [ctype] as Type;
- if (t == null)
- throw new HttpException ("Unable to map input type control to a Type.");
- return t;
- }
- if (o == null)
- o = typeof (HtmlGenericControl);
- return (Type) o;
- }
- internal AspComponentFoundry Foundry {
- get { return foundry; }
- }
- }
- }
|