示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }