Last active
October 15, 2016 10:25
-
-
Save trnktms/4d1996a45fcb1db714cf74cbeb0ea28a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Specialized; | |
using System.Linq; | |
using System.Web; | |
using System.Web.UI; | |
using Sitecore; | |
using Sitecore.Diagnostics; | |
using Sitecore.Shell.Applications.ContentEditor; | |
using Sitecore.Text; | |
namespace Sitecore.Foundation.Fields.ContentEditor.Controls | |
{ | |
/// <summary> | |
/// Contains some method which are copied from Sitecore.Kernel.dll 8.1.0 rev. 160519. | |
/// HACK: check this class implementation whenever do a Sitecore update. | |
/// </summary> | |
public class FreeNameValue : NameValue | |
{ | |
protected override void OnLoad(EventArgs e) | |
{ | |
Assert.ArgumentNotNull(e, "e"); | |
if (Sitecore.Context.ClientPage.IsEvent) | |
{ | |
this.LoadValue(); | |
} | |
else | |
{ | |
this.BuildControl(); | |
} | |
} | |
/// <summary> | |
/// Copied without invalid character validation. | |
/// </summary> | |
protected new void ParameterChange() | |
{ | |
var clientPage = Sitecore.Context.ClientPage; | |
if (clientPage.ClientRequest.Source == StringUtil.GetString(clientPage.ServerProperties[this.ID + "_LastParameterID"]) && !string.IsNullOrEmpty(clientPage.ClientRequest.Form[clientPage.ClientRequest.Source])) | |
{ | |
var emptyRow = this.BuildParameterKeyValue(string.Empty, string.Empty); | |
clientPage.ClientResponse.Insert(this.ID, "beforeEnd", emptyRow); | |
} | |
clientPage.ClientResponse.SetReturnValue(true); | |
} | |
/// <summary> | |
/// It calls the copied method with the name value collection from the request form. | |
/// </summary> | |
private void LoadValue() | |
{ | |
var page = HttpContext.Current.Handler as Page; | |
this.LoadValue(page == null ? new NameValueCollection() : page.Request.Form); | |
} | |
/// <summary> | |
/// Copied without replacing the '-' with '_' and with URL encode. | |
/// </summary> | |
public void LoadValue(NameValueCollection formCollection) | |
{ | |
if (this.ReadOnly || this.Disabled) | |
{ | |
return; | |
} | |
var collection = formCollection ?? new NameValueCollection(); | |
var urlString = new UrlString(); | |
foreach (string key in collection.Keys) | |
{ | |
if (!string.IsNullOrEmpty(key) && key.StartsWith(this.ID + "_Param", StringComparison.InvariantCulture) && !key.EndsWith("_value", StringComparison.InvariantCulture)) | |
{ | |
var resultKey = collection[key]; | |
var resultValue = collection[key + "_value"]; | |
if (!string.IsNullOrEmpty(resultKey)) | |
{ | |
urlString[HttpUtility.UrlEncode(resultKey)] = HttpUtility.UrlEncode(resultValue) ?? string.Empty; | |
} | |
} | |
} | |
this.Value = urlString.ToString(); | |
} | |
/// <summary> | |
/// Copied with URL encode. | |
/// </summary> | |
public void BuildControl() | |
{ | |
var urlString = new UrlString(this.Value); | |
foreach (var key in urlString.Parameters.Keys.Cast<string>().Where(key => key.Length > 0)) | |
{ | |
this.Controls.Add(new LiteralControl(this.BuildParameterKeyValue(HttpUtility.UrlDecode(key), HttpUtility.UrlDecode(urlString.Parameters[key])))); | |
} | |
this.Controls.Add(new LiteralControl(this.BuildParameterKeyValue(string.Empty, string.Empty))); | |
} | |
/// <summary> | |
/// Copied without any changes. | |
/// </summary> | |
private string BuildParameterKeyValue(string key, string value) | |
{ | |
Assert.ArgumentNotNull(key, "key"); | |
Assert.ArgumentNotNull(value, "value"); | |
var uniqueId = GetUniqueID(this.ID + "_Param"); | |
Sitecore.Context.ClientPage.ServerProperties[this.ID + "_LastParameterID"] = uniqueId; | |
var clientEvent = Sitecore.Context.ClientPage.GetClientEvent(this.ID + ".ParameterChange"); | |
var isReadonly = this.ReadOnly ? " readonly=\"readonly\"" : string.Empty; | |
var isDisabled = this.Disabled ? " disabled=\"disabled\"" : string.Empty; | |
var isVertical = this.IsVertical ? "</tr><tr>" : string.Empty; | |
return | |
string.Format( | |
"<table width=\"100%\" class='scAdditionalParameters'><tr><td>{0}</td>{2}<td width=\"100%\">{1}</td></tr></table>", | |
string.Format( | |
"<input id=\"{0}\" name=\"{1}\" type=\"text\"{2}{3} style=\"{6}\" value=\"{4}\" onchange=\"{5}\"/>", | |
uniqueId, uniqueId, isReadonly, isDisabled, StringUtil.EscapeQuote(key), clientEvent, this.NameStyle), | |
this.GetValueHtmlControl(uniqueId, StringUtil.EscapeQuote(HttpUtility.UrlDecode(value))), isVertical); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment