public static void InitEditorScript(System.Web.UI.Page page) { // we init the resource editor with languages (languages keys like 'en' and language text values like 'English') // the values and string resources for languages are stored on the site CTD, 'Language' fieldsetting var languages = ResourceEditorApi.GetCurrentSupportedLanguageNames(); object languageValues; if (PortalContext.Current.Site != null) { var siteContent = Content.Create(PortalContext.Current.Site); var languageFieldSetting = siteContent.Fields["Language"].FieldSetting as ChoiceFieldSetting; var options = languageFieldSetting?.Options; languageValues = languages.Select(langKey => new { Key = langKey, Value = ResourceEditorApi.GetOptionLocalizedText(options, langKey) }); } else { languageValues = languages.Select(langKey => new { Key = langKey, Value = langKey }); } var languageValuesJson = JsonConvert.SerializeObject(languageValues); AddScript("$skin/scripts/sn/SN.ResourceEditor.js"); RegisterStartupScript("resourceEditorInit", "SN.ResourceEditor.init(" + languageValuesJson + ");", page); }
public override void SetData(object data) { var displayName = data as string; _innerData = displayName; string className; string name; if (SenseNetResourceManager.ParseResourceKey(displayName, out className, out name)) { var rescontrol = GetResourceEditorLinkControl(); if (rescontrol != null) { // write resourcesJSON to hidden textbox var resourcesData = new ResourceEditorApi.ResourceKeyData { Datas = ResourceEditorApi.GetResources(className, name).Select(p => new ResourceEditorApi.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 = SenseNetResourceManager.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 = SenseNetResourceManager.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 (SenseNetResourceManager.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 <ResourceEditorApi.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 (SenseNetResourceManager.ParseResourceKey(displayName, out className, out name)) { ResourceEditorApi.SaveResource(className, name, allres.Datas); } } } if (!nameControlAvailable && (this.Content.Id == 0 || AlwaysUpdateName)) { // content name should be set automatically generated from displayname var newName = ContentNamingProvider.GetNameFromDisplayName(this.Content.Name, displayName); if (newName.Length > 0) { this.Content["Name"] = newName; } } return(displayName); }