landing-klikaset/wp-content/plugins/unlimited-elements-for-elem.../provider/assets/provider_admin.js

923 lines
18 KiB
JavaScript
Raw Normal View History

2024-05-06 11:04:37 +07:00
//global variables
var g_dataProviderUC = {
pathSelectImages: null,
pathSelectImagesBase:null,
urlSelectImagesBase:null,
objBrowserImages: null,
objBrowserAudio: null
};
function UniteProviderAdminUC(){
var t = this;
var g_parent;
var g_temp = {
keyUrlAssets: "[url_assets]/",
};
/**
* open new add image dialog
*/
function openNewMediaDialog(title,onInsert,isMultiple, type){
if(isMultiple == undefined)
isMultiple = false;
// Media Library params
var frame = wp.media({
//frame: 'post',
//state: 'insert',
title : title,
multiple : isMultiple,
library : { type : type},
button : { text : 'Insert' }
});
// Runs on select
frame.on('select',function(){
var objSettings = frame.state().get('selection').first().toJSON();
var selection = frame.state().get('selection');
var arrImages = [];
if(isMultiple == true){ //return image object when multiple
selection.map( function( attachment ) {
var objImage = attachment.toJSON();
var obj = {};
obj.url = objImage.url;
obj.id = objImage.id;
arrImages.push(obj);
});
onInsert(arrImages);
}else{ //return image url and id - when single
onInsert(objSettings.url, objSettings.id);
}
});
// Open ML
frame.open();
}
/**
* open new image dialog
*/
function openNewImageDialog(title, onInsert, isMultiple){
openNewMediaDialog(title, onInsert, isMultiple, "image");
}
/**
* open audio select dialog
*/
function openAudioDialog(title, onInsert, isMultiple){
openNewMediaDialog(title, onInsert, isMultiple, "audio");
}
/**
* open old add image dialog
*/
function openOldImageDialog(title,onInsert){
var params = "type=image&post_id=0&TB_iframe=true";
params = encodeURI(params);
tb_show(title,'media-upload.php?'+params);
window.send_to_editor = function(html) {
tb_remove();
var urlImage = jQuery(html).attr('src');
if(!urlImage || urlImage == undefined || urlImage == "")
var urlImage = jQuery('img',html).attr('src');
onInsert(urlImage,""); //return empty id, it can be changed
}
}
/**
* test media editor
*/
function testMediaEditor(){
/*
trace("open dialog");
trace(wp.media.gallery);
trace(wp.media);
var frameStates = {
create: 'gallery',
add: 'gallery-library',
edit: 'gallery-edit'
};
// Open the media dialog
var attachments = wp.media.query({
orderby: 'post__in',
order: 'ASC',
type: 'image',
});
var objSelection = new wp.media.model.Selection(attachments.models, {
props: attachments.props.toJSON(),
multiple: true
});
var options = {
title: 'Add Gallery',
state:"gallery", //gallery-library, gallery-edit
library: {
orderby:"date",
query:"true"
},
multiple: true,
modal:true,
mode:["select"],
// selection: objSelection,
uploader:true
};
//var objFrame = wp.media(options);
//objFrame.open();
/*
wp.media()
// On select, get the selected images
.on('select', function() {
trace("select");
})
// Open the dialog
.open(options);
var objFrame = wp.media.editor.open( null, options );
objFrame.on("select",function(){
trace("select!!!");
});
//wp.media.gallery.edit('[gallery ids=""]');
return(false);
*/
}
/**
* open "add image" dialog
*/
this.openAddImageDialog = function(title, onInsert, isMultiple, source){
if(source == "addon"){
openAddonImageSelectDialog(title, onInsert);
return(false);
}
if(typeof wp != "undefined" && typeof wp.media != "undefined")
openNewImageDialog(title,onInsert,isMultiple);
else{
openOldImageDialog(title,onInsert);
}
};
/**
* open "add image" dialog
*/
this.openAddMp3Dialog = function(title, onInsert, isMultiple, source){
if(typeof wp == "undefined" || typeof wp.media == "undefined"){
trace("the audio select dialog could not be opened");
return(false);
}
if(source == "addon"){
openAddonAudioSelectDialog(title, onInsert);
return(false);
}else{
openAudioDialog(title,onInsert,isMultiple);
}
};
/**
* get shortcode
*/
this.getShortcode = function(alias){
var shortcode = "[uniteaddon "+alias +"]";
if(alias == "")
shortcode = "";
return(shortcode);
};
/**
* clear setting
*/
this.clearSetting = function(type, objInput, dataname){
switch(type){
case "select_post_taxonomy":
case "select_post_type":
defaultValue = objInput.data(dataname);
objInput.val(defaultValue);
break;
default:
return(false);
break;
}
return(true);
}
/**
* init setting events
*/
this.initSettingEvents = function(type, objInput){
switch(type){
case "select_post_taxonomy":
initTaxonomyTypeSetting(objInput);
break;
case "select_post_type":
initPostTypeSetting(objInput);
break;
}
}
/**
* set setting value
*/
this.setSettingValue = function(type, objInput, value){
switch(type){
case "select_post_taxonomy":
case "select_post_type":
objInput.val(value);
objInput.trigger("change");
break;
default:
return(false);
break;
}
return(true);
}
/**
* init update plugin button
*/
function initUpdatePlugin(){
var objButton = jQuery("#uc_button_update_plugin");
if(objButton.length == 0)
return(false);
//init update plugin button
objButton.click(function(){
jQuery("#dialog_update_plugin").dialog({
dialogClass:"unite-ui",
minWidth:600,
minHeight:400,
modal:true,
});
});
}
/**
* init internal image select dialog
*/
function initMediaSelectDialog(type){
if(typeof UCAssetsManager == "undefined")
return(false);
switch(type){
case "image":
var dialogID = "#uc_dialog_image_select";
var browserID = "#uc_dialogimage_browser";
g_dataProviderUC.objBrowserImages = new UCAssetsManager();
var browser = g_dataProviderUC.objBrowserImages;
var inputID = "#uc_dialog_image_select_url";
var buttonID = "#uc_dialog_image_select_button";
break;
case "audio":
var dialogID = "#uc_dialog_audio_select";
var browserID = "#uc_dialogaudio_browser";
g_dataProviderUC.objBrowserAudio = new UCAssetsManager();
var browser = g_dataProviderUC.objBrowserAudio;
var inputID = "#uc_dialog_audio_select_url";
var buttonID = "#uc_dialog_audio_select_button";
break;
default:
throw new Error("wrong type: "+type);
break;
}
//init assets browser
var browserImagesWrapper = jQuery(browserID);
if(browserImagesWrapper.length == 0)
return(false);
browser.init(browserImagesWrapper);
//update folder for next time open
browser.eventOnUpdateFilelist(function(){
var path = browser.getActivePath();
t.setPathSelectImages(path);
});
//on select some file
browser.eventOnSelectOperation(function(event, objItem){
//get relative url
var urlRelative = objItem.file;
if(g_dataProviderUC.pathSelectImagesBase){
urlRelative = objItem.url.replace(g_dataProviderUC.pathSelectImagesBase+"/", "");
}
var objInput = jQuery(inputID);
objItem.url_assets_relative = g_temp.keyUrlAssets + urlRelative;
objInput.val(urlRelative);
objInput.data("item", objItem).val(urlRelative);
//enable button
g_ucAdmin.enableButton(buttonID);
});
/**
* on select button click - close the dialog and run oninsert function
*/
jQuery(buttonID).click(function(){
if(g_ucAdmin.isButtonEnabled(buttonID) == false)
return(false);
var objDialog = jQuery(dialogID);
var objInput = jQuery(inputID);
var objItem = objInput.data("item");
if(!objItem)
throw new Error("please select some "+type);
var funcOnInsert = objDialog.data("func_oninsert");
if(typeof funcOnInsert != "function")
throw new Error("on insert should be a function");
funcOnInsert(objItem);
objDialog.dialog("close");
});
}
/**
* open addon media select dialog
*/
function openAddonMediaSelectDialog(title, onInsert, type){
switch(type){
case "image":
var dialogID = "#uc_dialog_image_select";
var dialogName = "image select";
var inputID = "#uc_dialog_image_select_url";
var buttonID = "#uc_dialog_image_select_button";
var objBrowser = g_dataProviderUC.objBrowserImages;
break;
case "audio":
var dialogID = "#uc_dialog_audio_select";
var dialogName = "audio select";
var inputID = "#uc_dialog_audio_select_url";
var buttonID = "#uc_dialog_audio_select_button";
var objBrowser = g_dataProviderUC.objBrowserAudio;
break;
default:
throw new Error("Wrong dialog type:"+type);
break;
}
var objDialog = jQuery(dialogID);
if(objDialog.length == 0)
throw new Error("dialog "+dialogName+" not found!");
objDialog.data("func_oninsert", onInsert);
objDialog.data("obj_browser", objBrowser);
objDialog.dialog({
minWidth:900,
minHeight:450,
modal:true,
title:title,
open:function(){
var objDialog = jQuery(this);
var objBrowser = objDialog.data("obj_browser");
//clear the input
var objInput = jQuery(inputID);
objInput.data("url","").val("");
//disable the button
g_ucAdmin.disableButton(buttonID);
//objBrowser =
//set base start path (even if null)
objBrowser.setCustomStartPath(g_dataProviderUC.pathSelectImagesBase);
var loadPath = g_dataProviderUC.pathSelectImages;
if(!loadPath)
loadPath = g_pathAssetsUC;
objBrowser.loadPath(loadPath, true);
}
});
}
/**
* open addon image select dialog
*/
function openAddonImageSelectDialog(title, onInsert){
openAddonMediaSelectDialog(title, onInsert, "image");
}
/**
* open addon image select dialog
*/
function openAddonAudioSelectDialog(title, onInsert){
openAddonMediaSelectDialog(title, onInsert, "audio");
}
/**
* convert url assets related to full url
*/
this.urlAssetsToFull = function(url){
if(!url)
return(url);
if(!g_dataProviderUC.urlSelectImagesBase)
return(url);
var key = g_temp.keyUrlAssets;
if(url.indexOf(key) == -1)
return(url);
url = url.replace(key, g_dataProviderUC.urlSelectImagesBase);
return(url);
}
/**
* set select images path
*/
this.setPathSelectImages = function(path, basePath, baseUrl){
if(basePath)
g_dataProviderUC.pathSelectImagesBase = basePath;
if(baseUrl)
g_dataProviderUC.urlSelectImagesBase = baseUrl;
if(path)
g_dataProviderUC.pathSelectImages = path;
}
/**
* set the parent - ucAdmin
*/
this.setParent = function(parent){
g_parent = parent;
}
/**
* open activation dialog
*/
function openActivateDialog(){
g_parent.openCommonDialog("uc_dialog_activate_catalog",function(){
jQuery("#uc_dialog_activate_catalog_text").focus();
});
}
/**
* init activate
*/
function initActivateDialog(){
//--- top activate button
var objButtonActivate = jQuery("#uc_button_activate_catalog");
if(objButtonActivate.length == 0)
return(false);
objButtonActivate.click(openActivateDialog);
//--- dialog activate button
jQuery("#uc_dialog_activate_catalog_action").click(function(){
var code = jQuery("#uc_dialog_activate_catalog_text").val();
var data = {
code: code
};
if(g_ucCatalogAddonType)
data["addontype"] = g_ucCatalogAddonType;
g_parent.dialogAjaxRequest("uc_dialog_activate_catalog","activate_catalog_codecanyon",data);
});
}
/**
* init the provider admin object
*/
this.init = function(){
initUpdatePlugin();
initMediaSelectDialog("image");
initMediaSelectDialog("audio");
initActivateDialog();
}
function _______EDITORS_SETTING_____(){}
/**
* get first editor options
*/
function initEditor_tinyMCE_GetOptions(objEditorsOptions) {
if (jQuery.isEmptyObject(objEditorsOptions))
return {};
for (var key in objEditorsOptions) {
var options = objEditorsOptions[key];
if (options !== null)
return options;
}
return {};
}
/**
* trigger change on editor, pass back
*/
function onEditorChange(editor, objSettings){
var objInput = editor.getElement();
objInput = jQuery(objInput);
objSettings.triggerKeyupEvent(objInput);
}
/**
* init tinymce editor
*/
function initEditor_tinyMCE(inputID, objSettings) {
//init editor
var options = initEditor_tinyMCE_GetOptions(window.tinyMCEPreInit.mceInit);
options = jQuery.extend({}, options, {
resize: "vertical",
height: 200,
id: inputID,
selector: "#" + inputID,
});
options.setup = function (editor) {
editor.on("Change", function () {
onEditorChange(editor, objSettings);
});
editor.on("keyup", function () {
onEditorChange(editor, objSettings);
});
};
window.tinyMCEPreInit.mceInit[inputID] = options;
tinyMCE.init(options);
//init quicktags
var optionsQT = initEditor_tinyMCE_GetOptions(window.tinyMCEPreInit.qtInit);
optionsQT = jQuery.extend({}, optionsQT, {
id: inputID,
});
window.tinyMCEPreInit.qtInit[inputID] = optionsQT;
quicktags(optionsQT);
QTags._buttonsInit();
window.wpActiveEditor = inputID;
}
/**
* init editors - run function after timeout
*/
function initEditors_afterTimeout(objSettings, arrEditorNames, isForce) {
if (typeof window.tinyMCEPreInit === "undefined" && arrEditorNames.length)
throw new Error("Init " + arrEditorNames[0] + " editor error. no other editors found on page");
var idPrefix = objSettings.getIDPrefix();
jQuery(arrEditorNames).each(function (index, name) {
var inputID = idPrefix + name;
inputID = inputID.replace("#", "");
if (isForce === true
|| window.tinyMCEPreInit.mceInit.hasOwnProperty(inputID) === false
|| window.tinyMCEPreInit.mceInit[inputID] === null)
initEditor_tinyMCE(inputID, objSettings);
});
}
function _______POST_TAXONOMY_____(){}
/**
* init taxonomy setting
*/
function initTaxonomyTypeSetting(selectPostType){
if(selectPostType.length == 0)
return(false);
var objParent = selectPostType.parents(".unite_settings_wrapper");
if(objParent.length == 0)
objParent = selectPostType.parents(".wpb_edit_form_elements");
if(objParent.length == 0)
throw new Error("unable to find post list setting parent");
var selectPostTaxonomy = objParent.find(".unite-setting-post-taxonomy");
if(selectPostTaxonomy.length == 0)
return(false);
var dataPostTypes = selectPostType.data("arrposttypes");
if(typeof dataPostTypes == "string"){
dataPostTypes = g_parent.decodeContent(dataPostTypes);
dataPostTypes = JSON.parse(dataPostTypes);
}
selectPostType.change(function(){
var postType = selectPostType.val();
var selectedTax = selectPostTaxonomy.val();
var objTax = g_parent.getVal(dataPostTypes, postType);
if(!objTax)
return(true);
var objOptions = selectPostTaxonomy.find("option");
var firstVisibleOption = null;
jQuery.each(objOptions, function(index, option){
var objOption = jQuery(option);
var optionTax = objOption.prop("value");
var taxFound = objTax.hasOwnProperty(optionTax);
if(taxFound == true && firstVisibleOption == null)
firstVisibleOption = optionTax;
if(taxFound == true)
objOption.show();
else
objOption.hide();
});
var isCurrentTaxRelevant = objTax.hasOwnProperty(selectedTax);
if(isCurrentTaxRelevant == false && firstVisibleOption){
selectPostTaxonomy.val(firstVisibleOption);
}
}); //end onchange
selectPostType.trigger("change");
}
function _______POST_LIST_____(){}
/**
* init post lists
*/
function initPostTypeSetting(selectPostType){
if(selectPostType.length == 0)
return(false);
var objParent = selectPostType.parents(".unite_settings_wrapper");
if(objParent.length == 0)
objParent = selectPostType.parents(".wpb_edit_form_elements");
if(objParent.length == 0)
throw new Error("unable to find post list setting parent");
var selectPostCategory = objParent.find(".unite-setting-post-category");
if(selectPostCategory.length == 0)
return(false);
var dataPostTypes = selectPostType.data("arrposttypes");
if(typeof dataPostTypes == "string"){
dataPostTypes = g_parent.decodeContent(dataPostTypes);
dataPostTypes = JSON.parse(dataPostTypes);
}
selectPostType.change(function(){
var arrPostTypes = selectPostType.val();
//force array always
if(jQuery.isArray(arrPostTypes) == false)
arrPostTypes = [arrPostTypes];
selectPostCategory.html("");
var selectedID = selectPostCategory.val();
var isSomeCatSelected = false;
var htmlOptions = "";
htmlOptions += "<option value=''>[All Categories]</option>"
for(var postType of arrPostTypes){
var objPostType = g_parent.getVal(dataPostTypes, postType);
if(!objPostType)
continue;
var objCats = objPostType["cats"];
if(!objCats)
continue;
jQuery.each(objCats, function(catID, catText){
var catShowText = g_parent.htmlspecialchars(catText);
var selected = "";
if(selectedID == catID){
selected = " selected='selected'";
isSomeCatSelected = true;
}
htmlOptions += "<option value='"+catID+"' "+selected+">"+catShowText+"</option>"
});
}
selectPostCategory.html(htmlOptions);
if(isSomeCatSelected == false)
selectPostCategory.val("");
});
selectPostType.trigger("change");
}
function _______END_POST_LISTS_____(){}
/**
* init editors, if the editors not inited, init them
*/
this.initEditors = function (objSettings, isForce) {
var arrEditorNames = objSettings.getFieldNamesByType("editor_tinymce");
if (arrEditorNames.length === 0)
return;
// init on the next tick to pick the input value
setTimeout(function () {
initEditors_afterTimeout(objSettings, arrEditorNames, isForce);
});
}
/**
* destroy editors
*/
this.destroyEditors = function (objSettings) {
var arrEditorNames = objSettings.getFieldNamesByType("editor_tinymce");
if (arrEditorNames.length === 0)
return;
var idPrefix = objSettings.getIDPrefix();
jQuery.each(arrEditorNames, function (index, name) {
var editorID = idPrefix + name;
editorID = editorID.replace("#", "");
var objEditor = tinyMCE.EditorManager.get(editorID);
if (objEditor) {
try {
if (tinymce.majorVersion === "4")
window.tinyMCE.execCommand("mceRemoveEditor", !0, editorID);
else
window.tinyMCE.execCommand("mceRemoveControl", !0, editorID);
} catch (e) {
//
}
window.tinyMCEPreInit.mceInit[editorID] = null;
window.tinyMCEPreInit.qtInit[editorID] = null;
}
});
}
}