";
html += " ";
html += "
";
html += objSettingsTemplate.html();
html += "
";
html += "
";
// change item settings IDs
var objItem = jQuery(html);
var objItemSettingsWrapper = objItem.find(".unite_settings_wrapper");
g_ucAdmin.validateDomElement(objItemSettingsWrapper, "item settings wrapper");
var options = objItemSettingsWrapper.data("options");
var idPrefix = options.id_prefix;
var newID = idPrefix + "item_" + itemValues._generated_id + "_";
html = g_ucAdmin.replaceAll(html, idPrefix, newID);
// change item settings wrapper ID
objItem = jQuery(html);
objItemSettingsWrapper = objItem.find(".unite_settings_wrapper");
objItemSettingsWrapper.attr("id", "unite_settings_repeater_" + newID);
if (objItemInsertAfter)
objItemInsertAfter.after(objItem);
else
objItemsWrapper.append(objItem);
// init item settings
var objSettings = new UniteSettingsUC();
objSettings.init(objItemSettingsWrapper);
objSettings.setValues(itemValues);
objItem.data("objsettings", objSettings);
// init item title change
var objTitleInput = objSettings.getInputByName("title");
var objItemTitle = objItem.find(".unite-repeater-item-title");
objTitleInput.on("input", function () {
var value = objTitleInput.val();
objItemTitle.text(value);
});
t.onSettingChange(null, objWrapper);
}
/**
* destroy repeater items
*/
function destroyRepeaterItems(objWrapper) {
objWrapper.find(".unite-repeater-item").each(function () {
var objItem = jQuery(this);
objItem.data("objsettings").destroy();
objItem.find(".unite-repeater-item-title").off("click");
objItem.find(".unite-repeater-item-delete").off("click");
objItem.find(".unite-repeater-item-duplicate").off("click");
objItem.remove();
});
}
/**
* destroy repeaters
*/
function destroyRepeaters() {
g_objWrapper.find(".unite-repeater").sortable("destroy");
g_objWrapper.find(".unite-repeater-add").off("click");
g_objWrapper.find(".unite-setting-repeater").each(function () {
destroyRepeaterItems(jQuery(this));
});
}
/**
* get repeater values
*/
function getRepeaterValues(objWrapper) {
var values = [];
objWrapper.find(".unite-repeater-item").each(function () {
var itemValues = jQuery(this).data("objsettings").getSettingsValues();
values.push(itemValues);
});
return values;
}
/**
* set repeater values
*/
function setRepeaterValues(objWrapper, values, useDefault) {
destroyRepeaterItems(objWrapper);
if (useDefault === true)
values = objWrapper.data("itemvalues");
if (jQuery.isArray(values) === false)
return;
jQuery.each(values, function (index, itemValues) {
addRepeaterItem(null, objWrapper, itemValues);
});
}
function _______SWITCHER_____(){}
/**
* init switcher
*/
function initSwitcher(objWrapper, funcChange) {
objWrapper.on("click", function () {
objWrapper.toggleClass("unite-checked");
funcChange(null, objWrapper);
});
}
/**
* get switcher value
*/
function getSwitcherValue(objWrapper) {
var checkedValue = objWrapper.data("checkedvalue");
var uncheckedValue = objWrapper.data("uncheckedvalue");
return objWrapper.hasClass("unite-checked") ? checkedValue : uncheckedValue;
}
/**
* set switcher value
*/
function setSwitcherValue(objWrapper, value) {
var checkedValue = objWrapper.data("checkedvalue");
checkedValue = g_ucAdmin.strToBool(checkedValue);
value = g_ucAdmin.strToBool(value);
objWrapper.toggleClass("unite-checked", value === checkedValue);
}
function _______CONTROLS_____(){}
/**
* get control action
*/
function getControlAction(parent, control) {
var isEqual = isInputValuesEqual(parent.value, control.value);
var action = null;
switch (control.type) {
case "enable":
case "disable":
if ((control.type === "enable" && isEqual === true)
|| (control.type === "disable" && isEqual === false))
action = "enable";
else
action = "disable";
break;
case "show":
case "hide":
if ((control.type === "show" && isEqual === true)
|| (control.type === "hide" && isEqual === false))
action = "show";
else
action = "hide";
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 action = null;
var mainAction = null;
var isShow = null;
var isEnable = null;
jQuery.each(arrParents, function (index, parentID) {
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;
var showAction = (isShow === true) ? "show" : "hide";
var enableAction = (isEnable === true) ? "enable" : "disable";
if (isEnable !== null && isShow !== null) {
if (mainAction === "show" || mainAction === "hide")
return showAction;
return enableAction;
}
if (isShow !== null)
return showAction;
return enableAction;
}
/**
* process control setting change
*/
function processControlSettingChange(objInput) {
var allowedTypes = ["select", "select2", "radio", "switcher"];
var controlType = getInputType(objInput);
if (jQuery.inArray(controlType, allowedTypes) === -1)
return;
var controlID = getInputName(objInput);
if (!controlID)
return;
if (!g_arrControls[controlID])
return;
var controlValue = getSettingInputValue(objInput);
var arrChildControls = g_arrControls[controlID];
g_temp.cacheValues = null;
var objParent = {
id: controlID,
value: controlValue
};
jQuery.each(arrChildControls, function (childName, objControl) {
var isSap = g_ucAdmin.getVal(objControl, "forsap");
var rowID;
var objChildInput = null;
if (isSap === true) { //sap
rowID = g_IDPrefix + "ucsap_" + childName;
} else { //setting
rowID = g_IDPrefix + childName + "_row";
objChildInput = jQuery(g_IDPrefix + childName);
}
var objChildRow = jQuery(rowID);
if (objChildRow.length === 0)
return;
objControl.idChild = childName;
// check multiple parents
var arrParents = g_ucAdmin.getVal(g_arrChildrenControls, childName);
var action;
if (arrParents)
action = getControlActionMultiple(objParent, objControl, arrParents);
else
action = getControlAction(objParent, objControl);
var isChildRadio = false;
var isChildColor = false;
if (objChildInput && objChildInput.length > 0) {
var inputTagName = objChildInput.get(0).tagName;
isChildRadio = inputTagName === "SPAN" && objChildInput.hasClass("unite-radio-wrapper");
isChildColor = objChildInput.hasClass("unite-color-picker");
}
switch (objControl.type) {
case "enable":
case "disable":
var isDisable = (action === "disable");
objChildRow.toggleClass("setting-disabled", isDisable);
if (!objChildInput)
return;
objChildInput.prop("disabled", isDisable);
if (isChildRadio === true) {
objChildInput
.children("input")
.prop("disabled", isDisable)
.toggleClass("disabled", isDisable);
} else if (isChildColor === true) {
if (g_temp.colorPickerType === "spectrum")
objChildInput.spectrum(isDisable ? "disable" : "enable");
if (isDisable === false && g_colorPicker)
g_colorPicker.linkTo(objChildInput);
}
break;
case "show":
case "hide":
var isShow = (action === "show");
var isHidden = objChildRow.hasClass("unite-setting-hidden");
objChildRow.toggleClass("unite-setting-hidden", !isShow);
if (!objChildInput)
return;
t.disableTriggerChange();
jQuery.each(objChildInput, function () {
var objInput = jQuery(this);
var value = getSettingInputValue(objInput);
if (isShow === true && isHidden === true) {
value = objInput.data("previous-value") || value;
setInputValue(objInput, value);
return;
}
if (isShow === false && isHidden === false) {
objInput.data("previous-value", value);
clearInput(objInput);
}
});
t.enableTriggerChange();
break;
}
});
}
function _______RESPONSIVE_PICKER_____(){}
/**
* init responsive picker
*/
function initResponsivePicker() {
g_objWrapper.find(".unite-responsive-picker").each(function () {
var objPicker = jQuery(this);
objPicker.on("change", function () {
var type = objPicker.val();
t.setResponsiveType(type);
triggerEvent(t.events.RESPONSIVE_TYPE_CHANGE, [type]);
});
initSelect2(objPicker, {
dropdownParent: objPicker.parent(),
});
});
t.setResponsiveType("desktop");
}
/**
* get responsive picker id for element
*/
function getResponsivePickerId(objElement) {
return objElement.closest(".unite-setting-row").data("responsive-id");
}
/**
* get responsive picker value for element
*/
function getResponsivePickerValue(objElement) {
return objElement.closest(".unite-setting-row").data("responsive-type") || "desktop";
}
function _______UNITS_PICKER_____(){}
/**
* init units picker
*/
function initUnitsPicker() {
g_objWrapper.find(".unite-units-picker").each(function () {
var objPicker = jQuery(this);
initSelect2(objPicker, {
dropdownParent: objPicker.parent(),
});
objPicker.on("change", function () {
var value = objPicker.val();
var onChange = objPicker.data("on_change");
if (typeof onChange === "function")
onChange(value);
});
});
}
/**
* get units picker for element
*/
function getUnitsPickerForElement(objElement) {
return objElement.closest(".unite-setting-row").find(".unite-units-picker");
}
/**
* get units picker value for element
*/
function getUnitsPickerValue(objElement) {
return getUnitsPickerForElement(objElement).val() || "px";
}
/**
* set units picker value for element
*/
function setUnitsPickerValue(objElement, value) {
getUnitsPickerForElement(objElement).val(value).trigger("change.select2");
}
/**
* set units picker change handler
*/
function setUnitsPickerChangeHandler(objElement, handler) {
getUnitsPickerForElement(objElement).data("on_change", handler);
}
function _________SELECTORS__________(){}
/**
* get selectors includes
*/
this.getSelectorsIncludes = function () {
var objInputs = getObjInputs();
var includes = {};
jQuery.each(objInputs, function () {
var objInput = jQuery(this);
var type = getInputType(objInput);
var inputIncludes = {};
switch (type) {
case "typography":
inputIncludes = getTypographySelectorIncludes(objInput);
break;
}
if (inputIncludes)
jQuery.extend(includes, inputIncludes);
});
return includes;
}
/**
* get selectors css
*/
this.getSelectorsCss = function () {
var objInputs = getObjInputs();
var css = "";
jQuery.each(objInputs, function () {
var objInput = jQuery(this);
// skip hidden/disabled setting
if (objInput.closest(".unite-setting-row").hasClass("unite-setting-hidden") === true)
return;
var type = getInputType(objInput);
var style;
switch (type) {
case "repeater":
style = processRepeaterSelectors(objInput);
break;
default:
style = processInputSelectors(objInput);
break;
}
if (style)
css += style;
});
return css;
}
/**
* prepare selector
*/
function prepareSelector(selector) {
return selector
.split(",")
.map(function (selector) {
selector = selector.trim();
if (g_selectorWrapperID)
selector = "#" + g_selectorWrapperID + " " + selector;
return selector;
})
.join(",");
}
/**
* combine selectors
*/
function combineSelectors(selectors) {
return Object.keys(selectors).join(",");
}
/**
* process selector replaces
*/
function processSelectorReplaces(css, replaces) {
jQuery.each(replaces, function (placeholder, replace) {
if (typeof replace === "string" || typeof replace === "number") {
css = g_ucAdmin.replaceAll(css, placeholder.toLowerCase(), replace);
css = g_ucAdmin.replaceAll(css, placeholder.toUpperCase(), replace);
}
});
return css;
}
/**
* get selectors style
*/
function getSelectorsStyle(selectors, replaces) {
var style = "";
for (var selector in selectors) {
var value = selectors[selector];
var css = processSelectorReplaces(value, replaces);
style += selector + "{" + css + "}";
}
return style;
}
/**
* get dimentions selector replaces
*/
function getDimentionsSelectorReplaces(value) {
return {
"{{top}}": value.top + value.unit,
"{{right}}": value.right + value.unit,
"{{bottom}}": value.bottom + value.unit,
"{{left}}": value.left + value.unit
};
}
/**
* get image selector replaces
*/
function getImageSelectorReplaces(value) {
value.url = g_ucAdmin.urlToFull(value.url);
if (!value.url)
return;
return { "{{value}}": value.url };
}
/**
* get range slider selector replaces
*/
function getRangeSliderSelectorReplaces(value) {
if (!value.size)
return;
return {
"{{value}}": value.size + value.unit,
"{{size}}": value.size,
"{{unit}}": value.unit
};
}
/**
* get input selector replaces
*/
function getInputSelectorReplaces(objInput) {
var value = getSettingInputValue(objInput);
if (!value)
return;
var type = getInputType(objInput);
switch (type) {
case "dimentions":
return getDimentionsSelectorReplaces(value);
case "image":
return getImageSelectorReplaces(value);
case "range":
return getRangeSliderSelectorReplaces(value);
}
return { "{{value}}": value };
}
/**
* determine if the input has selector
*/
function isInputHasSelector(objInput) {
var groupSelector = objInput.data("group-selector");
if (groupSelector)
return true;
var selectors = objInput.data("selectors");
if (selectors)
return true;
return false;
}
/**
* get input selectors
*/
function getInputSelectors(objInput) {
var selectors = objInput.data("selectors");
if (!selectors)
return {};
var keys = ["selector", "selector1", "selector2", "selector3"];
var data = {};
for (var index in keys) {
var key = keys[index];
var selector = g_ucAdmin.getVal(selectors, key);
var selectorValue = g_ucAdmin.getVal(selectors, key + "_value");
if (!selector)
continue;
selector = prepareSelector(selector);
data[selector] = selectorValue;
}
return data;
}
/**
* process input selectors
*/
function processInputSelectors(objInput) {
var groupSelector = objInput.data("group-selector");
if (groupSelector)
return; // skip individual input and process the group at once
var selectors = getInputSelectors(objInput);
if (jQuery.isEmptyObject(selectors) === true)
return;
var type = getInputType(objInput);
var style;
switch (type) {
case "group_selector":
style = getGroupSelectorsStyle(objInput, selectors);
break;
case "typography":
case "textshadow":
case "boxshadow":
case "css_filters":
style = getSubSettingsSelectorsStyle(objInput, selectors);
break;
default:
style = getInputSelectorsStyle(objInput, selectors);
break;
}
if (!style)
return;
var device = getResponsivePickerValue(objInput);
switch (device) {
case "tablet":
style = "@media(max-width:1024px){" + style + "}";
break;
case "mobile":
style = "@media(max-width:768px){" + style + "}";
break;
}
return style;
}
/**
* process repeater selectors
*/
function processRepeaterSelectors(objWrapper) {
var style = "";
objWrapper.find(".unite-repeater-item").each(function () {
var objSettings = jQuery(this).data("objsettings");
objSettings.setSelectorWrapperID(g_selectorWrapperID);
var value = objSettings.getSettingsValues();
var css = objSettings.getSelectorsCss();
css = processSelectorReplaces(css, { "{{current_item}}": ".elementor-repeater-item-" + value._generated_id });
style += css;
});
return style;
}
/**
* get group selectors style
*/
function getGroupSelectorsStyle(objWrapper, selectors) {
var selectorReplace = objWrapper.data("replace");
var replaces = {};
for (var selectorPlaceholder in selectorReplace) {
var inputName = selectorReplace[selectorPlaceholder];
var objInput = t.getInputByName(inputName);
var inputReplaces = getInputSelectorReplaces(objInput);
// skip processing if the input is empty
if (!inputReplaces)
return;
// only inputs that have the "value" placeholder are currently supported
replaces[selectorPlaceholder] = processSelectorReplaces("{{value}}", inputReplaces);
}
return getSelectorsStyle(selectors, replaces);
}
/**
* get sub settings selectors style
*/
function getSubSettingsSelectorsStyle(objWrapper, selectors) {
var css = objWrapper.data("css") || "";
var selector = combineSelectors(selectors);
css = processSelectorReplaces(css, { "{{selector}}": selector });
return css;
}
/**
* get input selectors style
*/
function getInputSelectorsStyle(objInput, selectors) {
var replaces = getInputSelectorReplaces(objInput);
if (!replaces)
return;
return getSelectorsStyle(selectors, replaces);
}
function _______EVENTS_____(){}
/**
* update events (in case of ajax set)
*/
this.updateEvents = function(){
initControls();
initSettingsEvents();
initTipsy();
if(typeof g_objProvider.onSettingsUpdateEvents == "function")
g_objProvider.onSettingsUpdateEvents(g_objParent);
};
/**
* set on change event
*/
this.setEventOnChange = function (handler) {
t.onEvent(t.events.CHANGE, handler);
};
/**
* set on selectors change event
*/
this.setEventOnSelectorsChange = function (handler) {
t.onEvent(t.events.SELECTORS_CHANGE, handler);
};
/**
* set on responsive type change event
*/
this.setEventOnResponsiveTypeChange = function (handler) {
t.onEvent(t.events.RESPONSIVE_TYPE_CHANGE, handler);
};
/**
* update input child placeholders if avilable
*/
function updateInputChildPlaceholders(objInput){
if(!objInput)
return(false);
if(objInput.length == 0)
return(false);
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 (t.isTriggerChangeDisabled() === true)
return;
var dataOldValue = "unite_setting_oldvalue";
if (isInstantChange === true)
dataOldValue = "unite_setting_oldvalue_instant";
if (!objInput)
objInput = jQuery(event.target);
if (!objInput || objInput.length === 0)
return;
var type = getInputType(objInput);
if (!type)
return;
var value = getSettingInputValue(objInput);
switch (type) {
case "radio":
case "select":
case "items":
case "map":
//
break;
default:
//check by value
var oldValue = objInput.data(dataOldValue);
if (value === oldValue)
return;
objInput.data(dataOldValue, value);
break;
}
//process control change
processControlSettingChange(objInput);
//trigger event by type
var hasSelector = isInputHasSelector(objInput);
var eventName;
if (hasSelector === true) {
eventName = t.events.SELECTORS_CHANGE;
} else {
if (isInstantChange === true)
eventName = t.events.INSTANT_CHANGE;
else
eventName = t.events.CHANGE;
}
var name = getInputName(objInput);
triggerEvent(eventName, {
name: name,
value: value,
});
};
/**
* trigger event
*/
function triggerEvent(eventName, params){
if(!params)
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;
var objControls = g_objWrapper.data("controls");
if (!objControls)
return;
g_objWrapper.removeAttr("data-controls");
g_arrControls = objControls.parents;
g_arrChildrenControls = objControls.children;
}
/**
* 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 (t.isTriggerChangeDisabled() === true)
return;
if (!funcChange)
funcChange = t.onSettingChange;
// 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":
initColorPicker(objInput, funcChange);
break;
case "icon":
initIconPicker(objInput, funcChange);
break;
case "image":
t.initImageChooser(objInput, funcChange);
break;
case "link":
initLink(objInput, funcChange);
break;
case "dimentions":
initDimentions(objInput, funcChange);
break;
case "range":
initRangeSlider(objInput, funcChange);
break;
case "switcher":
initSwitcher(objInput, funcChange);
break;
case "tabs":
initTabs(objInput);
break;
case "typography":
case "textshadow":
case "boxshadow":
case "css_filters":
initSubSettings(objInput, funcChange);
break;
case "addon":
initAddonPicker(objInput);
break;
case "repeater":
initRepeater(objInput, funcChange);
break;
case "post":
initPostPicker(objInput);
break;
case "post_ids":
initPostIdsPicker(objInput);
break;
case "multiselect":
objInput.on("input", funcChange);
break;
case "select2":
initSelect2(objInput);
break;
case "gallery":
initGallery(objInput, funcChange);
break;
case "buttons_group":
initButtonsGroup(objInput, funcChange);
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 "div":
//
break;
case "checkbox":
case "radio":
objInput.on("click", funcChange);
break;
default:
objInput.on("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 () {
initInputEvents(jQuery(this));
});
//init mp3 input events
var objMp3Settings = g_objParent.find(".unite-setting-mp3");
t.initMp3Chooser(objMp3Settings);
}
/**
* 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 focusableTypes = ["text", "textarea"];
var objInputs = getObjInputs();
jQuery.each(objInputs, function () {
var objInput = jQuery(this);
var type = getInputType(objInput);
if (jQuery.inArray(type, focusableTypes) !== -1) {
objInput.focus();
return false;
}
});
};
/**
* destroy settings object
*/
this.destroy = function () {
if (t.isInited() === false)
return;
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'],.unite-setting-switcher");
objInputsClick.off("click");
//destroy control events
g_objParent.find("select, input").off("change");
//destroy loaded events
g_objParent.off(t.events.CHANGE);
g_objParent.off(t.events.SELECTORS_CHANGE);
g_objParent.off(t.events.RESPONSIVE_TYPE_CHANGE);
//destroy tabs events
if (g_objSapTabs)
g_objSapTabs.children("a").off("click");
//destroy accordion events
if (g_objWrapper)
g_objWrapper.find(".unite-postbox .unite-postbox-title").off("click");
g_objProvider.destroyEditors(t);
//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");
}
destroyTabs();
destroyDimentions();
destroyColorPickers();
destroyIconPickers();
destroyImageChoosers();
destroyGalleries();
destroyButtonsGroups();
destroyLinks();
destroyRangeSliders();
destroySubSettings();
destroyRepeaters();
//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");
//null parent object so it won't pass the validation
g_objParent = null;
};
/**
* set id prefix
*/
this.setIDPrefix = function (idPrefix) {
g_IDPrefix = "#" + idPrefix;
};
/**
* get id prefix
*/
this.getIDPrefix = function () {
return g_IDPrefix;
};
/**
* set selector wrapper id
*/
this.setSelectorWrapperID = function (id) {
g_selectorWrapperID = id;
};
/**
* 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);
};
/**
* determine if the settings are initialized
*/
this.isInited = function () {
return g_objParent !== null;
};
/**
* init the settings
*/
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 must have a single parent");
}
if (g_objParent.hasClass("unite_settings_wrapper"))
g_objWrapper = g_objParent;
else
g_objWrapper = g_objParent.children(".unite_settings_wrapper");
if (g_objWrapper.length === 0)
g_objWrapper = g_objParent.closest(".unite_settings_wrapper");
if (g_objWrapper.length === 0)
g_objWrapper = null;
if (!g_objWrapper)
throw new Error("Unable to detect settings wrapper.");
g_temp.settingsID = g_objWrapper.prop("id");
g_temp.isSidebar = g_objWrapper.hasClass("unite-settings-sidebar");
g_temp.disableExcludeSelector = g_ucAdmin.getVal(options, "disable_exclude_selector");
t.disableTriggerChange();
validateInited();
initOptions();
initItemsPanel();
initRepeaters();
initSaps();
initResponsivePicker();
initUnitsPicker();
initAnimationsSelector();
initGlobalEvents();
t.updateEvents();
t.clearSettingsInit();
g_objProvider.initEditors(t);
t.enableTriggerChange();
g_temp.isInited = true;
};
}