JezK
Edit File: settings.js
"use strict"; function UniteSettingsUC(){ var g_arrControls = {}; var g_arrChildrenControls = {}; var g_IDPrefix = "#unite_setting_"; var g_colorPicker, g_colorPickerWrapper, g_iconsHash={}; var g_objParent = null, g_objWrapper = null, g_objSapTabs = null; var g_objProvider = new UniteProviderAdminUC(); var G_DEBUG_INPUTS = false; var g_vars = { NOT_UPDATE_OPTION: "unite_settings_no_update_value", keyupTrashold: 500 }; var g_temp = { settingsID:null, handle: null, enableTriggerChange: true, cacheValues: null, objItemsManager: null, objFontsPanel:null, isSidebar: false, isInited: false, customSettingsKey: "custom_setting_type", colorPickerType: null, isRepeaterExists: false, disableExcludeSelector:false }; this.events = { CHANGE: "settings_change", INSTANT_CHANGE: "settings_instant_change", AFTER_INIT: "after_init", OPEN_CHILD_PANEL: "open_child_panel", SELECTORS_CHANGE: "selectors_change" }; var g_options = { show_saps:false, saps_type:"" }; if(!g_ucAdmin) var g_ucAdmin = new UniteAdminUC(); var t=this; /** * validate that the parent exists */ function validateInited(){ if(!g_objParent || g_objParent.length == 0) throw new Error("The parent not given, settings not inited"); } /** * compare control values */ function iscValEQ(controlValue, value){ var isEqual = false; if(typeof value != "string"){ isEqual = jQuery.inArray( controlValue, value) != -1; }else{ if(typeof controlValue == "object") isEqual = jQuery.inArray(value, controlValue) != -1; else isEqual = (value.toLowerCase() == controlValue); } return(isEqual); } /** * get input by name and filter by type. * if not found or filtered, return null */ this.getInputByName = function(name, type){ var inputID = g_IDPrefix+name; var objInput = jQuery(inputID); if(objInput.length == 0) return(null); if(!type) return(objInput); var inputType = objInput[0].type; if(type != inputType) return(null); return(objInput); }; /** * close all accordion items */ function closeAllAccordionItems(formID){ jQuery("#"+formID+" .unite-postbox .inside").slideUp("fast"); jQuery("#"+formID+" .unite-postbox .unite-postbox-title").addClass("box_closed"); } this.__________OTHER_EXTERNAL__________ = function(){}; /** * init tipsy */ function initTipsy(gravity){ if(!g_objWrapper) return(false); if(typeof jQuery("body").tipsy != "function") return(false); if(!gravity) gravity = "s"; var tipsyOptions = { html:true, gravity:"s", delayIn: 1000, selector: ".uc-tip" }; g_objWrapper.tipsy(tipsyOptions); } /** * get all settings inputs */ function getObjInputs(controlsOnly){ validateInited(); //include var selectors = "input, textarea, select, .unite-setting-inline-editor, .unite-setting-input-object"; var selectorNot = "input[type='button'], input[type='range'], input[type='search']"; if(g_temp.disableExcludeSelector !== true) selectorNot += ", .unite-settings-exclude *"; if(controlsOnly === true){ selectors = "input[type='radio'], select, input.unite-setting-addonpicker"; }else{ //items if(g_temp.objItemsManager){ selectors += ", .uc-setting-items-panel"; selectorNot += ", .uc-setting-items-panel select, .uc-setting-items-panel input, .uc-setting-items-panel textarea"; } if(g_temp.isRepeaterExists == true) selectorNot += ", .unite-settings-repeater *"; } var objInputs = g_objParent.find(selectors).not(selectorNot); if(G_DEBUG_INPUTS == true){ trace("debug inputs!"); trace(selectorNot); trace(objInputs); } return(objInputs); } /** * get input name */ function getInputName(objInput){ var name = objInput.attr("name"); if(!name) name = objInput.data("name"); return(name); } /** * get input basic type */ function getInputBasicType(objInput){ if(!objInput){ console.trace(); throw new Error("empty input, can't get basic type"); } var type = objInput[0].type; if(!type) type = objInput.prop("tagName").toLowerCase(); switch(type){ case "select-one": case "select-multiple": type = "select"; break; } return(type); } /** * get input type */ function getInputType(objInput){ if(!objInput){ console.trace(); throw new Error("empty input, can't get type"); } if(!objInput || objInput.length == 0){ console.trace(); throw new Error("getInputType - objInput is empty"); } if(!objInput[0]){ trace("wrong input object"); console.trace(); } var type = objInput[0].type; if(!type) type = objInput.prop("tagName").toLowerCase(); var customType = objInput.data("settingtype"); switch(type){ case "select-multiple": case "multiple_select": // obj name fix type = "multiselect"; if(objInput.hasClass("select2")) type = "select2"; if(customType) type = customType; break; case "select-one": type = "select"; if(customType) type = customType; if(objInput.hasClass("select2")) type = "select2"; break; case "number": type = "text"; if(objInput.hasClass("unite-setting-range")) type="range"; break; case "text": if(objInput.hasClass("unite-color-picker")) type = "color"; else if(objInput.hasClass("unite-setting-image-input")) type = "image"; else if(objInput.hasClass("unite-setting-mp3-input")) type = "mp3"; else if(objInput.hasClass("unite-postpicker-input")) type="post"; else if(objInput.hasClass("unite-iconpicker-input")) type="icon"; else if(objInput.hasClass("unite-setting-range")) type="range"; else if(objInput.hasClass("unite-setting-addonpicker")) type="addon"; else if(objInput.hasClass("unite-setting-link")) type="link"; break; case "textarea": if(objInput.hasClass("mce_editable") || objInput.hasClass("wp-editor-area")) type = "editor_tinymce"; break; case "div": type = customType; if(!type){ if(objInput.hasClass("uc-setting-items-panel")) type = "items"; else if(objInput.hasClass("uc-setting-fonts-panel")) type = "fonts"; else if(objInput.hasClass("unite-setting-inline-editor")) type = "editor_tinymce"; } break; } return(type); } /** * get input value */ function getSettingInputValue(objInput){ var name = getInputName(objInput); var type = getInputType(objInput); var value = objInput.val(); var inputID = objInput.prop("id"); if(!name) return(g_vars.NOT_UPDATE_OPTION); var flagUpdate = true; switch(type){ case "hidden": //allow to pass objects var hiddenValue = objInput.data("input_value"); if(hiddenValue) value = hiddenValue; break; case "select": var selectedText = objInput.children("option:selected").html(); break; case "checkbox": value = objInput.is(":checked"); break; case "radio": if(objInput.is(":checked") == false) flagUpdate = false; break; case "button": flagUpdate = false; break; case "editor_tinymce": if(typeof tinyMCE != "undefined"){ var objEditor = tinyMCE.EditorManager.get(inputID); if(objEditor) value = objEditor.getContent(); } break; case "image": var imageID = objInput.data("imageid"); if(imageID && jQuery.isNumeric(imageID)) value = imageID; case "mp3": var source = objInput.data("source"); //convert to relative url if not addon if(source != "addon" && jQuery.isNumeric(value) == false) value = g_ucAdmin.urlToRelative(value); break; case "post": value = getPostPickerValue(objInput); break; case "items": value = g_temp.objItemsManager.getItemsData(); break; case "fonts": value = t.getFontsPanelData(); break; case "map": value = objInput.data("mapdata"); break; case "repeater": value = getRepeaterValues(objInput); break; case "multiselect": value = multiSelectModifyAfterGet(value); break; case "dimentions": value = dimentionsGetValues(objInput); break; case "select2": break; case "gallery": value = getGalleryValues(objInput); break; case "icon": value = getIconInputData(objInput); break; case "link": value = getLinkInputValue(objInput); break; default: //custom settings var objCustomType = getCustomSettingType(type); if(objCustomType){ if(objCustomType.funcGetValue) value = objCustomType.funcGetValue(objInput, t); else value = ""; } break; } if(flagUpdate == false) return(g_vars.NOT_UPDATE_OPTION); return(value); } /** * get settings values object by the parent */ this.getSettingsValues = function(controlsOnly, isChangedOnly){ validateInited(); var obj = new Object(); var name,value,type,flagUpdate,inputID; if(controlsOnly == true) var objInputs = getObjInputs(controlsOnly); else{ var objInputs = getObjInputs().not(".unite-setting-transparent"); } jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); name = getInputName(objInput); type = getInputType(objInput); value = getSettingInputValue(objInput); if(value == g_vars.NOT_UPDATE_OPTION) return(true); //remain only changed values from default values if(isChangedOnly === true){ var defaultValue = getInputDefaultValue(objInput); if(defaultValue === value) return(true); } inputID = objInput.prop("id"); //set additional vars switch(type){ case "select": var selectedText = objInput.children("option:selected").html(); obj[name+"_unite_selected_text"] = selectedText; break; case "checkbox": value = objInput.is(":checked"); break; case "image": if(value && jQuery.isNumeric(value)){ obj[name+"_url"] = objInput.data("url"); } break; } obj[name] = value; }); return(obj); }; /** * get default value */ function getInputDefaultValue(objInput){ var type = getInputType(objInput); var name = getInputName(objInput); var dataname = "default"; var checkboxDataName = "defaultchecked"; var defaultValue; switch(type){ default: if(!name) return(false); defaultValue = objInput.data(dataname); if(typeof defaultValue == "object") defaultValue = JSON.stringify(defaultValue); if(type == "select"){ if(defaultValue === true) defaultValue = "true"; if(defaultValue === false) defaultValue = "false"; } break; case "radio": case "checkbox": defaultValue = objInput.data(checkboxDataName); defaultValue = g_ucAdmin.strToBool(defaultValue); break; } if(jQuery.isNumeric(defaultValue)) defaultValue = defaultValue.toString(); return(defaultValue); } /** * clear input */ function clearInput(objInput, dataname, checkboxDataName){ var name = getInputName(objInput); var type = getInputType(objInput); var inputID = objInput.prop("id"); var defaultValue; if(!dataname) var dataname = "default"; if(!checkboxDataName) var checkboxDataName = "defaultchecked"; switch(type){ case "select": case "textarea": case "range": case "text": case "password": if(!name) return(false); defaultValue = objInput.data(dataname); if(typeof defaultValue == "object") defaultValue = JSON.stringify(defaultValue); if(type == "select"){ if(defaultValue === true) defaultValue = "true"; if(defaultValue === false) defaultValue = "false"; } objInput.val(defaultValue); break; case "hidden": defaultValue = objInput.data(dataname); objInput.val(defaultValue); break; case "icon": defaultValue = objInput.data(dataname); objInput.val(defaultValue); objInput.trigger("blur"); break; case "color": defaultValue = objInput.data(dataname); objInput.val(defaultValue); if(g_colorPicker) g_colorPicker.linkTo(objInput); objInput.trigger("change"); //clear manually if(defaultValue == "") objInput.attr("style",""); break; case "checkbox": defaultValue = objInput.data(checkboxDataName); defaultValue = g_ucAdmin.strToBool(defaultValue); if(defaultValue == true) objInput.attr("checked", true); else objInput.attr("checked", false); break; case "radio": defaultValue = objInput.data(checkboxDataName); defaultValue = g_ucAdmin.strToBool(defaultValue); if(defaultValue == true){ objInput.prop("checked", true); //maybe change to attr } break; case "editor_tinymce": var objEditorWrapper = objInput.parents(".unite-editor-setting-wrapper"); defaultValue = objEditorWrapper.data(dataname); if(typeof tinyMCE == "undefined") //skip the init, if no editor yet break; var objEditor = tinyMCE.EditorManager.get(inputID); if(objEditor){ objEditor.setContent(defaultValue); }else{ objInput.val(defaultValue); } break; case "addon": case "image": case "mp3": defaultValue = objInput.data(dataname); objInput.val(defaultValue); objInput.trigger("change"); break; case "link": defaultValue = objInput.data(dataname); clearLinkInputValue(objInput, defaultValue); break; case "post": defaultValue = objInput.data(dataname); setPostPickerValue(objInput, defaultValue); break; case "items": if(dataname != "initval") g_temp.objItemsManager.clearItemsPanel(); break; case "fonts": //don't clear here break; case "map": //don't clear map break; case "repeater": setRepeaterValues(objInput, null, true); break; case "col_layout": //don't clear col layout break; case "multiselect": defaultValue = objInput.data(dataname); defaultValue = multiSelectModifyForSet(defaultValue); objInput.val(defaultValue); break; case "select2": //no clear for now /* g_temp.enableTriggerChange = false; defaultValue = objInput.data(dataname); objInput.select2("val",defaultValue); objInput.trigger("change"); g_temp.enableTriggerChange = true; */ break; case "dimentions": //no clear for now break; case "gallery": clearGallery(objInput); break; case "typography": clearTypography(objInput); break; default: var objCustomType = getCustomSettingType(type); if(objCustomType){ if(objCustomType.funcClearValue) objCustomType.funcClearValue(objInput); } else{ var success = g_ucAdmin.clearProviderSetting(type, objInput, dataname); if(success == false){ trace("for clear - wrong type: " + type); trace(objInput); } } break; } objInput.removeData("unite_setting_oldvalue"); } /** * set input value */ function setInputValue(objInput, value, value2){ var type = getInputType(objInput); var inputID = objInput.prop("id"); var name = objInput.prop("name"); switch(type){ case "select": case "textarea": case "text": case "password": objInput.val(value); case "hidden": if(typeof value == "object"){ objInput.data("input_value", value); } else{ objInput.val(value); objInput.data("input_value", null); } break; case "addon": objInput.val(value); objInput.trigger("change"); break; case "range": value = parseFloat(value); objInput.val(value); objInput.trigger("input"); break; case "icon": objInput.val(value); objInput.trigger("blur"); break; case "color": objInput.val(value); if(g_colorPicker) g_colorPicker.linkTo(objInput); objInput.trigger("change"); break; case "checkbox": value = g_ucAdmin.strToBool(value); if(value == true){ objInput.attr("checked", "checked"); objInput.prop("checked", "checked"); } else{ objInput.prop("checked", false); objInput.removeAttr("checked"); } break; case "radio": var radioValue = objInput.val(); //set by radio text if(radioValue === "true" || radioValue === "false"){ radioValue = g_ucAdmin.strToBool(radioValue); value = g_ucAdmin.strToBool(value); } if(radioValue === value){ objInput.prop("checked", true); }else{ objInput.removeAttr("checked"); objInput.attr("checked", false); } break; case "editor_tinymce": if(typeof tinyMCE == "undefined"){ //set textarea content objInput.val(value); }else{ var objEditor = tinyMCE.EditorManager.get(inputID); if(objEditor){ objEditor.setContent(value); }else{ objInput.val(value); } } break; case "image": if(value2){ objInput.data("imageid",value2); //set image id } objInput.data("url", value); case "mp3": objInput.val(value); objInput.trigger("change"); break; case "link": setLinkInputValue(objInput, value); break; case "post": setPostPickerValue(objInput, value); break; case "items": g_temp.objItemsManager.setItemsFromData(value); break; case "map": //set map value break; case "fonts": setFontPanelData(objInput, value); break; case "multiselect": value = multiSelectModifyForSet(value); objInput.val(value); break; case "select2": objInput.select2("val",value); objInput.trigger("change"); break; case "gallery": setGalleryValues(objInput, value); break; default: var objCustomType = getCustomSettingType(type); if(objCustomType) if(objCustomType.funcSetValue) objCustomType.funcSetValue(objInput, value); else{ //check for provider var success = g_ucAdmin.providerSettingSetValue(type, objInput, value); //trace error if(success == false){ trace("for setvalue - wrong type: " + type); } } break; } } /** * clear settings */ this.clearSettings = function(dataname, checkboxDataName){ validateInited(); var objInputs = getObjInputs(); jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); clearInput(objInput, dataname, checkboxDataName); }); }; /** * get field names by type */ this.getFieldNamesByType = function(type){ validateInited(); var objInputs = getObjInputs(); var arrFieldsNames = []; jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); var name = getInputName(objInput); var inputType = getInputType(objInput); if(inputType == type) arrFieldsNames.push(name); }); return(arrFieldsNames); }; /** * clear settings */ this.clearSettingsInit = function(){ validateInited(); t.clearSettings("initval","initchecked"); }; /** * set single setting value */ this.setSingleSettingValue = function(name, value){ var objInput = t.getInputByName(name); if(!objInput || objInput.length == 0) return(false); g_temp.enableTriggerChange = false; setInputValue(objInput, value); g_temp.enableTriggerChange = true; }; /** * set values, clear first */ this.setValues = function(objValues, noClear){ validateInited(); if(noClear !== true) this.clearSettings(); //if empty values - exit if(typeof objValues != "object"){ return(false); } g_temp.enableTriggerChange = false; var objInputs = getObjInputs(); //trace(objValues); trace(objInputs); jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); var name = getInputName(objInput); if(!name || typeof name == "undefined") return(true); var type = getInputType(objInput); if(type != "radio") clearInput(objInput); if(objValues.hasOwnProperty(name)){ var value = objValues[name]; var value2 = null; switch(type){ case "image": if(jQuery.isNumeric(value)){ var url = g_ucAdmin.getVal(objValues, name+"_url"); if(url){ value2 = value; value = url; } }else{ var imageID = g_ucAdmin.getVal(objValues, name+"_imageid"); if(imageID) value2 = imageID; } break; } setInputValue(objInput, value, value2); } }); applyControls(); g_temp.enableTriggerChange = true; }; function _________CUSTOM_SETTING_TYPES__________(){} /** * get custom setting type, if empty setting name - returrn all types */ function getCustomSettingType(settingName){ var objCustomSettings = g_ucAdmin.getGlobalData(g_temp.customSettingsKey); if(!objCustomSettings) objCustomSettings = {}; if(!settingName) return(objCustomSettings); var objType = g_ucAdmin.getVal(objCustomSettings, settingName, null); return(objType); } function _______RANGE_SLIDER_____(){} /** * get range input from input that can be range or text */ function getRangeInput(objInput){ var objRangeWrapper = objInput.parents(".unite-setting-range-wrapper"); if(objRangeWrapper.length == 0) throw new Error("range input not found"); var inputText = objRangeWrapper.find("input.unite-setting-range"); return(inputText); } /** * init range slider * input can be input text or range */ function initRangeInput(objInput, funcChange){ var objRangeWrapper = objInput.parents(".unite-setting-range-wrapper"); if(objRangeWrapper.length == 0) return(false); var isInited = objRangeWrapper.data("inited"); if(isInited === true) return(false); var inputRange = objRangeWrapper.find("input[type='range']"); var inputText = objRangeWrapper.find("input.unite-setting-range"); if(inputText.length == 0) throw new Error("range text field not found"); //on range change inputRange.on("input", function(event){ var value = jQuery(this).val(); inputText.val(value); //trigger instant event funcChange(null, inputText, true); }); //on text change inputText.on("input", function(){ var value = jQuery(this).val(); if(value === "") value = jQuery(this).prop("placeholder"); inputRange.val(value); }); inputText.on("placeholder_change",function(){ inputText.trigger("input"); }); objRangeWrapper.data("inited", true); } function _______SELECT2_____(){} /** * append plus icon */ function appendPlusIcon(objInput){ //first check if all options are selected var objInputWrapper = objInput.parents('.unite-setting-input'); var objSelect = objInputWrapper.find('select'); if(!objSelect.length) return(false); var objOptions = objInputWrapper.find('option'); if(!objOptions.length) return(false); var objSelectedOptions = objInputWrapper.find('li.select2-selection__choice') var numOptions = objOptions.length; var numSelectedOptions = objSelectedOptions.length; var isAlloptionsSelected = numOptions == numSelectedOptions; if(isAlloptionsSelected == true) return(false); var objSelectedOptionsContainer = objInputWrapper.find('ul.select2-selection__rendered'); var objPlusButton = objInputWrapper.find('.select2-selection__uc-plus-button'); //check if button already exist if(objPlusButton.length > 0) return(false); var plusButtonHtml = '<li class="select2-selection__choice select2-selection__uc-plus-button">+</li>'; //find inline cursor and insert plus button before var objCursorInput = objInputWrapper.find('.select2-search--inline'); objSelectedOptionsContainer.append(plusButtonHtml); objPlusButton = objInputWrapper.find('.select2-selection__uc-plus-button'); objPlusButton.insertBefore(objCursorInput) } function initSelect2(objInput){ setTimeout(function(){ appendPlusIcon(objInput); },400) objInput.select2({minimumInputLength: 1}).on('change', function(e){ t.onSettingChange(null,objInput,true); appendPlusIcon(objInput); }) } function _______MULTI_SELECT_____(){} /** * modify value for save, turrn to array */ function multiSelectModifyForSet(value){ if(typeof value != "string") return(value); value = value.split(","); return(value); } /** * modify value after get */ function multiSelectModifyAfterGet(value){ if(jQuery.isArray(value) == false) return(false); value = value.join(","); return(value); } function _______COLOR_PICKER_____(){} /** * init farbtastic color picker input events */ function initColorPickerInputEvents_farbtastic(objInput){ if(!g_colorPickerWrapper){ initColorPicker(); } var input = objInput[0]; g_colorPicker.linkTo(input); objInput.focus(function(){ g_colorPicker.linkTo(this); var bodyWidth = jQuery("body").width(); g_colorPickerWrapper.show(); var input = jQuery(this); var offset = input.offset(); var wrapperWidth = g_colorPickerWrapper.width(); var inputWidth = input.width(); var inputHeight = input.height(); var posLeft = offset.left - wrapperWidth / 2 + inputWidth/2; var posRight = posLeft + wrapperWidth; if(posRight > bodyWidth) posLeft = bodyWidth - wrapperWidth; if(posLeft < 0) posLeft = 0; var posTop = offset.top - g_colorPickerWrapper.height() - inputHeight + 10; if(posTop < 0) posTop = 0; g_colorPickerWrapper.css({ "left":posLeft, "top":posTop }); }).on("click",function(){ return(false); //prevent body click }); } /** * init color picker input */ function initColorPickerInputEvents(objInput, funcChange){ switch(g_temp.colorPickerType){ case "farbtastic": initColorPickerInputEvents_farbtastic(objInput, funcChange); break; case "spectrum": objInput.spectrum({ move:function(){ g_ucAdmin.runWithTrashold(function(){ if(funcChange && typeof funcChange == "function"){ funcChange(null, objInput, false); } else t.onSettingChange(null, objInput, false); }); } }); break; } } /** * check onchange on color input */ function checkColorInputOnchange(objInput){ if(objInput.val() == "") objInput.css("background-color",""); } /** * init farbtastic color picker */ function initColorPicker_farbtastic(){ g_colorPickerWrapper = jQuery('#divColorPicker'); if(g_colorPickerWrapper.length == 0){ jQuery("body").append('<div id="divColorPicker" style="display:none;"></div>'); g_colorPickerWrapper = jQuery('#divColorPicker'); } //init the wrapper itself var isInited = g_colorPickerWrapper.data("inited"); if(isInited !== true){ g_colorPickerWrapper.on("click",function(){ return(false); //prevent body click }); jQuery("body").on("click",function(){ g_colorPickerWrapper.hide(); }); g_colorPickerWrapper.data("inited", true); } if(!g_colorPicker) g_colorPicker = jQuery.unite_farbtastic('#divColorPicker', null, function(input, value){ var objInput = jQuery(input); objInput.trigger("keyup"); }); } /** * init color picker */ function initColorPicker(){ g_temp.colorPickerType = g_ucAdmin.getGeneralSetting("color_picker_type"); switch(g_temp.colorPickerType){ case "farbtastic": initColorPicker_farbtastic(); break; case "spectrum": break; default: throw new Error("Wrong color picker type: " + g_temp.colorPickerType); break; } }; function _______MP3_SETTING_____(){} /** * update image url base */ this.updateMp3FieldState = function(objInput, isEnable){ var objButton = objInput.siblings(".unite-button-choose"); var objError = objInput.siblings(".unite-setting-mp3-error"); objInput.trigger("change"); if(!isEnable){ //set disabled mode if(objError.length) objError.show(); g_ucAdmin.disableInput(objInput); g_ucAdmin.disableButton(objButton); }else{ //set enabled mode if(objError.length) objError.hide(); g_ucAdmin.enableInput(objInput); g_ucAdmin.enableButton(objButton); } }; /** * on change image click - change the image */ function onChooseMp3Click(){ var objButton = jQuery(this); if(g_ucAdmin.isButtonEnabled(objButton) == false) return(true); var objInput = objButton.siblings(".unite-setting-mp3-input"); var source = objInput.data("source"); g_ucAdmin.openAddMp3Dialog(g_uctext.choose_audio,function(urlMp3){ if(source == "addon"){ //in that case the url is an object var inputValue = urlMp3.url_assets_relative; var fullUrl = urlMp3.full_url; objInput.data("url", fullUrl); setInputValue(objInput, inputValue); }else{ setInputValue(objInput, urlMp3); } objInput.trigger("change"); },false, source); } function _______IMAGE_SETTING_____(){} /** * set image preview */ function setImagePreview(){ var objInput = jQuery(this); if(objInput.length == 0) throw new Error("wrong image input given"); var source = objInput.data("source"); var url = objInput.val(); if(source == "addon"){ if(url == ""){ objInput.data("urlfull",""); } var urlFull = objInput.data("urlfull"); urlFull = g_ucAdmin.urlToFull(url); objInput.data("urlfull", urlFull); url = g_ucAdmin.urlToFull(urlFull); }else{ url = g_ucAdmin.urlToFull(url); } var objPreview = objInput.siblings(".unite-setting-image-preview"); var objWrapper = objInput.parents(".unite-setting-image"); url = jQuery.trim(url); if(url == ""){ objWrapper.removeClass("unite-image-exists"); objPreview.css("background-image",""); objInput.data("imageid",""); objInput.data("url",""); }else{ objInput.data("url",url); objWrapper.addClass("unite-image-exists"); objPreview.css("background-image","url('"+url+"')"); } return(true); } /** * on change image click - change the image */ function onChooseImageClick(event){ //event.preventDefault(); var objButton = jQuery(this); var objWrapper = objButton.parents(".unite-setting-image"); var objInput = objWrapper.find(".unite-setting-image-input"); var source = objInput.data("source"); g_ucAdmin.openAddImageDialog(g_uctext.choose_image,function(urlImage, imageID){ if(source == "addon"){ //in that case the url is an object var inputValue = urlImage.url_assets_relative; var fullUrl = urlImage.full_url; objInput.data("urlfull", fullUrl); setInputValue(objInput, inputValue); }else setInputValue(objInput, urlImage, imageID); objInput.trigger("change"); },false, source); return(false); } /** * on clear image click */ function onClearImageClick(event){ event.preventDefault(); var objButton = jQuery(this); var objWrapper = objButton.parents(".unite-setting-image"); var objInput = objWrapper.find("input.unite-setting-image-input"); objInput.val(""); objInput.data("urlfull",""); objInput.data("imageid",""); objInput.data("url",""); objInput.trigger("change"); return(false); } /** * update image url base */ this.updateImageFieldState = function(objInput, isEnable){ var objError = objInput.siblings(".unite-setting-image-error"); var objPreview = objInput.siblings(".unite-setting-image-preview"); var objWrapper = objInput.parents(".unite-setting-image"); objInput.trigger("change"); if(isEnable == false){ //set disabled mode if(objError.length) objError.show(); g_ucAdmin.disableInput(objInput); objWrapper.addClass("unite-disabled"); }else{ //activate image input if(objError.length) objError.hide(); g_ucAdmin.enableInput(objInput); objWrapper.removeClass("unite-disabled"); objPreview.show(); var backgroundImage = objPreview.css("background-image"); if(backgroundImage && backgroundImage != "none") objWrapper.addClass("unite-image-exists"); else objWrapper.removeClass("unite-image-exists"); } } /** * on update assets path * update all image addon inputs url base */ function onUpdateAssetsPath(event, urlBase){ validateInited(); var objInputs = getObjInputs(); objInputs.each(function(index, input){ var objInput = jQuery(input); var type = getInputType(objInput); if(type != "image" || type != "mp3") return(true); var source = objInput.data("source"); if(source == "addon"){ var isEnable = true; if(!urlBase) isEnable = false; t.updateImageFieldState(objInput, isEnable); } }); } function _______GALLERY_____(){} /** * check if thumbnails container is empty and add emty element if needed */ function appendEmptyThumbnailElement(objImageContainer, singleImageClass, noImagesClass){ var emptyThumbnailsContainerItemHtml = '<div class="'+singleImageClass+' '+noImagesClass+'"><i class="fa fa-plus"></i></div>'; var objEmptyThumbnail = objImageContainer.find('.'+noImagesClass); var objImages = objImageContainer.children(); if(objImages.length == 0 && objEmptyThumbnail.length == 0){ objImageContainer.append(emptyThumbnailsContainerItemHtml); var objImageChooser = objImageContainer.next(); objImageChooser.removeClass('uc-has-items'); } } /** * count selected images */ function countSelectedImages(objInput, objClearAllButton, singleImageClass){ var objImages = objInput.find('.'+singleImageClass).not('.unite-setting-gallery-thumbnail--empty'); var objCounter = objInput.find('.unite-setting-gallery-status-title'); var hiddenClass = 'uc-hidden'; var imagesNum = objImages.length; if(imagesNum == 0 || !imagesNum){ objCounter.text(0+' images selected'); //remove invisble class from 'x' button objClearAllButton.addClass(hiddenClass); }else{ objCounter.text(imagesNum+' images selected'); //add invisble class from 'x' button objClearAllButton.removeClass(hiddenClass); } } /** * clear the gallery */ function emptyGallery(objInput, objImageContainer, objClearAllButton, singleImageClass, noImagesClass, noConfirm){ //check if gallery has items first var objImages = objImageContainer.find('.'+singleImageClass).not('.'+noImagesClass); //if no items found then do not run function if(!objImages.length) return(false); if(noConfirm == null && confirm("Are you sure you want to delete all images from this gallery?") == false) return(false); objImages.remove(); appendEmptyThumbnailElement(objImageContainer, singleImageClass, noImagesClass); countSelectedImages(objInput, objClearAllButton, singleImageClass); } /** * check if emty element exist and remove it */ function removeEmptyThumbnail(objInput, noImagesClass){ var objEmptyThumbnail = objInput.find('.'+noImagesClass); if(!objEmptyThumbnail.length) return(false); objEmptyThumbnail.remove(); } /** * single image remove */ function removeCurrentImage(objRemover, objInput, objImageContainer, objClearAllButton, singleImageClass, noImagesClass){ //find object that needs to be removed by remove icon that was clicked var objImage = objRemover.parents('.'+singleImageClass); objImage.remove(); //update counter countSelectedImages(objInput, objClearAllButton, singleImageClass); //append empty thumbnail if needed appendEmptyThumbnailElement(objImageContainer, singleImageClass, noImagesClass); } /** * reorder items in container */ function makeSortable($parent) { $parent.sortable({ cursor: 'move', tolerance: 'pointer', // Set the tolerance option forcePlaceholderSize: true // Set the forcePlaceholderSize option }); } /** * on image chooser click */ function appendNewImages(newImagesObject, singleImageClass, singleImageClearIconClass, objImageContainer){ var numSelected = newImagesObject.length; for(var i=0;i<numSelected;i++){ var imageSrc = newImagesObject[i].url; var dataId = newImagesObject[i].id; var imageHtml = '<div class="'+singleImageClass+'" style="background-image: url('+imageSrc+')" data-id="'+dataId+'" data-src="'+imageSrc+'"><span class="'+singleImageClearIconClass+'" title="Remove Current Image"><i class="fa fa-trash"></i></span></div>'; objImageContainer.append(imageHtml); } } /** * on image chooser click */ function galleryChooseImage(objInput, objChooser){ var hasItemsClass = 'uc-has-items'; var inputEditClass = 'unite-setting-gallery-edit'; var isItemsAdded = objChooser.hasClass(inputEditClass) && objChooser.hasClass(hasItemsClass); //check if images are alreade added, if so then add new ones only on plus icon click if(isItemsAdded == true) return(false); g_ucAdmin.openAddImageDialog("Choose Images",function(urlImage){ //add new images setGalleryValues(objInput, urlImage); },true); objInput.trigger("change") } /** * init the gallery */ function initGallery(objInput){ var objChooser = objInput.find('.unite-setting-gallery-edit:not(.uc-dragging)'); var objImageContainer = objInput.find('.unite-setting-gallery-thumbnails'); var objAddImage = objInput.find('.unite-setting-gallery-edit-icon'); var singleImageClass = 'unite-setting-gallery-thumbnail'; var noImagesClass = 'unite-setting-gallery-thumbnail--empty'; var singleImageClearIconClass = 'unite-setting-gallery-thumbnail-clear-icon'; var singleImageClearIconSelector = '.'+singleImageClearIconClass; //check if thumbnails container is empty appendEmptyThumbnailElement(objImageContainer, singleImageClass, noImagesClass); var objClearAllButton = objInput.find('.unite-setting-gallery-status-clear-icon'); //set counter countSelectedImages(objInput, objClearAllButton, singleImageClass); //init events objInput.on("change",function(){ t.onSettingChange(null,objInput); }); //select first image objChooser.on('click', function(){ var objChooser = jQuery(this); galleryChooseImage(objInput, objChooser); }); objAddImage.on('click', function(){ var objChooser = jQuery(this); galleryChooseImage(objInput, objChooser); }); //remove current image, use delegate method to click on dyamicly added button objInput.delegate(singleImageClearIconSelector, 'click', function(){ var objRemover = jQuery(this); removeCurrentImage(objRemover, objInput, objImageContainer, objClearAllButton, singleImageClass, noImagesClass); }); //clear all images on clear button click objClearAllButton.on('click', function(){ emptyGallery(objInput, objImageContainer, objClearAllButton, singleImageClass, noImagesClass); objInput.trigger("change"); }); } /** * get gallery values */ function getGalleryValues(objInput){ var imageArray = []; var objImages = objInput.find('.unite-setting-gallery-thumbnail').not('.unite-setting-gallery-thumbnail--empty'); if(!objImages.length) return(imageArray); objImages.each(function(){ var objImage = jQuery(this); var imageUrl = objImage.data('src'); var imageId = objImage.data('id'); var galleryObjItem = { id: imageId, url: imageUrl } imageArray.push(galleryObjItem); }); return(imageArray); } /** * set gallery values */ function setGalleryValues(objInput, value){ var singleImageClass = 'unite-setting-gallery-thumbnail'; var singleImageClearIconClass = 'unite-setting-gallery-thumbnail-clear-icon'; var noImagesClass = 'unite-setting-gallery-thumbnail--empty'; var objImageContainer = objInput.find('.unite-setting-gallery-thumbnails'); var objChooser = objInput.find('.unite-setting-gallery-edit:not(.uc-dragging)'); //add new images appendNewImages(value, singleImageClass, singleImageClearIconClass, objImageContainer); //remove empty thumbnail removeEmptyThumbnail(objInput, noImagesClass); var objClearAllButton = objInput.find('.unite-setting-gallery-status-clear-icon'); //update counter countSelectedImages(objInput, objClearAllButton, singleImageClass); makeSortable(objImageContainer); var hasItemsClass = 'uc-has-items'; var inputEditClass = 'unite-setting-gallery-edit'; if(objChooser.hasClass(inputEditClass) == true) objChooser.addClass(hasItemsClass); objInput.trigger("change"); } /** * clear the gallery */ function clearGallery(objInput){ var objImageContainer = objInput.find('.unite-setting-gallery-thumbnails'); var objClearAllButton = objInput.find('.unite-setting-gallery-status-clear-icon'); var singleImageClass = 'unite-setting-gallery-thumbnail'; var noImagesClass = 'unite-setting-gallery-thumbnail--empty'; emptyGallery(objInput, objImageContainer, objClearAllButton, singleImageClass, noImagesClass, true) trace("clear gallery"); } function _______SAPS_____(){} /** * get all sap tabs */ function getAllSapTabs(){ var objTabs = g_objSapTabs.children("a"); return(objTabs); } /** * show sap elmeents */ function showSapInlineElements(numSap){ var elementClass = ".unite-sap-" + numSap; var objElements = g_objParent.find(".unite-sap-element"); if(objElements.length == 0) return(false); var objSapElements = g_objParent.find(elementClass); objElements.not(objSapElements).addClass("unite-setting-hidden"); objSapElements.removeClass("unite-setting-hidden"); } /** * on sap tab click */ function onSapTabClick(){ var classSelected = "unite-tab-selected"; var objTab = jQuery(this); if(objTab.hasClass(classSelected)) return(false); var allTabs = getAllSapTabs(); allTabs.not(objTab).removeClass(classSelected); objTab.addClass(classSelected); var sapNum = objTab.data("sapnum"); showSapInlineElements(sapNum); } /** * init saps tabs */ function initSapsTabs(){ if(!g_objWrapper){ g_objSapTabs = null; return(false); } g_objSapTabs = g_objWrapper.find(".unite-settings-tabs"); if(g_objSapTabs.length == 0){ g_objSapTabs = null; return(false); } g_objSapTabs.children("a").on("click",onSapTabClick); } /** * init saps accordion type */ function initSapsAccordion(){ if(!g_objWrapper) return(false); var classClosed = "unite-closed"; g_objWrapper.find(".unite-postbox .unite-postbox-title").not(".unite-no-accordion").on("click",function(){ var objHandle = jQuery(this); var objInside = objHandle.siblings(".unite-postbox-inside"); //open if(objHandle.hasClass(classClosed)){ //close all items g_objWrapper.find(".unite-postbox .unite-postbox-inside").not(objInside).slideUp("fast"); g_objWrapper.find(".unite-postbox .unite-postbox-title").not(objHandle).addClass("unite-closed"); objHandle.removeClass(classClosed); objInside.slideDown("fast"); }else{ //close objHandle.addClass(classClosed); objInside.slideUp("fast"); } }); } /** * set accordion max height. set the inner options max height */ this.setAccordionMaxHeight = function(bodyHeight){ if(!g_objWrapper) return(false); var spaceBetween = g_ucAdmin.getVal(g_options, "accordion_sap", null); if(spaceBetween === null){ trace(g_options); throw new Error("Space between accordion items not set in settings options"); } var titleHeight = g_ucAdmin.getVal(g_options, "accordion_title_height", null); var numTitles = g_objWrapper.find(".unite-postbox .unite-postbox-title").length; var extraHeight = 0; if(numTitles > 0) extraHeight = titleHeight * numTitles + spaceBetween * (numTitles-1); var insideMaxHeight = bodyHeight - extraHeight; g_objWrapper.find(".unite-postbox-inside").css("max-height",insideMaxHeight+"px"); }; /** * init saps */ function initSaps(){ if(g_options.show_saps == false) return(false); if(!g_objWrapper) return(false); switch(g_options.saps_type){ case "saps_type_inline": initSapsTabs(); break; case "saps_type_accordion": initSapsAccordion(); break; default: throw new Error("Init saps error: wrong saps type: " + g_options.saps_type); break; } } function ______ADDON_PICKER____(){} /** * get addons browser object */ this.getObjAddonBrowser = function(addonType){ var keyCache = "uc_obj_addons_browsers"; var objAddonBrowsersCache = g_ucAdmin.getGlobalData(keyCache); if(!objAddonBrowsersCache) objAddonBrowsersCache = {}; var objBrowser = g_ucAdmin.getVal(objAddonBrowsersCache, addonType); //init browser if not inited yet if(!objBrowser){ var browserID = "uc_addon_browser_"+addonType; var objBrowserWrapper = jQuery("#" + browserID); g_ucAdmin.validateDomElement(objBrowserWrapper,"addons browser with id: "+browserID); var objBrowser = new UniteCreatorBrowser(); objBrowser.init(objBrowserWrapper); objAddonBrowsersCache[addonType] = objBrowser; g_ucAdmin.storeGlobalData(keyCache, objAddonBrowsersCache); } return(objBrowser); }; /** * init addon picker */ function initAddonPicker(objInput){ var addonType = objInput.data("addontype"); var objSelectButton = objInput.siblings(".unite-addonpicker-button"); var objWrapper = objInput.parents(".unite-settings-addonpicker-wrapper"); var objButtons = objWrapper.find(".uc-action-button"); var objTitle = objInput.siblings(".unite-addonpicker-title"); var objBrowser = t.getObjAddonBrowser(addonType); var settingName = objInput.prop("name"); var settingDataName = settingName + "_data"; var objAddonConfig = new UniteCreatorAddonConfig(); var settingDataName = settingName + "_data"; var objInputData = t.getInputByName(settingDataName); objInput.change(function(){ var addonname = objInput.val(); //set empty if(!addonname){ objWrapper.addClass("unite-empty-content"); objSelectButton.css("background-image", "none"); if(objTitle.length) objTitle.html(""); return(true); } var objData = objBrowser.getAddonData(addonname); if(!objData) return(true); if(objData.bgimage) objSelectButton.css("background-image", objData.bgimage); objWrapper.removeClass("unite-empty-content"); if(objTitle.length){ var title = g_ucAdmin.getVal(objData, "title"); if(!title) title = addonname; objTitle.show().html(title); } //update data if(objInputData){ var addonData = objAddonConfig.getGridAddonDataFromBrowserData(objData); setInputValue(objInputData, addonData); } }); //---- select button objSelectButton.on("click",function(event){ event.stopPropagation(); event.stopImmediatePropagation(); objBrowser.openAddonsBrowser(null, function(objData){ var addonName = objData.name; //clear if(!addonName){ objInput.val(""); objWrapper.addClass("unite-empty-content"); objSelectButton.css("background-image", ""); if(objTitle.length) objTitle.html(""); }else{ objInput.val(addonName); if(objData.bgimage) objSelectButton.css("background-image", objData.bgimage); objWrapper.removeClass("unite-empty-content"); if(objTitle.length) objTitle.html(objData.title); //update data if(objInputData){ var addonData = objAddonConfig.getGridAddonDataFromBrowserData(objData); setInputValue(objInputData, addonData); } } t.onSettingChange(null, objInput); onControlSettingChange(null, objInput[0]); }, objSelectButton); }); // ------------ action buttons objButtons.on("click",function(){ var objButton = jQuery(this); var action = objButton.data("action"); switch(action){ case "clear": objInput.val(""); objInput.trigger("change"); break; case "configure": var configureAction = objButton.data("configureaction"); g_ucAdmin.validateNotEmpty(configureAction, "configure action"); g_ucAdmin.validateDomElement(objInputData, "addon picker input data"); var addonData = getSettingInputValue(objInputData); if(!addonData){ var addonName = objInput.val(); addonData = objAddonConfig.getEmptyAddonData(addonName, addonType); } //open the panel var sendData = objAddonConfig.getSendDataFromAddonData(addonData); var panelTitle = objAddonConfig.getAddonTitle(addonData); var panelData = objAddonConfig.getPanelData(addonData); var options = { pane_name: "addon-settings", send_data: sendData, panel_title: panelTitle, panel_data: panelData, setting_name: settingDataName, changing_setting_name: settingName, addon_data: addonData }; triggerEvent(t.events.OPEN_CHILD_PANEL, options); break; } }); } function ______ICON_PICKER____(){} /** * add icons type */ this.iconPicker_addIconsType = function(name, arrIcons, iconsTemplate, optParams){ var key = "icon_picker_type_"+name; var objType = g_ucAdmin.getGlobalData(key); if(objType) return(false); var params = { "name": name, "icons":arrIcons, "template":iconsTemplate }; if(optParams) jQuery.extend(params, optParams); g_ucAdmin.storeGlobalData(key, params); }; /** * get icons type object */ function iconPicker_getObjIconsType(name){ var key = "icon_picker_type_"+name; var objType = g_ucAdmin.getGlobalData(key); if(!objType) throw new Error("Icons type: "+name+" not found"); return(objType); } /** * init the dialog */ function iconPicker_initDialog(type){ if(!type) var type = "fa"; var dialogID = "unite_icon_picker_dialog_"+type; var objDialogWrapper = jQuery("#"+dialogID); if(objDialogWrapper.length){ g_iconsHash = jQuery("body").data("uc_icons_hash"); return(objDialogWrapper); } if(type == "elementor" && g_ucFaIcons.length == 0) type = "fa"; //set "fa" template if(type == "fa"){ t.iconPicker_addIconsType("fa", g_ucFaIcons, function(icon){ //icon to html functoin var classAdd = "fa fa-"; if(icon.indexOf("fa-") != -1) classAdd = ""; var html = '<i class="'+classAdd+icon+'"></i>'; return(html); }); }else if(type == "elementor"){ t.iconPicker_addIconsType("elementor", g_ucElIcons, function(icon){ //icon to html functoin var html = '<i class="'+icon+'"></i>'; return(html); }); } var objType = iconPicker_getObjIconsType(type); var isAddNew = g_ucAdmin.getVal(objType, "add_new"); var htmlDialog = '<div id="'+dialogID+'" class="unite-icon-picker-dialog unite-inputs unite-picker-type-'+type+'" style="display:none">'; htmlDialog += '<div class="unite-iconpicker-dialog-top">'; htmlDialog += '<input class="unite-iconpicker-dialog-input-filter" type="text" placeholder="Type to filter" value="">'; htmlDialog += '<span class="unite-iconpicker-dialog-icon-name"></span>'; //add new functionality /* if(isAddNew === true){ htmlDialog += '<a class="unite-button-secondary unite-iconpicker-dialog-button-addnew">Add New Shape</a>'; } */ htmlDialog += '</div>'; htmlDialog += '<div class="unite-iconpicker-dialog-icons-container"></div></div>'; jQuery("body").append(htmlDialog); objDialogWrapper = jQuery('#'+dialogID); var objContainer = objDialogWrapper.find('.unite-iconpicker-dialog-icons-container'); var objFilter = objDialogWrapper.find('.unite-iconpicker-dialog-input-filter'); var objIconName = objDialogWrapper.find(".unite-iconpicker-dialog-icon-name"); //set the icons var arrIcons = []; arrIcons = objType.icons; var iconTemplate = objType.template; var isArray = jQuery.isArray(arrIcons); jQuery.each(arrIcons, function(index, icon) { var iconTitle = null; if(isArray == false){ iconTitle = icon; icon = index; } var hashName = icon+"_"+type; if(typeof iconTemplate == "function"){ var iconHtml = iconTemplate(icon); }else{ var iconHtml = iconTemplate.replace("[icon]", icon); } var objIcon = jQuery('<span class="unite-iconpicker-icon">'+iconHtml+'</span>'); var iconName = icon; if(objType && typeof objType.getIconName == "function") iconName = objType.getIconName(icon); //avoid doubles if(g_iconsHash.hasOwnProperty(hashName) == false){ objIcon.data('title', iconTitle); objIcon.data('name', iconName); objIcon.data('value', icon); objContainer.append(objIcon); g_iconsHash[hashName] = objIcon; } }); jQuery("body").data("uc_icons_hash", g_iconsHash); var dialogTitle = "Choose Icon"; if(type == "shape") dialogTitle = "Choose Shape"; objDialogWrapper.dialog({ autoOpen: false, height: 500, width: 800, dialogClass:"unite-ui unite-ui2", title: dialogTitle, open: function( event, ui ) { objContainer.scrollTop(0); var objSelectedIcon = objContainer.find('.icon-selected'); if (!objSelectedIcon.length) return(false); if(objSelectedIcon.is(":hidden") == true) return(false); //scroll to icon var containerHeight = objContainer.height(); var iconPos = objSelectedIcon.position().top; if(iconPos > containerHeight) objContainer.scrollTop(iconPos - (containerHeight / 2 - 50) ); } }); //init events objContainer.on('click', '.unite-iconpicker-icon', function (event) { objContainer.find('.icon-selected').removeClass('icon-selected'); var objIcon = jQuery(event.target).closest('.unite-iconpicker-icon'); objIcon.addClass('icon-selected'); var iconName = objIcon.data('name'); var iconValue = objIcon.data('value'); var iconTitle = objIcon.data('title'); //update picker object var objPicker = objDialogWrapper.data("objpicker"); var objPickerInput = objPicker.find(".unite-iconpicker-input"); var objPickerButton = objPicker.find(".unite-iconpicker-button"); var objPickerTitle = objPicker.find(".unite-iconpicker-title"); var inputValue = iconValue; if(type == "fa"){ if(iconName.indexOf("fa-") == -1) inputValue = 'fa fa-' + iconName; else inputValue = iconName; } objPickerInput.val(inputValue); if(typeof iconTemplate == "function") var htmlIcon = iconTemplate(iconValue); else var htmlIcon = iconTemplate.replace("[icon]", iconValue); objPickerButton.html(htmlIcon); //set title if(iconTitle) objPickerTitle.show().html(iconTitle); else objPickerTitle.hide() objPickerInput.trigger("change"); //close dialog objDialogWrapper.dialog("close"); var objPickerWrapper = objPickerInput.parents(".unite-settings-iconpicker"); //check svg icon, if not exist - set text inside svg button removeSvgPreview(objPickerWrapper, objPickerInput); //enable input objPickerInput.removeAttr('disabled'); //add clear input button appendClearInputButton(objPickerWrapper, objPickerInput); }); //on icon mouseover objContainer.on('mouseenter', '.unite-iconpicker-icon', function (event) { var objIcon = jQuery(event.target).closest('.unite-iconpicker-icon'); var iconNameStr = objIcon.data('name'); var iconTitle = objIcon.data('title'); var iconName = iconNameStr; if(iconTitle) iconName = iconTitle; if(type == "fa"){ iconName = iconName.replace("fa-", ""); if(iconName.indexOf("fab ") == 0) iconName = iconName.replace("fab ", "")+" [brand]"; else if(iconName.indexOf("fal ") == 0) iconName = iconName.replace("fal ", "")+" [light]"; else if(iconName.indexOf("far ") == 0) iconName = iconName.replace("far ", "")+" [regular]"; else iconName = iconName+" [solid]"; } objIconName.text(iconName); }); //on icon mouseover objContainer.on('mouseleave', '.unite-iconpicker-icon', function (event) { objIconName.text(""); }); //filter functionality objFilter.on('keyup', function () { var strFilter = objFilter.val(); strFilter = jQuery.trim(strFilter); var objIcons = objDialogWrapper.find(".unite-iconpicker-icon"); jQuery(objIcons).each(function(index, icon){ var objIcon = jQuery(icon); var name = objIcon.data("name"); var isVisible = false; if(strFilter == "" || name.indexOf(strFilter) !== -1) isVisible = true; if(isVisible == true) objIcon.show(); else objIcon.hide(); }); }); return(objDialogWrapper); } /** * show error svg: wrong tupe */ function showWrongSvgTypeError(objPickerWrapper){ var errorHtml = '<div class="unite-iconpicker-button-error">Wrong Image Type. Image Needs to Be SVG type.</div>'; objPickerWrapper.prepend(errorHtml); var objError = objPickerWrapper.find('.unite-iconpicker-button-error'); setTimeout(function(){ objError.remove(); },4000); } /** * remove clear input button */ function removeClearInputButton(objPickerWrapper){ var objClearInputButton = objPickerWrapper.find('.unite-iconpicker-button-clear'); if(!objClearInputButton.length) return(false); objClearInputButton.remove(); } /** * append clear button */ function appendClearInputButton(objPickerWrapper, objInput){ var clearInputButtonClassName = 'unite-iconpicker-button-clear'; var hoverClass = 'uc-hover'; var clearButtonHtml = ' <span class="'+clearInputButtonClassName+'">Clear</span>'; var objClearInputButton = objPickerWrapper.find('.'+clearInputButtonClassName); if(objClearInputButton.length > 0) return(false); objPickerWrapper.append(clearButtonHtml); //reinit button objClearInputButton = objPickerWrapper.find('.'+clearInputButtonClassName); objClearInputButton.on('click', function(){ onClearInputButtonClick(objPickerWrapper, objInput); objInput.removeClass(hoverClass); }); objClearInputButton.on('mouseenter', function(){ objInput.addClass(hoverClass); }); objClearInputButton.on('mouseleave', function(){ objInput.removeClass(hoverClass); }); } /** * remove svg preview */ function removeSvgPreview(objPickerWrapper, objInput){ var objSvgButton = objPickerWrapper.find('.unite-iconpicker-button-svg'); //check if svg exist var dataName = objSvgButton.data('svg-name'); var inputVal = objInput.val(); if(dataName == inputVal){ var urlImage = objSvgButton.data('svg-src'); var urlToSvg = g_ucAdmin.urlToFull(urlImage); setSvgPreview(urlToSvg, objSvgButton, objPickerWrapper); //hide icon chooser hideIconChooseButton(objPickerWrapper); //enable input objInput.removeAttr('disabled'); return(false); } //remove attributes objSvgButton.removeAttr('data-svg-src'); objSvgButton.removeAttr('data-svg-id'); objSvgButton.removeAttr('data-svg-name'); objSvgButton.removeClass('svg-selected'); //set text inside svg button instead of preview objSvgButton.html('SVG'); //remove clear input button removeClearInputButton(objPickerWrapper); //disable input objInput.attr('disabled', 'disabled'); //show icon chooser showIconChooseButton(objPickerWrapper); } /** * set preview of selected svg icon */ function setSvgPreview(selectedSvgUrl, objSvgButton, objPickerWrapper){ var imageHtml = '<img src="'+selectedSvgUrl+'" alt="selected svg" >'; objSvgButton.addClass('svg-selected'); objSvgButton.html(imageHtml); //remove icon preview removeIconPreview(objPickerWrapper); } /** * get icon value */ function getIconInputData(objInput){ var inputText = objInput.val(); var isTypeSvg = inputText.indexOf('.svg') > -1; if(isTypeSvg == true){ var urlToImage = objInput.data('svg-src'); var idOfImage = objInput.data('svg-id'); var svgArray = setSvgArrayObject(urlToImage, idOfImage); return(svgArray); } if(isTypeSvg == false){ var selectedIconName = objInput.val(); return(selectedIconName); } } /** * set svg array object */ function setSvgArrayObject(urlImage, imageId){ var svgArray = []; var urlToSvgFile = g_ucAdmin.urlToRelative(urlImage); var svgArrayObject = { id: imageId, library: 'svg', url: urlToSvgFile }; svgArray.push(svgArrayObject); return(svgArray); } /* * get svg data */ function setIconSvgData(urlImage, imageId){ var svgArray = setSvgArrayObject(urlImage, imageId); return(svgArray) } //hide icon chooser function hideIconChooseButton(objPickerWrapper){ var objChooseIconButton = objPickerWrapper.find('.unite-iconpicker-button'); if(!objChooseIconButton.length) return(false); objChooseIconButton.hide(); } //show icon chooser function showIconChooseButton(objPickerWrapper){ var objChooseIconButton = objPickerWrapper.find('.unite-iconpicker-button'); if(!objChooseIconButton.length) return(false); objChooseIconButton.show(); } /** * init svg picker */ function initSvgPicker(objInput){ var objPickerWrapper = objInput.parents(".unite-settings-iconpicker"); var objSvgButton = objPickerWrapper.find('.unite-iconpicker-button-svg'); if(!objSvgButton.length) return(false); objSvgButton.on('click', function(){ g_ucAdmin.openAddImageDialog("Choose Images",function(urlImage, imageId){ var fileName = urlImage.split('/').pop(); var fileExtension = fileName.split('.').pop(); if(fileExtension != 'svg'){ //show error showWrongSvgTypeError(objPickerWrapper); trace('Image needs to be svg type.') return(false); } //set data-name attr objInput.data('svg-name', fileName); //set data-src / data-id attr var urlToSvg = g_ucAdmin.urlToRelative(urlImage); objInput.data('svg-src', urlToSvg); objInput.data('svg-id', imageId); //put file name inside input objInput.val(fileName); //hide icon chooser hideIconChooseButton(objPickerWrapper); //get svg data setIconSvgData(urlImage, imageId); //disable input objInput.attr('disabled', 'disabled'); //set previe of selected icon inside button setSvgPreview(urlImage, objSvgButton, objPickerWrapper); //append clear input button appendClearInputButton(objPickerWrapper, objInput); objInput.trigger("change"); },false); }); } /** * remove icon preview */ function removeIconPreview(objPickerWrapper){ var objIconChooseButton = objPickerWrapper.find('.unite-iconpicker-button'); objIconChooseButton.html('choose'); } /** * clear input */ function onClearInputButtonClick(objPickerWrapper, objInput){ //clear input objInput.val(''); //remove svg preview removeSvgPreview(objPickerWrapper, objInput); //remove icon preview removeIconPreview(objPickerWrapper); //enable input objInput.removeAttr('disabled'); objInput.trigger("change"); } /** * init icon picker raw function */ function initIconPicker(objInput){ var iconsType = objInput.data("icons_type"); if(!iconsType) iconsType = "fa"; var objDialogWrapper = iconPicker_initDialog(iconsType); if(!objDialogWrapper || objDialogWrapper.length == 0){ trace("icon picker dialog not inited"); return(false); } var objPickerWrapper = objInput.parents(".unite-settings-iconpicker"); var objInput = objPickerWrapper.find('input.unite-iconpicker-input'); var objButton = objPickerWrapper.find('.unite-iconpicker-button'); var objTitle = objPickerWrapper.find('.unite-iconpicker-title'); //on button click objButton.on("click",function () { if (objDialogWrapper.dialog('isOpen')) { objDialogWrapper.dialog('close'); } else { objDialogWrapper.data("objpicker", objPickerWrapper); objDialogWrapper.dialog('open'); } }); //on input blur objInput.on('blur', function () { var value = jQuery(this).val(); if(iconsType == "fa") value = value.replace("fa fa-",""); value = jQuery.trim(value); var hashName = value+"_"+iconsType; if(!g_iconsHash[hashName]){ var text = "choose"; if(iconsType == "shape") text = "Choose Shape"; objButton.html(text); return(false); } var objIcon = g_iconsHash[hashName]; var iconTitle = objIcon.data("title"); var objType = iconPicker_getObjIconsType(iconsType); if(!objType.template) throw new Error("icon template not found"); if(typeof objType.template == "function") var htmlIcon = objType.template(value); else var htmlIcon = objType.template.replace("[icon]", value); objButton.html(htmlIcon); //set title if(iconTitle) objTitle.show().html(iconTitle); else objTitle.hide(); //set selected icon in dialog var objContainer = objDialogWrapper.find('.unite-iconpicker-dialog-icons-container'); objContainer.find('.icon-selected').removeClass('icon-selected'); objIcon.addClass('icon-selected'); }); objInput.trigger("blur"); } function ______POST_PICKER____(){} /** * init post picker */ function initPostPicker(objWrapper, data, selectedValue){ //fix select focus inside jquery ui dialogs g_ucAdmin.fixModalDialogSelect2(); objWrapper.removeData("post_picker_value"); var objSelect = objWrapper.find(".unite-setting-post-picker"); var postID = objSelect.data("postid"); var postTitle = objSelect.data("posttitle"); var placeholder = objSelect.data("placeholder"); if(!data){ var data = []; if(postID && postTitle){ data.push({ id:postID, text: postTitle }); } } var urlAjax = g_ucAdmin.getUrlAjax("get_posts_list_forselect"); objSelect.select2({ minimumInputLength:1, data:data, placeholder: placeholder, allowClear: true, ajax:{ url:urlAjax, dataType:"json" } }); //on change - trigger change event, only first time objSelect.on("change", function (e) { t.onSettingChange(null, objWrapper, false); }); //set the value if(selectedValue){ objSelect.val(selectedValues); objSelect.trigger('change'); } } /** * set post picker value */ function setPostPickerValue(objWrapper, value){ if(!value) var value = []; objWrapper.data("post_picker_value", value); if(jQuery.isArray(value) == false) value = [value]; //clear the picker if (value.length === 0) { initPostPicker(objWrapper); return(false); } //get titles then init var urlAjax = g_ucAdmin.getUrlAjax("get_select2_post_titles"); jQuery.get(urlAjax, { 'post_ids': value }).then(function (data) { var response = JSON.parse(data); var arrData = response.select2_data; initPostPicker(objWrapper, arrData, value); }); } /** * get post picker value */ function getPostPickerValue(objWrapper){ var value = objWrapper.data("post_picker_value"); if(value) return(value); var objSelect = objWrapper.find(".unite-setting-post-picker"); var value = objSelect.select2("val"); return(value); } function _______LINK_____(){} /** * init link */ function initLink(objInput){ var objRoot = objInput.closest(".unite-setting-link-wrapper"); var objToggle = objRoot.find(".unite-setting-link-toggle"); var objFields = objRoot.find(".unite-setting-link-fields"); objToggle.on("click", function(event){ event.preventDefault(); objFields.stop().slideToggle(); }); } /** * get link value */ function getLinkInputValue(objInput){ var objRoot = objInput.closest(".unite-setting-link-wrapper"); var url = objRoot.find(".unite-setting-link").val(); var external = objRoot.find(".unite-setting-link-external").prop("checked") ? "on" : ""; var nofollow = objRoot.find(".unite-setting-link-nofollow").prop("checked") ? "on" : ""; var attributes = objRoot.find(".unite-setting-link-attributes").val(); var value = { url: url, is_external: external, nofollow: nofollow, custom_attributes: attributes }; return value; } /** * set link value */ function setLinkInputValue(objInput, value){ var objRoot = objInput.closest(".unite-setting-link-wrapper"); if (typeof value === "string") value = { url: value }; objRoot.find(".unite-setting-link").val(value.url); objRoot.find(".unite-setting-link-external").prop("checked", value.is_external === "on"); objRoot.find(".unite-setting-link-nofollow").prop("checked", value.nofollow === "on"); objRoot.find(".unite-setting-link-attributes").val(value.custom_attributes); } /** * clear link value */ function clearLinkInputValue(objInput, defaultValue){ setLinkInputValue(objInput, { url: defaultValue }); } function _______ANIMATIONS_____(){} /** * on settings animation change, run the demo */ function onAnimationSettingChange(){ var objSelect = jQuery(this); var objParent = objSelect.parents("table"); if(objParent.length == 0) objParent = objSelect.parents("ul"); g_ucAdmin.validateDomElement(objParent, "Animation setting parent"); var objDemo = objParent.find(".uc-animation-demo span"); var animation = objSelect.val(); g_ucAdmin.validateDomElement(objDemo, "Animation setting demo"); var className = animation + ' animated'; objDemo.removeClass().addClass(className).one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){ jQuery(this).removeClass(); }); } /** * init animations selector settings */ function initAnimationsSelector(){ if(!g_objWrapper) return(false); var objInputs = getObjInputs(); //init animations var objAnimations = objInputs.find("select.uc-select-animation-type"); if(objAnimations.length == 0) return(false); objAnimations.change(onAnimationSettingChange); } function _____ITEMS_PANEL_____(){} /** * open the items manager in dialog */ function onItemsPanelEditItemsClick(){ var objButton = jQuery(this); var objSetting = objButton.parents(".uc-setting-items-panel"); var settingID = objSetting.prop("id"); var dialogID = settingID+"_dialog"; var objDialog = jQuery("#"+dialogID); g_ucAdmin.validateDomElement(objDialog, "items dialog"); var buttonOpts = {}; buttonOpts[g_uctext.update] = function(){ objDialog.dialog("close"); var objItemsWrapper = g_objParent.find(".uc-setting-items-panel"); t.onSettingChange(null, objItemsWrapper); }; var dialogOptions = { buttons:buttonOpts, minWidth:800, modal:true, dialogClass:"unite-ui", open:function(){ } }; objDialog.dialog(dialogOptions); } /** * init items panel setting */ function initItemsPanel(){ var objItemsWrapper = g_objParent.find(".uc-setting-items-panel"); if(objItemsWrapper.length == 0) return(false); if(objItemsWrapper.length != 1){ throw new Error("There must be only 1 items panel"); } g_temp.objItemsManager = new UCManagerAdmin(); g_temp.objItemsManager.initManager(); //side panel dialog var objButtonEditItems = objItemsWrapper.find(".uc-setting-items-panel-button"); if(objButtonEditItems.length){ objButtonEditItems.on("click",onItemsPanelEditItemsClick); } } function __________TYPOGRAPHY_PANEL__________(){} /** * clear typography dialog */ function clearTypography(objInput){ trace("clear typography"); } /** * open typography dialog */ function onTypographyButtonClick(){ var objButton = jQuery(this); var objInput = objButton.parents(".unite-settings-typography"); //show the dialog element var objTypographyDialog = getTypographyDialog(); objInput.append(objTypographyDialog); objTypographyDialog.show(); //set the settings } /** * on body click */ function onTypographyBodyClick(e){ //dialog not opened - close var objDialog = getTypographyDialog() if(objDialog.is(":hidden")) return(false); //dialog opened, click on the button or the dialog - close var objElement = jQuery(e.target); if(objElement.hasClass("unite-button-typography")){ return(false); } var objParentDialog = objElement.parents(".uc-dialog-typgoraphy"); if(objParentDialog.length) return(false); //hide the dialog objDialog.hide(); //apply the selectors var objInput = objDialog.parents(".unite-settings-typography"); if(objInput.length == 0) return(false); trace("apply the dialog selectors"); trace("move the values"); } /** * on typography selectors change */ function onTypgoraphySelectorsChange(){ var objDialog = getTypographyDialog(); var objSettings = objDialog.data("settings"); var cssSelectors = objSettings.getSelectorsCss(); trace(cssSelectors); trace("selectors change"); } /** * init the typography dialog */ function initTypographyDialog(){ var objDialog = getTypographyDialog(); if(objDialog.length == 0) throw new Error("missing typography dialog"); var isInited = objDialog.data("is_inited"); if(isInited === true) return(false); //init settings var objSettings = new UniteSettingsUC(); var objSettingsElement = objDialog.find(".unite-settings"); var options = {disable_exclude_selector: true}; objSettings.init(objSettingsElement, options); objSettings.setEventOnSelectorsChange(onTypgoraphySelectorsChange); objDialog.data("is_inited", true); objDialog.data("settings", objSettings); //init the body click event jQuery("body:not(.unite-button-typography)").on('click', onTypographyBodyClick); } /** * get the dialog */ function getTypographyDialog(){ var objDialog = g_objWrapper.find('.uc-dialog-typgoraphy'); if(objDialog.length == 0) throw new Error("typography dialog not found"); return(objDialog); } /** * init typography dialog */ function initTypography(objInput){ initTypographyDialog(); var objButton = objInput.find('.unite-button-typography'); //open dialog objButton.on('click', onTypographyButtonClick); } function __________FONTS_PANEL__________(){} /** * on font panel setting change */ function onFontPanelInputChange(event, objInput, isInstant){ if(!objInput) var objInput = jQuery(event.target); var objFontsWrapper = objInput.parents(".uc-setting-fonts-panel"); var type = getInputType(objInput); if(type == "color") checkColorInputOnchange(objInput); if(isInstant !== true){ updateInputChildPlaceholders(objInput); } //throw font panel setting change event t.onSettingChange(null, objFontsWrapper, isInstant); } /** * init fonts panel */ this.initFontsPanel = function(objFontsWrapper){ if(!objFontsWrapper) var objFontsWrapper = g_objParent.find(".uc-setting-fonts-panel"); if(objFontsWrapper.length == 0) return(false); //if init without parent if(!g_objParent) g_objParent = objFontsWrapper.parent(); g_temp.objFontsPanel = objFontsWrapper.find(".uc-fontspanel"); if(g_temp.objFontsPanel.length == 0){ g_temp.objFontsPanel = null; return(null); } //checkbox event g_temp.objFontsPanel.find(".uc-fontspanel-toggle").on("click",function(){ var objCheck = jQuery(this); var sectionID = objCheck.data("target"); var objSection = jQuery("#" + sectionID); g_ucAdmin.validateDomElement(objSection, "fonts panel section"); if(objCheck.is(":checked")){ objSection.show(); }else{ objSection.hide(); } }); //init inputs var objInputs = g_temp.objFontsPanel.find("input, select"); jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); var type = getInputType(objInput); initInputEvents(objInput, onFontPanelInputChange); }); return(g_temp.objFontsPanel); }; /** * get fonts panel data */ this.getFontsPanelData = function(){ if(!g_temp.objFontsPanel) return(null); var objData = {}; var objCheckboxes = g_temp.objFontsPanel.find(".uc-fontspanel-toggle"); jQuery.each(objCheckboxes, function(index, checkbox){ var objCheckbox = jQuery(checkbox); if(objCheckbox.is(":checked") == false) return(true); var sectionID = objCheckbox.data("target"); var sectionName = objCheckbox.data("sectionname"); var objSection = jQuery("#" + sectionID); g_ucAdmin.validateDomElement(objSection, "fonts panel section "+sectionID); //get fields values var objFields = objSection.find(".uc-fontspanel-field"); var fieldsValues = {}; jQuery.each(objFields, function(index, field){ var objField = jQuery(field); var fieldName = objField.data("fieldname"); var value = objField.val(); if(jQuery.trim(value) == "") return(true); fieldsValues[fieldName] = value; }); if(jQuery.isEmptyObject(fieldsValues) == false) objData[sectionName] = fieldsValues; }); return(objData); }; /** * set fonts panel data */ function setFontPanelData(objInput, arrData){ clearFontsPanelData(objInput); jQuery.each(arrData, function(sectionName, objFields){ //check toggle var objToggle = objInput.find(".uc-fontspanel-toggle-"+sectionName); if(objToggle.length == 0) return(true); objToggle.attr("checked","checked"); objToggle.prop("checked","checked"); //open section var sectionID = objToggle.data("target"); var objSection = jQuery("#"+sectionID); g_ucAdmin.validateDomElement(objSection, "section: "+sectionID); objSection.show(); //go through the section fields jQuery.each(objFields, function(fieldName, fieldValue){ var objInput = objSection.find(".uc-fontspanel-field[data-fieldname="+fieldName+"]"); if(!objInput || objInput.length == 0){ if(fieldName == "mobile-size") return(true); throw new Error("field not found: "+fieldName); } setInputValue(objInput, fieldValue); }); }); } /** * clear data */ function clearFontsPanelData(objInput){ //uncheck toggles var objToggles = objInput.find(".uc-fontspanel-toggle"); objToggles.removeAttr("checked"); objToggles.attr("checked",false); //hide fields var objSections = objInput.find(".uc-fontspanel-section"); objSections.hide(); //clear inputs var objInputs = objSections.find("input.uc-fontspanel-field"); objInputs.val(""); } /** * destroy fonts panel */ this.destroyFontsPanel = function(){ if(!g_temp.objFontsPanel) return(false); g_temp.objFontsPanel.find(".uc-fontspanel-toggle").off("click"); g_temp.objFontsPanel = null; } /** * destroy repeaters */ this.destroyRepeaters = function(){ var objRepeaterItems = g_objParent.find(".unite-repeater-item"); if(objRepeaterItems.length == 0) return(false); var objRepeaters = g_objParent.find(".unite-settings-repeater"); objRepeaters.sortable("destroy"); jQuery.each(objRepeaterItems, function(index, item){ var objItem = jQuery(item); var objSettings = objItem.data("itemsettings"); objSettings.destroy(); }); objRepeaterItems.find(".unite-repeater-item-head").off("click"); } function _______REPEATERS_____(){} /** * set repetaer values */ function setRepeaterValues(objWrapper, arrValues, takeDefault){ if(takeDefault === true) var arrValues = objWrapper.data("itemvalues"); var objItemsWrapper = objWrapper.find(".unite-repeater-items"); //clear existing objItemsWrapper.html(""); if(!arrValues) return(false); if(jQuery.isArray(arrValues) == false) return(false); jQuery.each(arrValues, function(index, objItemValues){ repeaterAddItem(null, objWrapper, objItemValues); }); } /** * get repeater values */ function getRepeaterValues(objWrapper){ var objItemsWrapper = objWrapper.find(".unite-repeater-items"); var objItems = objItemsWrapper.find(".unite-repeater-item"); var arrItemsValues = []; if(objItems.length == 0) return(arrItemsValues); jQuery.each(objItems, function(index, item){ var objItem = jQuery(item); var objSettings = objItem.data("objsettings"); var itemValues = objSettings.getSettingsValues(); arrItemsValues.push(itemValues); }); return(arrItemsValues); } /** * add repeater item */ function repeaterAddItem(event, objWrapper, objItemValues, objItemInsertAfter){ if(!objWrapper){ var objButton = jQuery(this); var objWrapper = objButton.parents(".unite-settings-repeater"); } var isNewItem = false; if(!objItemValues) isNewItem = true; var isDuplicated = false; if(objItemInsertAfter) isDuplicated = true; var objSettingsTemplate = objWrapper.find(".unite-repeater-template"); var objItemsWrapper = objWrapper.find(".unite-repeater-items"); var objEmptyText = objWrapper.find(".unite-repeater-emptytext") var objItems = objItemsWrapper.find(".unite-repeater-item"); g_ucAdmin.validateDomElement(objItemsWrapper, "items wrapper"); g_ucAdmin.validateDomElement(objSettingsTemplate, "settings template"); //close other items, if not duplicated if(isDuplicated == false) objItems.addClass("unite-item-closed"); //set item title if(isNewItem == false){ var itemTitle = objItemValues.title; }else{ var itemTitle = objWrapper.data("itemtitle"); if(!itemTitle) itemTitle = "Item"; var numItems = objItemsWrapper.children().length; var currentNumItem = numItems+1; itemTitle += " "+currentNumItem; } var deleteText = objWrapper.data("deletetext"); var duplicateText = objWrapper.data("duplicatext"); //append item var htmlSettingsTemplate = objSettingsTemplate.html(); var addClass = ""; if(objItemInsertAfter) addClass = " unite-item-closed"; var html = "<div class='unite-repeater-item"+addClass+"'>"; html += " <div class='unite-repeater-item-head'>"; html += " <a class='unite-repeater-trash unite-repeater-buttondelete' title='"+deleteText+"'><i class='fa fa-trash' aria-hidden='true'></i></a>"; html += " <a class='unite-repeater-duplicate unite-repeater-buttonduplicate' title='"+duplicateText+"'><i class='fa fa-clone' aria-hidden='true'></i></a>"; html += " <div class='unite-repeater-arrow'></div>"; html += " <span>" + itemTitle+"</span>"; html += " </div>"; html += " <div class='unite-repeater-item-settings'>"; html += htmlSettingsTemplate; html += " </div>"; html += "</div>"; objEmptyText.hide(); var objItem = jQuery(html); //change the id's var objItemSettingsWrapper = objItem.find(".unite_settings_wrapper"); g_ucAdmin.validateDomElement(objItemSettingsWrapper, "item settigns wrapper"); var objOptions = objItemSettingsWrapper.data("options"); //replace setting IDs var idPrefix = objOptions.id_prefix; var newID = idPrefix+"item_"+g_ucAdmin.getRandomString(5)+"_"; html = g_ucAdmin.replaceAll(html, idPrefix, newID); //put to the item again var objItem = jQuery(html); var objItemSettingsWrapper = objItem.find(".unite_settings_wrapper"); //change wrapper ID var settingsWrapperID = "unite_settings_repeater_"+newID; objItemSettingsWrapper.attr("id", settingsWrapperID); g_ucAdmin.validateDomElement(objItemSettingsWrapper, "item settigns wrapper"); if(objItemInsertAfter){ objItem.insertAfter(objItemInsertAfter); } else objItemsWrapper.append(objItem); var objHeadTitle = objItem.find(".unite-repeater-item-head span"); var objItemSettings = new UniteSettingsUC(); objItemSettings.init(objItemSettingsWrapper); var objInputTitle = objItemSettings.getInputByName("title"); objInputTitle.on("input",function(){ var objInput = jQuery(this); var value = objInput.val(); objHeadTitle.html(value); }); if(isNewItem == false){ objItemSettings.setValues(objItemValues); }else{ //if new item //Update item title input if available if(objInputTitle) objInputTitle.val(itemTitle); //update generated ID var objInputGeneratedID = objItemSettings.getInputByName("generated_id"); if(objInputGeneratedID){ var generatedID = g_ucAdmin.getRandomString(7); objInputGeneratedID.val(generatedID); } } objItem.data("objsettings", objItemSettings); t.onSettingChange(null, objWrapper); } /** * init repeater */ function initRepeater(objWrapper){ var objButtonAdd = objWrapper.find(".unite-repeater-buttonadd"); var objItemsWrapper = objWrapper.find(".unite-repeater-items"); var objEmptyText = objWrapper.find(".unite-repeater-emptytext") //init button objButtonAdd.on("click",repeaterAddItem); //init container sortable objWrapper.sortable({ items: ".unite-repeater-item", handle: ".unite-repeater-item-head", cursor: "move", axis: "y", update: function(event, ui){ var objItem = ui.item; t.onSettingChange(null, objWrapper); objItem.data("just_moved",true); } }); //head on click objWrapper.on("click", ".unite-repeater-item-head", function(){ var objHead = jQuery(this); var objItem = objHead.parents(".unite-repeater-item"); var justMoved = objItem.data("just_moved"); if(justMoved === true){ objItem.data("just_moved", false); return(true); } objItem.toggleClass("unite-item-closed"); }); //delete objWrapper.on("click", ".unite-repeater-buttondelete", function(){ var objButton = jQuery(this); var objItem = objButton.parents(".unite-repeater-item"); objItem.remove(); var numItems = objItemsWrapper.children().length; if(numItems == 0) objEmptyText.show(); t.onSettingChange(null, objWrapper); }); objWrapper.on("click", ".unite-repeater-buttonduplicate", function(){ var objButton = jQuery(this); var objItem = objButton.parents(".unite-repeater-item"); objItem.data("just_moved",true); var itemSettings = objItem.data("objsettings"); var settingsValues = itemSettings.getSettingsValues(); repeaterAddItem(null, objWrapper, settingsValues, objItem); }); } /** * init repeaters globally */ function initRepeaters(){ var objRepeaters = g_objWrapper.find(".unite-settings-repeater"); if(objRepeaters.length == 0) return(false); g_temp.isRepeaterExists = true; } function _______DIMENTIONS_____(){} /** * get dimentions setting value */ function dimentionsGetValues(objWrapper){ var objAllInputs = objWrapper.find("input"); var objUnits = objWrapper.find("select"); var data = {}; objAllInputs.each(function(index, input){ var objInput = jQuery(input); var value = objInput.val(); var pos = objInput.data("pos"); data[pos] = value; }); data["unit"] = objUnits.val(); return(data); } function _______CONTROLS_____(){} /** * get control action, according all the parents of the controlled children * isSingle == true - don't do recursion */ function getControlAction(parent, control){ var isEqual = iscValEQ(parent.value, control.value); var action = null; switch(control.type){ case "enable": case "disable": if(control.type == "enable" && !isEqual || control.type == "disable" && isEqual) action = "disable"; else action = "enable"; break; case "show": if(isEqual) action = "show"; else action = "hide"; break; case "hide": if(isEqual) action = "hide"; else action = "show"; break; } return(action); } /** * get action of multiple parents */ function getControlActionMultiple(parent, control, arrParents){ if(g_temp.cacheValues == null) g_temp.cacheValues = t.getSettingsValues(true); var isShow = null; var isEnable = null; var action = ""; var mainAction = ""; jQuery.each(arrParents, function(index, parentID){ //get action if(parentID == parent.id){ action = getControlAction(parent, control); mainAction = action; } else{ var objControl = g_arrControls[parentID][control.idChild]; var parentValue = g_temp.cacheValues[parentID]; var objParent = { id: parentID, value: parentValue }; action = getControlAction(objParent, objControl); } switch(action){ case "show": if(isShow === null) isShow = true; break; case "hide": isShow = false; break; case "enable": if(isEnable === null) isEnable = true; break; case "disable": isEnable = false; break; } }); if(isEnable === null && isShow === null) return(null); var outputShow = (isShow === true)?"show":"hide"; var outputEnable = (isEnable === true)?"enable":"disable"; if(isEnable !== null && isShow !== null){ if(mainAction == "show" || mainAction == "hide") return(outputShow); else return(outputEnable); } if(isShow !== null) return(outputShow); return(outputEnable); } /** * on selects change - impiment the hide/show, enabled/disables functionality */ function onControlSettingChange(event, input){ var debugControls = false; if(!input) input = this; var objInput = jQuery(input); var controlValue = getSettingInputValue(objInput); var controlID = input.name; if(!g_arrControls[controlID]) return(false); g_temp.cacheValues = null; var arrChildControls = g_arrControls[controlID]; if(debugControls == true){ trace("controls change"); trace("parent value: " + controlValue) trace(controlValue); } var objParent = { id: controlID, value: controlValue }; jQuery.each(arrChildControls, function(childName, objControl){ var objChildInput = jQuery(g_IDPrefix + childName); var rowID = g_IDPrefix + childName + "_row"; var objChildRow = jQuery(rowID); if(objChildRow.length == 0) return(true); var value = objControl.value; objControl.idChild = childName; //check multiple parents var arrParents = g_ucAdmin.getVal(g_arrChildrenControls, childName); if(arrParents) var action = getControlActionMultiple(objParent, objControl, arrParents); else var action = getControlAction(objParent, objControl); if(debugControls == true){ if(debugControls == true){ trace("setting: "+childName +" | value: "+value+" | action: " + action); } } var inputTagName = ""; if(objChildInput.length) inputTagName = objChildInput.get(0).tagName; var isChildRadio = (inputTagName == "SPAN" && objChildInput.length && objChildInput.hasClass("radio_wrapper")); switch(objControl.type){ case "enable": case "disable": if(objChildInput.length > 0){ //disable if(action == "disable"){ objChildRow.addClass("setting-disabled"); if(objChildInput.length) objChildInput.prop("disabled","disabled").css("color",""); if(isChildRadio) objChildInput.children("input").prop("disabled","disabled").addClass("disabled"); if(objChildInput.length && objChildInput.hasClass("unite-color-picker") && g_temp.colorPickerType == "spectrum") objChildInput.spectrum("disable"); }//enable else{ objChildRow.removeClass("setting-disabled"); if(objChildInput.length) objChildInput.prop("disabled",""); if(isChildRadio) objChildInput.children("input").prop("disabled","").removeClass("disabled"); //color the input again if(objChildInput.length && objChildInput.hasClass("unite-color-picker")){ if(g_colorPicker) g_colorPicker.linkTo(objChildInput); else if(g_temp.colorPickerType == "spectrum") objChildInput.spectrum("enable"); } } } break; case "show": case "hide": if(action == "show") objChildRow.removeClass("unite-setting-hidden"); else objChildRow.addClass("unite-setting-hidden"); break; } }); } /** * apply controls if available */ function applyControls(){ if(!g_objParent) return(false); g_objParent.find("select").trigger("change"); g_objParent.find("input[type='radio']:checked").trigger("change"); } function _______RESPNSIVE_ICONS_____(){} /** * on icon click */ function onResponsiveIconClick(){ var objIcon = jQuery(this); var iconsWrapper = objIcon.parents('.unite-settings-responsive-wrapper'); var responsiveIdHolder = iconsWrapper.parents('li.unite-setting-row'); var responsiveId = responsiveIdHolder.data("responsiveid"); //open icons if closed if(iconsWrapper.hasClass('unite-settings-responsive-wrapper__open') == false){ iconsWrapper.addClass('unite-settings-responsive-wrapper__open') return; } //change click, change the responsive type iconsWrapper.removeClass('unite-settings-responsive-wrapper__open'); var selectedDevice = objIcon.data("device"); //hide other rows var rowElements = jQuery(responsiveIdHolder).parents('ul.unite-list-settings').find('li[data-responsiveid="'+responsiveId+'"]'); rowElements.addClass('uc-responsive-hidden'); //show the device row var deviceRow = rowElements.filter('.unite-setting-row__'+selectedDevice); deviceRow.removeClass('uc-responsive-hidden'); } /** * init responsive icons */ function initResponsiveIcons(){ var objInputs = getObjInputs(); var objIcons = objInputs.find(".unite-settings-responsive-icon"); objIcons.on("click", onResponsiveIconClick); } function _________SELECTORS__________(){} /** * get selectors css */ function getTypographySelectorsCss(objInput){ var css = ""; var objDialog = getTypographyDialog(); var objSelectedValues = objDialog.find(':selected'); objSelectedValues.each(function(){ var objSelected = jQuery(this); var selectedIndex = objSelected.index(); //if first option selected - ignore if(selectedIndex == 0) return(true); var selectedValue = objSelected.val(); var selectedCssProperty = objSelected.parents('select').data('fieldname'); css += selectedCssProperty+':'+selectedValue+';'; }); return(css); } /** * check if the input has selector */ function isInputHasSelector(objInput){ var objSelectors = objInput.data("selectors"); if(objSelectors) return(true); return(false); } /** * get input selector css */ function getInputSelectorCss(objInput){ var objSelectors = objInput.data("selectors"); if(!objSelectors) return(null); var selector = g_ucAdmin.getVal(objSelectors,"selector"); var selectorCss = null; if(!selector){ // selector = g_ucAdmin.getVal(objSelectors,"selector"); jQuery.each(objSelectors, function(selectorNum, selectorVal){ //find last value var lastValue = Object.values(objSelectors).pop(); //if last value, then no coma after value if(selectorVal == lastValue) selector += selectorVal else selector += selectorVal+',' }); var type = getInputType(objInput); switch(type){ case "typography": selectorCss = getTypographySelectorsCss(objInput); break; default: return(null); break; } } if(!selectorCss) var selectorCss = g_ucAdmin.getVal(objSelectors,"selector_value"); var value = getSettingInputValue(objInput); if(typeof value == "object"){ trace("handle obj value for selector"); return(false); } //for empty value, skip if(value == "") return(""); //var type = getInputType(objInput); selectorCss = g_ucAdmin.replaceAll(selectorCss, "{{VALUE}}", value); selectorCss = g_ucAdmin.replaceAll(selectorCss, "{{SIZE}}", value); //temporary work around, will be switched later selectorCss = g_ucAdmin.replaceAll(selectorCss, "{{UNIT}}", "px"); var outputCss = selector+"{"+selectorCss+"}"; return(outputCss); } /** * get selectors css */ this.getSelectorsCss = function(){ var objInputs = getObjInputs(); var css = ""; jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); var inputCss = getInputSelectorCss(objInput); if(inputCss) css += inputCss+"\n"; }); return(css); } function _______EVENTS_____(){} /** * update events (in case of ajax set) */ this.updateEvents = function(){ initSettingsEvents(); initTipsy("s"); if(typeof g_objProvider.onSettingsUpdateEvents == "function") g_objProvider.onSettingsUpdateEvents(g_objParent); }; /** * set on change event, this function should run before init */ this.setEventOnChange = function(func){ t.onEvent(t.events.CHANGE, func); }; /** * set on change event, this function should run before init */ this.setEventOnSelectorsChange = function(func){ t.onEvent(t.events.SELECTORS_CHANGE, func); }; /** * update input child placeholders if avilable */ function updateInputChildPlaceholders(objInput){ if(!objInput) return(false); if(objInput.length == 0) return(false); var type = getInputType(objInput); if(type == "range") objInput = getRangeInput(objInput); var arrPlaceholderGroup = objInput.data("placeholder_group"); if(!arrPlaceholderGroup) return(false); if(jQuery.isArray(arrPlaceholderGroup) == false) return(false); var valuePrev = ""; jQuery.each(arrPlaceholderGroup, function(index, inputID){ var objChildInput = jQuery("#" + inputID); if(objChildInput.length == 0) throw new Error("input not found with id: " + inputID); if(index > 0){ objChildInput.attr("placeholder", valuePrev); objChildInput.trigger("placeholder_change"); } var value = objChildInput.val(); if(value !== "") valuePrev = value; }); } /** * run on setting change */ this.onSettingChange = function(event, objInput, isInstantChange){ if(g_temp.enableTriggerChange == false) return(true); var dataOldValue = "unite_setting_oldvalue"; if(isInstantChange == true) dataOldValue = "unite_setting_oldvalue_instant"; if(!objInput) var objInput = jQuery(event.target); if(!objInput || objInput.length == 0) return(true); var type = getInputType(objInput); if(!type) return(true); if(type == "color") checkColorInputOnchange(objInput); var value = getSettingInputValue(objInput); switch(type){ case "radio": case "select": case "fonts": case "items": case "map": break; default: //check by value var oldValue = objInput.data(dataOldValue); if(value === oldValue) return(true); objInput.data(dataOldValue, value); break; } //trigger event by type var isHasSelector = isInputHasSelector(objInput); if(isHasSelector == true){ //selectors change only apply to instant change //if(isInstantChange != true) //return(true); eventToTrigger = t.events.SELECTORS_CHANGE; } else{ var eventToTrigger = t.events.CHANGE; if(isInstantChange == true) eventToTrigger = t.events.INSTANT_CHANGE; } var name = getInputName(objInput); triggerEvent(eventToTrigger, {"name": name, "value": value}); }; /** * trigger event */ function triggerEvent(eventName, params){ if(!params) var params = null; if(g_objParent) g_objParent.trigger(eventName, params); } /** * on event name */ this.onEvent = function(eventName, func){ validateInited(); g_objParent.on(eventName,func); }; /** * combine controls to one object, and init control events. */ function initControls(){ if(!g_objWrapper) return(false); var objControls = g_objWrapper.data("controls"); if(!objControls) return(false); g_objWrapper.removeAttr("data-controls"); g_arrControls = objControls.parents; g_arrChildrenControls = objControls.children; //init events g_objParent.find("select, input[type='radio'], input.unite-setting-addonpicker").change(onControlSettingChange); } /** * init image chooser */ this.initImageChooser = function(objImageSettings){ if(objImageSettings.length == 0) return(false); objImageSettings.find(".unite-setting-image-preview").on("click",onChooseImageClick); objImageSettings.find(".unite-button-choose").on("click",onChooseImageClick); objImageSettings.find(".unite-button-clear").on("click",onClearImageClick); var objInput = objImageSettings.find("input"); objInput.change(setImagePreview); }; /** * init mp3 chooser */ this.initMp3Chooser = function(objMp3Setting){ if(objMp3Setting.length == 0) return(false); objMp3Setting.find(".unite-button-choose").on("click",onChooseMp3Click); }; /** * trigger on keyup */ this.triggerKeyupEvent = function(objInput, event, funcChange){ if(!funcChange) funcChange = t.onSettingChange; if(g_temp.enableTriggerChange == false) return(true); //run instant funcChange(event, objInput, true); g_ucAdmin.runWithTrashold(funcChange, event, objInput); }; /** * init single input event */ function initInputEvents(objInput, funcChange){ if(!funcChange) funcChange = t.onSettingChange; var type = getInputType(objInput); var basicType = getInputBasicType(objInput); //init by type switch(type){ case "color": initColorPickerInputEvents(objInput, funcChange); break; case "icon": initIconPicker(objInput); initSvgPicker(objInput); break; case "range": initRangeInput(objInput, funcChange); break; case "map": initMapPicker(objInput); break; case "addon": initAddonPicker(objInput); break; case "repeater": initRepeater(objInput); break; case "post": initPostPicker(objInput); break; case "multiselect": objInput.on("input", funcChange); break; case "select2": initSelect2(objInput) break; case "gallery": initGallery(objInput); break; case "typography": initTypography(objInput); break; case "link": initAddFieldsEvents(objInput); break; default: //custom setting var objCustomType = getCustomSettingType(type); if(objCustomType){ if(objCustomType.funcInit) objCustomType.funcInit(objInput, t); } else //provider setting g_ucAdmin.initProviderSettingEvents(type, objInput); break; } //init by base type switch(basicType){ case "checkbox": case "radio": objInput.on("click",funcChange); break; case "div": //special types break; default: objInput.change(funcChange); objInput.on("keyup", function(event){ t.triggerKeyupEvent(objInput, event, funcChange); }); break; } } /** * init settings events */ function initSettingsEvents(){ var objInputs = getObjInputs(); jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); initInputEvents(objInput); }); //init image input events var objImageSettings = g_objParent.find(".unite-setting-image"); t.initImageChooser(objImageSettings); //init mp3 input events var objMp3Settings = g_objParent.find(".unite-setting-mp3"); t.initMp3Chooser(objMp3Settings); //init link events var objLinkSettings = g_objParent.find(".unite-setting-link"); initLink(objLinkSettings); initControls(); } /** * init setting additional fields events, trigger event of the base field * on additional fields change */ function initAddFieldsEvents(objBaseInput){ var objWrapper = objBaseInput.closest(".unite-setting-input"); var objAddInputs = objWrapper.find("input").not(objBaseInput); jQuery.each(objAddInputs, function(index, addinput){ var objAddInput = jQuery(addinput); initInputEvents(objAddInput, function(event, objInput, isInstant){ t.onSettingChange(event, objBaseInput, isInstant); }); }); } /** * init global events - not repeating */ function initGlobalEvents(){ g_ucAdmin.onEvent("update_assets_path", onUpdateAssetsPath); } /** * init options */ function initOptions(){ if(!g_objWrapper) return(false); var objOptions = g_objWrapper.data("options"); if(typeof objOptions != "object") throw new Error("The options should be an object"); g_objWrapper.removeAttr("data-options"); var arrOptions = ["show_saps","saps_type","id_prefix"]; jQuery.each(arrOptions, function(index, optionKey){ g_options[optionKey] = g_ucAdmin.getVal(objOptions, optionKey, g_options[optionKey]); //delete option key objOptions[optionKey] = true; delete objOptions[optionKey]; }); //merge with other options jQuery.extend(g_options, objOptions); if(g_options["id_prefix"]) g_IDPrefix = "#"+g_options["id_prefix"]; } /** * update placeholders */ this.updatePlaceholders = function(objPlaceholders){ if(!g_objParent) return(false); jQuery.each(objPlaceholders, function(key, value){ var objInput = t.getInputByName(key); if(!objInput) return(true); objInput.attr("placeholder", value); objInput.trigger("placeholder_change"); }); }; /** * focus first input */ this.focusFirstInput = function(){ var objInputs = getObjInputs(); jQuery.each(objInputs, function(index, input){ var objInput = jQuery(input); var type = getInputType(objInput); switch(type){ case "textarea": case "text": objInput.focus(); return(false); break; } }); }; /** * destroy settings object */ this.destroy = function(){ g_ucAdmin.offEvent("update_assets_path"); var objInputs = g_objParent.find("input,textarea,select").not("input[type='radio']"); objInputs.off("change"); var objInputsClick = g_objParent.find("input[type='radio']"); objInputsClick.off("click"); var objImageSettings = g_objParent.find(".unite-setting-image"); //destroy image events: if(objImageSettings.length){ objImageSettings.find(".unite-button-choose").off("click"); objImageSettings.find(".unite-button-clear").off("click"); objImageSettings.find("input").off("change"); } //destroy control events g_objParent.find("select, input").off("change"); //destroy loaded events g_objParent.off(t.events.CHANGE); //destroy tabs events if(g_objSapTabs) g_objSapTabs.children("a").off("click"); //destroy accordion events if(g_objWrapper){ var objAccordionItems = g_objWrapper.find(".unite-postbox .unite-postbox-title"); if(objAccordionItems.length) objAccordionItems.off("click"); } g_objProvider.destroyEditors(t); //null parent object so it won't pass the validation if(g_objParent.length){ g_objParent.html(""); } //destroy items manager if(g_temp.objItemsManager){ g_temp.objItemsManager.destroy(); g_temp.objItemsManager = null; g_objParent.find(".uc-setting-items-panel-button").off("click"); } if(g_temp.objFontsPanel) t.destroyFontsPanel(); if(g_temp.isRepeaterExists == true) t.destroyRepeaters(); //destroy icon pickers g_objParent.find(".unite-settings-iconpicker input").off("blur"); g_objParent.find(".unite-iconpicker-button").off("blur"); //destroy custom setting types var objCustomTypes = getCustomSettingType(); if(objCustomTypes){ jQuery.each(objCustomTypes, function(index, objType){ if(objType.funcDestroy && g_objParent && g_objParent.length) objType.funcDestroy(g_objParent); }); } //destroy addon picker g_objParent.find(".unite-addonpicker-button").off("click"); g_objParent.find(".unite-button-primary, .unite-button-secondary").off("click"); g_objParent = null; }; /** * set id prefix */ this.setIDPrefix = function(idPrefix){ g_IDPrefix = "#"+idPrefix; }; /** * get id prefix */ this.getIDPrefix = function(){ return(g_IDPrefix); }; /** * get wrapper */ this.getObjWrapper = function(){ return(g_objParent); }; /** * return if the settings are in sidebar */ this.isSidebar = function(){ return(g_temp.isSidebar); }; /** * run custom command */ this.runCommand = function(command){ switch(command){ case "open_items_panel": var objButton = g_objParent.find(".uc-setting-items-panel-button"); if(objButton.length) objButton.trigger("click"); break; } }; /** * add custom type * fields: type, funcInit, funcSetValue, funcGetValue, funcClearValue */ this.addCustomSettingType = function(type, objType){ g_ucAdmin.validateObjProperty(objType, ["funcInit", "funcSetValue", "funcGetValue", "funcClearValue", "funcDestroy", ],"custom setting type object"); var objCustomSettings = getCustomSettingType(); var existing = g_ucAdmin.getVal(objCustomSettings, type); if(existing) throw new Error("The custom settings type: "+type+" alrady exists"); objCustomSettings[type] = objType; g_ucAdmin.storeGlobalData(g_temp.customSettingsKey, objCustomSettings); }; /** * init the settings function, set the tootips on sidebars. */ this.init = function(objParent, options){ if(!g_ucAdmin) g_ucAdmin = new UniteAdminUC(); g_objParent = objParent; if(g_objParent.length > 1){ trace(g_objParent); throw new Error("Settings object can't be inited with too many parents"); } //init settings wrapper if(g_objParent.hasClass("unite_settings_wrapper") == true) g_objWrapper = g_objParent; else{ g_objWrapper = g_objParent.children(".unite_settings_wrapper"); } if(g_objWrapper.length == 0) g_objWrapper = g_objParent.parents(".unite_settings_wrapper"); if(g_objWrapper.length == 0) g_objWrapper = null; //set if sidebar if(g_objWrapper && g_objWrapper.hasClass("unite-settings-sidebar")) g_temp.isSidebar = true; if(g_objWrapper) g_temp.settingsID = g_objWrapper.prop("id"); g_temp.enableTriggerChange = false; g_temp.disableExcludeSelector = g_ucAdmin.getVal(options, "disable_exclude_selector"); validateInited(); initOptions(); initColorPicker(); //put the color picker automatically initAnimationsSelector(); initItemsPanel(); initRepeaters(); initResponsiveIcons(); t.initFontsPanel(); initGlobalEvents(); t.updateEvents(); initSaps(); t.clearSettingsInit(); g_objProvider.initEditors(t); g_temp.isInited = true; g_temp.enableTriggerChange = true; }; } // UniteSettings class end