5377 lines
153 KiB
JavaScript
5377 lines
153 KiB
JavaScript
|
||
// The active pagelayer element
|
||
var pagelayer_active = {};
|
||
|
||
// List of pagelayer icons
|
||
var pagelayer_icons = {};
|
||
|
||
// The inline editor
|
||
var pagelayer_editor = {};
|
||
|
||
// The active pagelayer element
|
||
var pagelayer_active_tab = {};
|
||
|
||
// The menu items refrence
|
||
var pagelayer_menus_items_ref = {};
|
||
|
||
// Loads the Data
|
||
function pagelayer_data(jEle, clean){
|
||
|
||
var ret = new Object();
|
||
|
||
// Get the data
|
||
ret.tag = pagelayer_tag(jEle);
|
||
ret.id = pagelayer_id(jEle);
|
||
ret.$ = jEle;
|
||
|
||
var ref_data = pagelayer_el_data_ref(jEle);
|
||
|
||
// Parse the attributes
|
||
ret.atts = JSON.parse(JSON.stringify(ref_data['attr']));
|
||
ret.tmp = JSON.parse(JSON.stringify(ref_data['tmp']));
|
||
|
||
//console.log(ret.atts);
|
||
//console.log(ret.tmp);
|
||
|
||
clean = clean || false;
|
||
|
||
// Remove values which have 'req'. NOTE : 'show' ones will be allowed
|
||
if(clean){
|
||
|
||
var tag = ret.tag;
|
||
|
||
// Anything to set ?
|
||
ret.set = {};
|
||
|
||
// Function to clear any att data
|
||
var pagelayer_delete_atts = function(x){
|
||
delete ret.atts[x];
|
||
delete ret.atts[x+'_tablet'];// Any tablet and mobile values as well
|
||
delete ret.atts[x+'_mobile'];
|
||
delete ret.set[x];
|
||
}
|
||
|
||
// All props
|
||
var all_props = pagelayer_shortcodes[tag];
|
||
|
||
// Loop through all props
|
||
for(var i in pagelayer_tabs){
|
||
|
||
var tab = pagelayer_tabs[i];
|
||
|
||
section_loop1:
|
||
for(var section in all_props[tab]){
|
||
|
||
// Any section to skip by post type ?
|
||
if(!pagelayer_empty(all_props['post_type_cats'])){
|
||
for(var post_type in all_props['post_type_cats']){
|
||
if(pagelayer_post.post_type != post_type && jQuery.inArray(section, all_props['post_type_cats'][post_type]) > -1){
|
||
continue section_loop1;
|
||
}
|
||
}
|
||
}
|
||
|
||
var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
|
||
|
||
// In case of widgets its possible !
|
||
if(pagelayer_empty(props)){
|
||
continue;
|
||
}
|
||
|
||
for(var x in props){
|
||
|
||
var prop = props[x];
|
||
|
||
// Any prop to skip ?
|
||
if(!pagelayer_empty(all_props['skip_props']) && jQuery.inArray(x, all_props['skip_props']) > -1){
|
||
pagelayer_delete_atts(x);
|
||
continue;
|
||
}
|
||
|
||
// Are we to set this value ?
|
||
if(!(x in ret.atts) && 'default' in prop && !pagelayer_empty(prop['default'])){
|
||
|
||
// We need to make sure its not a PRO value
|
||
if(!('pro' in prop && pagelayer_empty(pagelayer_pro))){
|
||
|
||
var tmp_val = prop['default'];
|
||
|
||
// If there is a unit and there is no unit suffix in atts value
|
||
if('units' in prop){
|
||
if(jQuery.isNumeric(tmp_val)){
|
||
tmp_val = tmp_val+prop['units'][0];
|
||
}else{
|
||
var sep = 'sep' in prop ? prop['sep'] : ',';
|
||
var tmp2 = tmp_val.split(sep);
|
||
for(var k in tmp2){
|
||
if(jQuery.isNumeric(tmp2[k])){
|
||
tmp2[k] = tmp2[k]+prop['units'][0];
|
||
}
|
||
}
|
||
tmp_val = tmp2.join(sep);
|
||
}
|
||
}
|
||
|
||
//console.log(x+' - '+tmp_val);
|
||
ret.set[x] = tmp_val;
|
||
|
||
}
|
||
}
|
||
|
||
if(!('req' in prop)){
|
||
continue;
|
||
}
|
||
|
||
//console.log('[pagelayer_data] Cleaning :'+x);
|
||
|
||
// List of considerations
|
||
var show = prop['req'];
|
||
|
||
// We will hide by default
|
||
var toShow = true;
|
||
|
||
for(var showParam in show){
|
||
var reqval = show[showParam];
|
||
var except = showParam.substr(0, 1) == '!' ? true : false;
|
||
showParam = except ? showParam.substr(1) : showParam;
|
||
var val = ret.atts[showParam] || '';
|
||
|
||
//console.log('Show '+x+' '+showParam+' '+reqval+' '+val);
|
||
|
||
// Is the value not the same, then we can show
|
||
if(except){
|
||
|
||
if(typeof reqval == 'string' && reqval == val){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// Its an array and a value is found, then dont show
|
||
if(typeof reqval != 'string' && reqval.indexOf(val) > -1){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// The value must be equal
|
||
}else{
|
||
|
||
if(typeof reqval == 'string' && reqval != val){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// Its an array and no value is found, then dont show
|
||
if(typeof reqval != 'string' && reqval.indexOf(val) === -1){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
// Are we to show ?
|
||
if(!toShow){
|
||
//console.log('Delete : '+x);
|
||
pagelayer_delete_atts(x);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
return ret;
|
||
|
||
};
|
||
|
||
// Setup the properties
|
||
function pagelayer_elpd_setup(){
|
||
|
||
// The Dialag box of the element properties
|
||
// pagelayer-ELPD - Element Properties Dialog
|
||
pagelayer_elpd_html = '<div class="pagelayer-elpd-tabs">'+
|
||
'<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="settings" pagelayer-elpd-active-tab=1>Settings</div>'+
|
||
//'<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="styles">Style</div>'+
|
||
'<div class="pagelayer-elpd-tab" pagelayer-elpd-tab="options">Options</div>'+
|
||
'<div class="pagelayer-advanced-props pagelayer-elpd-tab pagelayer-hidden" pagelayer-elpd-tab="advanced">Advanced</div>'+
|
||
'<div class="pagelayer-elpd-options">'+
|
||
'<i class="pli pli-clone" ></i>'+
|
||
'<i class="pli pli-trashcan" ></i>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elpd-body"></div>'+
|
||
'<div class="pagelayer-elpd-holder"></div>';
|
||
|
||
// Create the dialog box
|
||
pagelayer.$$('#pagelayer-elpd').append(pagelayer_elpd_html);
|
||
pagelayer_elpd = pagelayer.$$('#pagelayer-elpd');
|
||
|
||
pagelayer.$$('.pagelayer-elpd-close').on('click', function(){
|
||
pagelayer_leftbar_tab('pagelayer-shortcodes');
|
||
pagelayer.$$('[pagelayer-widget-tab="widgets"]').click();
|
||
pagelayer.$$('.pagelayer-elpd-header').hide();
|
||
pagelayer.$$('.pagelayer-logo').show();
|
||
pagelayer.$$('.pagelayer-elpd-body').removeAttr('pagelayer-element-id').empty();
|
||
pagelayer_active = {};
|
||
});
|
||
|
||
// Copy
|
||
pagelayer.$$('.pagelayer-elpd-options>.pli-clone').on('click', function(){
|
||
pagelayer_copy_element(pagelayer_active.el.$);
|
||
});
|
||
|
||
// Delete
|
||
pagelayer.$$('.pagelayer-elpd-options>.pli-trashcan').on('click', function(){
|
||
pagelayer_delete_element(pagelayer_active.el.$);
|
||
//pagelayer.$$('.pagelayer-elpd-close').click();
|
||
});
|
||
|
||
// The advanced props
|
||
pagelayer_elpd.find('.pagelayer-advanced-props').on('click', function(e){
|
||
e.preventDefault();
|
||
e.stopPropagation();
|
||
var propsModal = pagelayer.$$('.pagelayer-props-modal');
|
||
if(propsModal.find('.pagelayer-meta-iframe').length < 1){
|
||
propsModal.find('.pagelayer-props-wrap').append('<iframe class="pagelayer-meta-iframe" src="'+ pagelayer_post_props +'" style="display:none"></iframe>');
|
||
propsModal.find('.pagelayer-meta-iframe').load(function(){
|
||
propsModal.find('.pagelayer-props-loading-screen').hide();
|
||
propsModal.find('.pagelayer-props-modal-close').css('visibility','visible');
|
||
jQuery(this).show();
|
||
});
|
||
}
|
||
|
||
propsModal.show();
|
||
pagelayer.$$('.pagelayer-meta-iframe').contents().find('.pagelayer-tab-items[data-tab="post_props"]').click();
|
||
});
|
||
|
||
// The tabs
|
||
pagelayer_elpd.find('.pagelayer-elpd-tab').on('click', function(){
|
||
|
||
var jEle = jQuery(this);
|
||
var attr = 'pagelayer-elpd-active-tab';
|
||
var tab = jEle.attr('pagelayer-elpd-tab');
|
||
|
||
if(tab == 'advanced'){
|
||
return;
|
||
}
|
||
|
||
pagelayer_elpd.find('.pagelayer-elpd-tab').each(function(){
|
||
jQuery(this).removeAttr(attr);
|
||
});
|
||
|
||
jEle.attr(attr, 1);
|
||
|
||
// Trigger the showing of rows
|
||
pagelayer_elpd_show_rows();
|
||
});
|
||
|
||
};
|
||
|
||
// Open the properties
|
||
function pagelayer_elpd_open(jEle){
|
||
|
||
// Set pagelayer history FALSE
|
||
pagelayer.history_action = false;
|
||
|
||
// Set the position of the element and show
|
||
//pagelayer_elpd.css('left', pagelayer_elpd_pos[0]);
|
||
//pagelayer_elpd.css('top', pagelayer_elpd_pos[1]);
|
||
pagelayer_leftbar_tab('pagelayer-elpd');
|
||
pagelayer.$$('[pagelayer-elpd-tab=settings]').show();
|
||
pagelayer.$$('.pagelayer-elpd-header').show();
|
||
pagelayer.$$('.pagelayer-logo').hide();
|
||
|
||
// The property holder
|
||
var holder = pagelayer.$$('.pagelayer-elpd-body');
|
||
holder.html(' ');
|
||
|
||
var el = pagelayer_elpd_generate(jEle, holder);
|
||
|
||
// Set the active element
|
||
pagelayer_active.el = el;
|
||
|
||
// Set the header
|
||
pagelayer.$$('.pagelayer-elpd-title').html('Edit '+pagelayer_shortcodes[el.tag]['name']);
|
||
|
||
// Set pagelayer history TRUE
|
||
pagelayer.history_action = true;
|
||
|
||
// Render tooltips for the ELPD
|
||
pagelayer_tooltip_setup();
|
||
|
||
};
|
||
|
||
// Show the properties window
|
||
function pagelayer_elpd_generate(jEle, holder){
|
||
|
||
// Get the id, tag, atts, data, etc
|
||
var el = pagelayer_data(jEle);
|
||
//console.log(el);
|
||
|
||
// Is it a valid type ?
|
||
if(pagelayer_empty(pagelayer_shortcodes[el.tag])){
|
||
pagelayer_error('Could not find this shortcode : '+el.tag);
|
||
return;
|
||
}
|
||
|
||
// Set the holder
|
||
holder.attr('pagelayer-element-id', el.id);
|
||
//console.log(el.id);
|
||
|
||
var all_props = pagelayer_shortcodes[el.tag];
|
||
|
||
var sec_open_class = 'pagelayer-elpd-section-open';
|
||
|
||
for(var i in pagelayer_tabs){
|
||
var tab = pagelayer_tabs[i];
|
||
var section_close = false;// First section always open
|
||
|
||
section_loop2:
|
||
for(var section in all_props[tab]){
|
||
//console.log(tab+' '+section);
|
||
|
||
// Any section to skip by post type ?
|
||
if(!pagelayer_empty(all_props['post_type_cats'])){
|
||
for(var post_type in all_props['post_type_cats']){
|
||
if(pagelayer_post.post_type != post_type && jQuery.inArray(section, all_props['post_type_cats'][post_type]) > -1){
|
||
continue section_loop2;
|
||
}
|
||
}
|
||
}
|
||
|
||
var props = section in pagelayer_shortcodes[el.tag] ? pagelayer_shortcodes[el.tag][section] : pagelayer_styles[section];
|
||
//console.log(props);
|
||
|
||
var sec = jQuery('<div class="pagelayer-elpd-section" section="'+section+'" pagelayer-show-tab="'+tab+'">'+
|
||
'<div class="pagelayer-elpd-section-name '+sec_open_class+'"><i class="pli"></i>'+all_props[tab][section]+'</div>'+
|
||
'<div class="pagelayer-elpd-section-rows"></div>'+
|
||
'</div>');
|
||
holder.append(sec);
|
||
|
||
// The row holder
|
||
sec = sec.find('.pagelayer-elpd-section-rows');
|
||
|
||
// Close all except the first section
|
||
if(section_close){
|
||
sec.hide().prev().removeClass(sec_open_class);
|
||
}
|
||
section_close = true;
|
||
|
||
if('widget' in all_props && section == 'params'){
|
||
pagelayer_elpd_widget_settings(el, sec, true);
|
||
continue;
|
||
}
|
||
|
||
var mode = pagelayer_get_screen_mode();
|
||
|
||
// Reset / Create the cache
|
||
for(var x in props){
|
||
|
||
props[x]['c'] = new Object();
|
||
props[x]['c']['val'] = '';// Blank Val
|
||
props[x]['c']['name'] = x;// Add the Name of the row i.e. attribute of the element
|
||
var prop_name = x;
|
||
|
||
// Do we have screen ?
|
||
if('screen' in props[x] && mode != 'desktop'){
|
||
prop_name = x +'_'+mode;
|
||
}
|
||
|
||
// Set default to value of attribute if any
|
||
if(prop_name in el.atts){
|
||
props[x]['c']['val'] = el.atts[prop_name];
|
||
}
|
||
|
||
// Set element
|
||
props[x]['el'] = el;
|
||
|
||
// Any prop to skip ?
|
||
if(!pagelayer_empty(all_props['skip_props']) && jQuery.inArray(x, all_props['skip_props']) > -1){
|
||
continue;
|
||
}
|
||
|
||
// Add the row
|
||
pagelayer_elpd_row(sec, tab, section, props, x);
|
||
|
||
}
|
||
|
||
// Hide empty sections
|
||
if(sec.html().length < 1){
|
||
//console.log(section+' - '+sec.html().length);
|
||
sec.parent().remove();
|
||
}
|
||
}
|
||
}
|
||
|
||
/*// Set the default values in the PROPERTIES
|
||
var fn_load = window['pagelayer_load_elp_'+el.tag];
|
||
|
||
if(typeof fn_load == 'function'){
|
||
fn_load(el, props);
|
||
}*/
|
||
|
||
// Hide clone and delete options
|
||
if(!pagelayer_empty(all_props['hide_active']) && (pagelayer_empty(pagelayer_active.el) || pagelayer_active.el.id == el.id)){
|
||
pagelayer.$$('.pagelayer-elpd-options').addClass('pagelayer-hidden');
|
||
}else{
|
||
pagelayer.$$('.pagelayer-elpd-options').removeClass('pagelayer-hidden');
|
||
}
|
||
|
||
// Add Advanced settings options for the props
|
||
if(el.tag == 'pl_post_props'){
|
||
pagelayer.$$('.pagelayer-elpd-tab[pagelayer-elpd-tab="advanced"]').removeClass('pagelayer-hidden');
|
||
}else{
|
||
pagelayer.$$('.pagelayer-elpd-tab[pagelayer-elpd-tab="advanced"]').addClass('pagelayer-hidden');
|
||
}
|
||
|
||
// Section open close
|
||
holder.find('>.pagelayer-elpd-section>.pagelayer-elpd-section-name').on('click', function(){
|
||
var _sec = jQuery(this);
|
||
var par = _sec.parent();
|
||
|
||
pagelayer_active_tab.id = el.id;
|
||
pagelayer_active_tab.section = par.attr('section');
|
||
|
||
// Get the active tab
|
||
var active_tab = pagelayer_elpd.find('[pagelayer-elpd-active-tab]').attr('pagelayer-elpd-tab');
|
||
|
||
// Close all but dont touch yourself
|
||
holder.children().each(function (){
|
||
var curSec = jQuery(this);
|
||
if(par.is(curSec)) return;// Skip the current option
|
||
if(curSec.attr('pagelayer-show-tab') != active_tab) return;// Skip the non active tabs as is
|
||
curSec.find('.pagelayer-elpd-section-rows').hide().prev().removeClass(sec_open_class);
|
||
});
|
||
|
||
// Now toggle your self
|
||
par.find('.pagelayer-elpd-section-rows').toggle();
|
||
|
||
if(_sec.next().is(':visible')){
|
||
_sec.addClass(sec_open_class);
|
||
}else{
|
||
_sec.removeClass(sec_open_class);
|
||
}
|
||
|
||
});
|
||
|
||
if(!pagelayer_empty(pagelayer_active_tab) && pagelayer_active_tab.id == el.id){
|
||
holder.find('>[section='+pagelayer_active_tab.section+']>.pagelayer-elpd-section-name').click();
|
||
}
|
||
|
||
// Handle the showing of rows
|
||
pagelayer_elpd_show_rows();
|
||
|
||
return el;
|
||
|
||
};
|
||
|
||
// Show a row
|
||
function pagelayer_elpd_row(holder, tab, section, props, name){
|
||
|
||
// The Prop
|
||
var prop = props[name];
|
||
//console.log(tab+' '+name+' '+prop.el.tag);
|
||
|
||
var fn = window['pagelayer_elp_'+prop['type']];
|
||
|
||
if(typeof fn == 'function'){
|
||
|
||
var row = jQuery('<div class="pagelayer-form-item" pagelayer-elp-name="'+name+'" />');
|
||
|
||
// Append the row
|
||
holder.append(row);
|
||
|
||
return pagelayer_elpd_render_row(row, prop);
|
||
|
||
}
|
||
|
||
};
|
||
|
||
// Render a row
|
||
function pagelayer_elpd_render_row(row, prop){
|
||
|
||
var fn = window['pagelayer_elp_'+prop['type']];
|
||
|
||
if('group' in prop){
|
||
row.attr('pagelayer-access-item', prop.group);
|
||
}
|
||
|
||
var fn_ui = window['pagelayer_elp_'+prop['type']+'_ui'];
|
||
|
||
// Is there a UI Handler ?
|
||
if(typeof fn_ui == 'function'){
|
||
|
||
fn_ui(row, prop);
|
||
|
||
// Use the default mechanism
|
||
}else{
|
||
|
||
// The label
|
||
pagelayer_elp_label(row, prop);
|
||
|
||
// The main property
|
||
fn(row, prop);
|
||
|
||
// Showing default button or not
|
||
if(pagelayer_properties_filter(prop['type']) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
|
||
pagelayer_show_default_button(row, prop, prop.c['val']);
|
||
}
|
||
|
||
// Is there a description ?
|
||
if(!pagelayer_empty(prop['desc'])){
|
||
pagelayer_elp_desc(row, prop['desc']);
|
||
}
|
||
|
||
}
|
||
|
||
if('script' in prop){
|
||
row.append('<script>'+prop.script+'</script>');
|
||
}
|
||
|
||
return row;
|
||
}
|
||
|
||
// Show the rows as per the active tab and also handle the rows that are supposed to be shown or not
|
||
function pagelayer_elpd_show_rows(){
|
||
|
||
//console.log('Called');
|
||
|
||
// Get the active tab
|
||
var active_tab = pagelayer_elpd.find('[pagelayer-elpd-active-tab]').attr('pagelayer-elpd-tab');
|
||
|
||
pagelayer_elpd.find('[pagelayer-show-tab]').each(function(){
|
||
var sec = jQuery(this);
|
||
|
||
// Is it the active tab ?
|
||
if(sec.attr('pagelayer-show-tab') != active_tab){
|
||
sec.hide();
|
||
}else{
|
||
sec.show();
|
||
}
|
||
});
|
||
|
||
// Find all Elements in the Property dialog and loop
|
||
pagelayer_elpd.find('[pagelayer-element-id]').each(function(){
|
||
|
||
var holder = jQuery(this);
|
||
var id = holder.attr('pagelayer-element-id');
|
||
var jEle = pagelayer_ele_by_id(id);
|
||
var tag = pagelayer_tag(jEle);
|
||
//console.log('Main : '+id+' - '+tag);
|
||
//console.log(pagelayer_active);
|
||
|
||
// All props
|
||
var all_props = pagelayer_shortcodes[tag];
|
||
|
||
// Loop through all props
|
||
for(var i in pagelayer_tabs){
|
||
|
||
var tab = pagelayer_tabs[i];
|
||
|
||
for(var section in all_props[tab]){
|
||
|
||
var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];
|
||
|
||
for(var x in props){
|
||
|
||
var prop = props[x];
|
||
|
||
// If the prop is a group, we continue
|
||
if(prop['type'] == 'group'){
|
||
continue;
|
||
}
|
||
|
||
// Find the row
|
||
var row = false;
|
||
|
||
holder.find('[pagelayer-elp-name="'+x+'"]').each(function(){
|
||
var j = jQuery(this);
|
||
var _id = j.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
//console.log(_id+' = '+id);
|
||
|
||
// Is the parent the same ?
|
||
if(_id == id){
|
||
row = j;
|
||
}
|
||
});
|
||
|
||
// Do you have a show or hide ?
|
||
if(!row){
|
||
//console.log('Not Found : '+x+' - '+id);
|
||
continue;
|
||
}
|
||
|
||
// Is the row visible ?
|
||
if(row.closest('[pagelayer-show-tab]').attr('pagelayer-show-tab') != active_tab){
|
||
row.hide();
|
||
continue;
|
||
}
|
||
|
||
// Now lets show or hide the element
|
||
if(!('req' in prop || 'show' in prop)){
|
||
row.show();
|
||
continue;
|
||
}
|
||
|
||
// List of considerations
|
||
var show = {};
|
||
|
||
// We have both req and show, so lets just combine the values and then show
|
||
// NOTE : We need to make an array and not just merge the 2 as they are references
|
||
if('req' in prop && 'show' in prop){
|
||
|
||
// Add the req values
|
||
show = JSON.parse(JSON.stringify(prop['req']));
|
||
|
||
// Now the show values need to be looped
|
||
for(var t in prop['show']){
|
||
show[t] = prop['show'][t];
|
||
}
|
||
|
||
}else{
|
||
show = 'req' in prop ? prop['req'] : prop['show'];
|
||
}
|
||
|
||
// We will hide by default
|
||
var toShow = true;
|
||
|
||
for(var showParam in show){
|
||
var reqval = show[showParam];
|
||
var except = showParam.substr(0, 1) == '!' ? true : false;
|
||
showParam = except ? showParam.substr(1) : showParam;
|
||
var val = pagelayer_get_att(jEle, showParam) || '';
|
||
|
||
//console.log('Show '+x+' '+showParam+' '+reqval+' '+val);
|
||
|
||
// Is the value not the same, then we can show
|
||
if(except){
|
||
|
||
if(typeof reqval == 'string' && reqval == val){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// Its an array and a value is found, then dont show
|
||
if(typeof reqval != 'string' && reqval.indexOf(val) > -1){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// The value must be equal
|
||
}else{
|
||
|
||
if(typeof reqval == 'string' && reqval != val){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
|
||
// Its an array and no value is found, then dont show
|
||
if(typeof reqval != 'string' && reqval.indexOf(val) === -1){
|
||
toShow = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// Are we to show ?
|
||
if(toShow){
|
||
row.show();
|
||
}else{
|
||
row.hide();
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
});
|
||
|
||
};
|
||
|
||
var pagelayer_widget_timer;
|
||
var pagelayer_widget_cache = {};
|
||
|
||
// Load the widget settings
|
||
function pagelayer_elpd_widget_settings(el, sec, onfocus){
|
||
|
||
var show_form = function(html){
|
||
|
||
sec.html('<form class="pagelayer-widgets-form">'+html+'</form>');
|
||
|
||
// Handle on form data change
|
||
sec.find('form :input').on('change', function(){
|
||
//console.log('Changed !');
|
||
|
||
// Clear any previous timeout
|
||
clearTimeout(pagelayer_widget_timer);
|
||
|
||
// Set a timer for constant change
|
||
pagelayer_widget_timer = setTimeout(function(){
|
||
pagelayer_elpd_widget_settings(el, sec);
|
||
//console.log('Calling');
|
||
}, 500);
|
||
|
||
});
|
||
}
|
||
|
||
// Is it onfocus ?
|
||
onfocus = onfocus || false;
|
||
|
||
// Its an onfocus
|
||
if(onfocus && el.id in pagelayer_widget_cache){
|
||
show_form(pagelayer_widget_cache[el.id]);
|
||
return true;
|
||
}
|
||
|
||
var post = {};
|
||
post['action'] = 'pagelayer_wp_widget';
|
||
post['pagelayer_nonce'] = pagelayer_ajax_nonce;
|
||
post['tag'] = el.tag;
|
||
post['pagelayer-id'] = el.id;
|
||
|
||
// Any atts ?
|
||
if('widget_data' in el.atts){
|
||
post['widget_data'] = el.atts['widget_data'];
|
||
}
|
||
|
||
// Post any existing data
|
||
var form = sec.find('form');
|
||
// Archive widget checkbox fix
|
||
var inputCheckbox = form.find('input[type=checkbox]');
|
||
for(var i=0; i<inputCheckbox.length; i++){
|
||
if(inputCheckbox[i].value == 'on'){
|
||
form.find('input[type=checkbox]')[i].value = 1;
|
||
}
|
||
}
|
||
|
||
if(form.length > 0){
|
||
//console.log(form.serialize());
|
||
post['values'] = form.serialize();
|
||
}
|
||
|
||
jQuery.ajax({
|
||
url: pagelayer_ajax_url,
|
||
type: 'post',
|
||
data: post,
|
||
success: function(data) {
|
||
//console.log('Widget Data');console.log(data);
|
||
|
||
// Show the form
|
||
if('form' in data){
|
||
show_form(data['form']);
|
||
|
||
// Store in cache
|
||
pagelayer_widget_cache[el.id] = data['form'];
|
||
}
|
||
|
||
// Show the content
|
||
if('html' in data){
|
||
el.$.html(data['html']);
|
||
pagelayer_sc_render(el.$);// Re-Render the CSS
|
||
}
|
||
|
||
// Any set attributes ?
|
||
if('widget_data' in data){
|
||
pagelayer_set_atts(el.$, 'widget_data', JSON.stringify(data['widget_data']));
|
||
}
|
||
|
||
},
|
||
fail: function(data) {
|
||
pagelayer_show_msg('Some error occured in getting the widget data', 'error');
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
// Will set the attribute and also render
|
||
function _pagelayer_set_atts(row, val, no_default){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var jEle = jQuery('[pagelayer-id='+id+']');
|
||
var tag = pagelayer_tag(jEle);
|
||
var prop_name = row.attr('pagelayer-elp-name');
|
||
var prop = pagelayer.props_ref[tag][prop_name];
|
||
|
||
// Is there a unit ?
|
||
var uEle = row.find('.pagelayer-elp-units');
|
||
if(uEle.length > 0 && !pagelayer_empty(val)){
|
||
var unit = uEle.find('[selected]').html();
|
||
if(Array.isArray(val)){
|
||
for(var i in val){
|
||
if(val[i].length < 1){
|
||
continue;
|
||
}
|
||
val[i] = val[i]+unit;
|
||
}
|
||
}else{
|
||
val = val+unit;
|
||
}
|
||
}
|
||
|
||
// Are we in another mode ?
|
||
var mode = ('screen' in prop && pagelayer_get_screen_mode() != 'desktop') ? '_'+pagelayer_get_screen_mode() : '';
|
||
|
||
pagelayer_set_atts(jEle, prop_name+mode, val);
|
||
|
||
// Are we to skip setting defaults ?
|
||
no_default = no_default || false;
|
||
if(!no_default){
|
||
|
||
// We need to set defaults for dependents
|
||
var hasSet = pagelayer_set_default_atts(jEle, 5);
|
||
|
||
// We need to reopen the left panel
|
||
// Note : If two simultaneous calls are made, then this will cause problems
|
||
// Also after this is called, ROW is destroyed and no other row related stuff will work i.e. set_atts in the same calls will fail
|
||
if(hasSet){
|
||
pagelayer_elpd_open(jEle);
|
||
}
|
||
}
|
||
//console.trace();console.log('Setting Attr');
|
||
|
||
// Render
|
||
pagelayer_sc_render(jEle);
|
||
|
||
// Show default button or not
|
||
if(pagelayer_properties_filter(prop) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
|
||
pagelayer_show_default_button(row, prop, val);
|
||
}
|
||
|
||
if('onchange' in prop){
|
||
var fn = window[prop['onchange']];
|
||
if(typeof fn === 'function'){
|
||
fn(jEle, row, val);
|
||
}
|
||
}
|
||
};
|
||
|
||
// Will set the attribute but not render
|
||
function _pagelayer_set_tmp_atts(row, suffix, val){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var jEle = jQuery('[pagelayer-id='+id+']');
|
||
pagelayer_set_tmp_atts(jEle, row.attr('pagelayer-elp-name')+(suffix.length > 0 ? '-'+suffix : ''), val);
|
||
};
|
||
|
||
// Will clear the attribute but not render
|
||
function _pagelayer_clear_tmp_atts(row){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var jEle = jQuery('[pagelayer-id='+id+']');
|
||
pagelayer_clear_tmp_atts(jEle, row.attr('pagelayer-elp-name'));
|
||
};
|
||
|
||
// Get the attribute of images only
|
||
function _pagelayer_img_tmp_atts(row){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var jEle = jQuery('[pagelayer-id='+id+']');
|
||
return pagelayer_img_tmp_atts(jEle, row.attr('pagelayer-elp-name'));
|
||
};
|
||
|
||
// Get the tmp att
|
||
function _pagelayer_get_tmp_att(row, suffix){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var jEle = jQuery('[pagelayer-id='+id+']');
|
||
return pagelayer_get_tmp_att(jEle, row.attr('pagelayer-elp-name')+'-'+suffix);
|
||
};
|
||
|
||
// Create the Label
|
||
function pagelayer_elp_label(row, prop){
|
||
row.append('<div class="pagelayer-elp-label-div" type="'+prop['type']+'"><label class="pagelayer-elp-label">'+prop['label']+'</label></div>');
|
||
|
||
var label = row.children('.pagelayer-elp-label-div');
|
||
|
||
// Do we have screen ?
|
||
if('screen' in prop){
|
||
var mode = pagelayer_get_screen_mode();
|
||
var screen = '<div class="pagelayer-elp-screen">'+
|
||
'<i class="pli pli-desktop" ></i>'+
|
||
'<i class="pli pli-tablet" ></i>'+
|
||
'<i class="pli pli-mobile" ></i>'+
|
||
'<i class="pagelayer-prop-screen pli pli-'+mode+'" ></i>'+
|
||
'</div>';
|
||
label.append(screen);
|
||
|
||
// Set screen mode on change
|
||
label.find('.pli:not(.pagelayer-prop-screen)').on('click', function(){
|
||
var mode = 'desktop';
|
||
var jEle = jQuery(this);
|
||
|
||
// Tablet ?
|
||
if(jEle.hasClass('pli-tablet')){
|
||
mode = 'tablet';
|
||
}
|
||
|
||
// Mobile ?
|
||
if(jEle.hasClass('pli-mobile')){
|
||
mode = 'mobile';
|
||
}
|
||
|
||
pagelayer_set_screen_mode(mode);
|
||
label.find('.pagelayer-elp-screen .pli').removeClass('open');
|
||
|
||
});
|
||
|
||
// On change of screen handle the values
|
||
label.find('.pagelayer-elp-screen').on('pagelayer-screen-changed', function(e){
|
||
|
||
label.find('.pagelayer-elp-screen .pli').removeClass('open');
|
||
var mode = pagelayer_get_screen_mode();
|
||
var modes = {desktop: '', tablet: '_tablet', mobile: '_mobile'};
|
||
|
||
// Get the current current new val
|
||
prop.c['val'] = pagelayer_get_att(prop.el.$, prop.c['name']+modes[mode]);
|
||
|
||
// Handle the amount
|
||
if(pagelayer_empty(prop.c['val'])){
|
||
prop.c['val'] = '';
|
||
}
|
||
|
||
// Remove the siblings
|
||
label.siblings().each(function(){
|
||
var j = jQuery(this);
|
||
|
||
if(j.hasClass('pagelayer-elp-desc')){
|
||
return;
|
||
}
|
||
|
||
j.remove();
|
||
});
|
||
|
||
// Create the vals again
|
||
var fn = window['pagelayer_elp_'+prop['type']];
|
||
|
||
// The main property
|
||
fn(row, prop);
|
||
|
||
});
|
||
|
||
label.find('.pagelayer-elp-screen .pagelayer-prop-screen').on('click', function(e){
|
||
jQuery(this).siblings().toggleClass('open');
|
||
})
|
||
|
||
}
|
||
|
||
// Do we have pro version requirement ?
|
||
if('pro' in prop && pagelayer_empty(pagelayer_pro)){
|
||
var txt = prop['pro'].length > 1 ? prop['pro'] : pagelayer.pro_txt;
|
||
var pro = jQuery('<div class="pagelayer-pro-req">Pro</div>');
|
||
pro.attr('data-tlite', txt);
|
||
label.append(pro);
|
||
}
|
||
|
||
// Do we have units ?
|
||
if('units' in prop){
|
||
|
||
var units = '';
|
||
var tmp_val = prop.c['val'];
|
||
var default_unit = 0;
|
||
|
||
// Get unit from value
|
||
if(!(pagelayer_empty(tmp_val))){
|
||
|
||
for(var i in prop['units']){
|
||
if(pagelayer_is_string(tmp_val) && tmp_val.search(prop['units'][i]) != -1){
|
||
default_unit = i;
|
||
}else if(tmp_val[0].search(prop['units'][i]) != -1 ){
|
||
default_unit = i;
|
||
}
|
||
}
|
||
}
|
||
|
||
for(var i in prop['units']){
|
||
units += '<span '+(i == default_unit ? 'selected' : '')+'>'+prop['units'][i]+'</span>';
|
||
}
|
||
|
||
label.append('<div class="pagelayer-elp-units">'+units+'</div>');
|
||
|
||
// Set unit on change
|
||
label.find('.pagelayer-elp-units span').on('click', function(){
|
||
|
||
label.find('.pagelayer-elp-units span').each(function(){
|
||
jQuery(this).removeAttr('selected');
|
||
});
|
||
|
||
jQuery(this).attr('selected', 1);
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// Include default button
|
||
if(pagelayer_properties_filter(prop['type']) && pagelayer_empty(row.find('.pagelayer-pro-req').length)){
|
||
|
||
var defaultButton = '<span class="pagelayer-elp-default" title="'+pagelayer_l('back_to_default')+'" ><i class="fas fa-undo"></i></span>';
|
||
label.append(defaultButton);
|
||
|
||
label.find('.pagelayer-elp-default').on('click', function(){
|
||
|
||
prop.c['val'] = ('default' in prop) ? prop.default : '';
|
||
_pagelayer_set_atts(row, prop.c['val']);
|
||
|
||
jQuery(this).attr('data_show',false);
|
||
|
||
// Empty the row
|
||
row.html('');
|
||
|
||
// Re-render the row
|
||
pagelayer_elpd_render_row(row, prop);
|
||
|
||
});
|
||
}
|
||
};
|
||
|
||
// Create the Description
|
||
function pagelayer_elp_desc(row, label){
|
||
row.append('<div class="pagelayer-elp-desc">'+label+'</div>');
|
||
};
|
||
|
||
// The Text property
|
||
function pagelayer_elp_text(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-text-div">'+
|
||
'<input type="text" class="pagelayer-elp-text" name="'+prop.c['name']+'" value="'+pagelayer_htmlEntities(prop.c['val'])+'"></input>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('input').on('input', function(){
|
||
_pagelayer_set_atts(row, jQuery(this).val());// Save and Render
|
||
});
|
||
|
||
};
|
||
|
||
// The Select property
|
||
function pagelayer_elp_select(row, prop){
|
||
|
||
var options = '';
|
||
var option = function(val, lang){
|
||
var selected = (val != prop.c['val']) ? '' : 'selected="selected"';
|
||
return '<option class="pagelayer-elp-select-option" value="'+val+'" '+selected+'>'+lang+'</option>';
|
||
}
|
||
|
||
for (x in prop['list']){
|
||
|
||
// Single item
|
||
if(typeof prop['list'][x] == 'string'){
|
||
options += option(x, prop['list'][x]);
|
||
|
||
// Groups
|
||
}else{
|
||
options += '<optgroup label="'+x+'">';
|
||
|
||
for(var y in prop['list'][x]){
|
||
options += option(y, prop['list'][x][y]);
|
||
}
|
||
|
||
options += '</optgroup>';
|
||
}
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-select-div pagelayer-elp-pos-rel">'+
|
||
'<select class="pagelayer-elp-select pagelayer-select" name="'+prop.c['name']+'">'+options+'</select>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('select').on('change', function(){
|
||
|
||
var sEle = jQuery(this);
|
||
|
||
if(sEle.attr('name') == "animation"){
|
||
_pagelayer_trigger_anim(row, sEle.val());
|
||
}
|
||
|
||
_pagelayer_set_atts(row, sEle.val());// Save and Render
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The MultiSelect property
|
||
function pagelayer_elp_multiselect(row, prop){
|
||
|
||
var selection = [];
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
//selection = JSON.parse(prop.c['val']);
|
||
selection = prop.c['val'].split(',');
|
||
}
|
||
|
||
var options = '';
|
||
var option = function(val, lang){
|
||
var selected = (jQuery.inArray(val,selection) == -1 ? '' : 'selected="selected"');
|
||
return '<li class="pagelayer-elp-multiselect-option" data-val="'+val+'" '+selected+'>'+lang+'</li>';
|
||
}
|
||
|
||
var show_sel = function(val){
|
||
var sel_html = '';
|
||
jQuery.each(val, function(index, value){
|
||
sel_html += '<span class="pagelayer-elp-multiselect-selected" data-val="'+value+'">'+prop['list'][value]+' <span class="pagelayer-elp-multiselect-remove">x</span></span>';
|
||
});
|
||
return sel_html;
|
||
}
|
||
|
||
var setup_remove = function(){
|
||
row.find('.pagelayer-elp-multiselect-remove').on('click', function(){
|
||
var sVal = jQuery(this).parent().attr('data-val');
|
||
row.find('.pagelayer-elp-multiselect-option[data-val='+sVal+']').click();
|
||
});
|
||
}
|
||
|
||
for (x in prop['list']){
|
||
options += option(x, prop['list'][x]);
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-multiselect-div pagelayer-elp-pos-rel">'+
|
||
'<div class="pagelayer-elp-multiselect">'+show_sel(selection)+'</div>'+
|
||
'<ul class="pagelayer-elp-multiselect-ul" name="'+prop.c['name']+'">'+options+'</ul>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
setup_remove();
|
||
|
||
row.find('.pagelayer-elp-multiselect-option').on('click', function(){
|
||
|
||
var sVal = jQuery(this).attr('data-val');
|
||
|
||
if(jQuery.inArray(sVal,selection) == -1){
|
||
selection.push(sVal);
|
||
row.find('[data-val="'+sVal+'"]').attr('selected','selected');
|
||
}else{
|
||
selection.splice(jQuery.inArray(sVal,selection),1);
|
||
row.find('[data-val="'+sVal+'"]').removeAttr('selected');
|
||
}
|
||
|
||
//_pagelayer_set_atts(row,JSON.stringify(selection));// Save and Render
|
||
_pagelayer_set_atts(row, selection.join(','));// Save and Render
|
||
|
||
row.find('.pagelayer-elp-multiselect').html(show_sel(selection));
|
||
setup_remove();
|
||
|
||
});
|
||
|
||
// Open the selector
|
||
row.find('.pagelayer-elp-multiselect').on('click', function(){
|
||
row.find('.pagelayer-elp-multiselect-ul').slideToggle(100);
|
||
});
|
||
|
||
}
|
||
|
||
function _pagelayer_trigger_anim(row, anim){
|
||
var id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id');
|
||
var classList = jQuery('[pagelayer-id='+id+']').attr('class');
|
||
classList = classList.split(/\s+/);
|
||
//console.log(classList);
|
||
var options = [];
|
||
row.find('option').each(function(){
|
||
var found = jQuery.inArray( jQuery(this).val(), classList );
|
||
if( found != -1){
|
||
//var found = jQuery(this).val();
|
||
jQuery('[pagelayer-id='+id+']').removeClass(jQuery(this).val());
|
||
//break;
|
||
}
|
||
//options.push(jQuery(this).val());
|
||
});
|
||
jQuery('[pagelayer-id='+id+']').removeClass('pagelayer-wow').addClass(anim + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function(){
|
||
jQuery(this).removeClass(anim+ ' animated');
|
||
});
|
||
}
|
||
|
||
// The Checkbox property
|
||
function pagelayer_elp_checkbox(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-checkbox-div">'+
|
||
'<input type="checkbox" name="'+prop.c['name']+'" class="pagelayer-elp-checkbox" />'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
if(prop.c['val'].length > 0){
|
||
row.find('input').attr('checked', 'checked');
|
||
}else{
|
||
row.find('input').removeAttr('checked');
|
||
}
|
||
|
||
// When the change is called
|
||
row.find('input').on('change', function(){
|
||
|
||
// We set to string true or false
|
||
var val = jQuery(this).is(':checked') ? 'true' : '';
|
||
|
||
_pagelayer_set_atts(row, val);// Save and Render
|
||
});
|
||
|
||
}
|
||
|
||
// The Radio property
|
||
function pagelayer_elp_radio(row, prop){
|
||
|
||
var active = 'pagelayer-elp-radio-active';
|
||
var div = '<div class="pagelayer-elp-radio-div">';
|
||
|
||
for(var x in prop.list){
|
||
var addclass = (prop.c['val'] == x) ? active : '';
|
||
div += '<a class="pagelayer-elp-radio '+addclass+'" val="'+x+'">'+prop.list[x]+'</a>';
|
||
}
|
||
|
||
div += '</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-radio').each(function(){
|
||
|
||
jQuery(this).on('click', function (){
|
||
|
||
// Remove existing active class
|
||
jQuery(this).parent().find('.'+active).removeClass(active);
|
||
|
||
// Set active
|
||
jQuery(this).addClass(active);
|
||
|
||
_pagelayer_set_atts(row, jQuery(this).attr('val'));// Save and Render
|
||
|
||
});
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The Image Property
|
||
function pagelayer_elp_image(row, prop){
|
||
|
||
var imgObj = {};
|
||
var isRetina = false;
|
||
|
||
// Is retina images options?
|
||
if('retina' in prop && !pagelayer_empty(prop['retina'])){
|
||
isRetina = true;
|
||
}
|
||
|
||
// Previously saved values
|
||
if(typeof prop.c['val'] === 'object'){
|
||
imgObj = prop.c['val'];
|
||
}else{
|
||
imgObj['img'] = prop.c['val'];
|
||
}
|
||
|
||
var tmp = prop.c['name']+'-url';
|
||
var def = pagelayer.blank_img;
|
||
|
||
// Background image URls
|
||
var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : ((!pagelayer_empty(imgObj['img']) && String(imgObj['img']).search(/http(|s):\/\//i) == 0) ? imgObj['img'] : def );
|
||
|
||
// Do we have a URL set ?
|
||
var style = 'style="background-image:url(\''+src+'\')"';
|
||
|
||
var div = '<div class="pagelayer-elp-image-div">'+
|
||
'<div class="pagelayer-elp-drop-zone">'+
|
||
'<div>'+
|
||
'<i class="fas fa-upload"></i>'+
|
||
'<h4>'+pagelayer_l('drop_file')+'</h4>'+
|
||
'<div class="pagelayer-elp-img-up-progress">'+
|
||
'<div class="pagelayer-elp-img-up-bar"></div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-image" '+style+'></div>'+
|
||
'<div class="pagelayer-elp-image-delete"><i class="pli pli-trashcan" ></i></div>';
|
||
|
||
// Retina image icon
|
||
if(isRetina){
|
||
div += '<div class="pagelayer-elp-image-retina"><i class="pli pli-eye" ></i></div>';
|
||
}
|
||
|
||
div +='</div>';
|
||
|
||
// Add retina images option
|
||
if(isRetina){
|
||
|
||
var tmp_retina = prop.c['name']+'-retina-url';
|
||
var tmp_retina_mobile = prop.c['name']+'-retina-mobile-url';
|
||
|
||
var srcRetina = (tmp_retina in prop.el.tmp) ? prop.el.tmp[tmp_retina] : (('retina' in imgObj && !pagelayer_empty(imgObj['retina']) && String(imgObj['retina']).search(/http(|s):\/\//i) == 0) ? imgObj['retina'] : def );
|
||
|
||
var srcRetinaMobile = (tmp_retina_mobile in prop.el.tmp) ? prop.el.tmp[tmp_retina_mobile] : (('retina_mobile' in imgObj && !pagelayer_empty(imgObj['retina_mobile']) && String(imgObj['retina_mobile']).search(/http(|s):\/\//i) == 0) ? imgObj['retina_mobile'] : def );
|
||
|
||
var style_retina = 'style="background-image:url(\''+srcRetina+'\')"';
|
||
var style_retina_mobile = 'style="background-image:url(\''+srcRetinaMobile+'\')"';
|
||
|
||
div +='<div class="pagelayer-elp-label-div pagelayer-retina-label" type="image" style="display:none;">'+
|
||
'<label class="pagelayer-elp-label">Select Retina Image</label>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-retina-image-div" style="display:none;">'+
|
||
'<div class="pagelayer-elp-drop-zone">'+
|
||
'<div>'+
|
||
'<i class="fas fa-upload"></i>'+
|
||
'<h4>'+pagelayer_l('drop_file')+'</h4>'+
|
||
'<div class="pagelayer-elp-img-up-progress">'+
|
||
'<div class="pagelayer-elp-img-up-bar"></div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-image pagelayer-retina" '+style_retina+'></div>'+
|
||
'<div class="pagelayer-elp-retina-delete"><i class="pli pli-trashcan" ></i></div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-form-item">'+
|
||
'<div class="pagelayer-elp-label-div pagelayer-retina-label" type="image" style="display:none;">'+
|
||
'<label class="pagelayer-elp-label">Select Retina Image For Mobile</label>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-checkbox-div pagelayer-retina-label" style="display:none;">'+
|
||
'<input type="checkbox" name="overlay" class="pagelayer-elp-checkbox pagelayer-retina-checkbox">'+
|
||
'</div>'+
|
||
'</div>'+
|
||
|
||
'<div class="pagelayer-elp-retina-mobile-image-div" style="display:none;">'+
|
||
'<div class="pagelayer-elp-drop-zone">'+
|
||
'<div>'+
|
||
'<i class="fas fa-upload"></i>'+
|
||
'<h4>'+pagelayer_l('drop_file')+'</h4>'+
|
||
'<div class="pagelayer-elp-img-up-progress">'+
|
||
'<div class="pagelayer-elp-img-up-bar"></div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-image pagelayer-retina-mobile" '+style_retina_mobile+'></div>'+
|
||
'<div class="pagelayer-elp-retina-mobile-delete"><i class="pli pli-trashcan" ></i></div>'+
|
||
'</div>';
|
||
}
|
||
|
||
row.append(div);
|
||
|
||
if(def == src && jQuery.isNumeric(imgObj['img'])){
|
||
wp.media.attachment(imgObj['img']).fetch().then(function (data){
|
||
var fetch_url = wp.media.attachment(imgObj['img']).get('url')
|
||
row.find('.pagelayer-elp-image-div .pagelayer-elp-image').css('background-image', 'url(\''+fetch_url+'\')');
|
||
_pagelayer_set_tmp_atts(row, 'url', fetch_url);
|
||
}).fail(function(){
|
||
row.find('.pagelayer-elp-image-div .pagelayer-elp-image').css('background-image', 'url(\''+src+'\')')
|
||
});
|
||
}
|
||
|
||
if(isRetina){
|
||
if(def == srcRetina && 'retina' in imgObj && jQuery.isNumeric(imgObj['retina'])){
|
||
wp.media.attachment(imgObj['retina']).fetch().then(function (data){
|
||
var fetch_url = wp.media.attachment(imgObj['retina']).get('url')
|
||
row.find('.pagelayer-retina').css('background-image', 'url(\''+fetch_url+'\')');
|
||
_pagelayer_set_tmp_atts(row, 'retina-url', fetch_url);
|
||
}).fail(function(){
|
||
row.find('.pagelayer-retina').css('background-image', 'url(\''+srcRetina+'\')')
|
||
});
|
||
}
|
||
|
||
if(def == srcRetinaMobile && 'retina_mobile' in imgObj && jQuery.isNumeric(imgObj['retina_mobile'])){
|
||
wp.media.attachment(imgObj['retina_mobile']).fetch().then(function (data){
|
||
var fetch_url = wp.media.attachment(imgObj['retina_mobile']).get('url')
|
||
row.find('.pagelayer-retina-mobile').css('background-image', 'url(\''+fetch_url+'\')');
|
||
_pagelayer_set_tmp_atts(row, 'retina-mobile-url', fetch_url);
|
||
}).fail(function(){
|
||
row.find('.pagelayer-retina-mobile').css('background-image', 'url(\''+srcRetinaMobile+'\')')
|
||
});
|
||
}
|
||
}
|
||
|
||
var getImgVal = function(val){
|
||
|
||
if(typeof val === 'object' && pagelayer_length(val) == 1 && 'img' in val){
|
||
return val['img'];
|
||
}
|
||
|
||
return val;
|
||
}
|
||
|
||
// Set an Image
|
||
row.find('.pagelayer-elp-image').on('click', function(){
|
||
|
||
var button = jQuery(this);
|
||
var inRetina = button.hasClass('pagelayer-retina');
|
||
var inRetinaM = button.hasClass('pagelayer-retina-mobile');
|
||
|
||
// Load the frame
|
||
var frame = pagelayer_select_frame('image');
|
||
|
||
// On select update the stuff
|
||
frame.on({
|
||
'select': function(){
|
||
|
||
var state = frame.state();
|
||
var id = url = '';
|
||
|
||
// External URL
|
||
if('props' in state){
|
||
|
||
id = url = pagelayer_parse_theme_vars(state.props.attributes.url);
|
||
|
||
// Internal from gallery
|
||
}else{
|
||
|
||
var attachment = frame.state().get('selection').first().toJSON();
|
||
|
||
// Set the new ID and URL
|
||
id = attachment.id;
|
||
url = attachment.url;
|
||
var old = _pagelayer_img_tmp_atts(row);
|
||
|
||
//console.log(attachment);
|
||
if(inRetina){
|
||
// To remove past temp attr so that they are not involve in future temp values
|
||
delete old[prop.c['name']+'-retina-url'];
|
||
|
||
// Keep a list of all sizes
|
||
for(var x in attachment.sizes){
|
||
_pagelayer_set_tmp_atts(row, 'retina-'+x+'-url', attachment.sizes[x].url);
|
||
delete old[prop.c['name']+'-retina-'+x+'-url'];
|
||
}
|
||
|
||
for(var x in old){
|
||
|
||
// Skip for retina and with url atts
|
||
if(! x.endsWith('-url') || !x.startsWith(prop.c['name']+'-retina') || x.startsWith(prop.c['name']+'-retina-mobile')){
|
||
continue;
|
||
}
|
||
|
||
_pagelayer_set_tmp_atts(row, x, '');
|
||
}
|
||
|
||
}else if(inRetinaM){
|
||
|
||
// To remove past temp attr so that they are not involve in future temp values
|
||
delete old[prop.c['name']+'-retina-mobile-url'];
|
||
|
||
// Keep a list of all sizes
|
||
for(var x in attachment.sizes){
|
||
_pagelayer_set_tmp_atts(row, 'retina-mobile-'+x+'-url', attachment.sizes[x].url);
|
||
delete old[prop.c['name']+'-retina-mobile-'+x+'-url'];
|
||
}
|
||
|
||
for(var x in old){
|
||
|
||
// Skip for retina and with url atts
|
||
if(! x.endsWith('-url') || ! x.startsWith(prop.c['name']+'-retina-mobile')){
|
||
continue;
|
||
}
|
||
|
||
_pagelayer_set_tmp_atts(row, x, '');
|
||
}
|
||
|
||
}else{
|
||
|
||
// To remove past temp attr so that they are not involve in future temp values
|
||
delete old[prop.c['name']+'-url'];
|
||
|
||
// Keep a list of all sizes
|
||
for(var x in attachment.sizes){
|
||
_pagelayer_set_tmp_atts(row, x+'-url', attachment.sizes[x].url);
|
||
delete old[prop.c['name']+'-'+x+'-url'];
|
||
}
|
||
|
||
for(var x in old){
|
||
|
||
// Skip for retina and with url atts
|
||
if(! x.endsWith('-url') || x.startsWith(prop.c['name']+'-retina')){
|
||
continue;
|
||
}
|
||
|
||
_pagelayer_set_tmp_atts(row, x, '');
|
||
}
|
||
}
|
||
}
|
||
|
||
// Update thumbnail
|
||
button.css('background-image', 'url(\''+url+'\')');
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'no-image-set', '');
|
||
|
||
if(inRetina){
|
||
_pagelayer_set_tmp_atts(row, 'retina-url', url);
|
||
imgObj['retina'] = id;
|
||
}else if(inRetinaM){
|
||
_pagelayer_set_tmp_atts(row, 'retina-mobile-url', url);
|
||
imgObj['retina_mobile'] = id;
|
||
}else{
|
||
_pagelayer_set_tmp_atts(row, 'url', url);
|
||
imgObj['img'] = id;
|
||
}
|
||
|
||
_pagelayer_set_atts(row, getImgVal(imgObj));
|
||
|
||
},
|
||
// On open select the appropriate images in the media manager
|
||
'open': function() {
|
||
var selection = frame.state().get('selection');
|
||
var wp_id = pagelayer_get_att(prop.el.$, prop.c['name']);
|
||
|
||
if(typeof wp_id === 'object'){
|
||
if(inRetina){
|
||
wp_id = ('retina' in wp_id && !pagelayer_empty(wp_id['retina']) ? wp_id['retina'] : 0 );
|
||
}else if(inRetinaM){
|
||
wp_id = ('retina_mobile' in wp_id && !pagelayer_empty(wp_id['retina_mobile']) ? wp_id['retina_mobile'] : 0 );
|
||
}else{
|
||
wp_id = (!pagelayer_empty(wp_id['img']) ? wp_id['img'] : 0 );
|
||
}
|
||
}
|
||
|
||
selection.reset( wp_id ? [ wp.media.attachment( wp_id ) ] : [] );
|
||
}
|
||
});
|
||
|
||
frame.open(button);
|
||
|
||
return false;
|
||
|
||
});
|
||
|
||
// Finding and assigning values in the variables
|
||
var dropzoneParent = row.find('.pagelayer-elp-image-div');
|
||
var dropZone = row.find('.pagelayer-elp-drop-zone');
|
||
|
||
// Inserting values in image drag and drop function
|
||
pagelayer_img_dragAndDrop(dropzoneParent, dropZone, '', row);
|
||
|
||
row.find('.pagelayer-elp-image-retina').click(function(){
|
||
row.find('.pagelayer-retina-label').toggle();
|
||
row.find('.pagelayer-elp-retina-image-div').toggle();
|
||
var checkval = row.find('.pagelayer-retina-checkbox').is(":checked");
|
||
|
||
if(checkval == true){
|
||
row.find('.pagelayer-retina-checkbox').trigger("click");
|
||
}
|
||
});
|
||
|
||
row.find('.pagelayer-retina-checkbox').click(function(){
|
||
row.find('.pagelayer-elp-retina-mobile-image-div').toggle();
|
||
});
|
||
|
||
// Delete this
|
||
row.find('.pagelayer-elp-image-delete').on('click', function(){
|
||
|
||
// Update thumbnail
|
||
jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
|
||
|
||
// Set to blank and render
|
||
_pagelayer_set_atts(row, '', true);
|
||
|
||
imgObj['img'] = def;
|
||
|
||
_pagelayer_set_tmp_atts(row, 'no-image-set', 1);
|
||
_pagelayer_set_tmp_atts(row, 'url', def);
|
||
_pagelayer_set_atts(row, getImgVal(imgObj));
|
||
});
|
||
|
||
row.find('.pagelayer-elp-retina-delete').on('click', function(){
|
||
// Update thumbnail
|
||
jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
|
||
delete imgObj['retina'];
|
||
|
||
_pagelayer_set_tmp_atts(row, 'retina-url', def);
|
||
_pagelayer_set_atts(row, getImgVal(imgObj));
|
||
|
||
});
|
||
|
||
row.find('.pagelayer-elp-retina-mobile-delete').on('click', function(){
|
||
|
||
// Update thumbnail
|
||
jQuery(this).parent().find('.pagelayer-elp-image').css('background-image', 'url(\''+def+'\')');
|
||
delete imgObj['retina_mobile'];
|
||
|
||
// Set to blank and render
|
||
_pagelayer_set_tmp_atts(row, 'retina-mobile-url', def);
|
||
_pagelayer_set_atts(row, getImgVal(imgObj));
|
||
|
||
});
|
||
}
|
||
|
||
// Main image drag and drop function
|
||
function pagelayer_img_dragAndDrop(dropzoneParent, dropZone, jEle, row){
|
||
|
||
var reset_dragging = false;
|
||
|
||
dropzoneParent.on('dragover', function(e){
|
||
e.preventDefault();
|
||
// Checking that the dragged element is a file or not
|
||
var dt = e.originalEvent.dataTransfer;
|
||
if(dt.types && (dt.types.indexOf ? dt.types.indexOf('Files') != -1 : dt.types.contains('Files'))){
|
||
if(e.originalEvent.dataTransfer.items[0].type.search('image/')!=-1){
|
||
dropZone.show();
|
||
reset_dragging = true;
|
||
}
|
||
}
|
||
});
|
||
|
||
dropzoneParent.on('dragleave', function(e){
|
||
var rect = this.getBoundingClientRect();
|
||
// Checking that the cursor is in the drag area or not
|
||
if (e.clientX >= (rect.left + rect.width) || e.clientX <= rect.left || e.clientY >= (rect.top + rect.height) || e.clientY <= rect.top) {
|
||
dropZone.hide();
|
||
reset_dragging = false;
|
||
}
|
||
});
|
||
|
||
dropzoneParent.on('drop', function(e){
|
||
|
||
// Is not dropable?
|
||
if(!reset_dragging){
|
||
return;
|
||
}
|
||
|
||
e.preventDefault();
|
||
var pagelayer_ajax_func = {};
|
||
|
||
// This function for ajax success call back
|
||
pagelayer_ajax_func['success'] = function(obj){
|
||
|
||
if(obj['success']){
|
||
|
||
// Set the new ID and URL
|
||
id = obj['data']['id'];
|
||
url = obj['data']['url'];
|
||
|
||
if(row == ''){
|
||
// Getting Id of jEle
|
||
var widgetid = jEle.closest('[pagelayer-id]').attr('pagelayer-id');
|
||
|
||
// Finding widget image setting using id of jEle. Finding image editor setting from all of the other settings.
|
||
row = pagelayer.$$('[pagelayer-element-id='+widgetid+']').find('.pagelayer-elp-image').eq(0).parent().parent();
|
||
}
|
||
|
||
row.find('.pagelayer-elp-image').css('background-image', 'url(\''+url+'\')');
|
||
|
||
// To remove past temp attr so that they are not involve in future temp values
|
||
var cname = row.attr('pagelayer-elp-name');
|
||
var old = _pagelayer_img_tmp_atts(row);
|
||
delete old[cname+'-url'];
|
||
|
||
for(var x in obj['data']['sizes']){
|
||
_pagelayer_set_tmp_atts(row, x+'-url', obj['data']['sizes'][x]['url']);
|
||
delete old[cname+'-'+x+'-url'];
|
||
}
|
||
|
||
for(var x in old){
|
||
_pagelayer_set_tmp_atts(row, x+'-url', '');
|
||
}
|
||
|
||
dropZone.find('.pagelayer-elp-img-up-bar').css('width', '3%');
|
||
dropZone.hide();
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'url', url);
|
||
_pagelayer_set_atts(row, id);
|
||
|
||
}else{
|
||
alert(obj['data']['message']);
|
||
}
|
||
}
|
||
|
||
// This function for ajax before send call back
|
||
pagelayer_ajax_func['beforeSend'] = function(xhr){
|
||
// It activate the image widget
|
||
if(row == ''){
|
||
jEle.click();
|
||
}
|
||
}
|
||
|
||
// This function for how much file is uploaded or for progress bar
|
||
pagelayer_ajax_func['uploadProgress'] = function(xhr){
|
||
xhr.upload.addEventListener("progress", function(evt) {
|
||
if (evt.lengthComputable) {
|
||
var percentComplete = evt.loaded / evt.total;
|
||
percentComplete = parseInt(percentComplete * 100);
|
||
|
||
if(row == ''){
|
||
dropZone.find('.pagelayer-img-up-bar').css('width', percentComplete+'%');
|
||
}else{
|
||
dropZone.find('.pagelayer-elp-img-up-bar').css('width', percentComplete+'%');
|
||
}
|
||
}
|
||
}, false);
|
||
return xhr;
|
||
}
|
||
|
||
// Uploading image to the media library
|
||
pagelayer_editable_paste_handler(e.originalEvent.dataTransfer.files[0], pagelayer_ajax_func);
|
||
|
||
reset_dragging = false;
|
||
|
||
});
|
||
}
|
||
|
||
// The Multi Image Property
|
||
function pagelayer_elp_multi_image(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-multi_image-div">'+
|
||
'<center><button class="pagelayer-elp-button">'+pagelayer_l('Add Images')+'</button></center>'+
|
||
'<div class="pagelayer-elp-multi_image-thumbs"></div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
var tmp = prop.c['name']+'-urls';
|
||
var ids = new Array();
|
||
|
||
// Any IDs ?
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
ids = prop.c['val']
|
||
if(pagelayer_is_string(ids)){
|
||
ids = prop.c['val'].split(',');
|
||
}
|
||
//console.log(ids);
|
||
}
|
||
|
||
// Do we have a URL set ?
|
||
if(!pagelayer_empty(ids)){
|
||
if(tmp in prop.el.tmp){
|
||
var images = JSON.parse(prop.el.tmp[tmp]);
|
||
//console.log(images);
|
||
|
||
for(var x in ids){
|
||
row.find('.pagelayer-elp-multi_image-thumbs').append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+images['i'+ids[x]]+'\');"></div>');
|
||
}
|
||
}else{
|
||
wp.media.query({ post__in: ids }).more().then(function(){
|
||
// You attachments here normally
|
||
// You can safely use any of them here
|
||
// TODO: Set tmp here
|
||
for(var x in ids){
|
||
var fetch_url = wp.media.attachment(ids[x]).get('url');
|
||
if(!pagelayer_empty(fetch_url)){
|
||
row.find('.pagelayer-elp-multi_image-thumbs').append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+fetch_url+'\');"></div>');
|
||
}
|
||
}
|
||
});
|
||
}
|
||
}
|
||
|
||
var pagelayer_init_frame = function(state){
|
||
|
||
var button = row.find('.pagelayer-elp-multi_image-thumbs');
|
||
//console.log(ids);
|
||
|
||
// Load the frame
|
||
var frame = pagelayer_select_frame('multi_image', state);
|
||
|
||
frame.on({
|
||
|
||
'select': function(){
|
||
|
||
var state = frame.state();
|
||
var id = url = '';
|
||
var urls = {};
|
||
|
||
// External URL
|
||
if('props' in state){
|
||
//console.log(state);
|
||
var urls_str = state.props.attributes.url;
|
||
|
||
var urls_arr = urls_str.split(',');
|
||
//console.log(urls_arr);
|
||
|
||
button.empty();
|
||
|
||
// Add to current selection
|
||
for(var i = 0; i < urls_arr.length; i++){
|
||
var single_url = pagelayer_parse_theme_vars(urls_arr[i]);
|
||
urls['i'+i] = single_url;
|
||
|
||
// Create thumbnails
|
||
button.append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+single_url+'\');"></div>');
|
||
}
|
||
urls_arr = Object.values(urls);
|
||
|
||
_pagelayer_set_tmp_atts(row, 'urls', JSON.stringify(urls));
|
||
_pagelayer_set_atts(row, urls_arr.join());
|
||
|
||
}
|
||
},
|
||
|
||
// Set the current selection if any
|
||
'open': function(){
|
||
|
||
// Do we have anything
|
||
if(!pagelayer_empty(ids)){
|
||
|
||
var selection = '';
|
||
|
||
if(state == 'gallery-edit'){
|
||
selection = frame.state().get('library');
|
||
}else if(state == 'gallery-library'){
|
||
selection = frame.state().get('selection');
|
||
}
|
||
|
||
// Add to current selection
|
||
if(!pagelayer_empty(selection)){
|
||
for(var x in ids){
|
||
attachment = wp.media.attachment(ids[x]);
|
||
attachment.fetch();
|
||
selection.add(attachment ? [ attachment ] : [] );
|
||
}
|
||
}
|
||
}
|
||
},
|
||
|
||
// When images are selected
|
||
'update': function(selection){
|
||
|
||
//console.log(selection);
|
||
|
||
// Remove thumbnails
|
||
row.find('.pagelayer-elp-multi_image-thumb').remove();
|
||
|
||
//Fetch selected images
|
||
var attachments = selection.map(function(attachment){
|
||
attachment.toJSON();
|
||
return attachment;
|
||
});
|
||
|
||
//console.log(attachments);
|
||
|
||
var img_ids = [];
|
||
var urls = {};
|
||
var img_urls = {};
|
||
var titles = {};
|
||
var links = {};
|
||
var captions = {};
|
||
|
||
for(var i = 0; i < attachments.length; ++i){
|
||
|
||
// Add Id and urls to array
|
||
var id = attachments[i].id;
|
||
var _id = 'i'+id;
|
||
img_ids.push(id);
|
||
urls[_id] = attachments[i].attributes.url;
|
||
|
||
// Create thumbnails
|
||
button.append('<div class="pagelayer-elp-multi_image-thumb" style="background-image: url(\''+attachments[i].attributes.url+'\');"></div>');
|
||
|
||
//get title
|
||
titles[_id] = attachments[i].attributes.title;
|
||
links[_id] = attachments[i].attributes.link;
|
||
captions[_id] = attachments[i].attributes.caption;
|
||
|
||
// Create a URL
|
||
img_urls[_id] = {}
|
||
|
||
for(var x in attachments[i].attributes.sizes){
|
||
img_urls[_id][x] = attachments[i].attributes.sizes[x].url;
|
||
}
|
||
|
||
}
|
||
|
||
//console.log(img_urls);
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'urls', JSON.stringify(urls));
|
||
_pagelayer_set_tmp_atts(row, 'all-urls', JSON.stringify(img_urls));
|
||
_pagelayer_set_tmp_atts(row, 'all-titles', JSON.stringify(titles));
|
||
_pagelayer_set_tmp_atts(row, 'all-links', JSON.stringify(links));
|
||
_pagelayer_set_tmp_atts(row, 'all-captions', JSON.stringify(captions));
|
||
_pagelayer_set_atts(row, img_ids);
|
||
|
||
// Update the IDs incase the user clicks on it again
|
||
ids = img_ids;
|
||
|
||
}
|
||
|
||
});
|
||
|
||
frame.open(button);
|
||
|
||
return false;
|
||
|
||
};
|
||
|
||
row.find('.pagelayer-elp-multi_image-thumbs').on('click', function(){
|
||
pagelayer_init_frame('gallery-edit');
|
||
});
|
||
|
||
row.find('.pagelayer-elp-button').on('click', function(){
|
||
|
||
if(!pagelayer_empty(ids)){
|
||
if(isNaN(ids[0])){
|
||
pagelayer_init_frame('embed');
|
||
}else{
|
||
pagelayer_init_frame('gallery-library');
|
||
}
|
||
}else{
|
||
pagelayer_init_frame('gallery');
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
// The Video Property
|
||
function pagelayer_elp_video(row, prop){
|
||
|
||
var tmp = prop.c['name']+'-url';
|
||
var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
|
||
|
||
var div = '<div class="pagelayer-elp-video-div pagelayer-elp-input-icon">'+
|
||
'<input class="pagelayer-elp-video" name="'+prop.c['name']+'" type="text" value="'+src+'">'+
|
||
'<i class="pli pli-folder-open" ></i>'+
|
||
'</input></div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-video-div .pli').on('click', function(){
|
||
|
||
var button = jQuery(this);
|
||
|
||
// Load the frame
|
||
var frame = pagelayer_select_frame('video');
|
||
|
||
// On select update the stuff
|
||
frame.on({
|
||
|
||
'select': function(){
|
||
|
||
var state = frame.state();
|
||
var id = url = '';
|
||
|
||
// External URL
|
||
if('props' in state){
|
||
|
||
id = url = pagelayer_parse_theme_vars(state.props.attributes.url);
|
||
|
||
// Internal from gallery
|
||
}else{
|
||
|
||
var attachment = frame.state().get('selection').first().toJSON();
|
||
//console.log(attachment);
|
||
|
||
id = attachment.id;
|
||
url = attachment.url;
|
||
|
||
}
|
||
|
||
// Update URL
|
||
button.prev().val(url);
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'url', url);
|
||
_pagelayer_set_atts(row, id);
|
||
|
||
}
|
||
|
||
});
|
||
|
||
frame.open(button);
|
||
|
||
return false;
|
||
|
||
});
|
||
|
||
// Edited the video URL directly
|
||
row.find('.pagelayer-elp-video').on('change', function(){
|
||
|
||
var input = jQuery(this);
|
||
|
||
// Set the new URL
|
||
_pagelayer_set_tmp_atts(row, 'url', input.val());
|
||
_pagelayer_set_atts(row, input.val());
|
||
|
||
});
|
||
|
||
}
|
||
|
||
|
||
// The Audio Property
|
||
function pagelayer_elp_audio(row, prop){
|
||
|
||
var tmp = prop.c['name']+'-url';
|
||
var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
|
||
|
||
var div = '<div class="pagelayer-elp-audio-div pagelayer-elp-input-icon">'+
|
||
'<input class="pagelayer-elp-audio" name="'+prop.c['name']+'" type="text" value="'+src+'" />'+
|
||
'<i class="pli pli-menu" ></i>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Choose from media
|
||
row.find('.pagelayer-elp-audio-div .pli').on('click', function(){
|
||
|
||
var button = jQuery(this);
|
||
|
||
// Load the frame
|
||
var frame = pagelayer_select_frame('audio');
|
||
|
||
frame.on({
|
||
|
||
'select': function(){
|
||
|
||
var state = frame.state();
|
||
var id = url = '';
|
||
|
||
// External URL
|
||
if('props' in state){
|
||
|
||
id = url = pagelayer_parse_theme_vars(state.props.attributes.url);
|
||
|
||
// Internal from gallery
|
||
}else{
|
||
|
||
var attachment = frame.state().get('selection').first().toJSON();
|
||
//console.log(attachment);
|
||
|
||
id = attachment.id;
|
||
url = attachment.url;
|
||
|
||
}
|
||
|
||
// Update URL
|
||
button.prev().val(url);
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'url', url);
|
||
_pagelayer_set_atts(row, id);
|
||
|
||
}
|
||
|
||
});
|
||
|
||
frame.open(button);
|
||
|
||
return false;
|
||
|
||
});
|
||
|
||
// Edited the media URL directly
|
||
row.find('.pagelayer-elp-audio').on('change', function(){
|
||
|
||
var input = jQuery(this);
|
||
|
||
// Set the new URL
|
||
_pagelayer_set_tmp_atts(row, 'url', input.val());
|
||
_pagelayer_set_atts(row, input.val());
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The Media Property
|
||
function pagelayer_elp_media(row, prop){
|
||
|
||
var tmp = prop.c['name']+'-url';
|
||
var src = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : prop.c['val'];
|
||
|
||
var div = '<div class="pagelayer-elp-media-div pagelayer-elp-input-icon">'+
|
||
'<input class="pagelayer-elp-media" value="'+src+'" type="text" />'+
|
||
'<i class="pli pli-menu" ></i>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-media-div .pli-menu').on('click', function(){
|
||
|
||
var button = jQuery(this);
|
||
|
||
// Load the frame
|
||
var frame = pagelayer_select_frame('media');
|
||
|
||
frame.on({
|
||
|
||
'select': function(){
|
||
|
||
var state = frame.state();
|
||
var id = url = '';
|
||
|
||
// External URL
|
||
if('props' in state){
|
||
|
||
id = url = pagelayer_parse_theme_vars(state.props.attributes.url);
|
||
|
||
// Internal from gallery
|
||
}else{
|
||
|
||
var attachment = frame.state().get('selection').first().toJSON();
|
||
//console.log(attachment);
|
||
|
||
id = attachment.id;
|
||
url = attachment.url;
|
||
|
||
}
|
||
|
||
// Update URL
|
||
button.prev().val(url);
|
||
|
||
// Save and render
|
||
_pagelayer_set_tmp_atts(row, 'url', url);
|
||
_pagelayer_set_atts(row, id);
|
||
|
||
}
|
||
|
||
});
|
||
|
||
frame.open(button);
|
||
|
||
return false;
|
||
|
||
});
|
||
|
||
// Edited the media URL directly
|
||
row.find('.pagelayer-elp-media').on('change', function(){
|
||
|
||
var input = jQuery(this);
|
||
|
||
// Set the new URL
|
||
_pagelayer_set_tmp_atts(row, 'url', input.val());
|
||
_pagelayer_set_atts(row, input.val());
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The Slider Property
|
||
function pagelayer_elp_slider(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-slider-div">'+
|
||
'<input type="range" class="pagelayer-elp-slider" value="'+parseFloat(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
|
||
'<input type="number" class="pagelayer-elp-slider-value" value="'+parseFloat(prop.c['val'])+'" min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'"/>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Set an value in span
|
||
row.find('.pagelayer-elp-slider-div input').on('input', function(){
|
||
var value = parseFloat(this.value);
|
||
var max = parseFloat(this.max);
|
||
|
||
if(!pagelayer_empty(max) && value > max){
|
||
value = max;
|
||
}
|
||
row.find('.pagelayer-elp-slider-div input').val(value);
|
||
|
||
_pagelayer_set_atts(row, value);// Save and Render
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The Editor proprety
|
||
function pagelayer_elp_editor(row, prop){
|
||
|
||
var rows = prop.rows ? prop.rows : '8';
|
||
|
||
var div = '<div class="pagelayer-elp-editor-div">'+
|
||
'<textarea rows="'+rows+'" class="pagelayer-elp-editor" ></textarea>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
var editor = row.find('.pagelayer-elp-editor');
|
||
editor.val(prop.c['val']);
|
||
|
||
// Handle on change
|
||
editor.on('input', function(){
|
||
_pagelayer_set_atts(row, pagelayer_trim(jQuery(this).val()));// Save and Render
|
||
});
|
||
|
||
return;
|
||
// No SVG Icons for now
|
||
jQuery.trumbowyg.svgPath = false;
|
||
|
||
// Initiate the editor
|
||
editor.trumbowyg({
|
||
autogrow: false,
|
||
hideButtonTexts: true,
|
||
btns:[
|
||
['viewHTML'],
|
||
['wpmedia'],
|
||
['fontfamily'],
|
||
['formatting'],
|
||
['undo', 'redo'], // Only supported in Blink browsers
|
||
['fontsize'],
|
||
['lineheight'],
|
||
['foreColor', 'backColor',],
|
||
['strong', 'em', 'del'],
|
||
['horizontalRule'],
|
||
['superscript', 'subscript'],
|
||
['link'],
|
||
['unorderedList', 'orderedList'],
|
||
['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
|
||
['removeformat'],
|
||
['fullscreen']
|
||
],
|
||
plugins: {
|
||
fontsize: {
|
||
sizeList: ['12px','13px','14px','15px','16px','17px','18px','19px','20px','21px','22px','23px','24px','25px']
|
||
}
|
||
},
|
||
imageWidthModalEdit: true,
|
||
|
||
// Handle the changes made in the editor
|
||
}).on('tbwchange', function(){
|
||
_pagelayer_set_atts(row, editor.trumbowyg('html'));// Save and Render
|
||
});
|
||
|
||
}
|
||
|
||
// The Link proprety
|
||
function pagelayer_elp_link(row, prop){
|
||
|
||
var values = {};
|
||
var settingOpt = false;
|
||
|
||
// Show link options?
|
||
if('selector' in prop){
|
||
settingOpt = true;
|
||
}
|
||
|
||
// Previously saved values
|
||
if(typeof prop.c['val'] === 'object'){
|
||
values = prop.c['val'];
|
||
}else{
|
||
values['link'] = prop.c['val'];
|
||
}
|
||
|
||
var tmp = prop.c['name'];
|
||
var link = (tmp in prop.el.tmp) ? prop.el.tmp[tmp] : values['link'];
|
||
var jEle = jQuery('[pagelayer-id='+prop.el.id+']');
|
||
|
||
var div = '<div class="pagelayer-elp-link-div pagelayer-elp-input-icon '+(settingOpt ? '' : 'pagelayer-elp-link-no-addons')+'">'+
|
||
'<input class="pagelayer-elp-link" type="text" value="'+link+'" />'+
|
||
'<i class="pli pli-service pagelayer-elp-link-icon" title="'+pagelayer_l('link_options')+'" ></i>'+
|
||
'<div class="pagelayer-elp-link-list">'+
|
||
'</div>';
|
||
|
||
if(settingOpt){
|
||
div += '<div class="pagelayer-elp-link-addons">'+
|
||
'<div class="pagelayer-elp-link-cb-div">'+
|
||
'<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
|
||
'<label class="pagelayer-elp-link-label">'+pagelayer_l('open_link_in_new_window')+'</label>'+
|
||
'</div>'+
|
||
'<div>'+
|
||
'<input type="checkbox" name="link_new_tab" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['target']) ? 'checked="checked"' : '')+' />'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-link-cb-div" >'+
|
||
'<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
|
||
'<label class="pagelayer-elp-link-label">'+pagelayer_l('add_nofollow')+'</label>'+
|
||
'</div>'+
|
||
'<div>'+
|
||
'<input type="checkbox" name="link_no_follow" class="pagelayer-elp-checkbox" '+(!pagelayer_empty(values['rel']) ? 'checked="checked"' : '')+'/>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-link-ca" >'+
|
||
'<div class="pagelayer-elp-link-label-div" type="'+prop['type']+'">'+
|
||
'<label class="pagelayer-elp-link-label">'+pagelayer_l('custom_attributes')+'</label>'+
|
||
'</div>'+
|
||
'<div>'+
|
||
'<input type="text" class="pagelayer-elp-text" placeholder="key = value" name="'+prop.c['name']+'" value="'+(pagelayer_empty(values['attrs']) ? '' : values['attrs'])+'"/>'+
|
||
'<p class="pagelayer-elp-link-desc">'+pagelayer_l('link_custom_attr_desc')+'</p>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>';
|
||
}
|
||
|
||
div += '</div>';
|
||
|
||
row.append(div);
|
||
|
||
var listWrap = row.find('.pagelayer-elp-link-list');
|
||
var time = null;
|
||
|
||
//Add ID
|
||
var addID = function(permaID){
|
||
permaID = permaID || false;
|
||
|
||
var lDiv = row.closest('[pagelayer-elp-name]').find('.pagelayer-elp-label-div');
|
||
if(permaID){
|
||
lDiv = lDiv.find('.pagelayer-elp-label');
|
||
lDiv.after('<span class="pagelayer-elp-link-id">ID : '+permaID+'</span>');
|
||
}else{
|
||
lDiv.find('.pagelayer-elp-link-id').remove();
|
||
}
|
||
};
|
||
|
||
if(!isNaN(values['link'])){
|
||
addID(values['link']);
|
||
}
|
||
|
||
var getLinkVal = function(val){
|
||
|
||
if(typeof val === 'object' && pagelayer_length(val) == 1 && 'link' in val){
|
||
return val['link'];
|
||
}
|
||
|
||
return val;
|
||
}
|
||
|
||
var setTmpEmpty = function(){
|
||
|
||
if( 'link' in values && !pagelayer_empty(values['link']) ){
|
||
return;
|
||
}
|
||
|
||
_pagelayer_set_tmp_atts(row, '', '');
|
||
}
|
||
|
||
// Set a Link
|
||
row.find('.pagelayer-elp-link').on('change', function(){
|
||
|
||
var linkVal = jQuery(this).val();
|
||
values['link'] = linkVal;
|
||
|
||
// Save and Render
|
||
_pagelayer_set_tmp_atts(row, '', linkVal);
|
||
_pagelayer_set_atts(row, getLinkVal(values));
|
||
|
||
// Remove ID Holder
|
||
addID();
|
||
|
||
});
|
||
|
||
// Set a Link
|
||
row.find('.pagelayer-elp-link').on('input click', function(e){
|
||
e.stopPropagation();
|
||
|
||
if(!listWrap.is(':visible')){
|
||
listWrap.show();
|
||
}
|
||
|
||
var val = jQuery(this).val();
|
||
|
||
clearTimeout(time);
|
||
time = setTimeout(function(){
|
||
|
||
jQuery.ajax({
|
||
url: pagelayer_ajax_url,
|
||
type: 'post',
|
||
data:{
|
||
'action' : 'wp-link-ajax',
|
||
'_ajax_linking_nonce' : pagelayer_internal_linking_nonce,
|
||
'search' : val,
|
||
},
|
||
success: function(response) {
|
||
|
||
var data = jQuery.parseJSON(response);
|
||
var html = '';
|
||
//console.log('Link Data');console.log(response);
|
||
|
||
if(pagelayer_empty(data)){
|
||
html = pagelayer_l('custom_url');
|
||
// Remove ID Holder
|
||
addID();
|
||
}else if(typeof data === 'object'){
|
||
|
||
for(var key in data){
|
||
var vals = data[key];
|
||
html += '<div class="pagelayer-elp-link-item" data-id="'+vals['ID']+'" data-permalink="'+vals['permalink']+'">'+
|
||
'<div class="pagelayer-elp-link-title">'+
|
||
'<span class="pagelayer-elp-link-item-title" title="'+vals['title']+'">'+vals['title']+'</span>'+
|
||
'<span class="pagelayer-elp-link-item-perma" title="'+vals['permalink']+'">'+vals['permalink']+'</span>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-link-info">'+
|
||
'<span title="'+vals['info']+'">'+vals['info']+'</span>'+
|
||
'</div>'+
|
||
'</div>';
|
||
}
|
||
}
|
||
|
||
listWrap.html(html);
|
||
},
|
||
fail: function(data) {
|
||
listWrap.html('Some error occured in getting the link data');
|
||
}
|
||
});
|
||
|
||
}, 200);
|
||
|
||
});
|
||
|
||
listWrap.on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
var lEle = jQuery(e.target).closest('.pagelayer-elp-link-item');
|
||
|
||
// IF item not found
|
||
if(lEle.length < 1){
|
||
return;
|
||
}
|
||
|
||
var perma = lEle.attr('data-permalink');
|
||
var ID = lEle.attr('data-id');
|
||
values['link'] = ID;
|
||
|
||
// Save and Render
|
||
row.find('.pagelayer-elp-link').val(perma);
|
||
_pagelayer_set_tmp_atts(row, '', perma);
|
||
_pagelayer_set_atts(row, getLinkVal(values));
|
||
|
||
listWrap.hide();
|
||
|
||
// Show ID
|
||
addID(ID);
|
||
});
|
||
|
||
pagelayer.gDocument.on('click', function(e){
|
||
listWrap.hide();
|
||
});
|
||
|
||
row.find('.pagelayer-elp-checkbox').on('change', function(event){
|
||
|
||
var cEle = jQuery(this);
|
||
|
||
// Save or delete the value
|
||
var saveVal = function(key){
|
||
if(cEle.is(':checked')){
|
||
values[key] = true;
|
||
return;
|
||
}
|
||
|
||
delete values[key];
|
||
}
|
||
|
||
switch(cEle.attr('name')){
|
||
case 'link_new_tab':
|
||
saveVal('target');
|
||
break;
|
||
case 'link_no_follow':
|
||
saveVal('rel');
|
||
break;
|
||
}
|
||
|
||
setTmpEmpty();
|
||
_pagelayer_set_atts(row, getLinkVal(values));
|
||
|
||
});
|
||
|
||
var linkTime = '';
|
||
row.find('.pagelayer-elp-text').on('input', function(event){
|
||
var cEle = jQuery(this);
|
||
|
||
clearTimeout(linkTime);
|
||
linkTime = setTimeout(function(){
|
||
values['attrs'] = cEle.val();
|
||
|
||
if(pagelayer_empty(values['attrs'])){
|
||
delete values['attrs'];
|
||
}
|
||
|
||
setTmpEmpty();
|
||
_pagelayer_set_atts(row, getLinkVal(values));
|
||
|
||
}, 500);
|
||
});
|
||
|
||
row.find('.pagelayer-elp-link-icon').on('click', function(){
|
||
row.find('.pagelayer-elp-link-addons').slideToggle('slow');
|
||
});
|
||
|
||
}
|
||
|
||
// The Textarea property
|
||
function pagelayer_elp_textarea(row, prop){
|
||
|
||
var rows = prop.rows ? 'rows="'+prop.rows+' "' : '';
|
||
|
||
var div = '<div class="pagelayer-elp-textarea-div">'+
|
||
'<textarea '+rows+'class="pagelayer-elp-textarea"></textarea>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
row.find('.pagelayer-elp-textarea').val(prop.c['val']);
|
||
|
||
// Handle on change
|
||
row.find('.pagelayer-elp-textarea').on('input', function(){
|
||
_pagelayer_set_atts(row, pagelayer_trim(jQuery(this).val()));// Save and Render
|
||
});
|
||
};
|
||
|
||
// Clear all editable
|
||
function pagelayer_clear_editable(dontDestroy){
|
||
|
||
// Destroy all
|
||
for(var x in pagelayer_editor){
|
||
if(dontDestroy == x){
|
||
console.log('Skipping '+dontDestroy);
|
||
continue;
|
||
}
|
||
pagelayer_editor[x].pen.destroy();
|
||
}
|
||
|
||
};
|
||
|
||
// Makes a field editable in the DOM
|
||
function pagelayer_make_editable(jEle, e){
|
||
|
||
// The parent element
|
||
var pEle = jEle.closest('.pagelayer-ele, [pagelayer-ref-id]');
|
||
|
||
// Mainly for editing table cells as pagelayer-ref-id is used by them
|
||
if(!pEle.hasClass('pagelayer-ele')){
|
||
var refID = pEle.attr('pagelayer-ref-id');
|
||
pEle = jQuery('[pagelayer-id="'+refID+'"]');
|
||
}
|
||
|
||
var prop = jEle.attr('pagelayer-editable');
|
||
var eId = pagelayer_id(pEle)+'|'+jEle.attr('pagelayer-editable');// Editing ID
|
||
|
||
// Is it already setup ?
|
||
if(jEle.hasClass('pagelayer-pen')){
|
||
//console.log('Already Penned');
|
||
//pagelayer_focus_editable(jEle, e, eId);
|
||
return true;
|
||
}
|
||
|
||
var tag = pagelayer_tag(pEle);
|
||
var all_props = pagelayer_shortcodes[tag];
|
||
var edit_opts;
|
||
var fullEdit = false;
|
||
|
||
for(var i in pagelayer_tabs){
|
||
var tab = pagelayer_tabs[i];
|
||
for(var section in all_props[tab]){ //console.log(tab+' '+section);
|
||
|
||
var props = section in pagelayer_shortcodes[tag] ? pagelayer_shortcodes[tag][section] : pagelayer_styles[section];//console.log(props);
|
||
|
||
// Any editor options?
|
||
if(prop in props){
|
||
|
||
if('e' in props[prop]){
|
||
edit_opts = props[prop].e;
|
||
}
|
||
|
||
if(props[prop]['type'] == 'editor'){
|
||
fullEdit = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
var pen_tools = {
|
||
'inline': [ 'viewHTML',
|
||
{'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p']},
|
||
'bold', 'italic', 'underline', 'strike',
|
||
{ 'color': [] }, { 'background': [] },
|
||
'removeformat'
|
||
],
|
||
'h': ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
|
||
'headers': [{'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']}],
|
||
'c': [{ 'color': [] }, { 'background': [] }],
|
||
'f': ['bold', 'italic', 'underline', 'strike'],
|
||
'a': [{ 'align': ['left', 'center', 'right', 'justify'] }],
|
||
'r': ['removeformat'],
|
||
'v': ['viewHTML'],
|
||
};
|
||
|
||
// Create Toolbar Groups
|
||
if(!('pen_tools' in pagelayer_editor)){
|
||
pagelayer_editor['pen_tools'] = {};
|
||
}
|
||
|
||
pagelayer_editor['pen_tools'] = Object.assign(pagelayer_editor['pen_tools'], pen_tools);
|
||
|
||
var toolbar_options = [];
|
||
|
||
if( pagelayer_empty(edit_opts) ){
|
||
|
||
if(fullEdit){
|
||
toolbar_options = [
|
||
[ 'viewHTML' ],
|
||
[ 'bold', 'italic', 'underline', 'strike' ],
|
||
[ 'sub', 'super' ],
|
||
//[ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote'],
|
||
[ {'formating' : ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'blockquote']}],
|
||
[ {'align': ['left', 'center', 'right', 'justify']} ],
|
||
[ 'image', 'link'],
|
||
[ 'unorderedlist', 'orderedlist'],
|
||
[ {'size': []}, {'lineheight': []}, {'font': []}],
|
||
[ {'color': [] }, {'background': []}],
|
||
[ 'removeformat' ]
|
||
];
|
||
}else{
|
||
toolbar_options = pagelayer_editor.pen_tools['inline'];
|
||
}
|
||
}else{
|
||
var options = [];
|
||
|
||
if(! Array.isArray(edit_opts) ){
|
||
edit_opts = [edit_opts];
|
||
}
|
||
|
||
for( var tt in edit_opts){
|
||
|
||
var tool = edit_opts[tt];
|
||
|
||
if(pagelayer_is_string(tool)){
|
||
if(tool in pagelayer_editor['pen_tools']){
|
||
tool = pagelayer_editor['pen_tools'][tool]
|
||
}else{
|
||
tool = [tool];
|
||
}
|
||
}
|
||
|
||
options.push(tool);
|
||
}
|
||
|
||
toolbar_options = options;
|
||
}
|
||
|
||
var options = {
|
||
class: 'pagelayer-pen',
|
||
editor: jEle,
|
||
toolbar: toolbar_options
|
||
}
|
||
|
||
// Setup the editor
|
||
pagelayer_editor[eId] = {};
|
||
pagelayer_editor[eId].pen = new PagelayerPen(jEle, options);
|
||
pagelayer_editor[eId].$ = jEle;
|
||
|
||
// Are we the clicked object, then set the focus
|
||
if(e){
|
||
var target = jQuery(e.target);
|
||
if(target.is(jEle) || jEle.find(target).length > 0){
|
||
jEle.focus();
|
||
}
|
||
}
|
||
|
||
// Reverse setup the event
|
||
jEle.on('blur', function(){
|
||
|
||
//pagelayer_editor[eId].pen.destroy();
|
||
if(jEle.hasClass('pagelayer-pen-focused')){
|
||
return;
|
||
}
|
||
|
||
var cEle = pEle;
|
||
|
||
// Do we have a parent ?
|
||
var have_parent = function(Ele){
|
||
var pId = pagelayer_get_parent(Ele);
|
||
|
||
if(pagelayer_empty(pId)){
|
||
return;
|
||
}
|
||
|
||
cEle = pagelayer_ele_by_id(pId);
|
||
have_parent(cEle);
|
||
}
|
||
|
||
have_parent(cEle);
|
||
|
||
var is_global = pagelayer_get_global_id(cEle);
|
||
|
||
if(pagelayer_empty(is_global)){
|
||
return;
|
||
}
|
||
|
||
pagelayer_sc_render(pEle);
|
||
|
||
});
|
||
|
||
/*// Reverse setup the event
|
||
jEle.on('focus', function(){
|
||
//pagelayer_clear_editable(eId);
|
||
});*/
|
||
|
||
// Reverse setup the event
|
||
jEle.on('input', function(){
|
||
|
||
var val = pagelayer_trim(jEle.html());
|
||
|
||
// Set the property as well
|
||
pagelayer_set_atts(pEle, prop, val);
|
||
|
||
// Update the property
|
||
var input = pagelayer.$$('[pagelayer-element-id='+pagelayer_id(pEle)+']').find('[pagelayer-elp-name='+prop+']').find('input,textarea,.trumbowyg-editor');
|
||
//console.log(input);
|
||
|
||
if(input.length > 0){
|
||
if(input.hasClass('trumbowyg-editor')){
|
||
input.html(val);
|
||
}else{
|
||
input.val(val);
|
||
}
|
||
}
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The Icon Property
|
||
function pagelayer_elp_icon(row, prop){
|
||
|
||
var $ = jQuery;
|
||
var sets_html = '';
|
||
|
||
pagelayer_loaded_icons.forEach(function(item){
|
||
sets_html += '<option name="'+item+'" value="'+item+'">'+item+'</option>';
|
||
});
|
||
|
||
var icons = {};
|
||
var cur_icon_set = pagelayer_loaded_icons[0];
|
||
var sel_icon = prop.c['val'];
|
||
var sel_name = prop.c['val'];
|
||
var icon_type = '';
|
||
var sorted_icons = {};
|
||
|
||
// Handle the icon name
|
||
var icon_name = sel_icon.split(' fa-');
|
||
sel_name = icon_name[1];
|
||
|
||
// Is there a specific list
|
||
if('list' in prop && prop.list.length > 0){
|
||
|
||
for(var i in pagelayer_icons){
|
||
|
||
icons[i] = {};
|
||
|
||
for(var j in pagelayer_icons[i]){
|
||
|
||
icons[i][j] = {};
|
||
var list_icons = [];
|
||
prop.list.forEach(function(item){
|
||
if(pagelayer_icons[i][j]['icons'].includes(item)){
|
||
list_icons.push(item);
|
||
}
|
||
|
||
});
|
||
icons[i][j]['icons'] = list_icons;
|
||
icons[i][j]['pre'] = j;
|
||
}
|
||
|
||
}
|
||
|
||
}else{
|
||
icons = pagelayer_icons;
|
||
}
|
||
|
||
// Icon function
|
||
var icon_html = function(name, cat){
|
||
return '<span class="pagelayer-elp-icon-span">'+
|
||
'<i class="'+cat+' fa-'+name+'" icon="'+name+'" ></i> '+name+
|
||
'</span>';
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-icon-div">'+
|
||
'<div class="pagelayer-elp-icon-preview">'+
|
||
'<i class="'+sel_icon+'"></i>'+
|
||
'<span class="pagelayer-elp-icon-name">'+
|
||
(pagelayer_empty(sel_name)?'Choose icon':sel_name)+
|
||
'</span>'+
|
||
'</div>'+
|
||
'<span class="pagelayer-elp-icon-open">▼</span>'+
|
||
'<span class="pagelayer-elp-icon-close" '+(pagelayer_empty(sel_name)? 'style="display:none"': '')+'><b>× </b></span>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Make all icons list
|
||
var html = '<div class="pagelayer-elp-icon-selector">';
|
||
|
||
if(pagelayer_loaded_icons.length > 1){
|
||
html += '<select class="pagelayer-elp-icon-sets">'+sets_html+'</select>';
|
||
}
|
||
|
||
html += '<span class="pagelayer-elp-icon-type">'+
|
||
'<p data-tab="fas" class="active">'+pagelayer_l('Solid')+'</p>'+
|
||
'<p data-tab="far">'+pagelayer_l('Regular')+'</p>'+
|
||
'<p data-tab="fab">'+pagelayer_l('Brand')+'</p>'+
|
||
'</span>'+
|
||
'<input type="text" class="pagelayer-elp-search-icon" name="search-icon" placeholder="'+pagelayer_l('search')+'">'+
|
||
'<div class="pagelayer-elp-icon-list">';
|
||
|
||
for(var y in icons[cur_icon_set]){
|
||
//console.log(icons[x][y])
|
||
for(var z in icons[cur_icon_set][y]['icons']){
|
||
html += icon_html(icons[cur_icon_set][y]['icons'][z], y);
|
||
}
|
||
}
|
||
|
||
html += '</div>'+
|
||
'</div>';
|
||
|
||
row.append(html);
|
||
|
||
// Open the selector
|
||
row.find('.pagelayer-elp-icon-div').on('click', function(){
|
||
row.find('.pagelayer-elp-icon-selector').slideToggle();
|
||
});
|
||
|
||
/*// When the set changes
|
||
row.find('.pagelayer-elp-icon-sets').on('change', function(){
|
||
var v = cur_icon_set = jQuery(this).val();
|
||
var span = '';
|
||
|
||
for(var x in icons[v]){
|
||
|
||
for(var z in icons[v][x]['icons']){
|
||
span += icon_html(icons[v][x]['icons'][z], x);
|
||
}
|
||
|
||
}
|
||
|
||
if(cur_icon_set == 'font-awesome5'){
|
||
row.find('.pagelayer-elp-icon-type').show();
|
||
sorted_icons = icons[cur_icon_set]['fas'];
|
||
row.find('.pagelayer-elp-icon-type [data-tab="fas"]').click();
|
||
}else{
|
||
row.find('.pagelayer-elp-icon-type').hide();
|
||
}
|
||
|
||
row.find('.pagelayer-elp-icon-list').empty().html(span);
|
||
|
||
if(row.find('.pagelayer-elp-search-icon').val() != ''){
|
||
row.find('.pagelayer-elp-search-icon').keyup();
|
||
}
|
||
|
||
});*/
|
||
|
||
// Handle type of icon
|
||
row.find('.pagelayer-elp-icon-type p').on('click', function(){
|
||
jQuery(this).toggleClass('active');
|
||
row.find('.pagelayer-elp-search-icon').keyup();
|
||
});
|
||
|
||
// Handle search of icon
|
||
row.find('.pagelayer-elp-search-icon').on('keyup', function(){
|
||
|
||
var v = this.value;
|
||
var span = '';
|
||
v = v.toLowerCase();
|
||
v = v.replace(/\s+/g, '-');
|
||
//console.log(sorted_icons);
|
||
|
||
row.find('.pagelayer-elp-icon-type p.active').each(function(){
|
||
var tab = jQuery(this).data('tab');
|
||
tab = tab.toLowerCase();
|
||
|
||
var cat = icons['font-awesome5'][tab]['icons'];
|
||
|
||
for(var x in cat){
|
||
if(cat[x].includes(v) || v.length < 1){
|
||
span += icon_html(cat[x], tab);
|
||
}
|
||
}
|
||
});
|
||
|
||
row.find('.pagelayer-elp-icon-list').empty().html(span);
|
||
|
||
});
|
||
|
||
// Handle click within the icon selector
|
||
row.find('.pagelayer-elp-icon-list').on('click', function(e){
|
||
|
||
var jEle = jQuery(e.target);
|
||
var i = jEle.children().attr('class');
|
||
var name = jEle.children().attr('icon');
|
||
|
||
if(pagelayer_empty(name)){
|
||
return false;
|
||
}
|
||
|
||
// Set the icon in this list
|
||
row.find('.pagelayer-elp-icon-preview').html('<i class="'+i+'"></i><span class="pagelayer-elp-icon-name">'+name+'</span>');
|
||
row.find('.pagelayer-elp-icon-selector').slideUp();
|
||
|
||
_pagelayer_set_atts(row, i);// Save and Render
|
||
|
||
row.find('.pagelayer-elp-icon-close').show();
|
||
return false;
|
||
|
||
});
|
||
|
||
// Delete the icon
|
||
row.find('.pagelayer-elp-icon-close').on('click', function(){
|
||
|
||
// Set the icon in this list
|
||
row.find('.pagelayer-elp-icon-preview').html('<i class=""></i><span class="pagelayer-elp-icon-name">'+pagelayer_l('choose_icon')+'</span>');
|
||
|
||
// Save and Render
|
||
_pagelayer_set_atts(row, '');
|
||
jQuery(this).hide();
|
||
return false;
|
||
});
|
||
|
||
}
|
||
|
||
// The Access Property
|
||
function pagelayer_elp_access(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-access-div">'+
|
||
'<span class="pagelayer-elp-access"><i class="pli pli-caret-right" ></i></span>'+
|
||
'<div class="pagelayer-elp-access-holder"></div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
var holder = row.find('.pagelayer-elp-access-holder');
|
||
|
||
row.find('.pagelayer-elp-access').on('click', function(){
|
||
|
||
// Setup first
|
||
if(holder.children().length < 1){
|
||
var p = row.parent().find('[pagelayer-access-item='+prop.show_group+']').detach();
|
||
p.appendTo(holder);
|
||
p.addClass('pagelayer-access-item-visible');
|
||
}
|
||
|
||
// Show and hide
|
||
if(holder.is(':visible')){
|
||
holder.hide();
|
||
row.find('.pli-caret-right').removeClass('pli-caret-open');
|
||
}else{
|
||
holder.show();
|
||
row.find('.pli-caret-right').addClass('pli-caret-open');
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
// The Modal Property
|
||
function pagelayer_elp_modal(row, prop){
|
||
|
||
var style = pagelayer_empty(prop.width) ? '' : 'style="width:'+prop.width+'"';
|
||
|
||
var div = '<div class="pagelayer-elp-modal-div">'+
|
||
'<span class="pagelayer-elp-modal"><i class="pli pli-window" ></i></span>'+
|
||
'<div class="pagelayer-elp-modal-wrapper">'+
|
||
'<div class="pagelayer-elp-modal-wrap" '+style+'>'+
|
||
'<div class="pagelayer-elp-modal-header">'+
|
||
prop.label +'<i class="pagelayer-elp-modal-close pli pli-cross" aria-hidden="true"></i>'+
|
||
'</div><hr>'+
|
||
'<div class="pagelayer-elp-modal-holder"></div>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
var wrapper = row.find('.pagelayer-elp-modal-wrapper');
|
||
var holder = row.find('.pagelayer-elp-modal-holder');
|
||
|
||
row.find('.pagelayer-elp-modal').on('click', function(){
|
||
|
||
// Setup first
|
||
if(holder.children().length < 1){
|
||
|
||
var p = row.parent().find('[pagelayer-access-item='+prop.show_group+']').detach();
|
||
p.appendTo(holder);
|
||
p.addClass('pagelayer-access-item-visible');
|
||
}
|
||
|
||
// Show and hide
|
||
wrapper.show();
|
||
|
||
});
|
||
|
||
// Close Modal Property
|
||
row.find('.pagelayer-elp-modal-close').on('click', function(){
|
||
wrapper.hide();
|
||
});
|
||
|
||
// On click Pagelayer setting icon
|
||
wrapper.on('click', function(event){
|
||
var target = jQuery(event.target);
|
||
|
||
if(target.closest('.pagelayer-elp-modal-wrap').length > 0){
|
||
return;
|
||
}
|
||
|
||
wrapper.hide();
|
||
});
|
||
|
||
};
|
||
|
||
// The Color Property
|
||
function pagelayer_elp_color(row, prop){
|
||
|
||
var val = prop.c['val'];
|
||
var is_global = pagelayer_is_global_color(val);
|
||
var global_active = '';
|
||
|
||
// If global color not exist
|
||
if(!pagelayer_empty(is_global)){
|
||
val = pagelayer_global_colors[is_global]['value'];
|
||
global_active = 'pagelayer-active-global';
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-color-div-holder">'+
|
||
'<div class="pagelayer-elp-color-global '+global_active+'"></div>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-color-preview"></div>'+
|
||
'<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-global-color-list">'+
|
||
'<div class="pagelayer-global-setting-color">'+
|
||
'<b>Global Colors</b><span class="pli pli-service"></span>'+
|
||
'</div>';
|
||
|
||
for( cid in pagelayer_global_colors ){
|
||
|
||
var color = pagelayer_global_colors[cid];
|
||
var active_class = '';
|
||
|
||
if(cid == is_global){
|
||
active_class = 'pagelayer-global-selected';
|
||
}
|
||
|
||
div += '<div class="pagelayer-global-color-list-item '+ active_class +'" data-global-id="'+ cid +'">'+
|
||
'<span class="pagelayer-global-color-pre" style="background:'+ color['value'] +'"></span>'+
|
||
'<span class="pagelayer-global-color-title">'+ color['title'] +'</span>'+
|
||
'<span class="pagelayer-global-color-code">'+ color['value'] +'</span>'+
|
||
'</div>';
|
||
}
|
||
div += '</div></div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-color-preview').css('background', val);
|
||
|
||
var picker = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-color-div')[0],
|
||
popup : 'left',
|
||
color : val,
|
||
doc: window.parent.document
|
||
});
|
||
|
||
var preview = row.find('.pagelayer-elp-color-preview');
|
||
|
||
// If no val, then set blank
|
||
if(pagelayer_empty(val)){
|
||
preview.addClass('pagelayer-blank-preview');
|
||
}
|
||
|
||
var handle_white = function(col){
|
||
if(col.charAt(1) == 'f'){
|
||
preview.addClass('pagelayer-white-border');
|
||
}else{
|
||
preview.removeClass('pagelayer-white-border');
|
||
}
|
||
}
|
||
|
||
handle_white(val);
|
||
|
||
// Handle selected color
|
||
picker.onChange = function(color) {
|
||
preview.removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
|
||
handle_white(color.hex);
|
||
_pagelayer_set_atts(row, color.hex);// Save and Render
|
||
|
||
// Remove global
|
||
row.find('.pagelayer-elp-color-global').removeClass('pagelayer-active-global');
|
||
row.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
row.find('.pagelayer-global-color-list').hide();
|
||
};
|
||
|
||
picker.onOpen = picker.onChange;
|
||
|
||
row.find('.pagelayer-elp-remove-color').on('click', function(event){
|
||
event.stopPropagation();
|
||
picker.setColor(prop.default, true);
|
||
preview.addClass('pagelayer-blank-preview');
|
||
handle_white('');
|
||
_pagelayer_set_atts(row, ' ');// Save and Render
|
||
});
|
||
|
||
// Handle for global color
|
||
row.find('.pagelayer-elp-color-global').on('click', function(e){
|
||
row.find('.pagelayer-global-color-list').slideToggle();
|
||
});
|
||
|
||
row.find('.pagelayer-global-setting-color').on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
if(jQuery(e.target).closest('.pli-service').length < 1){
|
||
return;
|
||
}
|
||
window.open(pagelayer_customizer_url+'&autofocus%5Bsection%5D=pagelayer_global_colors_sec', '_blank');
|
||
});
|
||
|
||
// Handle for global color
|
||
row.find('.pagelayer-global-color-list-item ').on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
var listItem = jQuery(this);
|
||
var globalID = listItem.data('global-id');
|
||
var listHolder = row.find('.pagelayer-global-color-list');
|
||
|
||
// Remove previous selecttion
|
||
listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
listItem.addClass('pagelayer-global-selected');
|
||
row.find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
|
||
listHolder.slideUp();
|
||
|
||
var color = pagelayer_global_colors[globalID]['value'];
|
||
preview.removeClass('pagelayer-blank-preview').css('background', color);
|
||
handle_white(color);
|
||
_pagelayer_set_atts(row, '$'+globalID);// Save and Render
|
||
|
||
});
|
||
}
|
||
|
||
// The Spinner property
|
||
function pagelayer_elp_spinner(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-spinner-div">'+
|
||
'<input type="number" class="pagelayer-elp-spinner" name="'+prop.c['name']+'"'+
|
||
' min="'+prop['min']+'" max="'+prop['max']+'" step="'+prop['step']+'" value="'+parseFloat(prop.c['val'])+'"/>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('input').on('input', function(){
|
||
var value = parseFloat(this.value);
|
||
var max = parseFloat(this.max);
|
||
|
||
if(!pagelayer_empty(max) && value > max){
|
||
value = max;
|
||
}
|
||
_pagelayer_set_atts(row, value);// Save and Render
|
||
});
|
||
|
||
}
|
||
|
||
// The Group Property
|
||
function pagelayer_elp_group(row, prop){
|
||
|
||
var btnHidden = '';
|
||
|
||
// Hide button, clone and delete
|
||
if(!pagelayer_empty(prop['hide'])){
|
||
btnHidden = 'pagelayer-hidden';
|
||
}
|
||
|
||
// Remove the pagelayer-show-tab
|
||
row.removeAttr('pagelayer-show-tab');
|
||
|
||
var div = '<div class="pagelayer-elp-group-div"></div>'+
|
||
'<center><button class="pagelayer-elp-button '+btnHidden+'">'+prop['text']+'</button></center>';
|
||
|
||
row.append(div);
|
||
|
||
// Add button
|
||
var add_item = function(row){
|
||
|
||
var ele_id = row.closest('[pagelayer-element-id]').attr('pagelayer-element-id') || '';
|
||
var pEle = jQuery('[pagelayer-id="'+ele_id+'"]');
|
||
|
||
// First add the element inside the group element
|
||
var id = pagelayer_element_add_child(pEle, prop['sc'], prop);
|
||
//pagelayer_element_setup('[pagelayer-id='+id+']', true);
|
||
|
||
show_item(id);
|
||
|
||
};
|
||
|
||
// Show the properties of the existing things
|
||
var show_item = function(id, sel){
|
||
|
||
// To append after an existing item
|
||
sel = sel || false;
|
||
|
||
// If pagelayer id empty then return
|
||
if(pagelayer_empty(id)){
|
||
return false;
|
||
}
|
||
|
||
// Since the element is added very fast, we reselect via jQuery for it to re-access the dom
|
||
jEle = jQuery('[pagelayer-id="'+id+'"]');
|
||
|
||
var label_param = prop['item_label']['param'] || '';
|
||
var title = pagelayer_get_att(jEle, label_param) || prop['item_label']['default'];
|
||
|
||
// We need to get the correct value for select based params which are the label
|
||
var child_props = pagelayer_shortcodes[prop.sc];
|
||
for(var section in child_props){
|
||
for(var _param in child_props[section]){
|
||
if(child_props[section][_param]['type'] == 'select'){
|
||
if(title in child_props[section][_param]['list']){
|
||
title = child_props[section][_param]['list'][title];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Create the HTML
|
||
var holder = jQuery('<div class="pagelayer-elp-group-item" pagelayer-group-item-id="'+id+'">'+
|
||
'<div class="pagelayer-elp-group-item-head">'+
|
||
'<span class="pagelayer-elp-group-item-drag"><i class="pli pli-menu" ></i></span>'+
|
||
'<span class="pagelayer-elp-group-item-title">'+title+'</span>'+
|
||
'<span class="pagelayer-elp-group-item-clone '+btnHidden+'"><i class="pli pli-clone" ></i></span>'+
|
||
'<span class="pagelayer-elp-group-item-del '+btnHidden+'"><i class="pli pli-trashcan" ></i></span>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-group-item-body"></div>'+
|
||
'</div>');
|
||
|
||
// Append to the row
|
||
if(sel){
|
||
row.find(sel).after(holder);
|
||
}else{
|
||
row.find('.pagelayer-elp-group-div').first().append(holder);
|
||
}
|
||
|
||
// Setup the toggle
|
||
holder.find('.pagelayer-elp-group-item-title').first().on('click', function(){
|
||
var rEle = holder.find('.pagelayer-elp-group-item-body').first();
|
||
var r_id = holder.attr('pagelayer-group-item-id');
|
||
|
||
// If the props are not already setup
|
||
if(rEle.html().length < 1){
|
||
|
||
pagelayer_elpd_generate(jQuery('[pagelayer-id="'+r_id+'"]'), rEle);
|
||
|
||
// Change the group item title
|
||
var tmp_title = holder.find('[pagelayer-elp-name="'+label_param+'"] [name="'+label_param+'"]');
|
||
|
||
if(tmp_title.length > 0){
|
||
jQuery(tmp_title).on('input', function(){
|
||
holder.find('.pagelayer-elp-group-item-title').html(tmp_title.val());
|
||
});
|
||
}
|
||
|
||
}
|
||
|
||
rEle.toggle();
|
||
});
|
||
|
||
// Clone the item
|
||
holder.find('.pagelayer-elp-group-item-head .pli-clone').on('click', function(){
|
||
|
||
// If the element have any parent
|
||
var jEle = jQuery('[pagelayer-id="'+id+'"]');
|
||
var par = pagelayer_get_parent(jEle);
|
||
var clone_ele = pagelayer_copy_element(jEle);
|
||
//console.log(clone_ele);console.log('[pagelayer-group-item-id="'+id+'"]');
|
||
show_item(clone_ele, '[pagelayer-group-item-id="'+id+'"]');
|
||
|
||
if(par){
|
||
pagelayer_sc_render(pagelayer_ele_by_id(par));
|
||
}
|
||
});
|
||
|
||
// Delete the item
|
||
holder.find('.pagelayer-elp-group-item-head .pli-trashcan').on('click', function(){
|
||
|
||
// If the element have any parent
|
||
var jEle = jQuery('[pagelayer-id="'+id+'"]');
|
||
var par = pagelayer_get_parent(jEle);
|
||
holder.remove();
|
||
pagelayer_delete_element(jEle);
|
||
|
||
if(par){
|
||
pagelayer_sc_render(pagelayer_ele_by_id(par));
|
||
}
|
||
});
|
||
|
||
};
|
||
|
||
// Setup the drag
|
||
pagelayer.$$(".pagelayer-elp-group-div").sortable({
|
||
axis: 'y',
|
||
nested : false,
|
||
vertical : true,
|
||
handle : ".pagelayer-elp-group-item-drag",
|
||
placeholder: "pagelayer-drag-highlight",
|
||
start : function(event, ui) {
|
||
var start_pos = ui.item.index();
|
||
ui.item.data('start_pos', start_pos);
|
||
},
|
||
stop : function(event, ui){
|
||
var end_pos = ui.item.index();
|
||
var id = jQuery(ui.item).closest('[pagelayer-group-item-id]').attr('pagelayer-group-item-id');
|
||
var jEle = jQuery('[pagelayer-id="'+id+'"]');
|
||
pagelayer_moving_element(jEle, ui.item.data('start_pos'), end_pos);
|
||
var par = pagelayer_get_parent(jEle);
|
||
if(par){
|
||
pagelayer_sc_render(pagelayer_ele_by_id(par));
|
||
}
|
||
}
|
||
});
|
||
|
||
// Handle click of the group
|
||
row.find('.pagelayer-elp-button').on('click', function(){
|
||
if('pro' in prop && pagelayer_empty(pagelayer_pro)){
|
||
pagelayer_pro_notice();
|
||
return;
|
||
}
|
||
add_item(row);
|
||
});
|
||
|
||
// Find the existing items
|
||
prop.el.$.find('[pagelayer-parent="'+prop.el['id']+'"]').each(function(){
|
||
var jEle = jQuery(this);
|
||
var id = pagelayer_assign_id(jEle);
|
||
show_item(id);
|
||
});
|
||
};
|
||
|
||
function pagelayer_pro_notice(){
|
||
var div = pagelayer.$$('.pagelayer-pro-notice');
|
||
|
||
div.find('.pagelayer-pro-x').click(function(){
|
||
div.hide();
|
||
});
|
||
|
||
div.show();
|
||
}
|
||
|
||
// Moving an element
|
||
function pagelayer_moving_element(jEle, start_pos, end_pos){
|
||
if(start_pos==end_pos){
|
||
return;
|
||
}
|
||
|
||
var id = pagelayer_assign_id(jEle);
|
||
|
||
// Is there a wrap
|
||
var wrap = pagelayer_wrap_by_id(id);
|
||
|
||
var par = wrap.parent();
|
||
var children = par.children("div");
|
||
|
||
// This is required for Owl Carousel
|
||
if(children.length==1){
|
||
par = par.parent();
|
||
children = par.children("div");
|
||
}
|
||
|
||
var element = children.eq(start_pos).detach();
|
||
if(end_pos < start_pos){
|
||
children.eq(end_pos).before(element);
|
||
}else{
|
||
children.eq(end_pos).after(element);
|
||
}
|
||
}
|
||
|
||
// The Datetime Property
|
||
function pagelayer_elp_datetime(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-datetime-div">'+
|
||
'<input type="date" class="pagelayer-elp-datetime" name="'+prop.c['name']+'" value="'+prop.c['val']+'" />'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-datetime').on('change', function(){
|
||
_pagelayer_set_atts(row, jQuery(this).val());// Save and Render
|
||
});
|
||
|
||
};
|
||
|
||
// The padding property
|
||
function pagelayer_elp_padding(row, prop){
|
||
var val = ['', '', '', ''];
|
||
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
}
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-padding-div">'+
|
||
'<input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[0])+'"></input>'+
|
||
'<input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[1])+'"></input>'+
|
||
'<input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[2])+'"></input>'+
|
||
'<input type="number" class="pagelayer-elp-padding" value="'+parseFloat(val[3])+'"></input>'+
|
||
'<i class="pli pli-link" ></i>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Is the value linked ?
|
||
var link = row.find('.pagelayer-elp-padding-div i');
|
||
var isLinked = 1;
|
||
//isLinked = isLinked == 2 ? false : true;
|
||
//console.log(isLinked);
|
||
var tmp_val = val[0];
|
||
|
||
for(var p_val in val){
|
||
|
||
// Check if unlinked
|
||
if(tmp_val != val[p_val] ){
|
||
isLinked = 0;
|
||
}
|
||
tmp_val = val[p_val];
|
||
}
|
||
|
||
if(isLinked){
|
||
link.addClass('pagelayer-elp-padding-linked');
|
||
}else{
|
||
link.removeClass('pagelayer-elp-padding-linked');
|
||
}
|
||
|
||
// Handle link on click
|
||
link.on('click', function(){
|
||
|
||
var linked = link.hasClass('pagelayer-elp-padding-linked');
|
||
|
||
if(linked){
|
||
link.removeClass('pagelayer-elp-padding-linked');
|
||
}else{
|
||
link.addClass('pagelayer-elp-padding-linked');
|
||
}
|
||
|
||
});
|
||
|
||
row.find('input').on('input', function(){
|
||
|
||
// Are the values linked
|
||
var linked = row.find('.pagelayer-elp-padding-div .pli').hasClass('pagelayer-elp-padding-linked');
|
||
|
||
if(linked){
|
||
var val = jQuery(this).val();
|
||
row.find('input').each(function(){
|
||
jQuery(this).val(val);
|
||
});
|
||
}
|
||
|
||
var vals = [];
|
||
|
||
// Get all values
|
||
row.find('input').each(function(){
|
||
var val = jQuery(this).val();
|
||
vals.push(val ? val : 0);
|
||
});
|
||
|
||
_pagelayer_set_atts(row, vals);// Save and Render
|
||
});
|
||
|
||
};
|
||
|
||
// The shadow property
|
||
function pagelayer_elp_shadow(row, prop){
|
||
|
||
var val =['','','',''];
|
||
|
||
// Do we have a val ?
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
}
|
||
}
|
||
|
||
//var val = {color: '', blur: '', horizontal: '', vertical: ''};
|
||
|
||
var div = '<span class="pagelayer-prop-edit"><i class="pli pli-pencil"></i></span>'+
|
||
'<div class="pagelayer-elp-shadow-div">'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-horizontal">'+
|
||
'<label class="pagelayer-elp-label">Horizontal</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-shadow-blur" value="'+val[0]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-vertical">'+
|
||
'<label class="pagelayer-elp-label">Vertical</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-shadow-blur" value="'+val[1]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-blur">'+
|
||
'<label class="pagelayer-elp-label">Blur</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-shadow-blur" value="'+val[2]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-color">'+
|
||
'<label class="pagelayer-elp-label">Color</label>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-color-preview"></div>'+
|
||
'<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-prop-edit').on('click', function(){
|
||
row.find('.pagelayer-elp-shadow-div').toggleClass('pagelayer-prop-show');
|
||
});
|
||
|
||
var preview = row.find('.pagelayer-elp-color-preview');
|
||
preview.css('background', val[3]);
|
||
|
||
var picker = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-color-div')[0],
|
||
popup : 'left',
|
||
color : val[3],
|
||
doc: window.parent.document
|
||
});
|
||
|
||
// If no val, then set blank
|
||
if(pagelayer_empty(val[3])){
|
||
preview.addClass('pagelayer-blank-preview');
|
||
}
|
||
|
||
var handle_white = function(col){
|
||
if(col.charAt(1) == 'f'){
|
||
preview.addClass('pagelayer-white-border');
|
||
}else{
|
||
preview.removeClass('pagelayer-white-border');
|
||
}
|
||
}
|
||
|
||
handle_white(val[3]);
|
||
|
||
// Handle selected color
|
||
picker.onChange = function(color) {
|
||
preview.removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
|
||
handle_white(color.hex);
|
||
val[3] = (color.hex ? color.hex : '');
|
||
_pagelayer_set_atts(row, val);
|
||
};
|
||
|
||
// Remove Color
|
||
row.find('.pagelayer-elp-remove-color').on('click', function(event){
|
||
event.stopPropagation();
|
||
picker.setColor(prop.default, true);
|
||
preview.addClass('pagelayer-blank-preview');
|
||
handle_white('');
|
||
val[3] = '';
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
row.find('input').on('input', function(){
|
||
var i = 0;
|
||
row.find('.pagelayer-elp-shadow-input').each(function(){
|
||
var value = jQuery(this).val();
|
||
val[i] = (value ? value : '');
|
||
i++;
|
||
});
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
}
|
||
|
||
// The box shadow property
|
||
function pagelayer_elp_box_shadow(row, prop){
|
||
|
||
var val = ['','','','','',''];
|
||
|
||
// Do we have a val ?
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
}
|
||
}
|
||
|
||
var val_pos = ['horizontal','vertical','blur','color','spread','inset'];
|
||
|
||
var div = '<span class="pagelayer-prop-edit"><i class="pli pli-pencil"></i></span>'+
|
||
'<div class="pagelayer-elp-shadow-div">'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-horizontal">'+
|
||
'<label class="pagelayer-elp-label">Horizontal</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-shadow-blur" name="horizontal" value="'+val[0]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-vertical">'+
|
||
'<label class="pagelayer-elp-label">Vertical</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-shadow-blur" name="vertical" value="'+val[1]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-blur">'+
|
||
'<label class="pagelayer-elp-label">Blur</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-shadow-blur" name="blur" value="'+val[2]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-spread">'+
|
||
'<label class="pagelayer-elp-label">Spread</label>'+
|
||
'<input class="pagelayer-elp-shadow-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-shadow-spread" name="spread" value="'+(val[4] ? val[4] : 0 )+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-color">'+
|
||
'<label class="pagelayer-elp-label">Color</label>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-color-preview"></div>'+
|
||
'<span class="pagelayer-elp-remove-color"><i class="pli pli-cross" ></i></span>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-shadow-inset">'+
|
||
'<label class="pagelayer-elp-label">Shadow</label>'+
|
||
'<select class="pagelayer-elp-shadow-input pagelayer-elp-select" name="inset" type="checkbox" class="pagelayer-elp-shadow-inset">'+
|
||
'<option value="">Outset</option>'+
|
||
'<option value="inset"'+(pagelayer_empty(val[5]) ? '' : ' selected' )+'>Inset</option>'+
|
||
'</select>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-prop-edit').on('click', function(){
|
||
row.find('.pagelayer-elp-shadow-div').toggleClass('pagelayer-prop-show');
|
||
});
|
||
|
||
var preview = row.find('.pagelayer-elp-color-preview');
|
||
preview.css('background', val[3]);
|
||
|
||
var picker = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-color-div')[0],
|
||
popup : 'left',
|
||
color : val[3],
|
||
doc: window.parent.document
|
||
});
|
||
|
||
// If no val, then set blank
|
||
if(pagelayer_empty(val[3])){
|
||
preview.addClass('pagelayer-blank-preview');
|
||
}
|
||
|
||
var handle_white = function(col){
|
||
if(col.charAt(1) == 'f'){
|
||
preview.addClass('pagelayer-white-border');
|
||
}else{
|
||
preview.removeClass('pagelayer-white-border');
|
||
}
|
||
}
|
||
|
||
handle_white(val[3]);
|
||
|
||
// Handle selected color
|
||
picker.onChange = function(color) {
|
||
row.find('.pagelayer-elp-color-preview').removeClass('pagelayer-blank-preview').css('background', color.rgbaString);
|
||
handle_white(color.hex);
|
||
val[3] = (color.hex ? color.hex : '');
|
||
_pagelayer_set_atts(row, val);
|
||
};
|
||
|
||
// Remove Color
|
||
row.find('.pagelayer-elp-remove-color').on('click', function(event){
|
||
event.stopPropagation();
|
||
picker.setColor(prop.default, true);
|
||
preview.addClass('pagelayer-blank-preview');
|
||
handle_white('');
|
||
val[3] = '';
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
// Onchange set props
|
||
row.find('.pagelayer-elp-shadow-input').on('input change', function(){
|
||
//var i = 0;
|
||
row.find('.pagelayer-elp-shadow-input').each(function(){
|
||
var value = jQuery(this).val();
|
||
var name = jQuery(this).attr('name');
|
||
val[val_pos.indexOf(name)] = (value ? value : '');
|
||
//i++;
|
||
});
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
}
|
||
|
||
// The filter property
|
||
function pagelayer_elp_filter(row, prop){
|
||
|
||
var val = [0,100,100,0,0,100,100];
|
||
|
||
// Do we have a val ?
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
}
|
||
}
|
||
|
||
var filters = [['blur','10','0.1'],['brightness','200','1'],['contrast','200','1'],['grayscale','200','1'],['hue','360','1'],['opacity','100','1'],['saturate','200','1']];
|
||
|
||
var div = '<span class="pagelayer-prop-edit"><i class="pli pli-pencil"></i></span>'+
|
||
'<div class="pagelayer-elp-filter-div">';
|
||
|
||
jQuery.each(val,function(key, value){
|
||
div += '<div class="pagelayer-elp-prop-grp pagelayer-elp-filter-'+filters[key][0]+'">'+
|
||
'<label class="pagelayer-elp-label">'+filters[key][0]+'</label>'+
|
||
'<input class="pagelayer-elp-slider pagelayer-elp-filter-input" type="range" max="'+filters[key][1]+'" min="0" step="'+filters[key][2]+'" class="pagelayer-elp-filter-'+filters[key][0]+'" value="'+value+'"></input>'+
|
||
'<span class="pagelayer-elp-filter-val">'+value+'</span>'+
|
||
'</div>';
|
||
});
|
||
|
||
div += '</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-prop-edit').on('click', function(){
|
||
row.find('.pagelayer-elp-filter-div').toggleClass('pagelayer-prop-show');
|
||
});
|
||
|
||
row.find('input').on('input', function(){
|
||
var val = [];
|
||
jQuery(this).parent().find('span').html(this.value);
|
||
row.find('.pagelayer-elp-filter-input').each(function(){
|
||
var value = jQuery(this).val();
|
||
val.push(value ? value : 'none');
|
||
});
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
}
|
||
|
||
// The gradient property
|
||
function pagelayer_elp_gradient(row, prop){
|
||
|
||
var val = ['','','','','','',''];
|
||
|
||
// Do we have a val ?
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
}
|
||
}
|
||
|
||
var setColor = [val[1], val[3], val[5]];
|
||
|
||
//var val = {color: '', blur: '', horizontal: '', vertical: ''};
|
||
var getColorList = function(num){
|
||
|
||
var is_global = pagelayer_is_global_color(setColor[num]);
|
||
var global_list = '<div class="pagelayer-global-color-list">'+
|
||
'<div class="pagelayer-global-setting-color">'+
|
||
'<b>Global Colors</b><span class="pli pli-service"></span>'+
|
||
'</div>';
|
||
|
||
for( cid in pagelayer_global_colors ){
|
||
|
||
var color = pagelayer_global_colors[cid];
|
||
var active_class = '';
|
||
|
||
if(cid == is_global){
|
||
active_class = 'pagelayer-global-selected';
|
||
}
|
||
|
||
// If global color not exist
|
||
if(!pagelayer_empty(is_global)){
|
||
setColor[num] = pagelayer_global_colors[is_global]['value'];
|
||
}
|
||
|
||
global_list += '<div class="pagelayer-global-color-list-item '+ active_class +'" data-global-id="'+ cid +'">'+
|
||
'<span class="pagelayer-global-color-pre" style="background:'+ color['value'] +'"></span>'+
|
||
'<span class="pagelayer-global-color-title">'+ color['title'] +'</span>'+
|
||
'<span class="pagelayer-global-color-code">'+ color['value'] +'</span>'+
|
||
'</div>';
|
||
}
|
||
global_list += '</div>';
|
||
|
||
return global_list;
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-gradient-div">'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-angle">'+
|
||
'<label class="pagelayer-elp-label">Angle</label>'+
|
||
'<input class="pagelayer-elp-gradient-input" type="number" max="360" min="0" step="1" class="pagelayer-elp-gradient-angle" value="'+val[0]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
|
||
'<label class="pagelayer-elp-label">Color 1</label>'+
|
||
'<div class="pagelayer-elp-color-div-holder">'+
|
||
'<div class="pagelayer-elp-color-global"></div>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-gradient-color1 pagelayer-elp-color-preview"></div>'+
|
||
'</div>'+
|
||
getColorList(0)+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per1">'+
|
||
'<label class="pagelayer-elp-label">Percentage 1</label>'+
|
||
'<input class="pagelayer-elp-gradient-input" type="number" max="100" min="-100" step="1" class="pagelayer-elp-gradient-per1" value="'+val[2]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
|
||
'<label class="pagelayer-elp-label">Color 2</label>'+
|
||
'<div class="pagelayer-elp-color-div-holder">'+
|
||
'<div class="pagelayer-elp-color-global"></div>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-gradient-color2 pagelayer-elp-color-preview"></div>'+
|
||
'</div>'+
|
||
getColorList(1)+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per2">'+
|
||
'<label class="pagelayer-elp-label">Percentage 2</label>'+
|
||
'<input class="pagelayer-elp-gradient-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-gradient-per2" value="'+val[4]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-color">'+
|
||
'<label class="pagelayer-elp-label">Color 3</label>'+
|
||
'<div class="pagelayer-elp-color-div-holder">'+
|
||
'<div class="pagelayer-elp-color-global"></div>'+
|
||
'<div class="pagelayer-elp-color-div">'+
|
||
'<div class="pagelayer-elp-gradient-color3 pagelayer-elp-color-preview"></div>'+
|
||
'</div>'+
|
||
getColorList(2)+
|
||
'</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-prop-grp pagelayer-elp-gradient-per3">'+
|
||
'<label class="pagelayer-elp-label">Percentage 3</label>'+
|
||
'<input class="pagelayer-elp-gradient-input" type="number" max="100" min="0" step="1" class="pagelayer-elp-gradient-per3" value="'+val[6]+'"></input>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
var i = 0;
|
||
row.find('.pagelayer-elp-color-preview').each(function(){
|
||
jQuery(this).css('background', setColor[i]);
|
||
i++;
|
||
});
|
||
|
||
// Remove global
|
||
var removeGlobal = function(holder){
|
||
holder.find('.pagelayer-elp-color-global').removeClass('pagelayer-active-global');
|
||
holder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
holder.find('.pagelayer-global-color-list').hide();
|
||
}
|
||
|
||
var picker1 = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-gradient-color1')[0],
|
||
popup : 'left',
|
||
color : setColor[0],
|
||
doc: window.parent.document
|
||
});
|
||
|
||
// Handle selected color
|
||
picker1.onChange = function(color) {
|
||
var cPreview = row.find('.pagelayer-elp-gradient-color1')
|
||
cPreview.css('background', color.rgbaString);
|
||
val[1] = (color.hex ? color.hex : '');
|
||
_pagelayer_set_atts(row, val);
|
||
|
||
removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
|
||
};
|
||
|
||
var picker2 = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-gradient-color2')[0],
|
||
popup : 'left',
|
||
color : setColor[1],
|
||
doc: window.parent.document
|
||
});
|
||
|
||
// Handle selected color
|
||
picker2.onChange = function(color) {
|
||
var cPreview = row.find('.pagelayer-elp-gradient-color2');
|
||
cPreview.css('background', color.rgbaString);
|
||
val[3] = (color.hex ? color.hex : '');
|
||
_pagelayer_set_atts(row, val);
|
||
|
||
removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
|
||
};
|
||
|
||
var picker3 = new pagelayer_Picker({
|
||
parent : row.find('.pagelayer-elp-gradient-color3')[0],
|
||
popup : 'left',
|
||
color : setColor[2],
|
||
doc: window.parent.document
|
||
});
|
||
|
||
// Handle selected color
|
||
picker3.onChange = function(color) {
|
||
var cPreview = row.find('.pagelayer-elp-gradient-color3');
|
||
cPreview.css('background', color.rgbaString);
|
||
val[5] = (color.hex ? color.hex : '');
|
||
_pagelayer_set_atts(row, val);
|
||
|
||
removeGlobal(cPreview.closest('.pagelayer-elp-color-div-holder'));
|
||
};
|
||
|
||
row.find('input').on('input', function(){
|
||
var i = 0;
|
||
row.find('.pagelayer-elp-gradient-input').each(function(){
|
||
var value = jQuery(this).val();
|
||
val[i] = (value ? value : '');
|
||
i = i+2;
|
||
});
|
||
_pagelayer_set_atts(row, val);
|
||
});
|
||
|
||
row.find('.pagelayer-global-selected').each(function(){
|
||
jQuery(this).closest('.pagelayer-elp-color-div-holder').find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
|
||
});
|
||
|
||
// Handle for global color
|
||
row.find('.pagelayer-elp-color-global').on('click', function(e){
|
||
jQuery(this).closest('.pagelayer-elp-color-div-holder').find('.pagelayer-global-color-list').slideToggle();
|
||
});
|
||
|
||
row.find('.pagelayer-global-setting-color').on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
if(jQuery(e.target).closest('.pli-service').length < 1){
|
||
return;
|
||
}
|
||
|
||
window.open( pagelayer_customizer_url + '&autofocus%5Bsection%5D=pagelayer_global_colors_sec', '_blank' );
|
||
});
|
||
|
||
// Handle for global color
|
||
row.find('.pagelayer-global-color-list-item ').on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
var listItem = jQuery(this);
|
||
var globalID = listItem.data('global-id');
|
||
var listHolder = listItem.closest('.pagelayer-global-color-list');
|
||
var colorHolder = listItem.closest('.pagelayer-elp-color-div-holder');
|
||
var colorPreview = colorHolder.find('.pagelayer-elp-color-preview');
|
||
|
||
// Remove previous selecttion
|
||
listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
listItem.addClass('pagelayer-global-selected');
|
||
colorHolder.find('.pagelayer-elp-color-global').addClass('pagelayer-active-global');
|
||
listHolder.slideUp();
|
||
|
||
var color = pagelayer_global_colors[globalID]['value'];
|
||
colorPreview.removeClass('pagelayer-blank-preview').css('background', color);
|
||
|
||
var i = 1;
|
||
|
||
if(colorPreview.hasClass('pagelayer-elp-gradient-color2')){
|
||
i = 3;
|
||
}
|
||
|
||
if(colorPreview.hasClass('pagelayer-elp-gradient-color3')){
|
||
i = 5;
|
||
}
|
||
|
||
val[i] = '$'+globalID;
|
||
_pagelayer_set_atts(row, val);// Save and Render
|
||
|
||
});
|
||
|
||
}
|
||
|
||
function pagelayer_elp_font_family(row, prop){
|
||
|
||
var options = '';
|
||
var option = function(val, lang, type){
|
||
var selected = (val != prop.c['val']) ? '' : 'selected="selected"';
|
||
var lang = pagelayer_empty(lang) ? 'Default' : lang;
|
||
return '<option class="pagelayer-elp-select-option" value="'+val+'" type="'+type+'" '+selected+'>'+lang+'</option>';
|
||
}
|
||
|
||
for(y in pagelayer_fonts){
|
||
if(y != 'default'){
|
||
options += '<optgroup label="'+pagelayer_ucwords(y)+'">';
|
||
}
|
||
for (x in pagelayer_fonts[y]){
|
||
options += option((jQuery.isNumeric(x) ? pagelayer_fonts[y][x] : x), pagelayer_fonts[y][x], y);
|
||
}
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-select-div pagelayer-elp-pos-rel">'+
|
||
'<select class="pagelayer-elp-select pagelayer-select" name="'+prop.c['name']+'">'+options+'</select>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('select').on('change', function(){
|
||
|
||
var sEle = jQuery(this);
|
||
|
||
pagelayer_link_font_family(sEle);
|
||
_pagelayer_set_atts(row, sEle.val());// Save and Render
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// The typography property
|
||
function pagelayer_elp_typography(row, prop){
|
||
|
||
var val = pagelayer_parse_typo(prop.c['val'], true);
|
||
var is_typo = pagelayer_is_global_typo(prop.c['val']);
|
||
var global_active = '';
|
||
var save_timer = {};
|
||
|
||
// Load value of tablet and mobile
|
||
var val_tablet = pagelayer_get_att(prop.el.$, prop.c['name']+'_tablet');
|
||
var val_mobile = pagelayer_get_att(prop.el.$, prop.c['name']+'_mobile');
|
||
|
||
val_tablet = pagelayer_parse_typo(val_tablet);
|
||
val_mobile = pagelayer_parse_typo(val_mobile);
|
||
|
||
|
||
// If global color not exist
|
||
if(!pagelayer_empty(is_typo)){
|
||
global_active = 'pagelayer-active-global';
|
||
}
|
||
|
||
var select = {
|
||
'style' : {'' : 'Default', 'normal' : 'Normal', 'italic' : 'Italic', 'oblique' : 'Oblique'},
|
||
'weight' : {'' : 'Default', '100' : '100', '200' : '200', '300' : '300', '400' : '400', '500' : '500', '600' : '600', '700' : '700', '800' : '800', '900' : '900', 'normal' : 'Normal', 'lighter' : 'Lighter', 'bold' : 'Bold', 'bolder' :'Bolder', 'unset' : 'Unset'},
|
||
'variant' : {'' : 'Default', 'normal' : 'Normal', 'small-caps' : 'Small Caps'},
|
||
'deco-line' : {'' : 'Default', 'none' : 'None', 'overline' : 'Overline', 'line-through' : 'Line Through', 'underline' : 'Underline', 'underline overline' : 'Underline Overline'},
|
||
'deco-style' : {'' : 'Default', 'solid' : 'Solid', 'double' : 'Double', 'dotted' : 'Dotted', 'dashed' : 'Dashed', 'wavy' : 'Wavy'},
|
||
'transform' : {'' : 'Default', 'capitalize' : 'Capitalize', 'uppercase' : 'Uppercase', 'lowercase' : 'Lowercase'},
|
||
'fonts' : pagelayer_fonts,
|
||
}
|
||
|
||
var option = function(val, lang, setVal){
|
||
var selected = (val.toLowerCase() != setVal.toLowerCase()) ? '' : 'selected="selected"';
|
||
|
||
var lang = pagelayer_empty(lang) ? 'Default' : lang;
|
||
return '<option value="'+val+'" '+selected+'>'+ lang +'</option>';
|
||
}
|
||
|
||
var font_options = '';
|
||
var font_option = function(val, lang, type, setVal){
|
||
var selected = (val != setVal) ? '' : 'selected="selected"';
|
||
var lang = pagelayer_empty(lang) ? 'Default' : lang;
|
||
return '<option class="pagelayer-elp-typo-sele-op" value="'+val+'" type="'+type+'" '+selected+'>'+lang+'</option>';
|
||
}
|
||
|
||
for(y in select['fonts']){
|
||
if(y != 'default'){
|
||
font_options += '<optgroup label="'+pagelayer_ucwords(y)+'">';
|
||
}
|
||
for (x in select['fonts'][y]){
|
||
font_options += font_option((jQuery.isNumeric(x) ? select['fonts'][y][x] : x), select['fonts'][y][x], y, val[0]);
|
||
}
|
||
}
|
||
|
||
var modes = {desktop: '', tablet: '_tablet', mobile: '_mobile'};
|
||
var mode = pagelayer_get_screen_mode();
|
||
var screen = '<div class="pagelayer-elp-screen">'+
|
||
'<i class="pli pli-desktop" ></i>'+
|
||
'<i class="pli pli-tablet" ></i>'+
|
||
'<i class="pli pli-mobile" ></i>'+
|
||
'<i class="pagelayer-prop-screen pli pli-'+mode+'" ></i>'+
|
||
'</div>';
|
||
|
||
var div = '<span class="pagelayer-elp-typo-edit-div">'+
|
||
'<i class="pli pli-pencil"></i>'+
|
||
'</span>'+
|
||
'<div class="pagelayer-elp-typo-div" pagelayer-screen-mode="'+mode+'">'+
|
||
'<div class="pagelayer-elp-typo-fonts">'+
|
||
'<div class="pagelayer-elp-global-typo">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('global_fonts')+'</label>'+
|
||
'<span class="pagelayer-elp-typo-icons">'+
|
||
'<span class="pagelayer-elp-global-icon '+global_active+'"></span>'+
|
||
'<span class="pli pli-service"></span>'+
|
||
'</span>'+
|
||
'<div class="pagelayer-global-font-list">';
|
||
|
||
for( cid in pagelayer_global_fonts ){
|
||
|
||
var font = pagelayer_global_fonts[cid];
|
||
|
||
div += '<div class="pagelayer-global-font-list-item" data-global-id="'+ cid +'">'+
|
||
'<span class="pagelayer-global-font-title">'+font['title']+'</span>'+
|
||
'</div>';
|
||
}
|
||
div += '</div>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-family">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('font_family')+'</label>'+
|
||
'<select class="pagelayer-elp-typo-input pagelayer-elp-select" name="font-family">'+font_options+'</select>'+
|
||
'</div>';
|
||
|
||
div += '<div class="pagelayer-elp-typo pagelayer-elp-typo-size">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('font_size')+' '+screen+'</label>'+
|
||
'<input name="font-size" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val[1]+'"></input>'+
|
||
'<input name="font-size_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val_tablet[1]+'"></input>'+
|
||
'<input name="font-size_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="200" min="0" step="1" value="'+val_mobile[1]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-style">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('font_style')+'</label>'+
|
||
'<select name="font-style" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
|
||
jQuery.each(select['style'],function(key, value){
|
||
div += option(key, value, val[2]);
|
||
});
|
||
div +='</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-weight">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('font_weight')+' '+screen+'</label>'+
|
||
'<select name="font-weight" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['weight'],function(key, value){
|
||
div += option(key, value, val[3]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'<select name="font-weight_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['weight'],function(key, value){
|
||
div += option(key, value, val_tablet[3]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'<select name="font-weight_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['weight'],function(key, value){
|
||
div += option(key, value, val_mobile[3]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-variant">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('font_variant')+'</label>'+
|
||
'<select name="font-variant" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['variant'],function(key, value){
|
||
div += option(key, value, val[4]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-deco-line">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('decoration_line')+'</label>'+
|
||
'<select name="text-decoration-line" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['deco-line'],function(key, value){
|
||
div += option(key, value, val[5]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-deco-style">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('decoration_style')+'</label>'+
|
||
'<select name="text-decoration-style" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['deco-style'],function(key, value){
|
||
div += option(key, value, val[6]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-height">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('line_height')+' '+screen+'</label>'+
|
||
'<input name="line-height" class="pagelayer-elp-typo-input" pagelayer-show-device="desktop" type="number" max="15" min="0" step="0.1" value="'+val[7]+'"></input>'+
|
||
'<input name="line-height_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="15" min="0" step="0.1" value="'+val_tablet[7]+'"</input>'+
|
||
'<input name="line-height_mobile" class="pagelayer-elp-typo-input" pagelayer-show-device="mobile" type="number" max="15" min="0" step="0.1" value="'+val_mobile[7]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-transform">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('text_transform')+'</label>'+
|
||
'<select name="text-transform" class="pagelayer-elp-typo-input pagelayer-elp-select">';
|
||
jQuery.each(select['transform'],function(key, value){
|
||
div += option(key, value, val[8]);
|
||
});
|
||
|
||
div += '</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-lspacing">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('text_spacing')+' '+screen+'</label>'+
|
||
'<input name="letter-spacing" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val[9]+'"></input>'+
|
||
'<input name="letter-spacing_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val_tablet[9]+'"></input>'+
|
||
'<input name="letter-spacing_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="10" min="-10" step="0.1" value="'+val_mobile[9]+'"></input>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-typo pagelayer-elp-typo-wspacing">'+
|
||
'<label class="pagelayer-elp-label">'+pagelayer_l('word_spacing')+' '+screen+'</label>'+
|
||
'<input name="word-spacing" pagelayer-show-device="desktop" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val[10]+'"></input>'+
|
||
'<input name="word-spacing_tablet" pagelayer-show-device="tablet" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val_tablet[10]+'"></input>'+
|
||
'<input name="word-spacing_mobile" pagelayer-show-device="mobile" class="pagelayer-elp-typo-input" type="number" max="50" min="0" step="1" value="'+val_mobile[10]+'"></input>'+
|
||
'</div>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
if(pagelayer_empty(val[5]) || val[5]=='none'){
|
||
row.find('.pagelayer-elp-typo-deco-style').hide();
|
||
}
|
||
|
||
row.find('.pagelayer-elp-typo-edit-div .pli-pencil').on('click', function(){
|
||
row.find('.pagelayer-elp-typo-div').toggleClass('pagelayer-prop-show');
|
||
});
|
||
|
||
var save_typography = function(){
|
||
var globalEle = row.find('.pagelayer-global-selected');
|
||
var atts = {};
|
||
|
||
atts[prop.c['name']] = {};
|
||
atts[prop.c['name']+'_tablet'] = {};
|
||
atts[prop.c['name']+'_mobile'] = {};
|
||
|
||
if(globalEle.length > 0){
|
||
atts[prop.c['name']]['global-font'] = globalEle.attr('data-global-id');
|
||
}
|
||
|
||
row.find('.pagelayer-elp-typo-input').each(function(){
|
||
|
||
var iEle = jQuery(this);
|
||
var name = iEle.attr('name');
|
||
var value = iEle.val();
|
||
var isGlobal = iEle.closest('[pagelayer-set-global]');
|
||
|
||
if((value == '' && isGlobal.length < 1 && globalEle.length < 1) || isGlobal.length > 0){
|
||
return;
|
||
}
|
||
|
||
if(name.indexOf('_tablet') > -1){
|
||
name = name.replace('_tablet', '');
|
||
atts[prop.c['name']+'_tablet'][name] = value;
|
||
return;
|
||
}
|
||
|
||
if(name.indexOf('_mobile') > -1){
|
||
name = name.replace('_mobile', '');
|
||
atts[prop.c['name']+'_mobile'][name] = value;
|
||
return;
|
||
}
|
||
|
||
atts[prop.c['name']][name] = value;
|
||
});
|
||
|
||
pagelayer_set_atts(prop.el.$, atts);
|
||
pagelayer_sc_render(prop.el.$); // Render
|
||
}
|
||
|
||
row.find('.pagelayer-elp-typo-input').on('change', function(e){
|
||
|
||
var jEle = jQuery(e.target);
|
||
|
||
pagelayer_link_font_family(jEle);
|
||
jEle.closest('[pagelayer-set-global]').removeAttr('pagelayer-set-global');
|
||
|
||
// Save value
|
||
save_typography();
|
||
});
|
||
|
||
row.find('.pagelayer-elp-typo-deco-line select').on('change', function(){
|
||
var value = jQuery(this).val();
|
||
if(pagelayer_empty(value) || value=='none'){
|
||
row.find('.pagelayer-elp-typo-deco-style').hide();
|
||
}else{
|
||
row.find('.pagelayer-elp-typo-deco-style').show();
|
||
}
|
||
});
|
||
|
||
// Handle for global font
|
||
row.find('.pagelayer-elp-global-typo .pagelayer-elp-global-icon').on('click', function(e){
|
||
e.stopPropagation();
|
||
row.find('.pagelayer-global-font-list').slideToggle();
|
||
|
||
});
|
||
|
||
row.find('.pagelayer-elp-global-typo .pli-service').on('click', function(e){
|
||
e.stopPropagation();
|
||
window.open(pagelayer_customizer_url+'&autofocus%5Bsection%5D=pagelayer_global_fonts_sec', '_blank');
|
||
});
|
||
|
||
// Added restore global val
|
||
row.find('.pagelayer-elp-typo > .pagelayer-elp-label').each(function(){
|
||
var label = jQuery(this);
|
||
var defaultButton = '<span class="pagelayer-typo-default" title="'+pagelayer_l('restore_global')+'" ><i class="fas fa-undo"></i></span>';
|
||
label.append(defaultButton);
|
||
|
||
label.find('.pagelayer-typo-default').on('click', function(e, skip_save){
|
||
|
||
skip_save = skip_save || false;
|
||
|
||
var globalID = row.find('.pagelayer-global-selected').data('global-id');
|
||
|
||
if(pagelayer_empty(globalID) || pagelayer_empty(pagelayer_global_fonts[globalID])){
|
||
return;
|
||
}
|
||
|
||
var setFonts = pagelayer_global_fonts[globalID]['value'];
|
||
var holder = label.closest('.pagelayer-elp-typo');
|
||
var inputs = holder.find('.pagelayer-elp-typo-input');
|
||
var name = inputs.first().attr('name');
|
||
var val = '';
|
||
|
||
holder.attr('pagelayer-set-global', 1);
|
||
|
||
if(name in setFonts){
|
||
val = setFonts[name];
|
||
}
|
||
|
||
if(typeof val == 'object'){
|
||
for(var mode in modes){
|
||
var _val = '';
|
||
if(mode in val){
|
||
_val = val[mode];
|
||
}
|
||
|
||
holder.find('.pagelayer-elp-typo-input[name="'+name+modes[mode]+'"]').val(_val);
|
||
}
|
||
}else{
|
||
|
||
if(inputs.length > 1){
|
||
inputs.val('');
|
||
}
|
||
|
||
inputs.first().val(val);
|
||
}
|
||
|
||
if(skip_save){
|
||
return;
|
||
}
|
||
|
||
// save value
|
||
clearTimeout(save_timer);
|
||
save_timer = setTimeout(save_typography, 200);
|
||
|
||
});
|
||
});
|
||
|
||
// Handle for global font
|
||
row.find('.pagelayer-global-font-list-item').on('click', function(e){
|
||
e.stopPropagation();
|
||
|
||
var listItem = jQuery(this);
|
||
var fontSelect = row.find('.pagelayer-elp-typo-family .pagelayer-elp-typo-input');
|
||
|
||
// Remove global typo
|
||
if(listItem.hasClass('pagelayer-global-selected')){
|
||
row.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
row.find('.pagelayer-elp-global-icon').removeClass('pagelayer-active-global');
|
||
row.find('[pagelayer-set-global]').removeAttr('pagelayer-set-global');
|
||
row.find('.pagelayer-global-on').removeClass('pagelayer-global-on');
|
||
|
||
// To save and render the typo
|
||
fontSelect.trigger('change');
|
||
return;
|
||
}
|
||
|
||
var globalID = listItem.data('global-id');
|
||
var listHolder = row.find('.pagelayer-global-font-list');
|
||
|
||
// Remove previous selecttion
|
||
listHolder.find('.pagelayer-global-selected').removeClass('pagelayer-global-selected');
|
||
listItem.addClass('pagelayer-global-selected');
|
||
row.find('.pagelayer-elp-global-icon').addClass('pagelayer-active-global');
|
||
row.find('.pagelayer-elp-typo-fonts').addClass('pagelayer-global-on');
|
||
listHolder.slideUp();
|
||
|
||
pagelayer_link_font_family(fontSelect); // Apply google fonts
|
||
|
||
// Set global value to all fields and save
|
||
row.find('.pagelayer-elp-label .pagelayer-typo-default').click();
|
||
});
|
||
|
||
// Active global typography
|
||
if(!pagelayer_empty(is_typo)){
|
||
row.find('[data-global-id="'+is_typo+'"]').addClass('pagelayer-global-selected');
|
||
row.find('.pagelayer-elp-global-icon').addClass('pagelayer-active-global');
|
||
row.find('.pagelayer-elp-typo-fonts').addClass('pagelayer-global-on');
|
||
|
||
// Show the global values if is not customize
|
||
row.find('.pagelayer-elp-typo').attr('pagelayer-set-global', 1);
|
||
row.find('.pagelayer-elp-typo').find('select, input').each(function(){
|
||
var sEle = jQuery(this);
|
||
var val = sEle.val();
|
||
|
||
if(pagelayer_empty(val)){
|
||
return true;
|
||
}
|
||
|
||
sEle.closest('.pagelayer-elp-typo').removeAttr('pagelayer-set-global');
|
||
});
|
||
|
||
row.find('[pagelayer-set-global="1"] .pagelayer-typo-default').trigger('click', [true]);
|
||
}
|
||
|
||
// Set screen mode on change
|
||
row.find('.pagelayer-elp-screen .pli:not(.pagelayer-prop-screen)').on('click', function(){
|
||
var mode = 'desktop';
|
||
var jEle = jQuery(this);
|
||
|
||
// Tablet ?
|
||
if(jEle.hasClass('pli-tablet')){
|
||
mode = 'tablet';
|
||
}
|
||
|
||
// Mobile ?
|
||
if(jEle.hasClass('pli-mobile')){
|
||
mode = 'mobile';
|
||
}
|
||
|
||
pagelayer_set_screen_mode(mode);
|
||
row.find('.pagelayer-elp-screen .pli').removeClass('open');
|
||
});
|
||
|
||
row.find('.pagelayer-elp-screen').on('pagelayer-screen-changed', function(e){
|
||
var mode = pagelayer_get_screen_mode();
|
||
row.find('[pagelayer-screen-mode]').attr('pagelayer-screen-mode', mode);
|
||
});
|
||
|
||
row.find('.pagelayer-elp-screen .pagelayer-prop-screen').on('click', function(e){
|
||
jQuery(this).siblings().toggleClass('open');
|
||
});
|
||
|
||
}
|
||
|
||
// The dimension property
|
||
function pagelayer_elp_dimension(row, prop){
|
||
|
||
var val = ['', ''];
|
||
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
|
||
val = prop.c['val'];
|
||
if(pagelayer_is_string(val)){
|
||
val = val.split(',');
|
||
//console.log(val);
|
||
}
|
||
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-dimension-div">'+
|
||
'<input type="number" class="pagelayer-elp-dimension" value="'+parseFloat(val[0])+'"></input>'+
|
||
'<input type="number" class="pagelayer-elp-dimension" value="'+parseFloat(val[1])+'"></input>'+
|
||
'<i class="pli pli-link" ></i>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Is the value linked ?
|
||
var link = row.find('.pagelayer-elp-dimension-div .pli');
|
||
var isLinked = 1;
|
||
var tmp_val = val[0];
|
||
|
||
for(var p_val in val){
|
||
|
||
// Check if unlinked
|
||
if(tmp_val != val[p_val] ){
|
||
isLinked = 0;
|
||
}
|
||
tmp_val = val[p_val];
|
||
}
|
||
|
||
if(isLinked){
|
||
link.addClass('pagelayer-elp-dimension-linked');
|
||
}else{
|
||
link.removeClass('pagelayer-elp-dimension-linked');
|
||
}
|
||
|
||
// Handle link on click
|
||
link.on('click', function(){
|
||
|
||
var linked = link.hasClass('pagelayer-elp-dimension-linked');
|
||
|
||
if(linked){
|
||
link.removeClass('pagelayer-elp-dimension-linked');
|
||
}else{
|
||
link.addClass('pagelayer-elp-dimension-linked');
|
||
}
|
||
|
||
});
|
||
|
||
row.find('input').on('input', function(){
|
||
|
||
// Are the values linked
|
||
var linked = row.find('.pagelayer-elp-dimension-div .pli').hasClass('pagelayer-elp-dimension-linked');
|
||
|
||
if(linked){
|
||
var val = jQuery(this).val();
|
||
row.find('input').each(function(){
|
||
jQuery(this).val(val);
|
||
});
|
||
}
|
||
|
||
var vals = [];
|
||
|
||
// Get all values
|
||
row.find('input').each(function(){
|
||
var val = jQuery(this).val();
|
||
vals.push(val ? val : 0);
|
||
});
|
||
|
||
_pagelayer_set_atts(row, vals);// Save and Render
|
||
});
|
||
|
||
};
|
||
|
||
var first_time_cat = true;
|
||
// Post Category property
|
||
function pagelayer_elp_postCategory(row, prop){
|
||
|
||
if(pagelayer_empty(pagelayer_post_categories)){
|
||
return;
|
||
}
|
||
|
||
// Placing the checked categories on the top.
|
||
var checked_on_top = function(with_checkbox){
|
||
var checked_list = '';
|
||
var unchecked_list = '';
|
||
|
||
jQuery(with_checkbox).children().each(function(){
|
||
var list = this;
|
||
var temp = jQuery(list).find('input[checked=checked]');
|
||
|
||
if(!pagelayer_empty(temp.length)){
|
||
checked_list += list.outerHTML;
|
||
}else{
|
||
unchecked_list += list.outerHTML;
|
||
}
|
||
|
||
});
|
||
|
||
return ('<div class="pagelayer-post-cat-div" ><ul class="pagelayer-post-category" >'+checked_list+unchecked_list+'</ul></div>');
|
||
}
|
||
|
||
// Getting checked and unchecked categories on opening of page props settings.
|
||
if(first_time_cat == false){
|
||
|
||
var $div = jQuery('<div>').html(pagelayer_post_categories.with_checkbox);
|
||
$div.find('input[type=checkbox]').attr('checked', false);
|
||
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
|
||
var check_val = prop.c['val'];
|
||
if(pagelayer_is_string(check_val)){
|
||
check_val = check_val.split(',');
|
||
}
|
||
|
||
for(var no in check_val){
|
||
$div.find('input[type=checkbox][value='+check_val[no]+']').attr('checked', true);
|
||
}
|
||
}
|
||
|
||
pagelayer_post_categories.with_checkbox = $div.html();
|
||
|
||
}
|
||
|
||
first_time_cat = false;
|
||
|
||
// For making insert new categories functionality.
|
||
row.append(checked_on_top(pagelayer_post_categories.with_checkbox));
|
||
|
||
var div = '<div class="pagelayer-elp-postCategory">'+
|
||
'<span class="pagelayer-add-cat-btn">Add New Category</span>'+
|
||
'<form style="display:none;">'+
|
||
'<div>'+
|
||
'<label>New Category Name</label>'+
|
||
'<input type="text" name="category_name" required>'+
|
||
'</div>'+
|
||
'<div>'+
|
||
'<label>Parent Category</label>'+
|
||
'<div class="pagelayer-parent-category"></div>'+
|
||
'</div>'+
|
||
'<button type="submit" class="pagelayer-cat-submit" >Add New Category</button>'+
|
||
'</form>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// For making categories drop down options and adding an empty option.
|
||
if(!pagelayer_empty(pagelayer_post_categories.without_checkbox)){
|
||
var options = pagelayer_post_categories.without_checkbox.replace('>', '><option class="level-0" value="0">--No Parent--</option>');
|
||
var options = jQuery(options);
|
||
row.find('.pagelayer-parent-category').append(options);
|
||
}
|
||
|
||
// For initiating ajax call when user create new category
|
||
row.find('form').on('submit', function(e){
|
||
e.preventDefault();
|
||
jQuery.ajax({
|
||
type: 'post',
|
||
url: pagelayer_ajax_url+'&action=pagelayer_get_cat_checkboxes',
|
||
dataType: 'json',
|
||
data: {
|
||
pagelayer_nonce: pagelayer_ajax_nonce,
|
||
'postid': pagelayer_postID,
|
||
'new_cat': row.find('form').serialize()
|
||
},
|
||
success: function(obj){
|
||
|
||
if(pagelayer_empty(obj)){
|
||
return;
|
||
}
|
||
|
||
if('error' in obj){
|
||
alert(obj.error);
|
||
}
|
||
|
||
if(!pagelayer_empty(obj.new_cat_id)){
|
||
obj.with_checkbox = obj.with_checkbox.replace('value="'+obj.new_cat_id+'"', 'value="'+obj.new_cat_id+'" checked="checked"');
|
||
}
|
||
|
||
var new_cat_elem = jQuery(obj.with_checkbox).find('input[value='+obj.new_cat_id+']').closest('li');
|
||
var post_cat = row.find('.pagelayer-post-category');
|
||
|
||
// Does the new element have no parents ? Then prepend the <LI> to the existing list shown
|
||
if(!pagelayer_empty(new_cat_elem.parent('.pagelayer-post-category').length)){
|
||
post_cat.prepend(new_cat_elem);
|
||
}else{
|
||
|
||
// Siblings are already there ?
|
||
if(!pagelayer_empty(new_cat_elem.siblings().length)){
|
||
post_cat.find('#'+new_cat_elem.parent().parent('li').attr('id')).children('ul').append(new_cat_elem);
|
||
// No siblings, hence append
|
||
}else{
|
||
new_cat_elem = new_cat_elem.parent();
|
||
post_cat.find('#'+new_cat_elem.closest('li').attr('id')).append(new_cat_elem);
|
||
}
|
||
|
||
post_cat.prepend(new_cat_elem.parentsUntil('.pagelayer-post-category').last());
|
||
}
|
||
|
||
row.find('#pagelayer_cat_parent').replaceWith(obj.without_checkbox.replace('>', '><option class="level-0" value="0">--No Parent--</option>'));
|
||
|
||
row.find('input[name="category_name"]').val('');
|
||
row.find('#pagelayer_cat_parent option[value="0"]').attr('selected', true);
|
||
checked_cat(row.find('.pagelayer-post-cat-div'));
|
||
event_function();
|
||
pagelayer_post_categories = obj;
|
||
}
|
||
});
|
||
});
|
||
|
||
// Show and hide 'Add new Category' button.
|
||
row.find('.pagelayer-add-cat-btn').on('click', function(){
|
||
row.find('form').toggle('fast');
|
||
});
|
||
|
||
var checked_cat = function(elem){
|
||
var jEle = elem.find('input:checked');
|
||
var cat_array = [];
|
||
for(var checked_input of jEle){
|
||
cat_array.push(jQuery(checked_input).attr('value'));
|
||
}
|
||
_pagelayer_set_atts(row, cat_array);
|
||
};
|
||
|
||
var event_function = function(){row.find('.pagelayer-post-cat-div').on('change', function(){
|
||
checked_cat(jQuery(this));
|
||
});
|
||
};
|
||
event_function();
|
||
}
|
||
|
||
var first_time_tag = true;
|
||
// Post tags property
|
||
function pagelayer_elp_postTags(row, prop){
|
||
|
||
if(pagelayer_empty(pagelayer_post_tags)){
|
||
return;
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-postTags" >'+
|
||
'<div class="pagelayer-post-tags" >'+
|
||
'<input type="text" autocomplete="off" class="pagelayer-elp-postTags-inp" autofocus="autofocus"/>'+
|
||
'<ul class="pagelayer-postTags-list" >'+
|
||
'</ul>'+
|
||
'</div>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
// Single tag html
|
||
var singleTag = function(tags){
|
||
var html = '';
|
||
jQuery.each(tags, function(index, value){
|
||
if(pagelayer_empty(value['term_id'])){
|
||
return;
|
||
}
|
||
html += '<span class="pagelayer-elp-tags-ele" data-val="'+value['term_id']+'"><span class="pagelayer-tags-label" >'+value['name']+'</span><span class="pagelayer-elp-tags-remove"><i class="fas fa-times"></i></span></span>';
|
||
});
|
||
return html;
|
||
}
|
||
|
||
// Single list item html
|
||
var singleLi= function(tags){
|
||
var html = '';
|
||
jQuery.each(tags, function(index, value){
|
||
html += '<li data-val="'+value['term_id']+'">'+value['name']+'</li>';
|
||
});
|
||
return html;
|
||
}
|
||
|
||
// For making new tags as well as removing using keyboard inputs.
|
||
var keypresses = function(obj){
|
||
row.find('.pagelayer-elp-postTags-inp').on('keydown', function(e){
|
||
var val = e.target.value.trim();
|
||
var keycode = (event.keyCode ? event.keyCode : event.which);
|
||
|
||
if(keycode == '13' || keycode == '188'){
|
||
|
||
for(var tag of obj.allTags){
|
||
if(tag['name']==val){
|
||
insertTags(val, tag['term_id']);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
jQuery.ajax({
|
||
url: pagelayer_ajax_url+'&action=pagelayer_get_post_tags',
|
||
type: 'post',
|
||
dataType: 'json',
|
||
data: {
|
||
pagelayer_nonce: pagelayer_ajax_nonce,
|
||
'postid': pagelayer_postID,
|
||
'new_tag': val
|
||
},
|
||
success: function(resp){
|
||
if(pagelayer_empty(resp)){
|
||
return;
|
||
}
|
||
if('error' in resp){
|
||
alert(resp.error);
|
||
}
|
||
if(!pagelayer_empty(resp.tag_id)){
|
||
insertTags(val, resp.tag_id);
|
||
tagSearching(resp);
|
||
pagelayer_post_tags = resp;
|
||
}
|
||
}
|
||
});
|
||
|
||
return false;
|
||
}else if(keycode == '8'){
|
||
if(!pagelayer_empty(val)){
|
||
return true;
|
||
}
|
||
row.find('.pagelayer-post-tags').children('span').last().remove();
|
||
selected_tags();
|
||
}
|
||
return true;
|
||
});
|
||
}
|
||
|
||
// Inserting tags in the Metabox.
|
||
var insertTags = function(name, tag_id){
|
||
var newItem = [];
|
||
newItem[0] = {
|
||
name:name,
|
||
term_id:tag_id
|
||
};
|
||
row.find('.pagelayer-post-tags').children('input').before(singleTag(newItem));
|
||
row.find('.pagelayer-elp-postTags .pagelayer-elp-postTags-inp').val('').focus();
|
||
tag_remove();
|
||
selected_tags();
|
||
}
|
||
|
||
// Removing tags by clicking on the x button.
|
||
var tag_remove = function(){
|
||
row.find('.pagelayer-elp-tags-remove').each(function(){
|
||
jQuery(this).on('click',function(){
|
||
jQuery(this).parent().remove();
|
||
selected_tags();
|
||
});
|
||
});
|
||
}
|
||
|
||
// For searching tag name in the list of the fetched tags
|
||
var tagSearching = function(obj){
|
||
row.find('.pagelayer-elp-postTags-inp').off('keyup');
|
||
row.find('.pagelayer-elp-postTags-inp').on("keyup", function() {
|
||
var value = jQuery(this).val().toLowerCase();
|
||
|
||
var listUl = row.find('.pagelayer-postTags-list');
|
||
listUl.empty();
|
||
|
||
if(value.length<2){
|
||
return;
|
||
}
|
||
|
||
var listValues = obj.allTags.filter(function(currentValue){
|
||
if(currentValue.name.indexOf(this)>-1){
|
||
var temp = false;
|
||
var tags = row.find('.pagelayer-post-tags').children('span');
|
||
for(var indi of tags){
|
||
if(jQuery(indi).attr('data-val')==currentValue.term_id){
|
||
temp = true;
|
||
}
|
||
}
|
||
if(temp==false){
|
||
return currentValue;
|
||
}
|
||
}
|
||
}, value);
|
||
|
||
if(!pagelayer_empty(listValues.length)){
|
||
listUl.append(singleLi(listValues));
|
||
listUl.children().each(function(index, value){
|
||
var ele = jQuery(this);
|
||
ele.off('click');
|
||
ele.on('click', function(){
|
||
insertTags(ele.text(), ele.attr('data-val'));
|
||
listUl.empty();
|
||
});
|
||
});
|
||
}
|
||
|
||
|
||
});
|
||
}
|
||
|
||
var tagsArray = pagelayer_post_tags.postTags;
|
||
|
||
// Getting tags on opening of page props settings.
|
||
if( first_time_tag == false ){
|
||
|
||
var i=0;
|
||
var tags_array = [];
|
||
|
||
// Create array for needed term_id with corresponding to the name.
|
||
if(!pagelayer_empty(prop.c['val'])){
|
||
|
||
var tags_val = prop.c['val'];
|
||
if(pagelayer_is_string(tags_val)){
|
||
tags_val = tags_val.split(',');
|
||
}
|
||
|
||
for(var name in tags_val){
|
||
tags_array[i] = pagelayer_post_tags.allTags.find(function(val){return val['name'] == tags_val[name]});
|
||
i++;
|
||
}
|
||
}
|
||
|
||
tagsArray = tags_array;
|
||
}
|
||
|
||
row.find('.pagelayer-post-tags').prepend(singleTag(tagsArray));
|
||
|
||
first_time_tag = false;
|
||
|
||
tagSearching(pagelayer_post_tags);
|
||
|
||
keypresses(pagelayer_post_tags);
|
||
|
||
tag_remove();
|
||
|
||
var selected_tags = function(){
|
||
var jEle = row.find('.pagelayer-elp-postTags .pagelayer-elp-tags-ele');
|
||
var tag_array = [];
|
||
for(var selec_tag of jEle){
|
||
tag_array.push(jQuery(selec_tag).text());
|
||
}
|
||
_pagelayer_set_atts(row, tag_array);
|
||
};
|
||
}
|
||
|
||
function pagelayer_elp_permalink(row, prop){
|
||
|
||
var tmp = '';
|
||
var link = '';
|
||
|
||
if(!pagelayer_empty(pagelayer_permalink_structure)){
|
||
tmp = pagelayer_post_permalink.replace(/\/$/,'');
|
||
link = tmp.substring(0, tmp.lastIndexOf('/'));
|
||
|
||
var new_link = link+'/'+prop.c['val'];
|
||
prop.default = pagelayer_post.post_name;
|
||
|
||
var div = '<div class="pagelayer-elp-text-div">'+
|
||
'<input type="text" class="pagelayer-elp-text" name="'+prop.c['name']+'" value="'+pagelayer_htmlEntities(prop.c['val'])+'"></input>'+
|
||
'<a href="'+pagelayer_post_permalink+'" class="pagelayer-elp-permalink-a" target="_blank" >'+new_link+'</a></p>'+
|
||
'</div>';
|
||
}else{
|
||
var div = '<div class="pagelayer-elp-text-div">'+
|
||
'<a href="'+pagelayer_post.guid+'" class="pagelayer-elp-permalink-a" target="_blank" >'+pagelayer_post.guid+'</a></p>'+
|
||
'</div>';
|
||
}
|
||
|
||
row.append(div);
|
||
|
||
setTimeout(function(){
|
||
row.find(".pagelayer-post-type").html(pagelayer_post.post_type);
|
||
}, 1000);
|
||
|
||
var string_to_slug = function (str){
|
||
str = str.replace(/^\s+|\s+$/g, ''); // trim
|
||
str = str.toLowerCase();
|
||
|
||
// remove accents, swap ñ for n, etc
|
||
var char_map = {
|
||
// Latin
|
||
'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç': 'C',
|
||
'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I', 'Ï': 'I',
|
||
'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö': 'O', 'Ő': 'O',
|
||
'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH',
|
||
'ß': 'ss',
|
||
'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c',
|
||
'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',
|
||
'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o',
|
||
'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th',
|
||
'ÿ': 'y',
|
||
|
||
// Latin symbols
|
||
'©': '(c)',
|
||
|
||
// Greek
|
||
'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', 'Η': 'H', 'Θ': '8',
|
||
'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', 'Ξ': '3', 'Ο': 'O', 'Π': 'P',
|
||
'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W',
|
||
'Ά': 'A', 'Έ': 'E', 'Ί': 'I', 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I',
|
||
'Ϋ': 'Y',
|
||
'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', 'θ': '8',
|
||
'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', 'ο': 'o', 'π': 'p',
|
||
'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', 'χ': 'x', 'ψ': 'ps', 'ω': 'w',
|
||
'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's',
|
||
'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', 'ΐ': 'i',
|
||
|
||
// Turkish
|
||
'Ş': 'S', 'İ': 'I', 'Ç': 'C', 'Ü': 'U', 'Ö': 'O', 'Ğ': 'G',
|
||
'ş': 's', 'ı': 'i', 'ç': 'c', 'ü': 'u', 'ö': 'o', 'ğ': 'g',
|
||
|
||
// Russian
|
||
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', 'Ж': 'Zh',
|
||
'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', 'Н': 'N', 'О': 'O',
|
||
'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 'Ф': 'F', 'Х': 'H', 'Ц': 'C',
|
||
'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu',
|
||
'Я': 'Ya',
|
||
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', 'ж': 'zh',
|
||
'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
|
||
'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c',
|
||
'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu',
|
||
'я': 'ya',
|
||
|
||
// Ukrainian
|
||
'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G',
|
||
'є': 'ye', 'і': 'i', 'ї': 'yi', 'ґ': 'g',
|
||
|
||
// Czech
|
||
'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', 'Š': 'S', 'Ť': 'T', 'Ů': 'U',
|
||
'Ž': 'Z',
|
||
'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', 'ů': 'u',
|
||
'ž': 'z',
|
||
|
||
// Polish
|
||
'Ą': 'A', 'Ć': 'C', 'Ę': 'e', 'Ł': 'L', 'Ń': 'N', 'Ó': 'o', 'Ś': 'S', 'Ź': 'Z',
|
||
'Ż': 'Z',
|
||
'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z',
|
||
'ż': 'z',
|
||
|
||
// Latvian
|
||
'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'i', 'Ķ': 'k', 'Ļ': 'L', 'Ņ': 'N',
|
||
'Š': 'S', 'Ū': 'u', 'Ž': 'Z',
|
||
'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', 'ņ': 'n',
|
||
'š': 's', 'ū': 'u', 'ž': 'z'
|
||
};
|
||
|
||
for(var k in char_map) {
|
||
str = str.replace(new RegExp(k, 'g'), char_map[k]);
|
||
}
|
||
|
||
str = str.replace('.', '-')// replace a dot by a dash
|
||
.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
|
||
.replace(/\s+/g, '-') // collapse whitespace and replace by a dash
|
||
.replace(/-+/g, '-') // collapse dashes
|
||
.replace( /\//g, '' ); // collapse all forward-slashes
|
||
|
||
return str;
|
||
}
|
||
|
||
var editSlug = function(jEle, val){
|
||
|
||
// Convert to slug
|
||
val = string_to_slug(val);
|
||
|
||
var new_link = link+'/'+val;
|
||
var a = row.find('a');
|
||
a.html(new_link);
|
||
jEle.val(val);
|
||
|
||
return val;
|
||
}
|
||
|
||
var input = row.find('input');
|
||
|
||
if(pagelayer_empty(prop.c['val'])){
|
||
editSlug(input, pagelayer_post.post_title);
|
||
|
||
input.on('focusin', function(){
|
||
if(!pagelayer_empty(pagelayer_get_att(prop.el.$, prop.c['name']))){
|
||
return;
|
||
}
|
||
|
||
editSlug(input, pagelayer_get_att(prop.el.$, 'post_title'));
|
||
});
|
||
}
|
||
|
||
input.on('focusout', function(){
|
||
var val = jQuery(this).val();
|
||
val = editSlug(jQuery(this), val);
|
||
|
||
if(pagelayer_empty(pagelayer_get_att(prop.el.$, prop.c['name']))){
|
||
return;
|
||
}
|
||
_pagelayer_set_atts(row, val);// Save and Render
|
||
});
|
||
|
||
input.on('input', function(){
|
||
var new_link = link+'/'+jQuery(this).val();
|
||
var a = row.find('a');
|
||
a.html(new_link);
|
||
_pagelayer_set_atts(row, jQuery(this).val());// Save and Render
|
||
});
|
||
}
|
||
|
||
// The Datetime Property
|
||
function pagelayer_elp_postDate(row, prop){
|
||
|
||
var date_array = prop.c['val'].split(" ");
|
||
|
||
var div = '<div class="pagelayer-elp-postdate-div">'+
|
||
'<input type="date" class="pagelayer-elp-postdate" name="'+prop.c['name']+'" value="'+date_array[0]+'" />'+
|
||
'<input type="time" class="pagelayer-elp-postdate" name="'+prop.c['name']+'" value="'+date_array[1]+'" />'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-postdate-div').on('change', function(){
|
||
var date_string = jQuery(this).children().eq(0).val() +' '+ jQuery(this).children().eq(1).val();
|
||
_pagelayer_set_atts(row, date_string);// Save and Render
|
||
});
|
||
|
||
};
|
||
|
||
// The button Property
|
||
function pagelayer_elp_trashButton(row, prop){
|
||
|
||
var div = '<div class="pagelayer-elp-trash-button-div">'+
|
||
'<button class="pagelayer-elp-trash-button">Move to trash</button>'+
|
||
'</div>';
|
||
|
||
row.append(div);
|
||
|
||
row.find('.pagelayer-elp-trash-button').on('click', function(event){
|
||
event.preventDefault();
|
||
if(!confirm(pagelayer_l('delete_post_conf'))){
|
||
return;
|
||
}
|
||
//console.log(pagelayer_postID);
|
||
jQuery.ajax({
|
||
url: pagelayer_ajax_url+'&action=pagelayer_trash_post',
|
||
type: 'post',
|
||
dataType: 'json',
|
||
data: {
|
||
pagelayer_nonce: pagelayer_ajax_nonce,
|
||
'postid': pagelayer_postID
|
||
},
|
||
success: function(resp){
|
||
|
||
if('error' in resp){
|
||
alert(resp.error);
|
||
}
|
||
|
||
if('url' in resp){
|
||
window.top.location.href = resp.url;
|
||
}
|
||
}
|
||
});
|
||
});
|
||
|
||
};
|
||
|
||
// The Menus list property
|
||
function pagelayer_elp_menus(row, prop){
|
||
|
||
var jEle = prop.el.$;
|
||
var options = '';
|
||
var option = function(val, lang){
|
||
var selected = (val != prop.c['val']) ? '' : 'selected="selected"';
|
||
return '<option class="pagelayer-elp-select-option" value="'+val+'" '+selected+'>'+lang+'</option>';
|
||
}
|
||
|
||
for(x in prop['list']){
|
||
|
||
// Single item
|
||
if(typeof prop['list'][x] == 'string'){
|
||
options += option(x, prop['list'][x]);
|
||
|
||
// Groups
|
||
}else{
|
||
options += '<optgroup label="'+x+'">';
|
||
|
||
for(var y in prop['list'][x]){
|
||
options += option(y, prop['list'][x][y]);
|
||
}
|
||
|
||
options += '</optgroup>';
|
||
}
|
||
}
|
||
|
||
var div = '<div class="pagelayer-elp-select-div pagelayer-elp-pos-rel">'+
|
||
'<select class="pagelayer-elp-select pagelayer-elp-select-menus" name="'+prop.c['name']+'">'+options+'</select>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-menu-items-holder pagelayer-elp-pos-rel"></div>';
|
||
|
||
row.append(div);
|
||
|
||
// Show the properties of the existing things
|
||
var show_item = function(item, child_elements, depth){
|
||
|
||
depth = depth || 0;
|
||
|
||
var title = item['title'] || '';
|
||
|
||
// Create the HTML
|
||
var holder = jQuery('<div class="pagelayer-elp-group-item pagelayer-menu-depth-'+depth+'" pagelayer-menu-item="'+item['ID']+'">'+
|
||
'<div class="pagelayer-elp-group-item-head">'+
|
||
'<span class="pagelayer-elp-group-item-drag"><i class="pli pli-menu" ></i></span>'+
|
||
'<span class="pagelayer-elp-group-item-title">'+title+'</span>'+
|
||
'</div>'+
|
||
'<div class="pagelayer-elp-group-item-body"></div>'+
|
||
'<div class="menu-item-transport"></div>'+
|
||
'</div>');
|
||
|
||
// Append to the row
|
||
row.find('.pagelayer-elp-menu-items-holder').append(holder);
|
||
|
||
// Setup the toggle
|
||
holder.find('.pagelayer-elp-group-item-title').first().on('click', function(){
|
||
|
||
var editArea = jEle.find('.pagelayer-mega-editor-'+item['ID']);
|
||
var child = editArea.find('[pagelayer-tag="pl_nav_menu_item"]');
|
||
var cid;
|
||
|
||
if(child.length < 1){
|
||
|
||
// First add the element inside the group element
|
||
var _child = jQuery('<div pagelayer-tag="pl_nav_menu_item"></div>');
|
||
|
||
editArea.append(_child);
|
||
|
||
cid = pagelayer_onadd(_child, false);
|
||
|
||
child = jQuery('[pagelayer-id='+cid+']');
|
||
|
||
// Set Attributes
|
||
pagelayer_set_atts(child, item);
|
||
}else{
|
||
cid = pagelayer_id(child);
|
||
}
|
||
|
||
var rEle = holder.find('.pagelayer-elp-group-item-body').first();
|
||
|
||
holder.attr('pagelayer-group-item-id', cid);
|
||
|
||
// If the props are not already setup
|
||
if(rEle.html().length < 1){
|
||
pagelayer_elpd_generate(jQuery('[pagelayer-id="'+cid+'"]'), rEle);
|
||
|
||
// Change the group item title
|
||
var tmp_title = holder.find('[pagelayer-elp-name="'+item['title']+'"] [name="'+item['title']+'"]');
|
||
|
||
if(tmp_title.length > 0){
|
||
jQuery(tmp_title).on('input', function(){
|
||
holder.find('.pagelayer-elp-group-item-title').html(tmp_title.val());
|
||
});
|
||
}
|
||
}
|
||
|
||
if(!rEle.is(':visible')){
|
||
jQuery('.pagelayer-active-mega-menu').removeClass('pagelayer-active-mega-menu');
|
||
jEle.find('.pagelayer-mega-menu-item.menu-item-'+item['ID']).addClass('pagelayer-active-mega-menu');
|
||
}
|
||
|
||
rEle.slideToggle();
|
||
});
|
||
|
||
// Add child elements
|
||
if(!pagelayer_empty(child_elements[item['ID']])){
|
||
|
||
depth++;
|
||
|
||
for(var i in child_elements[item['ID']]){
|
||
show_item(child_elements[item['ID']][i], child_elements, depth);
|
||
}
|
||
}
|
||
|
||
holder.on('change', 'select[name="menu_type"]', function(){
|
||
var mType = jQuery(this).val();
|
||
var rowGroup = holder.find('[pagelayer-elp-name="element"]');
|
||
|
||
if(mType != 'mega' || rowGroup.find('.pagelayer-elp-group-div .pagelayer-elp-group-item').length > 0){
|
||
return;
|
||
}
|
||
|
||
rowGroup.find('.pagelayer-elp-button').click();
|
||
|
||
});
|
||
};
|
||
|
||
var createItemsList = function(menuID){
|
||
|
||
// Remove previous items
|
||
row.find('.pagelayer-elp-menu-items-holder').empty();
|
||
|
||
if(!(menuID in pagelayer_menus_items_list)){
|
||
return;
|
||
}
|
||
|
||
var $elements = pagelayer_menus_items_list[menuID];
|
||
var top_level_elements = [];
|
||
var children_elements = [];
|
||
|
||
for($e in $elements){
|
||
|
||
// Make a referrer of each menu
|
||
pagelayer_menus_items_ref[$elements[$e]['ID']] = $elements[$e];
|
||
|
||
if ( pagelayer_empty( $elements[$e]['menu_item_parent'] ) ) {
|
||
top_level_elements.push($elements[$e]);
|
||
} else {
|
||
if(pagelayer_empty(children_elements[ $elements[$e]['menu_item_parent'] ])){
|
||
children_elements[ $elements[$e]['menu_item_parent'] ] = [];
|
||
}
|
||
children_elements[ $elements[$e]['menu_item_parent'] ].push($elements[$e]);
|
||
}
|
||
}
|
||
|
||
for(var i in top_level_elements){
|
||
show_item(top_level_elements[i], children_elements, 0);
|
||
}
|
||
|
||
}
|
||
|
||
createItemsList(prop.c['val']);
|
||
|
||
row.find('select.pagelayer-elp-select-menus').on('change', function(){
|
||
|
||
var ID = jQuery(this).val();
|
||
|
||
// Load Menu list
|
||
createItemsList(ID);
|
||
|
||
_pagelayer_set_atts(row, ID);// Save and Render
|
||
|
||
});
|
||
|
||
}
|
||
|
||
// Select frame to upload media
|
||
function pagelayer_select_frame(tag, state){
|
||
|
||
var state = state || '';
|
||
//console.log(state);
|
||
|
||
var frame;
|
||
|
||
switch(tag){
|
||
|
||
// Multi image selection frame
|
||
case 'multi_image':
|
||
|
||
frame = wp.media({
|
||
|
||
id: 'pagelayer-wp-multi-image-library',
|
||
frame: 'post',
|
||
state: state,
|
||
title: pagelayer_l('frame_multi_image'),
|
||
multiple: true,
|
||
library: wp.media.query({type: 'image'}),
|
||
button: {
|
||
text: pagelayer_l('insert')
|
||
},
|
||
|
||
});
|
||
|
||
break;
|
||
|
||
// Media selection frame
|
||
case 'media':
|
||
|
||
frame = wp.media({
|
||
|
||
id: 'pagelayer-wp-media-library',
|
||
frame: 'post',
|
||
state: 'pagelayer-media',
|
||
title: pagelayer_l('frame_media'),
|
||
multiple: false,
|
||
states: [
|
||
new wp.media.controller.Library({
|
||
id: 'pagelayer-media',
|
||
title: pagelayer_l('frame_media'),
|
||
multiple: false,
|
||
date: true
|
||
})
|
||
],
|
||
button: {
|
||
text: pagelayer_l('insert')
|
||
},
|
||
|
||
});
|
||
|
||
break;
|
||
|
||
//Default frame(for image, video, audio)
|
||
default:
|
||
|
||
frame = wp.media({
|
||
|
||
id: 'pagelayer-wp-'+tag+'-library',
|
||
frame: 'post',
|
||
state: 'pagelayer-'+tag,
|
||
title: pagelayer_l('frame_media'),
|
||
multiple: false,
|
||
library: wp.media.query({type: tag}),
|
||
states: [
|
||
new wp.media.controller.Library({
|
||
id: 'pagelayer-'+tag,
|
||
title: pagelayer_l('frame_media'),
|
||
library: wp.media.query( { type: tag } ),
|
||
multiple: false,
|
||
date: true
|
||
})
|
||
],
|
||
button: {
|
||
text: pagelayer_l('insert')
|
||
},
|
||
|
||
});
|
||
|
||
break;
|
||
}
|
||
|
||
frame.on({
|
||
'menu:render:default': function(view){
|
||
view.unset('insert');
|
||
view.unset('gallery');
|
||
view.unset('featured-image');
|
||
view.unset('playlist');
|
||
view.unset('video-playlist');
|
||
},
|
||
}, this);
|
||
|
||
return frame;
|
||
|
||
}
|
||
|
||
// function to show default button
|
||
function pagelayer_show_default_button(row, prop, value){
|
||
|
||
// Default button is visible or not
|
||
if(row.find('.pagelayer-elp-default').attr('data_show')){
|
||
return;
|
||
}
|
||
|
||
// value is an object or not
|
||
if(typeof value == 'object'){
|
||
// Checking value for NaN, empty and default.
|
||
|
||
for(var i = 0; i < pagelayer_length(value); i++){
|
||
if(value[i]!= prop.default && value[i] == value[i] && value[i] != ''){
|
||
row.find('.pagelayer-elp-default').attr('data_show',true);
|
||
break;
|
||
}
|
||
}
|
||
}else{
|
||
if('default' in prop && value!=prop.default){
|
||
row.find('.pagelayer-elp-default').attr('data_show',true);
|
||
}else if(value!=prop.default && value==value && value!=''){
|
||
row.find('.pagelayer-elp-default').attr('data_show',true);
|
||
}
|
||
}
|
||
}
|
||
|
||
// Function which checks the properties to not to show default button
|
||
function pagelayer_properties_filter(property){
|
||
var propTypeDefault = ['image', 'text', 'editor', 'textarea', 'checkbox', 'access', 'modal', 'group', 'radio', 'postCategory', 'postTags', 'postDate', 'gradient'];
|
||
|
||
return (jQuery.inArray(property, propTypeDefault) == -1)
|
||
}
|
||
|
||
// Link font family
|
||
function pagelayer_link_font_family(sEle){
|
||
|
||
var value = sEle.val();
|
||
|
||
if(sEle.val() == 'Default'){
|
||
return;
|
||
}
|
||
|
||
value = value.replace(' ', '+');
|
||
var t = sEle.find("option:selected").attr('type');
|
||
switch(t){
|
||
case 'google':
|
||
if(jQuery('#pagelayer-google-fonts').length == 0){
|
||
if(value==''){
|
||
return;
|
||
}
|
||
jQuery('head').append('<link id="pagelayer-google-fonts" href="https://fonts.googleapis.com/css?family='+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">');
|
||
|
||
}else{
|
||
var url = jQuery('#pagelayer-google-fonts').attr('href');
|
||
if(url.indexOf(value) == -1){
|
||
url = url+'|'+value+':100,100i,200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i,900,900i';
|
||
jQuery('#pagelayer-google-fonts').attr('href', url);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 'custom':
|
||
if(!pagelayer_empty(jQuery('style[id='+value+'_plf]').length)){
|
||
break;
|
||
}
|
||
jQuery.ajax({
|
||
url: pagelayer_ajax_url+'&action=pagelayer_custom_font',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
data: {
|
||
'pagelayer_nonce': pagelayer_ajax_nonce,
|
||
'font_name': value
|
||
},
|
||
success: function(data) {
|
||
if('style' in data){
|
||
jQuery('body').append(data['style']);
|
||
}
|
||
}
|
||
});
|
||
break;
|
||
}
|
||
} |