/* ================================================================================================ Methods */ protected override void OnInit(EventArgs e) { UITools.AddScript("$skin/scripts/sn/SN.ContentName.js"); ResourceEditorController.InitEditorScript(this.Page); base.OnInit(e); if (this.ControlMode == FieldControlControlMode.Browse) { return; } // init javascripts var innerControl = GetInnerControl() as TextBox; var nameAvailableControl = GetNameAvailableControl(); // autofill enabled for new contents only. var originalName = this.Content.Name; if (this.Content.Id == 0 || AlwaysUpdateName) { innerControl.Attributes.Add("onkeyup", string.Format("SN.ContentName.TextEnter('{0}', '{1}')", innerControl.ClientID, originalName)); } // this scripts sets state of nameAvailableControl, to indicate if name is visible in dom var initScript = string.Format("SN.ContentName.InitNameControl('{0}','{1}', '{2}');", nameAvailableControl.ClientID, RepositoryPath.InvalidNameCharsPatternForClient, ContentNamingHelper.PlaceholderSymbol); UITools.RegisterStartupScript("InitNameControl", initScript, this.Page); }
public override void SetData(object data) { var displayName = data as string; _innerData = displayName; string className; string name; if (ResourceManager.ParseResourceKey(displayName, out className, out name)) { var rescontrol = GetResourceEditorLinkControl(); if (rescontrol != null) { // write resourcesJSON to hidden textbox var resourcesData = new Portal.ResourceEditorController.ResourceKeyData { Datas = ResourceEditorController.GetResources(className, name).Select(p => new Portal.ResourceEditorController.ResourceData { Lang = p.Key, Value = p.Value }).ToList(), Name = displayName }; var resourcesJSON = new JavaScriptSerializer().Serialize(resourcesData); GetResourcesBoxControl().Text = resourcesJSON; // send optionsJSON to client when clicked string currentlang = CultureInfo.CurrentUICulture.Name; string currentlangp = CultureInfo.CurrentUICulture.Parent == null ? string.Empty : CultureInfo.CurrentUICulture.Parent.Name; string dialogtitle = ResourceManager.Current.GetString("Controls", "FieldControl-EditValue-Title"); var title = string.Format(dialogtitle, this.Field.DisplayName); var optionsJSon = "{'link':$(this), 'currentlang':'" + currentlang + "','currentlangp':'" + currentlangp + "','title':'" + title + "'}"; rescontrol.OnClientClick = "SN.ResourceEditor.editResource('" + className + "','" + name + "'," + optionsJSon + "); return false;"; rescontrol.Text = ResourceManager.Current.GetString(className, name); } var innerControl = GetInnerControl() as TextBox; innerControl.Style.Add("display", "none"); } else { var resourceDiv = GetResourceDivControl(); if (resourceDiv != null) { resourceDiv.Visible = false; } } base.SetData(data); }
public override object GetData() { if (this.ControlMode == FieldControlControlMode.Browse || this.ReadOnly) { return(_innerData); } var nameAvailableControl = GetNameAvailableControl(); // name control is available var nameControlAvailable = false; if (nameAvailableControl != null) { if (nameAvailableControl.Text != "0") { nameControlAvailable = true; } } var displayName = string.Empty; var innerControl = GetInnerControl() as TextBox; displayName = innerControl.Text; string className; string name; if (ResourceManager.ParseResourceKey(displayName, out className, out name)) { // get resources var allresStr = GetResourcesBoxControl().Text; // if resources JSON is empty, we just entered a resource key into displayname control, but it does not yet come from the resource editor if (!string.IsNullOrEmpty(allresStr)) { var ser = new JavaScriptSerializer(); var allres = ser.Deserialize <Portal.ResourceEditorController.ResourceKeyData>(allresStr); // value comes from the resource editor ui displayName = allres.Name; // if the entered value is a resource key, then update corresponding resources if (ResourceManager.ParseResourceKey(displayName, out className, out name)) { ResourceEditorController.SaveResource(className, name, allres.Datas); } } } if (!nameControlAvailable && (this.Content.Id == 0 || AlwaysUpdateName)) { // content name should be set automatically generated from displayname var newName = ContentNamingHelper.GetNameFromDisplayName(this.Content.Name, displayName); if (newName.Length > 0) { this.Content["Name"] = newName; } } return(displayName); }