//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//------------------------------------------------------------------------------
namespace System.Web.UI {
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.Handlers;
using System.Web.Resources;
using System.Web.Script.Serialization;
using System.Web.UI;
using AppSettings = System.Web.Util.AppSettings;
internal sealed class ScriptRegistrationManager {
private static Regex ScriptTagRegex = new Regex(
@"", indexOfEndOfScriptBeginTag, StringComparison.OrdinalIgnoreCase);
if (indexOfScriptEndTag == -1) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.ScriptRegistrationManager_NoCloseTag, activeRegistration.Type.FullName, activeRegistration.Key));
}
string scriptBlockContents = scriptContent.Substring(indexOfEndOfScriptBeginTag, (indexOfScriptEndTag - indexOfEndOfScriptBeginTag));
// Turn the text content into a text attribute
attrs.Add("text", scriptBlockContents);
lastIndex = indexOfScriptEndTag + 9;
}
// Process all the explicit attributes on the script tag
CaptureCollection attrnames = match.Groups["attrname"].Captures;
CaptureCollection attrvalues = match.Groups["attrval"].Captures;
for (int i = 0; i < attrnames.Count; i++) {
string attribName = attrnames[i].ToString();
string attribValue = attrvalues[i].ToString();
// DevDev Bugs 123213: script elements registered with RegisterStartupScript are normally rendered
// into the html of the page. Any html encoded values in the attributes are interpreted by the
// browser, so the actual data is not html encoded. We must HtmlDecode any attribute values we find
// here to remain consistent during async posts, since the data will be dynamically injected into
// the dom, bypassing the browser's natural html decoding.
attribValue = HttpUtility.HtmlDecode(attribValue);
attrs.Add(attribName, attribValue);
}
// Serialize the attributes to JSON and write them out
JavaScriptSerializer serializer = new JavaScriptSerializer();
// Dev10# 877767 - Allow configurable UpdatePanel script block length
// The default is JavaScriptSerializer.DefaultMaxJsonLength
if (AppSettings.UpdatePanelMaxScriptLength > 0) {
serializer.MaxJsonLength = AppSettings.UpdatePanelMaxScriptLength;
}
string attrText = serializer.Serialize(attrs);
PageRequestManager.EncodeString(writer, token, "ScriptContentWithTags", attrText);
}
CheckScriptTagTweenSpace(activeRegistration, scriptContent, lastIndex, scriptContent.Length - lastIndex);
if (lastIndex == 0) {
throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, AtlasWeb.ScriptRegistrationManager_NoTags, activeRegistration.Type.FullName, activeRegistration.Key));
}
}
}
}