//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.WebControls { using System; using System.ComponentModel; using System.Globalization; using System.Web; using System.Web.UI; public class LiteralControlBuilder : ControlBuilder { public override bool AllowWhitespaceLiterals() { return false; } public override void AppendLiteralString(string s) { // If it's just a white space string, delegate to the base if (Util.IsWhiteSpaceString(s)) { base.AppendLiteralString(s); return; } // Treat the inner text as if it had been set on the 'Text' attribute PreprocessAttribute(String.Empty /*filter*/, "text", s, false /*mainDirectiveMode*/); } public override void AppendSubBuilder(ControlBuilder subBuilder) { throw new HttpException(SR.GetString(SR.Control_does_not_allow_children, ControlType.ToString())); } } // The reason we define this empty override in the WebControls namespace is // to expose it as a control that can be used on a page (ASURT 54683) // E.g. [ DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, " + AssemblyRef.SystemDesign), DefaultProperty("Text"), Designer("System.Web.UI.Design.WebControls.LiteralDesigner, " + AssemblyRef.SystemDesign), ControlBuilderAttribute(typeof(LiteralControlBuilder)), ] public class Literal : Control, ITextControl { /// /// [To be supplied.] /// [ DefaultValue(LiteralMode.Transform), WebCategory("Behavior"), WebSysDescription(SR.Literal_Mode) ] public LiteralMode Mode { get { object mode = ViewState["Mode"]; return mode == null ? LiteralMode.Transform : (LiteralMode)mode; } set { if ((value < LiteralMode.Transform) || (value > LiteralMode.Encode)) { throw new ArgumentOutOfRangeException("value"); } ViewState["Mode"] = value; } } /// /// [To be supplied.] /// [ Localizable(true), Bindable(true), WebCategory("Appearance"), DefaultValue(""), WebSysDescription(SR.Literal_Text), ] public string Text { get { string s = (string)ViewState["Text"]; return (s != null) ? s : String.Empty; } set { ViewState["Text"] = value; } } /// /// /// [To be supplied.] /// protected override void AddParsedSubObject(object obj) { if (obj is LiteralControl) { Text = ((LiteralControl)obj).Text; } else { throw new HttpException(SR.GetString(SR.Cannot_Have_Children_Of_Type, "Literal", obj.GetType().Name.ToString(CultureInfo.InvariantCulture))); } } /// /// [To be supplied.] /// protected override ControlCollection CreateControlCollection() { return new EmptyControlCollection(this); } /// /// [ EditorBrowsable(EditorBrowsableState.Never), ] public override void Focus() { throw new NotSupportedException(SR.GetString(SR.NoFocusSupport, this.GetType().Name)); } /// /// [To be supplied.] /// protected internal override void Render(HtmlTextWriter writer) { string text = Text; if (text.Length != 0) { if (Mode != LiteralMode.Encode) { writer.Write(text); return; } HttpUtility.HtmlEncode(text, writer); } } } }