Mini Shell
// 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;
}
}
Zerion Mini Shell 1.0