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

862 lines
18 KiB
JavaScript
Raw Permalink Normal View History

2024-05-06 11:04:37 +07:00
"use strict";
/**
* browser object
*/
function UniteCreatorBrowser(){
var g_objWrapper, g_objTabsWrapper, g_objBackButton;
var g_objLoader;
var g_objCatalog, g_objHeaderMenu;
var g_objSearchInput, g_addParams = null;
var g_objCache = {};
//return events to the caller with g_temp.funcResponse
this.events = {
LOADING_ADDON: "loading_addon",
ADDON_DATA: "addon_data"
};
if(!g_ucAdmin)
var g_ucAdmin = new UniteAdminUC();
//temp vars
var g_temp = {
funcResponse: null,
addonType: "",
isPages:false,
isDialogInited:false,
prefix:"",
isSelectMode:false,
lastOpenedTime:null,
objTriggerElement:null,
isInsideManager:false
};
var t = this;
function _______________TABS__________(){}
/**
* return if tab selected or not
*/
function isTabSelected(objTab){
if(objTab.hasClass("uc-tab-selected"))
return(true);
return(false);
}
/**
* select some tab
*/
function selectTab(objTab){
if(objTab.hasClass("uc-browser-tab") == false)
throw new Error("Wrong tab object");
var objOtherTabs = getObjTabs(objTab);
objOtherTabs.removeClass("uc-tab-selected");
objTab.addClass("uc-tab-selected");
//show content, hide others
var catID = objTab.data("catid");
showContentCategory(catID);
}
/**
* select first visible tab
*/
function selectFirstVisibleTab(){
var objTabItems = g_objWrapper.find(".uc-browser-tabs-wrapper .uc-tab-item:visible");
if(objTabItems.length == 0)
return(false);
var objTab = jQuery(objTabItems[0]).children("a");
selectTab(objTab);
}
/**
* on tab click function
*/
function onTabClick(){
var objTab = jQuery(this);
if(isTabSelected(objTab))
return(true);
selectTab(objTab);
}
/**
* get obj all tabs without some tab
*/
function getObjTabs(objWithout){
var objTabs = g_objWrapper.find(".uc-browser-tabs-wrapper .uc-browser-tab");
if(objWithout)
objTabs = objTabs.not(objWithout);
return(objTabs);
}
/**
* init tabs
*/
function initTabs(){
var objTabs = getObjTabs();
objTabs.on("click",onTabClick);
}
function ________CATALOG_HEADER_MENU__________(){}
/**
* on header menu item click
*/
function onHeaderMenuClick(){
var objItem = jQuery(this);
g_objHeaderMenu.find("a").not(objItem).removeClass("uc-menu-active");
objItem.addClass("uc-menu-active");
var state = objItem.data("state");
trace(state);
}
/**
* init header menu
*/
function initHeaderMenu(){
g_objHeaderMenu = g_objCatalog.find(".uc-catalog-header-menu");
if(g_objHeaderMenu.length == 0){
g_objHeaderMenu = null;
return(false);
}
g_ucAdmin.validateDomElement(g_objHeaderMenu, "header menu");
g_objHeaderMenu.find("a").on("click",onHeaderMenuClick);
}
function __________CATALOG_RELATED__________(){}
/**
* get addon data by name
*/
this.getAddonData = function(addonName){
if(g_objCache.hasOwnProperty(addonName) == true)
return(g_objCache[addonName]);
var objAddon = g_objCatalog.find(".uc-browser-addon[data-name='"+addonName+"']");
if(objAddon.length != 1)
return(null);
var objData = getAddonDataFromAddon(objAddon);
return(objData);
};
/**
* install addon
*/
this.installAddon = function(objAddon, catTitle, onInstalledFunc){
var addonName = objAddon.data("name");
var isOneClickInstall = false;
if(g_temp.isInsideManager == false && (!g_temp.addonType || g_temp.addonType == "layout" || g_temp.addonType == "pages"))
isOneClickInstall = true;
if(!catTitle)
var catTitle = objAddon.data("cattitle");
if(!catTitle){
var objContent = objAddon.parents(".uc-browser-content");
var catTitle = objContent.data("cattitle");
}
var objInstalled = objAddon.find(".uc-installed-success");
if(objInstalled.length == 0)
objInstalled = null;
//set loader
objAddon.find(".uc-hover-free").hide();
objAddon.find(".uc-installing").show();
var data = {};
data["name"] = addonName;
data["cat"] = catTitle;
data["type"] = g_temp.addonType;
if(g_temp.isInsideManager)
data["from_manager"] = true;
g_ucAdmin.setErrorMessageID(function(message){
objAddon.find(".uc-installing div").hide();
objAddon.find(".uc-installing i").hide();
objAddon.find(".uc-installing span").hide();
objAddon.find("h3").show().html(message);
});
var action = "install_catalog_addon";
if(g_temp.isPages == true)
action = "install_catalog_page";
if(g_addParams)
data["params"] = g_addParams;
g_ucAdmin.ajaxRequest(action, data, function(response){
//set id
var id = g_ucAdmin.getVal(response, "addonid");
if(!id)
id = g_ucAdmin.getVal(response, "layoutid");
//set alias, replace name
var alias = g_ucAdmin.getVal(response, "alias");
if(alias){
addonName = alias;
objAddon.data("name", alias);
}
if(id){
objAddon.data("id", id);
}
objAddon.find(".uc-installing").hide();
//trigger global event
var installData = response;
installData["addontype"] = g_temp.addonType;
installData["name"] = addonName;
g_ucAdmin.triggerEvent("install_addon", installData);
if(isOneClickInstall == false){
objAddon.find(".uc-state-label").hide();
objAddon.data("state","installed");
}else{ //on once click install call response func
objAddon.find(".uc-hover-free").show();
if(typeof g_temp.funcResponse == "function")
g_temp.funcResponse(response);
if(objInstalled)
objInstalled.show();
}
if(onInstalledFunc)
onInstalledFunc(response);
});
return(false);
};
/**
* on addon click
*/
function onAddonClick(event){
//view page click
var target = event.target;
var objTarget = jQuery(target);
if(objTarget.hasClass("uc-hover-label-preview"))
return(true);
var objAddon = jQuery(this);
var state = objAddon.data("state");
switch(state){
case "free":
t.installAddon(objAddon);
return(false);
break;
case "pro":
return(true);
break;
}
var objData = getAddonDataFromAddon(objAddon);
g_temp.funcResponse(objData);
closeCatalog();
}
/**
* on addon hover
*/
this.onAddonHover = function(event, objAddon) {
if(!objAddon)
var objAddon = jQuery(this);
var objLabel = objAddon.find(".uc-hover-label")
if(objLabel.length == 0)
return(true);
if(objLabel.attr('installing') === 'true' || objLabel.attr('installed') === 'true') {
return false;
}
if(event.type === "mouseenter" || event.type == "item_mouseover") {
objAddon.addClass("hover-label-visible");
objLabel.removeClass('hidden');
} else {
objAddon.removeClass("hover-label-visible");
objLabel.addClass('hidden');
}
};
/**
* check if catalog opened
*/
function isCatalogOpened(){
var isOpened = g_objCatalog.is(":visible");
return(isOpened);
}
/**
* close the catalog
*/
function closeCatalog(){
var isOpened = isCatalogOpened();
if(isOpened == false)
return(true);
if(g_temp.isSelectMode == true){
var timeNow = jQuery.now();
var diff = timeNow - g_temp.lastOpenedTime;
if(diff < 300)
return(true);
}
if(g_temp.isSelectMode == false)
jQuery("body").removeClass("uc-catalog-open");
g_objWrapper.hide();
g_objCatalog.hide();
}
/**
* position the catalog
*/
function positionCatalog(){
if(g_temp.isSelectMode == false)
return(false);
if(!g_temp.objTriggerElement)
return(false);
var offset = g_ucAdmin.getCustomDialogOffset(g_objCatalog, g_temp.objTriggerElement);
g_objCatalog.offset(offset);
//set width
var width = g_temp.objTriggerElement.width();
g_objCatalog.width(width+10);
}
/**
* open catalog
*/
function openCatalog(){
g_temp.lastOpenedTime = jQuery.now();
g_objWrapper.show();
g_objCatalog.show();
if(g_temp.isSelectMode == false){
jQuery("body").addClass("uc-catalog-open");
}else{
//select mode
positionCatalog();
}
if(g_objSearchInput)
g_objSearchInput.focus();
}
/**
* init catalog events
*/
function initCatalogEvents(){
//close button
g_objCatalog.find(".uc-catalog-button-close").on("click",closeCatalog);
g_objCatalog.find(".uc-link-update-catalog").on("click",openDialogCatalogUpdate);
if(g_temp.isSelectMode == true){
g_objCatalog.on("click",function(event){
event.stopPropagation();
event.stopImmediatePropagation();
});
jQuery("body").on("click",function(){
closeCatalog();
});
}
}
/**
* get category addons
*/
function getCatAddons(catID){
var selector = "#uc_browser_content_"+g_temp.prefix+"_"+catID+" .uc-browser-addon";
var objAddons = jQuery(selector);
return(objAddons);
}
/**
* init the catalog
*/
function initCatalog(){
g_objCatalog = g_objWrapper.find(".uc-catalog");
g_ucAdmin.validateDomElement(g_objCatalog, "addon browser catalog");
g_objTabsWrapper = g_objWrapper.find(".uc-browser-tabs-wrapper");
//select mode
if(g_objCatalog.hasClass("uc-select-mode"))
g_temp.isSelectMode = true;
initTabs();
initHeaderMenu();
initCatalogSearch();
initCatalogEvents();
}
function _______________SEARCH__________(){}
/**
* set categories titles according number of items
* only on visible items
*/
function setCategoriesTitles(){
var objTabItems = g_objWrapper.find(".uc-browser-tabs-wrapper .uc-tab-item:visible");
objTabItems.each(function(index, tabItem){
var objItem = jQuery(tabItem);
var title = objItem.data("title");
var catID = objItem.data("catid");
var objAddons = getCatAddons(catID);
var numAddons = objAddons.not(".uc-item-hidden").length;
var showTitle = title+" ("+numAddons+")";
objItem.children("a").html(showTitle);
});
}
/**
* show all addons and cats that been hidden by search
*/
function search_showAll(){
g_objWrapper.find(".uc-item-hidden").removeClass("uc-item-hidden").show();
setCategoriesTitles();
}
/**
* do search
*/
function doCatalogSearch(searchValue){
searchValue = jQuery.trim(searchValue);
if(!searchValue){
search_showAll();
return(true);
}
searchValue = searchValue.toLowerCase();
var objTabItems = g_objWrapper.find(".uc-browser-tabs-wrapper .uc-tab-item");
objTabItems.each(function(index, item){
var objItem = jQuery(this);
var title = objItem.data("title");
title = title.toLowerCase();
var pos = title.indexOf(searchValue);
var isCatFound = (pos !== -1);
var catID = objItem.data('catid');
var objAddons = getCatAddons(catID);
var isSomeAddonFound = false;
//if category found, all addons will be visible
if(isCatFound == true){
objAddons.removeClass("uc-item-hidden").show();
}else{ //if cat not found, check addons
jQuery.each(objAddons, function(index, addon){
var objAddon = jQuery(addon);
var addonTitle = objAddon.data("title");
addonTitle = addonTitle.toLowerCase();
var posAddon = addonTitle.indexOf(searchValue);
var isAddonFound = (posAddon !== -1);
if(isAddonFound == true){
isSomeAddonFound = true;
objAddon.removeClass("uc-item-hidden").show();
}else{
objAddon.addClass("uc-item-hidden").hide();
}
}); //end foreach addons
}
if(isCatFound == true || isSomeAddonFound == true){
objItem.removeClass("uc-item-hidden").show();
}else
objItem.addClass("uc-item-hidden").hide();
});
//select first cat
setCategoriesTitles();
selectFirstVisibleTab();
}
/**
* init search in catalog
*/
function initCatalogSearch(){
g_objSearchInput = g_objCatalog.find(".uc-catalog-search-input");
if(g_objSearchInput.length == 0){
g_objSearchInput = null;
return(false);
}
var objButtonClear = g_objCatalog.find(".uc-catalog-search-clear");
//-- search input
g_ucAdmin.onChangeInputValue(g_objSearchInput, function(){
var value = g_objSearchInput.val();
value = jQuery.trim(value);
if(value)
objButtonClear.fadeTo(500, 1).removeClass("button-disabled");
else
objButtonClear.fadeTo(500,0).addClass("button-disabled");
doCatalogSearch(value);
});
//--clear button
objButtonClear.on("click",function(){
var objButton = jQuery(this);
if(objButton.hasClass("button-disabled"))
return(false);
//hide button
objButton.fadeTo(500,0).addClass("button-disabled");
g_objSearchInput.val("");
search_showAll();
});
}
function _______________GENERAL__________(){}
/**
* get addon data from addon thumbnail
*/
function getAddonDataFromAddon(objAddon){
var addonName = objAddon.data("name");
if(g_objCache.hasOwnProperty(addonName) == true)
return(g_objCache[addonName]);
var addonTitle = objAddon.data("title");
var addonID = objAddon.data("id");
var bgImage = null;
var objBGImage = objAddon.find(".uc-browser-addon-image");
if(objBGImage.length)
bgImage = objBGImage.css("background-image");
//load put new addon data, close the catalog first
if(!addonName)
addonName = null;
if(!addonTitle)
addonTitle = null;
if(!addonID)
addonID = null;
var objData = {
"name":addonName,
"title":addonTitle,
"id":addonID,
"addontype":g_temp.addonType,
"bgimage":bgImage
};
g_objCache[addonName] = objData;
return(objData);
}
/**
* show content category
*/
function showContentCategory(catID){
var objContent = jQuery("#uc_browser_content_"+g_temp.prefix+"_"+catID);
g_objWrapper.find(".uc-browser-content").not(objContent).hide();
objContent.show();
}
/**
* open addons browser, for column - add new, for addon - update
* objTriggerElement - the button element that trigger the catalog open
*/
this.openAddonsBrowser = function(currentAddonData, funcResponse, objTriggerElement){
validateInited();
if(!funcResponse)
throw new Error("There should be response func");
g_temp.funcResponse = funcResponse;
g_temp.objTriggerElement = objTriggerElement;
if(!objTriggerElement)
g_temp.objTriggerElement = null;
openCatalog();
};
/**
* init update catalog
*/
function openDialogCatalogUpdate(){
var options = {
dialogClass:"uc-dialog-catalog-update unite-ui-black",
height:300
};
g_ucAdmin.openCommonDialog("uc_dialog_catalog_update", function(){
g_ucAdmin.setAjaxLoaderID("uc_dialog_catalog_update_loader");
jQuery("#uc_dialog_catalog_update_message").html("").hide();
g_ucAdmin.setErrorMessageID("uc_dialog_catalog_update_error");
g_ucAdmin.ajaxRequest("check_catalog", {force:true}, function(response){
var errorMessage = g_ucAdmin.getVal(response,"error_message");
if(errorMessage)
jQuery("#uc_dialog_catalog_update_error").show().html(errorMessage);
jQuery("#uc_dialog_catalog_update_message").html(response.message).show();
});
}, options);
}
function _______________INIT__________(){}
/**
* validate that the browser inited
*/
function validateInited(){
g_ucAdmin.validateDomElement(g_objWrapper, "addon browser");
}
/**
* init events
*/
function initEvents(){
g_objWrapper.find(".uc-browser-addon").on("click",onAddonClick);
//g_objWrapper.find(".buttons-addon").on("click",onAddonButtonClick);
g_objWrapper.find(".uc-browser-addon").on("mouseenter", t.onAddonHover);
g_objWrapper.find(".uc-browser-addon").on("mouseleave", t.onAddonHover);
if(g_objBackButton)
g_objBackButton.on("click",onBackButtonClick);
}
/**
* close catalog
*/
this.closeCatalog = function(){
closeCatalog();
};
/**
* set addon type
*/
this.setAddonType = function(addontype, isPages, isFromManager){
g_temp.addonType = addontype;
g_temp.isPages = isPages;
g_temp.isInsideManager = isFromManager;
};
/**
* init browser object
*/
this.init = function(objWrapper, addParams){
if(!addParams)
var addParams = {};
g_objWrapper = objWrapper;
//validate wrapper
if(g_objWrapper.length == 0){
console.trace();
return(false);
}
g_temp.addonType = g_objWrapper.data("addontype");
var isInited = objWrapper.data("is_inited");
if(isInited === true){
trace(g_temp.addonType);
console.trace();
throw new Error("The browser is already inited");
}
//add params on install submit
g_addParams = addParams;
g_temp.prefix = g_objWrapper.data("prefix");
var isPages = g_objWrapper.data("ispages");
if(isPages)
g_temp.isPages = true;
initCatalog();
initEvents();
g_ucAdmin.initActivationDialog();
objWrapper.data("is_inited", true);
};
}