landing-klikaset/wp-content/plugins/unlimited-elements-for-elem.../js/unitecreator_includes.js

860 lines
18 KiB
JavaScript

"use strict";
function UniteCreatorIncludes(){
var t = this;
var g_objListJs, g_objListCss, g_objIncludesWrapper;
var g_parent;
//for type autocomplete
if(0==1){ //never occure
g_parent = new UniteCreatorAdmin();
}
var g_temp = {
funcOnDelete: null,
funcOnInputBlur: null
};
if(!g_ucAdmin)
var g_ucAdmin = new UniteAdminUC();
/**
* get includes tab data
*/
this.getIncludesTabData = function(){
var arrJS = [];
var arrJSLib = [];
var arrCSS = [];
var inputJsLib = jQuery("#uc-js-libraries input[type='checkbox']");
var rowsJs = jQuery("#uc-js-includes li");
var rowsCSS = jQuery("#uc-css-includes li");
//get js libraries
jQuery.each(inputJsLib, function(index, input){
var objInput = jQuery(input);
var isChecked = objInput.is(":checked");
if(isChecked == false)
return(true);
var libName = objInput.data("include");
arrJSLib.push(libName);
});
//get js
jQuery.each(rowsJs, function(index, row){
var objRow = jQuery(row);
var data = getIncludeData(objRow, true);
arrJS.push(data);
});
//get css
jQuery.each(rowsCSS, function(index, row){
var objRow = jQuery(row);
var data = getIncludeData(objRow, true);
arrCSS.push(data);
});
var output = {
arrJS:arrJS,
arrJSLib:arrJSLib,
arrCSS:arrCSS
};
return(output);
}
/**
* get all includes array
*/
this.getArrAllIncludesUrls = function(){
var data = t.getIncludesTabData();
var arrIncludes = [];
jQuery.each(data.arrJS,function(index, include){
arrIncludes.push(include.url);
});
jQuery.each(data.arrCSS,function(index, include){
arrIncludes.push(include.url);
});
return(arrIncludes);
}
/**
* get condition html
*/
function getHtmlCondition(objCondition){
if(!objCondition)
return("");
var html = "";
if(objCondition.name == "never_include")
html = "<span class='uc-condition-never'>"+g_uctext.never_include+"</span>";
else
html = "when "+objCondition.name + " = " + objCondition.value;
return(html);
}
/**
* get state text
*/
function getHtmlStateText(item){
if(!item)
return(null);
var text = "";
var params = g_ucAdmin.getVal(item, "params");
//include_after_elementor_frontend
var includeAfterFrontend = g_ucAdmin.getVal(params, "include_after_elementor_frontend");
includeAfterFrontend = g_ucAdmin.strToBool(includeAfterFrontend);
if(includeAfterFrontend == true)
text += "include after <b>elementor-frontend.js</b>";
//handle:
var includeHandle = g_ucAdmin.getVal(params, "include_handle");
if(includeHandle){
if(text)
text += ", ";
text += "handle: <b>" + includeHandle+"</b>";
}
//module:
var module = g_ucAdmin.getVal(params, "include_as_module");
if(module){
if(text)
text += ", ";
text += " type: <b>module</b>";
}
return(text);
}
/**
* update the row extra html
*/
function updateInputExtraHTML(objRow, rowParams){
var objText = objRow.find(".uc-includes-state-text");
var item = {params: rowParams};
var html = getHtmlStateText(item);
objText.show();
objText.html(html);
}
/**
* get include item html
*/
function getIncludeListHTML(item){
var url = "";
var objCondition = null;
//init the input
if(item){
if(typeof item == "string")
url = item;
else{
url = url = item.url;
if(item.hasOwnProperty("condition")){
objCondition = item.condition;
if(typeof objCondition != "object")
objCondition = null;
}
}
}
var title = "";
//encode uri
var objInfo = g_ucAdmin.pathinfo(url);
var filename = objInfo.basename;
var conditionStyle = " style='display:none'";
var htmlCondition = "";
if(objCondition){
htmlCondition = getHtmlCondition(objCondition);
conditionStyle = "";
}
var htmlStateText = getHtmlStateText(item);
var attributesStyle = " style='display:none'";
if(htmlStateText)
attributesStyle = "";
var html = '<li>';
html += '<div class="uc-includes-handle"></div>';
html += '<input type="text" class="uc-includes-url" value="'+url+'">';
html += '<input type="text" class="uc-includes-filename" value="'+filename+'" readonly>';
html += '<div class="uc-includes-icon uc-includes-delete" title="'+g_uctext.delete_include+'"></div>';
html += '<div class="uc-includes-icon uc-includes-add" title="'+g_uctext.add_include+'"></div>';
html += '<div class="uc-includes-icon uc-includes-settings" title="'+g_uctext.include_settings+'"></div>';
html += '<div class="unite-clear"></div>';
html += '<div class="uc-condition-container" '+conditionStyle+'>'+htmlCondition+'</div>';
html += '<div class="uc-includes-state-text" '+attributesStyle+'>'+htmlStateText+'</div>';
html += '</li>';
var objHtml = jQuery(html);
if(objCondition)
objHtml.data("condition", objCondition);
//update params
var objParams = g_ucAdmin.getVal(item, "params");
if(objParams)
objHtml.data("params",objParams);
return(objHtml)
}
/**
* add a include to the includes list
*/
function addIncludesListItem(objList, item){
var objItem = getIncludeListHTML(item);
objList.append(objItem);
return(objItem);
}
/**
* update inlcude list item
*/
function updateIncludesListItem(objInput, url){
objInput.val(url);
objInput.trigger("change");
}
/**
* get first empty include input
*/
function getEmptyIncludeInput(objList){
var objInputs = objList.find("input");
var returnInput = null;
jQuery.each(objInputs, function(index, input){
var objInput = jQuery(input);
var val = objInput.val();
val = jQuery.trim(val);
if(val == ""){
returnInput = objInput;
return(false); //break;
}
});
return(returnInput);
}
/**
* adds includes item to appropriete place from assets
* @param objItem
*/
this.addIncludesFromAssets = function(objItem){
switch(objItem.type){
case "js":
var objList = jQuery("#uc-js-includes");
break;
case "css":
var objList = jQuery("#uc-css-includes");
break;
default:
return(false);
break;
}
var url = objItem.full_url;
var filename = objItem.file;
var objInput = getEmptyIncludeInput(objList);
if(objInput == null)
addIncludesListItem(objList, url, filename);
else{
updateIncludesListItem(objInput, url);
}
}
/**
* remove include by item data
*/
this.removeIncludeByAsset = function(itemData){
var url = itemData.full_url;
switch(itemData.type){
case "js":
var inputs = jQuery("#uc-js-includes input");
break;
case "css":
var inputs = jQuery("#uc-css-includes input");
break;
default:
return(false);
break;
}
//get js libraries
jQuery.each(inputs, function(index, input){
var objInput = jQuery(input);
var inputUrl = objInput.val();
inputUrl = jQuery.trim(inputUrl);
if(inputUrl == url){
var listItem = objInput.parents("li");
deleteIncludesListItem(listItem);
}
});
}
/**
* get num items from includes list
*/
function getIncludesListNumItems(objList){
var items = objList.children("li");
var numItems = items.length;
return(numItems);
}
/**
* get item data by row
*/
function getIncludeData(objRow, noFilename){
var data = {};
data.url = objRow.find(".uc-includes-url").val();
data.url = jQuery.trim(data.url);
if(noFilename !== true){
data.filename = objRow.find(".uc-includes-filename").val();
data.filename = jQuery.trim(data.filename);
}
data.condition = objRow.data("condition");
if(!data.condition && typeof data.condition != "object")
data.condition = null;
//get params
var objParams = objRow.data("params");
if(!objParams)
objParams = null;
data.params = objParams;
return(data);
}
/**
* clear all inputs in the includes tab
*/
function clearIncludesTabInputs(){
g_objIncludesWrapper.find("input").each(function(inedx, input){
var objInput = jQuery(input);
var initval = objInput.data("initval");
if(initval == undefined)
initval = "";
objInput.val(initval);
});
}
/**
* on add click
*/
function onAddClick(){
var objButton = jQuery(this);
var objList = objButton.parents("ul");
var objItem = addIncludesListItem(objList);
var objInput = objItem.find("input");
objInput.focus();
}
/**
* on delete click
*/
function onDeleteClick(){
var objButton = jQuery(this);
var objItem = objButton.parents("li");
deleteIncludesListItem(objItem);
if(typeof g_temp.funcOnDelete == "function")
g_temp.funcOnDelete();
}
/**
* delete includes list item
*/
function deleteIncludesListItem(objItem){
var objList = objItem.parents("ul");
objItem.remove();
var numItems = getIncludesListNumItems(objList);
if(numItems == 0)
addIncludesListItem(objList);
}
/**
* init include list
*/
function initIncludeList(objList){
var data = objList.data("init");
if(!data || typeof data != "object" || data.length == 0){
addIncludesListItem(objList);
return(false);
}
jQuery.each(data,function(index, item){
addIncludesListItem(objList, item);
});
}
/**
* on input url change
*/
function onInputUrlChange(){
var objInput = jQuery(this);
if(typeof g_temp.funcOnInputBlur == "function")
g_temp.funcOnInputBlur(objInput);
var objInputFilename = objInput.siblings(".uc-includes-filename");
var url = objInput.val();
var info = g_ucAdmin.pathinfo(url);
var filename = info.basename;
objInputFilename.val(filename);
}
function ______________SETTINGS_DIALOG_____________(){}
/**
* fill settings dialog
*/
function dialogSettings_fillParams(arrParams, objData){
//save params data
var objDialog = jQuery("#uc_dialog_unclude_settings");
var objValueContainer = jQuery("#uc_dialog_include_value_container");
objValueContainer.hide();
//fill select
var selectParams = jQuery("#uc_dialog_include_attr");
selectParams.html("");
//add constant param
g_ucAdmin.addOptionToSelect(selectParams, "", "["+g_uctext.always+"]");
g_ucAdmin.addOptionToSelect(selectParams, "never_include", "["+g_uctext.never_include+"]");
jQuery.each(arrParams,function(index, param){
g_ucAdmin.addOptionToSelect(selectParams, param.name, param.name);
});
//fill values if needed
if(objData.condition){
var paramName = objData.condition.name;
var selectedValue = "";
if(paramName && paramName != "never_include"){
if(arrParams.hasOwnProperty(paramName) == false)
paramName = "never_include";
else{
var param = arrParams[paramName];
var selectedValue = objData.condition.value;
}
}
selectParams.val(paramName);
updateSettingsDialogValues(arrParams, selectedValue);
}
//checkboxes
var objInputs = objDialog.find("input[type='checkbox'],input[type='text']");
var objParams = g_ucAdmin.getVal(objData, "params");
if(!objParams)
objParams = null;
jQuery.each(objInputs,function(index, input){
var type = input.type.toLowerCase();
var objInput = jQuery(input);
var name = objInput.prop("name");
var value = g_ucAdmin.getVal(objParams, name);
switch(type){
default:
case "text":
objInput.val(value);
break;
case "checkbox":
value = g_ucAdmin.strToBool(value);
objInput.prop("checked", value);
break;
}
});
}
/**
* fill values select
*/
function dialogSettings_fillValuesSelect(objParam, selectedValue){
var objSelectValues = jQuery("#uc_dialog_include_values");
objSelectValues.html("");
var arrValues = [];
switch(objParam.type){
case "uc_radioboolean":
g_ucAdmin.addOptionToSelect(objSelectValues, objParam.true_value, objParam.true_value);
g_ucAdmin.addOptionToSelect(objSelectValues, objParam.false_value, objParam.false_value);
arrValues.push(objParam.true_value);
arrValues.push(objParam.false_value);
break;
case "uc_dropdown":
jQuery.each(objParam.options, function(optionName, optionValue){
g_ucAdmin.addOptionToSelect(objSelectValues, optionValue, optionName);
arrValues.push(optionValue);
});
break;
}
if(selectedValue){
if(jQuery.isArray(selectedValue))
var isFound = true;
else
var isFound = (jQuery.inArray(selectedValue, arrValues) != -1)
if(isFound == true)
objSelectValues.val(selectedValue);
}
}
/**
* update the condition of the input
*/
function updateInputCondition(objRow, paramName, paramValue){
var objCondition = objRow.find(".uc-condition-container");
if(jQuery.trim(paramName) == ""){
objCondition.html("").hide(); //hide condition
objRow.removeData("condition");
}
else{
var data = {name: paramName, value: paramValue};
objRow.data("condition", data);
objCondition.show();
var htmlCondition = getHtmlCondition(data);
objCondition.html(htmlCondition);
}
}
/**
* on include settings click
*/
function openIncludeSettingsDialog(){
var objRow = jQuery(this).parents("li");
var objList = objRow.parents("ul");
var listType = objList.data("type");
var data = getIncludeData(objRow);
var objDialog = jQuery("#uc_dialog_unclude_settings");
objDialog.data("objRow", objRow);
if(listType == "js"){
objDialog.addClass("uc-include-type-js");
}else{
objDialog.removeClass("uc-include-type-js");
}
var buttonOpts = {};
buttonOpts[g_uctext.update] = function(){
var paramName = jQuery("#uc_dialog_include_attr").val();
var paramValue = jQuery("#uc_dialog_include_values").val();
updateInputCondition(objRow, paramName, paramValue);
var rowParams = {};
var objInputs = objDialog.find("input[type='checkbox'],input[type='text']");
jQuery.each(objInputs, function(index, input){
var type = input.type.toLowerCase();
var name = input.name;
switch(type){
case "checkbox":
var objCheckbox = jQuery(input);
var isChecked = objCheckbox.is(":checked");
if(isChecked == true)
rowParams[name] = true;
break;
default:
case "text":
rowParams[name] = input.value;
break;
}
});
updateInputExtraHTML(objRow, rowParams);
objRow.data("params", rowParams);
objDialog.dialog("close");
}
buttonOpts[g_uctext.cancel] = function(){
objDialog.dialog("close");
};
var title = g_uctext.include_settings + ": " + data.filename;
objDialog.dialog({
dialogClass:"unite-ui",
buttons:buttonOpts,
title: title,
minWidth:700,
modal:true,
open:function(){
var arrParams = g_parent.getControlParams();
dialogSettings_fillParams(arrParams, data);
}
});
}
/**
* update values according the params
*/
function updateSettingsDialogValues(objParams, selectedValue){
var paramName = jQuery("#uc_dialog_include_attr").val();
if(paramName == "" || paramName == "never_include"){
jQuery("#uc_dialog_include_value_container").hide();
return(true);
}
//show container
jQuery("#uc_dialog_include_value_container").show();
//set select values
if(!objParams)
var objParams = g_parent.getControlParams();
if(objParams.hasOwnProperty(paramName) == false)
throw new Error("param: "+paramName+" not found");
var objParam = objParams[paramName];
dialogSettings_fillValuesSelect(objParam, selectedValue);
}
/**
* init settings dialog
*/
function initSettingsDialog(){
jQuery("#uc_dialog_include_attr").change(function(){
updateSettingsDialogValues();
});
}
function ______________INIT_____________(){}
/**
* init events
*/
function initEvents(){
//add include
g_objIncludesWrapper.on("click", ".uc-includes-add", onAddClick);
//delete inlcude
g_objIncludesWrapper.on("click", ".uc-includes-delete", onDeleteClick);
//include settings
g_objIncludesWrapper.on("click", ".uc-includes-settings", openIncludeSettingsDialog);
g_objIncludesWrapper.on("blur", ".uc-includes-url", onInputUrlChange);
g_objIncludesWrapper.on("change", ".uc-includes-url", onInputUrlChange);
}
/**
* init the includes tab
*/
function init(){
g_objIncludesWrapper = jQuery("#uc_includes_wrapper");
g_objListJs = jQuery("#uc-js-includes");
g_objListCss = jQuery("#uc-css-includes");
//clear inlcudes tab
clearIncludesTabInputs();
initIncludeList(g_objListJs);
initIncludeList(g_objListCss);
//sortable:
g_objIncludesWrapper.find("ul").sortable({
handle: ".uc-includes-handle"
});
//init events:
initSettingsDialog();
initEvents();
}
/**
* init includes tab
*/
this.initIncludesTab = function(objParent){
g_parent = objParent;
init();
}
/**
* set evetn on delete include
*/
this.eventOnDelete = function(func){
g_temp.funcOnDelete = func;
}
/**
* set event on input blur
*/
this.eventOnInputBlur = function(func){
g_temp.funcOnInputBlur = func;
}
}