Warning: file_get_contents(/home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/premium.js): Failed to open stream: No such file or directory in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 96
Warning: file_get_contents(/home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/premium-frontend.js): Failed to open stream: No such file or directory in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 96
Warning: file_get_contents(/home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/chart.min.js): Failed to open stream: No such file or directory in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 96
Warning: file_get_contents(/home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/shuffle.min.js): Failed to open stream: No such file or directory in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 96
Warning: Cannot modify header information - headers already sent by (output started at /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php:96) in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 114
Warning: Cannot modify header information - headers already sent by (output started at /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php:96) in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 145
Warning: Cannot modify header information - headers already sent by (output started at /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php:96) in /home4/yourmai2/SimprovementSolutions.com/wp-content/plugins/pagelayer/js/givejs.php on line 158
/*
PAGELAYER
http://pagelayer.com/
(c) Pagelayer Team
*/
pagelayer = {
$: jQuery,
$$ : function(select){
return jQuery(select, window.parent.document);
},
gDocument : jQuery(window.parent.document).add(document),
p : this,
copy_selected: '',
mouse: {x: -1, y: -1},
history_action : true,
global_render : true,
history_lastTime : new Date(),
props_ref : {},
pro_txt : '',
loaded : 0,
post_status : '',
el: {},// All elements data
}
var pagelayer_history_obj = {}, pagelayer_revision_obj = {};
var pagelayer_add_section_data = {};
// Console error manager
window.onerror = function (msg, url, lineNo, columnNo, error) {
if (typeof pagelayer_doc_width === 'undefined') {
var test_giver = -1;
jQuery.ajax({
url: pagelayer_url+'/js/givejs.php?test=1',
type: "GET",
dataType: "text",
success: function(data){
if(data != 1){
return;
}
test_giver = 1;
},
complete: function(data){
jQuery.ajax({
type: "POST",
url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
set : test_giver
},
error: function(errorThrown){
console.log("Error saving giver data");
console.log(errorThrown);
}
});
}
});
}
var string = msg.toLowerCase();
var substring = "script error";
if(pagelayer.loaded > 0){
return;
}
if (string.indexOf(substring) > -1){
return;
}
if(url.indexOf('pagelayer')=== -1){
return;
}
var message = [
"Message: " + msg,
"\r\n URL: " + url,
"\r\n Line: " + lineNo,
"\r\n Column: "+ columnNo,
"\r\n Error object: " + error
].join('\n');
//alert("Script Error: See browser console for details");
pagelayer.$$('.pagelayer-errorBox-content').html(message);
pagelayer.$$('.pagelayer-errorBox-close').on('click', function(){
pagelayer.$$('.pagelayer-errorBox').fadeOut();
});
pagelayer.$$('.pagelayer-errorBox').fadeIn();
return false;
};
// Lets start
jQuery(document).ready(pagelayer_start);
// Function to load the codes
function pagelayer_start(){
pagelayer.loading = 1;
console.log('['+pagelayer_brand+'] Starting Pagelayer');
// Prevent the click Insite editor
pagelayer_prevent_click();
// Set the title of the parent window
try{ pagelayer.$$('head').append(pagelayer.$('title')[0].outerHTML); }catch(e){};
pagelayer.blank_img = pagelayer_url+'/images/default-image.png';
pagelayer_shortcodes['pl_inner_row'] = JSON.parse(JSON.stringify(pagelayer_shortcodes['pl_row']));
pagelayer_shortcodes['pl_inner_row']['name'] = 'Inner Row';
pagelayer_groups['grid'].push('pl_inner_row');
// Removing post props options
pagelayer_setting_post_props();
// Make the Topbar
pagelayer_bottombar();
// Make the Leftbar
pagelayer_leftbar();
// Make widget list toolbar
pagelayer_create_widget_tooltip();
// Add widget section
pagelayer_add_widget();
// Setup the ELPD
pagelayer_elpd_setup();
// Dump the data we have
pagelayer_element_dump_data();
// Setup the properties of the elements
pagelayer_element_setup();
// An image to show for drag
jQuery('body').append('');
// Setup the grid drag
pagelayer_setup_drag();
// Set left bar draggable
pagelayer_make_leftbar_movable();
// Set to desktop
pagelayer_set_screen_mode('desktop');
// Create list of fonts
pagelayer_fonts = pagelayer_l('pl_fonts_list');
// Set up right click
pagelayer_left_click();
pagelayer_right_click();
// Setup pagelayer history handle
pagelayer_history_obj['action_data'] = [];
pagelayer_history_setup(true);
// Make a quick access of the props
pagelayer_make_props_ref();
// Post props exported defaults need to be updated
pagelayer_set_exported_defaults();
// Do any actions here
pagelayer_trigger_action('pagelayer_setup_history');
// Editor Tooltips
pagelayer_tooltip_setup();
// Load Fonts
for(var x in pagelayer_loaded_icons){
var item = pagelayer_loaded_icons[x];
jQuery.when(
pagelayer_get_stored_data(pagelayer_url+'/fonts/'+item+'.json', pagelayer_ver)
).then(function(){
pagelayer_icons[item] = JSON.parse(pagelayer_get_stored_data(pagelayer_url+'/fonts/'+item+'.json', pagelayer_ver));
});
};
// Set row-option top zero(0) of the first row
pagelayer_set_row_option_position();
// Just the txt
pagelayer.pro_txt = pagelayer_pro_txt;
// Open post props on document load
pagelayer.$$('.pagelayer-settings').click();
// Open post props and Make elements editable to edit post props data
pagelayer_setup_props_editable();
// Make elements editable
jQuery(pagelayer_editable+' [pagelayer-editable]').attr('contenteditable', 'true');
// Use text widget for search widget
pagelayer_search_widgets();
// Hide the loader
pagelayer_loader_hide();
}
// Post props attribute
function pagelayer_post_props_atts(prop, val, temp){
val = val || null;
temp = temp || false;
var proEle = jQuery(pagelayer_editable+' .pagelayer-post_props.pagelayer-ele').first();
if(!pagelayer_empty(temp)){
if(val === null){
return pagelayer_get_tmp_att(proEle, prop);
}
// Set the temp property as well
pagelayer_set_tmp_atts(proEle, prop, val);
return true;
}
if(val === null){
return pagelayer_get_att(proEle, prop);
}
// Set the property as well
pagelayer_set_atts(proEle, prop, val);
return true;
}
// Open post props and Make elements editable to edit post props data
function pagelayer_setup_props_editable(){
jQuery('[pagelayer-props-editable]').each(function(){
var jEle = jQuery(this);
// Skip element under the editable area
if (jEle.closest(pagelayer_editable).length > 0) {
return;
}
var prop = jEle.attr('pagelayer-props-editable');
// Make editable
jEle.attr('contenteditable', 'true');
// Reverse setup the event
jEle.on('focus', function(){
// Set the property as well
var data = pagelayer_post_props_atts(prop);
jEle.html(data);
});
// Reverse setup the event
jEle.on('input', function(){
var val = pagelayer_trim(jEle.html());
// Set the property as well
pagelayer_post_props_atts(prop, val);
// Update the property
var input = pagelayer.$$('[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);
}
}
});
});
}
// Prevent the click Insite editor
function pagelayer_prevent_click(){
jQuery(document).on('submit', function(event){
var target = jQuery(event.target);
if (target.closest(pagelayer_editable).length < 1) {
event.preventDefault();
}
});
jQuery(document).on('click', function(event){
var target = jQuery(event.target);
if (target.closest('a').length > 0 && target.closest(pagelayer_editable).length < 1) {
event.preventDefault()
}
});
}
// Removing post props options from the editor
function pagelayer_setting_post_props(){
if(pagelayer_empty(pagelayer_post_categories)){
delete pagelayer_shortcodes.pl_post_props.postCategory;
}
if(pagelayer_empty(pagelayer_post_tags)){
delete pagelayer_shortcodes.pl_post_props.postTags;
}
if(pagelayer_empty(pagelayer_shortcodes.pl_post_props.pageParent.post_parent.list)){
delete pagelayer_shortcodes.pl_post_props.pageParent;
}
if(pagelayer_post.post_type != 'post'){
delete pagelayer_shortcodes.pl_post_props.params.post_sticky;
}
if(pagelayer_empty(pagelayer_post_type_features['comments'])){
delete pagelayer_shortcodes.pl_post_props.postDiscussion.comment_status;
}
if(pagelayer_empty(pagelayer_post_type_features['trackbacks'])){
delete pagelayer_shortcodes.pl_post_props.postDiscussion.ping_status;
}
if(pagelayer_empty(pagelayer_shortcodes.pl_post_props.postDiscussion)){
delete pagelayer_shortcodes.pl_post_props.postDiscussion;
}
if(pagelayer_empty(pagelayer_post_type_features['excerpt'])){
delete pagelayer_shortcodes.pl_post_props.postExcerpt;
}
if(pagelayer_empty(pagelayer_post_type_features['thumbnail'])){
delete pagelayer_shortcodes.pl_post_props.postFeaturedImage;
}
if(pagelayer_empty(pagelayer_post_type_features['author'])){
delete pagelayer_shortcodes.pl_post_props.params.post_author;
}
}
// Set the default values of all default exported codes
function pagelayer_set_exported_defaults(){
// Set defaults for the exported variety
if(pagelayer_empty(pagelayer_default_params)){
return;
}
for(var tag in pagelayer_default_params){
for(var x in pagelayer_default_params[tag]){
if(x in pagelayer.props_ref[tag]){
pagelayer.props_ref[tag][x]['default'] = pagelayer_default_params[tag][x];
}
}
}
}
// Do pagelayer Dirty
function pagelayer_do_dirty(jEle){
pagelayer_isDirty = true;
if (!window.onbeforeunload) {
window.onbeforeunload = function(){
return true;
};
}
pagelayer_trigger_action('pagelayer_do_dirty', [jEle]);
}
function pagelayer_do_undirty(){
pagelayer_isDirty = false;
if (window.onbeforeunload) {
window.onbeforeunload = null;
}
}
// Executes when pagelayer is fully loaded
function pagelayer_loader_hide(){
var inner = pagelayer.$$('.pagelayer-percent');
inner.attr('loaded', 1);
var w = parseInt(inner.text());
var t = setInterval(function() {
w = w + 1;
inner.html(w +'%');
if (w >= 100){
clearInterval(t);
w = 0;
var loaderWrapper = pagelayer.$$('#pagelayer-loader-wrapper');
loaderWrapper.addClass('pagelayer-loaded');
loaderWrapper.animate({opacity:0}, function(){
loaderWrapper.remove();
});
}
}, 1);
pagelayer.loaded = 1;
}
// Set row-option top zero(0) of the first row
function pagelayer_set_row_option_position(){
try{
if(jQuery(pagelayer_editable).offset().top < 20){
jQuery(pagelayer_editable).addClass('pagelayer-row-option-zero');
}
}catch(e){
console.log(pagelayer_editable+" not found and hence Pagelayer wont work on this page !");
}
}
// The jQuery Object of the ELPD
var pagelayer_elpd;
// Store data values
function pagelayer_get_stored_data(url, version){
var name = 'pagelayer_'+url;
var data = {};
var force = false;
// Try to parse the data
try{
data = JSON.parse(localStorage.getItem(name));
if(data['version'] !== version){
force = true;
}
}catch(e){
force = true;
}
// Force download
if(force){
return jQuery.ajax({
url: url,
type: 'GET',
dataType: 'text',
success:function(newData){
var data = {};
data['version'] = version;
data['val'] = newData;
localStorage.setItem(name, JSON.stringify(data));
}
});
}
return data['val'];
}
function pagelayer_closest_corner(jEle){
var corners = [];
var w = jEle.outerWidth();
var h = jEle.outerHeight();
var topleft = jEle.offset();
// 0 - Top Left
corners.push(topleft);
// 1 - Top Right
corners.push({top: topleft.top, left: topleft.left+w});
// 2 - Bottom Right
corners.push({top: topleft.top+h, left: topleft.left+w});
// 3 - Bottom Left
corners.push({top: topleft.top+h, left: topleft.left});
//console.log(corners);
// Calculate the closest to the mouse
var distances = {};
for(var c in corners){
var dist = Math.hypot(pagelayer.mouse.x - corners[c].left, pagelayer.mouse.y - corners[c].top);
distances[c] = dist;
}
//console.log(distances);
var corner = Object.keys(distances).sort(function(a,b){return distances[a]-distances[b]})[0];
//console.log(corner);
return corner;
};
// Make left bar draggable
function pagelayer_make_leftbar_movable(){
var pl_iframe = pagelayer.$$('.pagelayer-iframe'),
pl_leftbar = pagelayer.$$('.pagelayer-leftbar-table');
// On mouse down in pagelayer-topbar-holder
pagelayer.$$('.pagelayer-topbar-mover').on('mousedown', function(e){
e = e || window.event;
e.preventDefault();
// Get leftbar position
var orig_eleX = pl_leftbar.offset().left;
var orig_eleY = pl_leftbar.offset().top;
// Get the mouse cursor position at startup:
var posX = e.clientX;
var posY = e.clientY;
// The variable needs to be empty.
var newMethod = '',
change = true;
var leftbar_mousemove = function(e){
e = e || window.event;
if(change){
// Add class to leftbar
pl_leftbar.addClass('pagelayer-leftbar-moving');
// Add left-right overlay
pl_iframe.before('');
pl_iframe.after('');
pagelayer.$$('body').addClass('pagelayer-overflow-hidden');
change = false;
}
// calculate the new cursor position and set the element left-top position
var top = orig_eleY + (e.clientY - posY);
var left = orig_eleX + (e.clientX - posX);
// set the element's new position:
pl_leftbar.css({'top': top +'px','left': left +'px'});
pagelayer.$$('.pagelayer-leftbar-toggle').hide();
// Make a copy of new method
var _newMethod = newMethod;
newMethod = '';
// Get near by corner
var offleft = pl_iframe.offset().left;
if(offleft + 100 > e.clientX){
newMethod = 'before';
}else if(offleft+pl_iframe.outerWidth()- 100 < e.clientX){
newMethod = 'after';
}
if(_newMethod != newMethod){
pagelayer.$$('.pagelayer-leftbar-move').css({'width' :'', 'opacity': '0.33'});
if(newMethod == 'after'){
pagelayer.$$('.pagelayer-moveto-right').animate({'width' :'60px', 'opacity': '0.66'}, 200);
pl_leftbar.addClass('pagelayer-rightbar');
}else if(newMethod == 'before'){
pagelayer.$$('.pagelayer-moveto-left').animate({'width' : '60px', 'opacity': '0.66'}, 200);
pl_leftbar.removeClass('pagelayer-rightbar');
}
}
};
var leftbar_mouseup = function(e){
// Remove events
pagelayer.gDocument.off('mousemove', leftbar_mousemove);
pagelayer.gDocument.off('mouseup', leftbar_mouseup);
// Remove class to leftbar
pagelayer.$$('.pagelayer-leftbar-move').remove();
var windowHeight = jQuery(window).height();
if(pl_leftbar.offset().top < 0){
pl_leftbar.css({'top': '10px'});
}else if( (windowHeight - e.clientY) < 10){
pl_leftbar.css({'top': ''+windowHeight - 40+'px'});
}
if( !pagelayer_empty(newMethod)){
pl_leftbar.removeClass('pagelayer-leftbar-moving');
pl_leftbar.removeAttr('style');
pagelayer.$$('.pagelayer-leftbar-toggle').show();
pagelayer.$$('body').removeClass('pagelayer-overflow-hidden');
pl_iframe[newMethod](pl_leftbar);
}
// make change true
change = true;
};
pagelayer.gDocument.on('mouseup', leftbar_mouseup);
pagelayer.gDocument.on('mousemove', leftbar_mousemove);
});
}
// Make rows and cols draggable
function pagelayer_setup_drag(){
// The object to show as drag
var shower = jQuery('.pagelayer-drag-show');
// Delete any prospect
var clear_prospect = function(){
jQuery('.pagelayer-drag-prospect').remove();
// Shows the wrap as active
jQuery('.pagelayer-drag-ele-hover').removeClass('pagelayer-drag-ele-hover');
}
// Reset the complete drag stuff
var reset_dragging = function(){
pagelayer.dragging = false;
pagelayer.drag_is_new = false;
pagelayer.drag_mouse = {x: 0, y: 0};
reset_on_drag();
}
// Reset the element on you were last
var reset_on_drag = function(){
pagelayer.drag_closest = false;
pagelayer.drag_closest_corner = null;
}
// Scroll by
var scrollPx = 7;
var scrollDist = 30;
// If we are too close too the window edge, then scroll
var handle_scroll = function(e){
var windowHeight = jQuery(window).height();
var windowWidth = jQuery(window).width();
// Are we to close to the top or bottom
if(e.clientY < scrollDist){
window.scrollBy(0, -scrollPx);
}else if((windowHeight - e.clientY) < scrollDist){
window.scrollBy(0, scrollPx);
}
// Are we to close to the top or bottom
if(e.clientX < scrollDist){
window.scrollBy(-scrollPx, 0);
}else if((windowWidth - e.clientX) < scrollDist){
window.scrollBy(scrollPx, 0);
}
}
// SET the values
reset_dragging();
var ondragover = function(e) {
//console.log(e);
pagelayer.mouse.x = parseInt(e.pageX);
pagelayer.mouse.y = parseInt(e.pageY);
//console.log(pagelayer.mouse);
// Are we dragging ?
if(pagelayer.dragging){
//console.log(e);
e.preventDefault();
//e.stopPropagation();
// The wrap of the element being dragged
var wrap = pagelayer.dragging;
// New addition
var is_new = pagelayer.drag_is_new;
var ele;
var tag = pagelayer_tag(wrap);
var id = pagelayer_id(wrap);
// If existing element then add we are dragging
if(!is_new){
// Start Dragging
if(!wrap.hasClass('pagelayer-is-dragging')){
wrap.addClass('pagelayer-is-dragging');
}
//shower.hide();
ele = document.elementFromPoint(e.clientX, e.clientY);
//console.log(ele);
// Drag the show object
//shower.show();
//var offset = {top: (e.pageY-10)+'px', left: (e.pageX-10)+'px'}
//shower.css(offset);
}else{
ele = document.elementFromPoint(e.clientX, e.clientY);
}
//console.log(e);
// Have we moved more than 5px;
var dist = Math.hypot(pagelayer.mouse.x - pagelayer.drag_mouse.x, pagelayer.mouse.y - pagelayer.drag_mouse.y);
//console.log(dist);
/*if(dist && dist < 5){
return false;
}*/
// Handle the scroll
handle_scroll(e);
// Find the closest wrap
var onWrap;
// If we are a column, we can be over another column or row
if(tag == 'pl_col'){
// Prevent column in inner-row and it's columns, if the draged column have inner-rows
if(wrap.find('.pagelayer-wrap-inner-row').length > 0){
onWrap = jQuery(ele).closest('.pagelayer-wrap-col,.pagelayer-wrap-row');
var innerRow = onWrap.closest(pagelayer_editable +' .pagelayer-wrap-inner-row');
if( onWrap.length < 1 || innerRow.length > 0){
onWrap = jQuery(innerRow).closest('.pagelayer-wrap-col,.pagelayer-wrap-row');
}
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-col,.pagelayer-wrap-row,.pagelayer-wrap-inner-row');
}
//console.log(pagelayer_id(onWrap));
// If we are a row, we can be over another row or a column
}else if(tag == 'pl_row'){
onWrap = jQuery(ele).closest('.pagelayer-wrap-row');
//console.log(pagelayer_id(onWrap));
// For inner row we restrict to 1 level only
}else if(tag == 'pl_inner_row'){
var ele_wrap = jQuery(ele).parents('.pagelayer-wrap-col');
if(
(ele_wrap.length == 1 && !jQuery(ele).hasClass('pagelayer-wrap-col')) ||
(ele_wrap.length == 0 && jQuery(ele).hasClass('pagelayer-wrap-col'))
){
onWrap = jQuery(ele).closest('.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row');
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-inner-row');
}
// For every other element, we can be over a col or ele
}else{
onWrap = jQuery(ele).closest('.pagelayer-wrap-ele,.pagelayer-wrap-col,.pagelayer-wrap-inner-row');
// If we are inside the same widget tag
// We are allowing for now, hence the following is commented
/*var sameTag = onWrap.closest(pagelayer_editable +' [pagelayer-tag="'+tag+'"]');
if(sameTag.length > 0){
onWrap = sameTag.closest('.pagelayer-wrap-ele');
}*/
// Is prevent to go inside any widget?
if('prevent_inside' in pagelayer_shortcodes[tag] && !pagelayer_empty(pagelayer_shortcodes[tag]['prevent_inside'])){
var preTags = pagelayer_shortcodes[tag]['prevent_inside'];
var prevent_inside = false;
var preEle = onWrap;
if(typeof preTags === 'string'){
preTags = [preTags];
}
for(var toFind in preTags){
preEle = onWrap.closest(pagelayer_editable +' [pagelayer-tag="'+preTags[toFind]+'"]');
if (preEle.length > 0) {
prevent_inside = true;
break;
}
}
// If we find
if(prevent_inside){
onWrap = preEle.closest('.pagelayer-wrap-ele');
}
}
var widGroup = onWrap.closest('.pagelayer-ele-widget-group');
// If we are inside the group widget
if(widGroup.length > 0 && widGroup.closest(pagelayer_editable).length > 0){
var wGroupTag = pagelayer_tag(widGroup);
var use_inside = false;
// If defined use inside only
if('use_inside' in pagelayer_shortcodes[tag] && !pagelayer_empty(pagelayer_shortcodes[tag]['use_inside'])){
var inTags = pagelayer_shortcodes[tag]['use_inside'];
if(typeof inTags === 'string'){
inTags = [inTags];
}
for(var toFind in inTags){
if (wGroupTag == inTags[toFind]) {
use_inside = true;
}
}
}
// If we find nothing
if(!use_inside){
onWrap = widGroup.parent('.pagelayer-wrap-ele');
}
}
}
//console.log(onWrap);
// If we find nothing
if(pagelayer_empty(onWrap) || onWrap.length < 1){
clear_prospect();// Clear existing prospects
reset_on_drag();// Also reset the last on item
return false;
}
/*// If the columns more than 12 inside the row then return - As of now not enabled the below code
if(tag == 'pl_col'){
var _onTag = pagelayer_tag(onWrap);
var colEles;
// Is on col
if(_onTag == 'pl_col'){
colEles = onWrap.closest('.pagelayer-row-holder').children('.pagelayer-ele-wrap');
}else{
colEles = onWrap.find('.pagelayer-row-holder').first().children('.pagelayer-ele-wrap');
}
// If the columns more than 12
if(colEles.length >= 12){
return false;
}
}*/
// Get the ID
var onId = pagelayer_id(onWrap);
var onEle = pagelayer_ele_by_id(onId);
// Do we have a parent ?
var have_parent = function(Ele){
var pOnId = pagelayer_get_parent(Ele);
if(pagelayer_empty(pOnId) || tag == 'pl_col'){
return;
}
onId = pOnId;
onEle = pagelayer_ele_by_id(pOnId);
onWrap = pagelayer_wrap_by_id(pOnId);
have_parent(onEle);
}
// Do we have a parent ?
have_parent(onEle);
var changed = false;
// Was it the same ID like the one we were on before
if(pagelayer.drag_closest != onId){
pagelayer.drag_closest = onId;
changed = true;
}
//console.log(onId+' '+pagelayer.drag_closest)
var req_corners = {0: 'top', 1: 'top', 2: 'bottom', 3: 'bottom'};
// For columns we redefine the top and bottom
if(tag == 'pl_col'){
req_corners[1] = 'bottom';
req_corners[3] = 'top';
}
// Determine the previous and next
var next = wrap.next('.pagelayer-ele-wrap');
var prev = wrap.prev('.pagelayer-ele-wrap');
if(next.length == 1 && pagelayer_id(next) == onId){
req_corners = {0: 'bottom', 1: 'bottom', 2: 'bottom', 3: 'bottom'};
}
if(prev.length == 1 && pagelayer_id(prev) == onId){
req_corners = {0: 'top', 1: 'top', 2: 'top', 3: 'top'};
}
// Which corner are we closest to ?
var corner_num = pagelayer_closest_corner(onWrap);
var corner = req_corners[corner_num];
//console.log(corner+' != '+pagelayer.drag_closest_corner)
if(corner != pagelayer.drag_closest_corner){
pagelayer.drag_closest_corner = corner;
changed = true;
}
//console.log(changed);
// If we are on our self then clear return false and we are on hide active widget
if(onId == id || onWrap.hasClass('pagelayer-hide-active')){
clear_prospect();// Clear existing prospects
reset_on_drag();// Also reset the last on item
return false;
}
// Then lets start showing
if(changed){
// Record the mouse points
pagelayer.drag_mouse.x = parseInt(e.pageX);
pagelayer.drag_mouse.y = parseInt(e.pageY);
// Clear any existing prospect
clear_prospect();
// Add new prospect
var prospect = '';
if(corner == 'bottom'){
onWrap.append(prospect);
}else if(corner == 'top'){
onWrap.prepend(prospect);
}
prospect = jQuery('.pagelayer-drag-prospect')
var animate_props = {height: '5px'};
// For column add a special class
if(tag == 'pl_col'){
prospect.addClass('pagelayer-drag-prospect-col');
animate_props['width'] = '5px';
// Adjust the left and right
var css = {};
css[(corner == 'bottom' ? 'right' : 'left')] = '0px';
prospect.css(css);
}
// Animate the prospect
prospect.animate(animate_props, 200);
// Highlight the wrap via overlay
onWrap.children('.pagelayer-ele-overlay').addClass('pagelayer-drag-ele-hover');
}
}
}
// When mouse is pressed down
var ondragstart = function(e){
//console.log(e);
// Target
var tEle = jQuery(e.target);
var wrap = tEle.closest('.pagelayer-ele-wrap');
//console.log(jEle[0]);
// Is it an existing element ?
if(wrap.length < 1){
return false;
}
// Do we have a parent ?
var id = pagelayer_id(wrap);
var jEle = pagelayer_ele_by_id(id);
var pId = pagelayer_get_parent(jEle);
if(pId){
wrap = pagelayer_wrap_by_id(pId);
}
//e.preventDefault();
var tag = pagelayer_tag(wrap);
e.originalEvent.dataTransfer.setData('Text', 1);
var img = document.createElement('img');
img.src = shower.attr('src');
e.originalEvent.dataTransfer.setDragImage(img, 32, 32);
pagelayer.dragging = wrap;
}
// When mouse is pressed down
var ondrop = function(e){
//console.log(e);
// Stop dragging ?
if(pagelayer.dragging){
e.preventDefault();
var wrap = pagelayer.dragging;
var tag = pagelayer_tag(wrap);
var gId = wrap.attr('pagelayer-global-id');
var fromEl = wrap.parent();
var id;
// Global ID is there for sure ?
if(pagelayer_empty(gId) || pagelayer_empty(pagelayer_global_widgets[gId])){
gId = 0;
}
wrap.removeClass('pagelayer-is-dragging');
// Find any prospect
var prospect = jQuery('.pagelayer-drag-prospect');
//console.log(prospect[0]);
// It should be exactly 1
if(prospect.length == 1){
var onWrap = prospect.parent();
var onId = pagelayer_id(onWrap);
var onTag = pagelayer_tag(onWrap);
var dropped;
var corner = prospect.attr('pagelayer-corner');
var method = (corner == 'top') ? 'before' : 'after';
var before_loc; // Location before the drop
// Create the element if it needs to be created
if(pagelayer.drag_is_new){
dropped = jQuery('');
// Is there a global ID
if(!pagelayer_empty(gId)){
dropped.attr('pagelayer-global-id', gId);
}
// Move the object
}else{
// Get near by element before move
before_loc = pagelayer_near_by_ele(pagelayer_id(wrap), tag);
dropped = wrap;
dropped.detach();
}
// If I am a column or row, then I go only before or after my same type !
if((onTag == 'pl_col' || onTag == 'pl_row') && onTag == tag){
// If I am a column and I am on a row
// OR I am a normal element and I am on column
}else if((tag == 'pl_col' && (onTag == 'pl_row' || onTag == 'pl_inner_row')) || onTag == 'pl_col'){
// We need to find the holder and add the prospect there
var holder = pagelayer_shortcodes[onTag]['holder'];
onWrap = onWrap.children('.pagelayer-ele').children(holder);
method = (corner == 'top') ? 'prepend' : 'append';
}
// Attach or shift the element
onWrap[method](dropped);
//console.log(dropped);
// Trigger the onadd
if(pagelayer.drag_is_new){
id = pagelayer_onadd(dropped);
// Create Column
if((tag == 'pl_row' || tag == 'pl_inner_row') && pagelayer_empty( dropped.attr('pagelayer-global-id') )){
var col = jQuery('');
jQuery('[pagelayer-id="'+id+'"]').find('.pagelayer-row-holder').append(col);
var col_id = pagelayer_onadd(col, false);
}
// Existing elements
}else{
id = pagelayer_id(wrap);
// Save in action history
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[tag]['name'],
'action' : 'Moved',
'pl_id' : id,
'before_loc' : before_loc,
'after_loc' : {'method' : method, 'cEle' : onWrap}
});
pagelayer_do_dirty(pagelayer_ele_by_id(id));
}
// Defining the variables as needed
var jEle = pagelayer_ele_by_id(id);
wrap = pagelayer_wrap_by_id(id);
var toEl = wrap.parent();
// Column number handle
if(tag == 'pl_col'){
var row_holder = jEle.parent().closest('.pagelayer-row-holder');
// Renumber the col where you are going
pagelayer_renumber_col(row_holder);
// Renumber the old columns as well
if(!pagelayer.drag_is_new){
var from_row = fromEl.closest('.pagelayer-row-holder');
pagelayer_renumber_col(from_row);
}
}
// Handle the empty col
if(tag != 'pl_col'){
pagelayer_empty_col(toEl.closest('.pagelayer-col-holder'));
if(!pagelayer.drag_is_new){
pagelayer_empty_col(fromEl.closest('.pagelayer-col-holder'));
}
}
}
// Clear prospect
clear_prospect();
}
reset_dragging();
}
// Add the events for inner content - as we are using the drag API
jQuery(document).on('dragstart', ondragstart);
jQuery(document).on('dragover', ondragover);
jQuery(document).on('drop', ondrop);
// For addition of new elements
pagelayer.$$('.pagelayer-leftbar').on('dragstart', function(e){
//console.log(e);
var tEle = jQuery(e.target);
var jEle = tEle.closest('.pagelayer-shortcode-drag');
var global_id = jEle.attr('pagelayer-global-id');
// Is it an existing element ?
if(jEle.length < 1){
return false;
}
e.originalEvent.dataTransfer.setData('tag', pagelayer_tag(jEle));
if(!pagelayer_empty(global_id)){
e.originalEvent.dataTransfer.setData( 'global_id', global_id );
}
pagelayer.dragging = jEle;
pagelayer.drag_is_new = true;
});
// Handle editable content by removing drag
var onmousedown = function(e){
var tEle = jQuery(e.originalEvent.explicitOriginalTarget);
if(tEle.closest('[pagelayer-editable]').length > 0){
//console.log('Is Editable MouseDown');
tEle.parents('[draggable]').attr('draggable', 'false');
}
}
// Handle editable content by adding drag that was removed
var onmouseup = function(e){
jQuery(document).find('[draggable=false]').attr('draggable', 'true');
}
// Handle editable contents by temprarily removing drag
jQuery(document).on('mousedown', onmousedown);
jQuery(document).on('mouseup', onmouseup);
};
// Handle empty col
// selector should be col holder
function pagelayer_empty_col(selector){
// Loop through
jQuery(selector).each(function(){
var jEle = jQuery(this);// jEle is the COL HOLDER
// Are we a col ?
if(!jEle.hasClass('pagelayer-col-holder')){
return;
}
// Column is becoming blank, so show add ele
if(jEle.children().length < 1){
//from.addClass('pagelayer-empty-col');
jEle.append('
Empty column please Drag Widgets
');
//var h = jEle.parent().parent().children('.pagelayer-ele-overlay').height();
//jEle.children('.pagelayer-add-ele').height(h);
// Any add ele sign with non-empty columns here ?
}else if(jEle.children('.pagelayer-add-ele').length > 0 && jEle.children().length > 1){
jEle.children('.pagelayer-add-ele').remove();
}
jEle.find('>.pagelayer-add-ele .fas').unbind('click');
jEle.find('>.pagelayer-add-ele .fas').on('click', function(event){
event.stopPropagation();
pagelayer.$$('.pagelayer-elpd-close').click();
pagelayer_show_widget_list(jQuery(this));
});
});
};
// Reset the column widths
// The selector should be a ROW HOLDER
function pagelayer_renumber_col(selector){
var pEle = jQuery(selector);
var children = pEle.children('.pagelayer-ele-wrap');
var cols = Math.floor(12 / (children.length));
var obj = {col: cols};
// Find out the number of cols of other cols
children.each(function(){
// This is the wrapper
var jEle = jQuery(this);
// The real element
var Ele = jEle.find('>.pagelayer-ele');
for(var x=1; x<=12; x++){
if(jEle.hasClass('pagelayer-col-'+x)){
jEle.removeClass('pagelayer-col-'+x);
Ele.removeClass('pagelayer-col-'+x);
break;
}
}
jEle.addClass('pagelayer-col-'+cols);
jEle.css({'width': ''});
// Set the att
pagelayer_set_atts(Ele, obj);
pagelayer_set_atts(Ele, 'col_width','');
pagelayer_sc_render(Ele)
});
}
// Make column resizable handler
function pagelayer_col_make_resizable(wrap){
// Resize handler element
var rHandler = jQuery('
');
var pResize = wrap.children('.pagelayer-ele-overlay').find('.pagelayer-resize-handler');
if(pResize.length > 0){
return;
}
// Append it
wrap.children('.pagelayer-ele-overlay').append(rHandler);
// Resize start
rHandler.on('mousedown', function(e) {
e.preventDefault();
var next_ele = wrap.next();
var rHolder_width = wrap.closest('.pagelayer-row-holder').width();
var new_width, nEle_new_width;
// Original width
var original_width = parseFloat(window.getComputedStyle(wrap[0]).getPropertyValue('width'));
var next_ele_width = parseFloat(window.getComputedStyle(next_ele[0]).getPropertyValue('width'));
var original_mouse_x = e.pageX;
var both_width = parseInt(original_width + next_ele_width);
// Add the element width and next element width
both_width = ((both_width / rHolder_width) *100);
if(both_width > 100){
return false;
}
jQuery('body').css({'cursor': 'ew-resize'});
rHandler.css({'display': 'block'});
var mousemoved = false;
var r_mousemove = function(e){
mousemoved = true;
var width = original_width + (e.pageX - original_mouse_x);
// Covert width in percentage
new_width = (width / rHolder_width *100).toFixed(2);
if(both_width > new_width && new_width > 0){
nEle_new_width = (both_width - new_width).toFixed(2);
wrap.css({'width': new_width+'%'});
next_ele.css({'width': nEle_new_width+'%'});
rHandler.attr({'pre-width': new_width+'%', 'next-width': nEle_new_width+'%'});
}
};
var r_mouseup = function(e){
jQuery(document).off('mousemove', r_mousemove);
jQuery(document).off('mouseup', r_mouseup);
jQuery('body').css({'cursor': ''});
rHandler.removeAttr('style pre-width next-width');
// IF mouseMoved
if(!mousemoved) return;
// find real element and next real element
var jEle = wrap.find('>.pagelayer-ele');
var nEle = next_ele.find('>.pagelayer-ele');
var mode = pagelayer_get_screen_mode();
var col_width = 'col_width';
// Do we have screen ?
if(mode != 'desktop'){
col_width = col_width +'_'+mode;
}
// Set the element attrs
pagelayer_set_atts(jEle, col_width, new_width);
pagelayer_set_atts(jEle, 'col', '');
pagelayer_set_atts(nEle, col_width, nEle_new_width);
pagelayer_set_atts(nEle, 'col', '');
};
// Resize start
jQuery(document).on('mousemove', r_mousemove);
jQuery(document).on('mouseup', r_mouseup);
});
}
// Handle addition of elements from the left
// NOTE : At this point the addition is FINALIZED
// The add element cannot be prevented !
function pagelayer_onadd(jEle, toClick){
toClick = arguments.length == 2 ? toClick : true;
//console.log(jEle);
var id = pagelayer_element_added(jEle);
var jEle = jQuery("[pagelayer-id="+id+"]");
if(toClick){
//console.log('here');
jEle.click();
}
return id;
};
// Add an element into the POST
function pagelayer_element_added(jEle){
var sc = jEle.attr('pagelayer-tag');
var id, par_id;
var gId = jEle.attr('pagelayer-global-id');
gId = gId && !pagelayer_empty(pagelayer_global_widgets[gId]) ? gId : 0;
// Set Pagelayer History FALSE to prevent saving attributes in action history
pagelayer.history_action = false;
pagelayer.global_render = false;
// Is this a global widget ?
if(!pagelayer_empty(gId)){
html = pagelayer_element_unsetup(pagelayer_global_widgets[gId].$);
// Generate the HTML
}else{
html = pagelayer_create_sc(sc);
}
id = pagelayer_assign_id(html);
par_id = id;
// Insert the HTML
jEle[0].outerHTML = html[0].outerHTML;
// Setup the properties of the elements
pagelayer_element_setup("[pagelayer-id="+par_id+"], [pagelayer-id="+par_id+"] .pagelayer-ele", true);
// Is this a global widget ? Then set this as global element
if(!pagelayer_empty(gId)){
html = pagelayer_set_ele_global(jQuery('[pagelayer-id="'+par_id+'"]'), gId);
}
// Any children to add ?
if(!('widget' in pagelayer_shortcodes[sc])){
// The element props
var props = pagelayer_shortcodes[sc];
// Do we have to create children ?
if('has_group' in props){
// Is this not a global widget ?
if(pagelayer_empty(gId)){
var has_group = props['has_group'];
var gProp = props[has_group['section']][has_group['prop']];
for(var i=0; i < gProp['count']; i++){
var cid = pagelayer_element_add_child(jQuery("[pagelayer-id="+id+"]"), gProp['sc'], gProp);
//pagelayer_element_setup('[pagelayer-id='+cid+']', true);
var cEle = pagelayer_ele_by_id(cid);
// Set default
if( 'item_atts' in gProp && i in gProp['item_atts'] && !pagelayer_empty(gProp['item_atts'][i]) ){
pagelayer_set_atts(cEle, gProp['item_atts'][i]);
pagelayer_sc_render(cEle);
}
}
}else{
pagelayer_sc_render(jQuery('[pagelayer-id="'+par_id+'"]'));
}
}
}
// Save in action history
var cEle = pagelayer_near_by_ele(id, sc);
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[sc]['name'],
'action' : 'Added',
'pl_id' : id,
'html' : jQuery("[pagelayer-id="+id+"]")[0].outerHTML,
'cEle' : cEle
});
// Set pagelayer history TRUE
pagelayer.history_action = true;
pagelayer.global_render = true;
// To update nav item list
pagelayer_do_dirty(pagelayer_ele_by_id(id));
return id;
};
// Add an element
function pagelayer_element_add_child(pEle, sc, gProp){
gProp = gProp || {};
var child = pagelayer_create_sc(sc);
var cid = pagelayer_assign_id(child);
pagelayer_set_parent(child, pagelayer_assign_id(pEle));
// Does the parent have a holder ?
var tag = pagelayer_tag(pEle);
// There is a holder
if('holder' in pagelayer_shortcodes[tag]){
pEle.find(pagelayer_shortcodes[tag]['holder']).append(child);
// No holder, just append
}else{
pEle.append(child);
}
pagelayer_element_setup('[pagelayer-id='+cid+']', true);
// Certain element have editable areas which are inner rows. For UX we need to add columns for the users
if(sc == 'pl_inner_row'){
var rHolder = pagelayer_ele_by_id(cid).find('.pagelayer-row-holder');
if( !pagelayer_empty(gProp) && 'inner_content' in gProp){
var inner_content = gProp['inner_content'];
// Add default element
if(!pagelayer_empty(inner_content)){
var add_sc = function(hEle, _tag, content){
var dEle = jQuery('');
if(_tag == 'pl_col'){
hEle = hEle.closest('.pagelayer-row-holder');
}else{
hEle = hEle.find('.pagelayer-col-holder');
}
hEle.append(dEle);
var curID = pagelayer_onadd(dEle, false);
var curEle = pagelayer_ele_by_id(curID);
// Set default
if('atts' in content[_tag]){
pagelayer_set_atts(curEle, content[_tag]['atts']);
pagelayer_sc_render(curEle);
}
// Set inner content
if('inner_content' in content[_tag]){
for( var key in content[_tag]['inner_content'] ){
for( var _key in content[_tag]['inner_content'][key] ){
add_sc(curEle, _key, content[_tag]['inner_content'][key]);
}
}
}
if(_tag == 'pl_col'){
// TODO: unable to set col width
pagelayer_renumber_col(hEle);
}else{
pagelayer_empty_col(hEle);
}
};
for( var key in inner_content ){
for( var tag in inner_content[key] ){
add_sc(rHolder, tag, inner_content[key]);
}
}
}
pagelayer_empty_col(jQuery('[pagelayer-id="'+cid+'"]').find('.pagelayer-col-holder'));
}else{
var col = jQuery('');
rHolder.append(col);
pagelayer_onadd(col, false);
}
}
// Do we have to create children ?
if('has_group' in pagelayer_shortcodes[sc]){
var has_group = pagelayer_shortcodes[sc]['has_group'];
var gProp = pagelayer_shortcodes[sc][has_group['section']][has_group['prop']];
for(var i=0; i < gProp['count']; i++){
var in_cid = pagelayer_element_add_child(jQuery("[pagelayer-id="+cid+"]"), gProp['sc'], gProp);
}
}
return cid;
};
// Return an element by ID
function pagelayer_ele_by_id(id){
return jQuery('[pagelayer-id='+id+']');
};
// Return the wrap by ID
function pagelayer_wrap_by_id(id){
return jQuery('[pagelayer-wrap-id='+id+']');
};
// Give the Pagelayer ID
function pagelayer_id(jEle){
var id = jEle.attr('pagelayer-wrap-id');
if(id){
return id;
}
id = jEle.attr('pagelayer-id');
return id;
}
// Remove Pagelayer ID class
function pagelayer_remove_id_class(jEle){
var id = jEle.attr('pagelayer-id');
jEle.removeClass('p-'+id);
}
// Assign the jQuery object an ID
function pagelayer_assign_id(jEle){
// Do you have the pagelayer id
var id = jEle.attr("pagelayer-id");
if(!id || id.length < 1){
id = pagelayer_randstr(3)+pagelayer_randInt(9999).toString();
id = id.toLowerCase();
jEle.attr("pagelayer-id", id);
}
return id;
}
// Show the edit options
function pagelayer_element_clicked(selector, e){
var jEle = jQuery(selector);
e = e || false;
//console.log(e);
// You must be a element atleast
if(!jEle.hasClass('pagelayer-ele')){
return false;
}
// Get the parent
var pId = pagelayer_get_parent(jEle);
// If we found a parent
if(pId){
jEle = pagelayer_ele_by_id(pId);
}
// Make the editable fields active
//pagelayer_clear_editable();// First clear
jEle.find('[pagelayer-editable]').each(function (){
pagelayer_make_editable(jQuery(this), e);
});
// Show left bar
if(pagelayer_empty(e)){
pagelayer.$$('.pagelayer-leftbar-table').removeClass('pagelayer-leftbar-hidden pagelayer-leftbar-minimize');
}
// Lets not rebuild everything to make it faster
if(pagelayer_is_active(jEle)){
return false;
}
pagelayer_trigger_action('pagelayer_element_clicked', [jEle]);
// Set this as the active element
pagelayer_set_active(jEle);
// Show the properties
pagelayer_elpd_open(jEle);
}
// Use text widget for search widget
function pagelayer_search_widgets(hEle){
hEle = hEle || jQuery(pagelayer_editable +' [pagelayer-tag="pl_text"], '+pagelayer_editable +' [pagelayer-tag="pl_heading"]');
hEle.each(function(){
var jEle = jQuery(this);
var tEle = jEle.find('[pagelayer-editable="text"]');
var addPlaceholder = function(ele){
var tVal = ele.text();
if(pagelayer_empty(tVal)){
ele.attr('data-placeholder-text', 'Type / to open widget list');
}else if(ele.attr('data-placeholder-text')){
ele.removeAttr('data-placeholder-text');
}
}
// Add placeholder text
addPlaceholder(tEle);
tEle.off('input.search_widgets');
tEle.on('input.search_widgets', function(){
var val = tEle.text();
// Add placeholder text
addPlaceholder(tEle);
if(val.charAt(0) == "/"){
val = val.replace('/', '');
pagelayer_show_widget_list(tEle, val);
}else if(pagelayer.$$('.pagelayer-widget-tooltip').is(':visible')){
// Hide Widget list
pagelayer.gDocument.trigger('mousedown.pagelayer_wdlist');
}
});
});
}
// The edit option
function pagelayer_edit_element(selector){
pagelayer_element_clicked(selector);
}
// Dump the data from the el to the elements
function pagelayer_element_dump_data(){
for(var x in pagelayer.el){
var jEle = pagelayer_ele_by_id(x);
if(jEle.length > 0){
pagelayer_el_dump_data(jEle);
}
}
}
// Setup the properties on a single click
function pagelayer_element_setup(selector, render){
var selector = selector || ".pagelayer-ele";
render = render || false;
// Loop through
jQuery(pagelayer_editable+' '+selector).each(function(){
var jEle = jQuery(this);
// Assign an ID if not there
var id = pagelayer_assign_id(jEle);
var pId = pagelayer_get_parent(jEle) || '';// Options to show on hover
var selector = '[pagelayer-id='+id+']';
// Get data part
pagelayer.el[id] = pagelayer_el_get_data(jEle);
//console.log(jEle[0].outerHTML);
//console.log(pagelayer.el[id]);
if(render){
pagelayer_sc_render(jEle);
}
// Get the tag
var tag = pagelayer_tag(jEle);
var props = pagelayer_get_props(jEle);
// Lets check if we are the child of a parent i.e. element of a group
if(pagelayer_empty(pId)){
// Get the parent
var pEle = jEle.parent().closest('.pagelayer-ele');
// If we found a parent
if(pEle.length > 0){
var pTag = pagelayer_tag(pEle);
// Is the parent a group of this child ?
if(!pagelayer_empty(pagelayer_shortcodes[pTag]) && pagelayer_is_group(pTag)){
var has_group = pagelayer_shortcodes[pTag]['has_group'];
var child_type = pagelayer_shortcodes[pTag][has_group['section']][has_group['prop']]['sc'];
// If the type is the same as jEle
if(child_type == pagelayer_tag(jEle)){
pId = pagelayer_assign_id(pEle);
pagelayer_set_parent(jEle, pId);
}
}
}
}
// If is group of widget?
if('widget_group' in props && !pagelayer_empty(props['widget_group'])){
pagelayer_set_widget_group(jEle);
}
// Make the wraps
jEle.wrap('');
var wrap = jEle.parent();
// For column we have to do some kidas !
if(tag == 'pl_col'){
var col;
for(var x=1; x<=12; x++){
if(jEle.hasClass('pagelayer-col-'+x)){
col = 'pagelayer-col-'+x;
break;
}
}
wrap.addClass('pagelayer-col '+col);
//jEle.removeClass('pagelayer-col '+col);
wrap.addClass('pagelayer-wrap-col');
}else if(tag == 'pl_row'){
wrap.addClass('pagelayer-wrap-row');
}else if(tag == 'pl_inner_row'){
wrap.addClass('pagelayer-wrap-inner-row');
}else{
wrap.addClass('pagelayer-wrap-ele');
}
// Create the overlay
wrap.prepend('');
var overlay = wrap.children('.pagelayer-ele-overlay');
var html;
if(tag == 'pl_row' || tag == 'pl_inner_row'){
overlay.addClass('pagelayer-row-hover');
if(jEle.hasClass('pagelayer-row-stretch-full')){
pagelayer_sc_render(jEle);
}
html = '
'+
''+
''+
''+
''+
''+
'
';
}else if(tag == 'pl_col'){
overlay.addClass('pagelayer-col-hover');
html = '
'+
''+
'
';
// Is it an empty col ?
pagelayer_empty_col(jEle.children('.pagelayer-col-holder'));
// Make col resizable
pagelayer_col_make_resizable(wrap);
}else{
html = '
'+
''+
''+
''+
''+
''+
'
';
}
// Append to the child
overlay.append(html);
// Add shortcode icon
if(tag != 'pl_row' && tag != 'pl_col'){
overlay.append('');
}
jQuery('[pagelayer-option-id='+id+']').hide();
// Hide active when not supported by tag
if(!pagelayer_empty(props['hide_active'])){
wrap.addClass('pagelayer-hide-active');
}
pagelayer_trigger_action('pagelayer_element_setup', [jEle]);
// Setup the HOVER events ABD create WRAPS IF we dont have a parent
if(pId.length > 0){
return;
}
// Make the wrap draggable, but only of independent or parent elements
wrap.attr('draggable', 'true');
wrap.hover(function(){
// Is there an element option shower ?
var opts = jQuery('[pagelayer-option-id='+id+']');
// Give the overlay the hover class
opts.parent().addClass('pagelayer-ele-hover');
// Show them
opts.show();
}, function(){
// Is there an element option shower ?
var opts = jQuery('[pagelayer-option-id='+id+']');
// Remove hover class
opts.parent().removeClass('pagelayer-ele-hover');
// Hide opts
opts.hide();
});
});
}
// Unsetup element for restup
function pagelayer_element_unsetup(selector, id){
id = id || false;
var src = jQuery(selector);
var html = src[0].outerHTML;
var jEle = jQuery(html);
pagelayer_remove_id_class(jEle);
jEle.removeAttr('pagelayer-id');
jEle.removeAttr('pagelayer-active');
jEle.find('[pagelayer-id]').each(function(){
pagelayer_remove_id_class(jQuery(this));
jQuery(this).removeAttr('pagelayer-id');
});
jEle.find('[pagelayer-parent]').removeAttr('pagelayer-parent');// Remove the parent attribute as it will be reset during pagelayer_element_setup
jEle.find('style').remove();
jEle.find('.pagelayer-ele-overlay').remove();
// Unwrap the wraps
jEle.find('.pagelayer-ele').each(function (){
var ele = jQuery(this);
if(ele.parent().is('.pagelayer-ele-wrap')){
ele.unwrap();
}
});
// Assign id
if(!pagelayer_empty(id)){
jEle.attr('pagelayer-id', id);
}
return jEle;
}
// Left Click
function pagelayer_left_click(){
jQuery(pagelayer_editable).on('click', function(e){
e.preventDefault();// Added by Jivan in Actions / Revisions version
// Hide the context menu
jQuery('.pagelayer-right-click-options').hide();
// Target
var tEle = jQuery(e.target);
// If its an edit option click
if(tEle.hasClass('pagelayer-eoi')){
return false;
}
pagelayer_element_clicked(tEle.closest('.pagelayer-ele'), e);
return false;
});
};
// Right Click Menu
function pagelayer_right_click(){
var html = '
';
jQuery('body').append(html);
var $contextMenu = jQuery('.pagelayer-right-click-options');
jQuery(pagelayer_editable).on('contextmenu', function(e){
var tEle = jQuery(e.target);
var jEle = tEle.closest('.pagelayer-ele-wrap').children('.pagelayer-ele');
// Get the parent
var pId = pagelayer_get_parent(jEle);
// If we found a parent
if(pId){
jEle = pagelayer_ele_by_id(pId);
}
// The basics
var id = pagelayer_assign_id(jEle);
var tag = pagelayer_tag(jEle);
$contextMenu.find('.pagelayer-right-edit').attr('onclick', 'pagelayer_edit_element("[pagelayer-id='+id+']")').html(' Edit '+pagelayer_shortcodes[tag]['name']);
$contextMenu.find('.pagelayer-right-duplicate').attr('onclick', 'pagelayer_copy_element("[pagelayer-id='+id+']")');
$contextMenu.find('.pagelayer-right-copy').attr('onclick', 'pagelayer_copy_select("[pagelayer-id='+id+']")');
$contextMenu.find('.pagelayer-right-paste').attr('onclick', 'pagelayer_paste_element("[pagelayer-id='+id+']")');
$contextMenu.find('.pagelayer-right-delete').attr('onclick', 'pagelayer_delete_element("[pagelayer-id='+id+']")');
// If is pagelayer pro
if(!pagelayer_empty(pagelayer_pro)){
$contextMenu.find('.pagelayer-right-save-global-widget').attr('onclick', 'pagelayer_save_sections("[pagelayer-id='+id+']", "global_widget")');
$contextMenu.find('.pagelayer-right-save-section').attr('onclick', 'pagelayer_save_sections("[pagelayer-id='+id+']", "section")');
$contextMenu.find('.pagelayer-right-save-global-section').attr('onclick', 'pagelayer_save_sections("[pagelayer-id='+id+']", "global_section")');
}else{
var pro = $contextMenu.find('[pro="1"]');
if(pro.find('.pagelayer-pro-req').length < 1){
pro.append('Pro');
}
pro.css({'color': '#a7a7a7'});
// To stopPropagation
pro.parent().on('click', function(e){
e.stopPropagation();
});
}
// If copy_selected is empty then copy data from localStorage
if(pagelayer_empty(pagelayer.copy_selected)){
pagelayer_copy_from_localStorage();
}
// Are we to hide the paste ?
if(!pagelayer_empty(pagelayer.copy_selected) && pagelayer_can_copy_to(jEle)){
//console.log(pagelayer_can_copy_to(jEle));
$contextMenu.find('.pagelayer-right-paste').parent().show();
}else{
$contextMenu.find('.pagelayer-right-paste').parent().hide();
}
var gId = pagelayer_get_global_id(jEle);
// Are we to hide the global widget ?
if(!pagelayer_empty(gId) || tag == 'pl_row' || tag == 'pl_inner_row'|| tag == 'pl_col'){
$contextMenu.find('.pagelayer-right-save-global-widget').parent().hide();
}else{
$contextMenu.find('.pagelayer-right-save-global-widget').parent().show();
}
var sId = pagelayer_get_att(jEle, 'global-section-id');
// Are we to hide the save as global section ?
if( tag == 'pl_row' && pagelayer_empty(sId)){
$contextMenu.find('.pagelayer-right-save-global-section').parent().show();
}else{
$contextMenu.find('.pagelayer-right-save-global-section').parent().hide();
}
// Are we to hide the save as section ?
if( tag == 'pl_row' ){
$contextMenu.find('.pagelayer-right-save-section').parent().show();
}else{
$contextMenu.find('.pagelayer-right-save-section').parent().hide();
}
var hPosition = (e.pageX+$contextMenu.width()>jQuery(window).width()) ? (e.pageX-$contextMenu.width()) : e.pageX;
var vPosition = (e.pageY+$contextMenu.height()>jQuery(document).scrollTop()+jQuery(window).height()) ? (e.pageY-$contextMenu.height()) : e.pageY;
$contextMenu.css({
display: "block",
left: hPosition,
top: vPosition
});
return false;
});
jQuery('html').on('click', function(e){
$contextMenu.hide();
});
}
// Set the parent for the group
function pagelayer_set_parent(jEle, id){
jEle.attr('pagelayer-parent', id);
};
// Set the widget group
function pagelayer_set_widget_group(jEle){
jEle.addClass('pagelayer-ele-widget-group');
};
// Get the parent for the group
function pagelayer_get_parent(jEle){
return jEle.attr('pagelayer-parent');
};
// Sets the screen mode
function pagelayer_set_screen_mode(mode){
var modes = ['desktop', 'tablet', 'mobile'];
var body = pagelayer.$$('.pagelayer-iframe-holder iframe');
var current = '';
for(var x in modes){
if(body.hasClass('pagelayer-screen-'+modes[x]) && modes[x] != mode){
current = modes[x];
body.removeClass('pagelayer-screen-'+modes[x]);
}
}
// Add the class
body.addClass('pagelayer-screen-'+mode);
// Add the class to the button
pagelayer.$$('.pagelayer-mode-button').removeClass('pli-'+current).addClass('pli-'+mode);
// Add the class to the button
pagelayer.$$('.pagelayer-prop-screen').removeClass('pli-'+current).addClass('pli-'+mode);
// Trigger screen change if any
pagelayer.$$('.pagelayer-elp-screen').trigger('pagelayer-screen-changed');
};
// Get the current screen mode
function pagelayer_get_screen_mode(){
var modes = ['desktop', 'tablet', 'mobile'];
var body = pagelayer.$$('.pagelayer-iframe-holder iframe');
for(var x in modes){
if(body.hasClass('pagelayer-screen-'+modes[x])){
return modes[x];
}
}
}
var pagelayer_keydown_data = {};
pagelayer_add_action('pagelayer_do_dirty', function(){
pagelayer_keydown_data = {};
});
var pagelayer_active_ele_timmer = {};
// Handle widget selecttion and move cursor in editable areas on key press events
jQuery(document).keydown(function(e){
//alert(String.fromCharCode(e.which));
var tEle = jQuery(e.target);
var editable = tEle.closest('[contenteditable="true"]');
var tooltip = pagelayer.$$('.pagelayer-widget-tooltip');
// If ArrowDown and ArrowUp key not pressed
if(!(e.key == 'ArrowDown' || e.key == 'ArrowUp') || tooltip.is(':visible')){
pagelayer_keydown_data = {};
return;
}
var findEles = jQuery(pagelayer_editable+' .pagelayer-ele,'+pagelayer_editable+' [contenteditable="true"]');
var activeEle = findEles.first();
if(editable.length > 0){
activeEle = editable;
}else if( '$' in pagelayer_keydown_data ){
activeEle = pagelayer_keydown_data.$;
}else if( pagelayer_active.el && 'id' in pagelayer_active.el ){
activeEle = pagelayer_active.el.$;
}
if(pagelayer_empty(activeEle) || activeEle.length < 1){
return;
}
// Make element active
var makeEleActive = function(index, next){
next = next || false;
var cursorPos = 0, focusEle;
// We are editable area
if(editable.length > 0){
var lines = pagelayer_content_line(editable.get(0));
var cursorPos = pagelayer_getCaretCharacterOffsetWithin(editable.get(0));
if((next && lines[lines.length - 1].start > cursorPos) || (!next && lines[0].end < cursorPos)){
return;
}
e.preventDefault();
var lastLineStart = lines[lines.length - 1]['start'];
// We are on the last line
if(next && lastLineStart <= cursorPos){
cursorPos = cursorPos - lastLineStart;
}
}
// Search for next/previous element
var searchEle = function(indexEle){
indexEle = next ? ++indexEle : --indexEle;
var sIndex = findEles.eq(indexEle);
if(sIndex.length < 1){
return sIndex;
}
var sEle = sIndex.closest('.pagelayer-ele');
var tag = pagelayer_tag(sEle);
if(tag == 'pl_row' || tag == 'pl_inner_row' || tag == 'pl_col' || sEle.parent().hasClass('pagelayer-hide-active') || !pagelayer_empty(sIndex.attr('pagelayer-parent'))){
sIndex = searchEle(indexEle);
}
return sIndex;
}
var ele = searchEle(index);
// If ArrowUp and we are come from editable area and previous element is not editable
if(ele.length > 0 && !next && ele.attr('contenteditable') != 'true'){
ele = searchEle(findEles.index( ele ));
}
if(ele.length < 1){
return;
}
// Save in global variable
pagelayer_keydown_data.$ = ele;
jQuery(':focus').blur();
var jEle = ele.closest('.pagelayer-ele');
var tag = pagelayer_tag(jEle);
if(ele.attr('contenteditable') == 'true'){
focusEle = ele;
}else if(tag != 'pl_row' && tag != 'pl_inner_row' && tag != 'pl_col'){
var focusAble = ele.find('[contenteditable="true"]');
var isfocusAble = focusAble.closest('.pagelayer-ele').is(jEle);
if(isfocusAble && next){
focusEle = focusAble.first();
}else if(isfocusAble){
focusEle = focusAble.last();
}
}
if(!pagelayer_empty(focusEle) && focusEle.length > 0){
focusEle.focus();
var focusLine = pagelayer_content_line(focusEle.get(0));
var fLine = next ? focusLine[0] : focusLine[focusLine.length -1];
cursorPos = (fLine['start'] + cursorPos > fLine['end'] ? fLine['end'] : fLine['start'] + cursorPos);
pagelayer_setCaret(focusEle.get(0), cursorPos);
}
pagelayer_set_active(jEle);
ele[0].scrollIntoView({behavior: "smooth", block: "nearest"});
clearTimeout(pagelayer_active_ele_timmer);
pagelayer_active_ele_timmer = setTimeout(function(){
pagelayer_keydown_data = {};
ele.closest('.pagelayer-ele').click();
}, 1000);
}
// If cursor on first line & up arrow key
var currentIndex = findEles.index( activeEle );
pagelayer_keydown_data.$ = activeEle;
// Move active element and cursor arround editor
if(e.key == 'ArrowDown'){
makeEleActive(currentIndex, true);
}
if(e.key == 'ArrowUp'){
makeEleActive(currentIndex, false);
}
});
// Handle key press events
pagelayer.gDocument.keydown(function(event){
//alert(String.fromCharCode(event.which));
var tEle = jQuery(event.target);
var editable = tEle.closest('[contenteditable="true"]');
var tooltip = pagelayer.$$('.pagelayer-widget-tooltip');
// Enter handle
if(event.keyCode == 13){
var jEle = tEle.closest('.pagelayer-ele');
var tag = pagelayer_tag(jEle);
// Add selected widget from widget list
if(tooltip.is(':visible')){
tooltip.find('.pagelayer-list-widget-active:visible').click();
return;
}
if( pagelayer_empty(pagelayer_active.el) || !('id' in pagelayer_active.el) ){
return;
}
var active_el_par = pagelayer_active.el.$.parent();
// Create and add text widget
var addTitle = function(insertAfter){
var ele = jQuery('');
insertAfter.after(ele);
return pagelayer_ele_by_id( pagelayer_onadd(ele) );
}
// If we have an active element then add text widget
if(!(tEle.is('input, textarea') || editable.length > 0)){
event.preventDefault();
var activeTag = pagelayer_active.el.tag;
// If is row or column ?
if(activeTag == 'pl_row' || activeTag == 'pl_col'){
return;
}
var hEle = addTitle(active_el_par);
hEle.click();
hEle.find('[pagelayer-editable]').focus();
// Ensure the column is not empty
pagelayer_empty_col(hEle.closest('.pagelayer-col-holder'));
return;
}
if( (tag != 'pl_text' && tag != 'pl_heading') || editable.length < 1 || event.shiftKey){
return;
}
var selection = window.getSelection();
var range = selection.getRangeAt(0);
// We are within the list tag
if(jQuery(range.startContainer).closest('[pagelayer-editable] li').length > 0){
return;
}
event.preventDefault();
var lastChild = editable[0].lastChild;
var startContainer = range.startContainer;
if(startContainer.nodeType == Node.TEXT_NODE && startContainer.parentNode != editable[0]){
startContainer = startContainer.parentNode;
}
range.setEndAfter(lastChild);
var val = range.cloneContents();
var selfEle = jQuery('
').append(val);
var selContent = selfEle.html();
var selfFC = selfEle[0].firstChild;
var emptyContent = false;
if(selfFC == null || pagelayer_empty(selContent)){
selContent = '
');
}
editable.trigger('input');
editable.blur();
// Create and add text widget
var ele;
if(emptyContent){
ele = addTitle(jEle.parent());
}else{
var id = pagelayer_copy_element(jEle);
ele = pagelayer_ele_by_id(id);
}
ele.click();
var editorArea = ele.find('[pagelayer-editable]');
editorArea.html(selContent);
editorArea.find('p:empty').remove();
editorArea.focus().trigger('input');
}
// ctrl+s handle
if(event.keyCode == 83 && event.ctrlKey){
event.preventDefault();
pagelayer.$$('.pagelayer-bottombar-holder').find('.pagelayer-update-button').click();
}
// ctrl+d handle
if(event.keyCode == 68 && event.ctrlKey){
// If we have an active element
if( pagelayer_active.el && pagelayer_active.el.id ){
event.preventDefault();
pagelayer_copy_element('[pagelayer-id='+pagelayer_active.el.id+']');
}
}
// Delete handler for text widget
if(event.keyCode == 46 && editable.length > 0){
var jEle = tEle.closest('.pagelayer-ele-wrap');
var tag = pagelayer_tag(jEle);
var next = jEle.next();
var pTag = pagelayer_tag(next);
var selection = window.getSelection();
var orgRange = selection.getRangeAt(0);
var cloneRange = orgRange.cloneRange();
if((tag != 'pl_text' && tag != 'pl_heading') || next.length < 1 || pTag != tag || !cloneRange.collapsed ){
return;
}
var currentOffset = pagelayer_getCaretCharacterOffsetWithin(editable[0]);
cloneRange.selectNodeContents(editable[0]);
var caretOffset = cloneRange.toString().length;
if(currentOffset != caretOffset){
return;
}
var nextHtml = next.find('[pagelayer-editable="text"]').html();
editable.append(nextHtml);
pagelayer_delete_element(next.children('.pagelayer-ele'));
}
// Backspace handler
if(event.keyCode == 8 && editable.length > 0){
var jEle = tEle.closest('.pagelayer-ele-wrap');
var tag = pagelayer_tag(jEle);
var prev = jEle.prev();
if((tag != 'pl_text' && tag != 'pl_heading') || prev.length < 1){
return;
}
var pTag = pagelayer_tag(prev);
var selection = window.getSelection();
if (selection == null || selection.rangeCount <= 0) return null;
var range1 = selection.getRangeAt(0);
if(pTag != tag || range1.startOffset != 0){
return;
}
var prevArea = prev.find('[pagelayer-editable="text"]');
if( pagelayer_getCaretCharacterOffsetWithin(editable[0]) != 0 || prevArea.length < 1){
return;
}
//event.preventDefault();
var html = editable.html();
editable.blur();
prev.children('.pagelayer-ele').click();
prevArea.click();
var newSel = window.getSelection();
var newRange = newSel.getRangeAt(0);
var lastChild = jQuery(prevArea[0].lastChild);
prevArea.append(html);
prevArea.trigger('input');
if(lastChild.length > 0){
if(lastChild[0].nextSibling != null){
newRange.setStart(lastChild[0].nextSibling, 0);
}else{
newRange.setStartAfter(lastChild[0]);
}
}
newRange.collapse(true);
newSel.removeAllRanges();
newSel.addRange(newRange);
pagelayer_delete_element(jEle.children('.pagelayer-ele'));
}
if(tooltip.is(':visible')){
// Select previous widget in widget tooltip
if(event.key == 'ArrowUp' || event.key == 'ArrowLeft' || (event.key == 'Tab' && event.shiftKey)){
event.preventDefault();
var current = tooltip.find('.pagelayer-list-widget-active:visible'),
prev = current.prevAll('.pagelayer-shortcode-holder:visible');
if(event.key == 'ArrowUp'){
var _prev = prev,
cOffset = current.offset();
findNext = false;
var searchNext = function(nEle){
var nOffset = nEle.offset();
var nBottom = nOffset.top + nEle.height();
if(nBottom > cOffset.top){
return true;
}
prev = nEle;
findNext = true;
// Current element left set +20 to manager previous scale (css) element on hover
if(cOffset.left + 20 >= nOffset.left){
return false;
}
return true;
}
_prev.each(function(){
return searchNext(jQuery(this));
});
if(!findNext){
var gNext = current.parent().prevAll('.pagelayer-widget-group:visible').first();
_prev = gNext.children('.pagelayer-shortcode-holder:visible');
jQuery(_prev.get().reverse()).each(function(){
return searchNext(jQuery(this));
});
}
}
if(prev.length < 1){
prev = current.parent().prevAll('.pagelayer-widget-group:visible').first().find('.pagelayer-shortcode-holder:visible').last();
}
if(prev.length < 1){
return;
}
prev.first().trigger('widget_active');
}
// Select next widget in widget tooltip
if(event.key == 'ArrowDown' || event.key == 'ArrowRight' || (event.key == 'Tab' && !event.shiftKey)){
event.preventDefault();
var current = tooltip.find('.pagelayer-list-widget-active:visible');
next = current.nextAll('.pagelayer-shortcode-holder:visible');
if(event.key == 'ArrowDown'){
var _next = next,
cOffset = current.offset(),
findNext = false;
var searchNext = function(nEle){
var nOffset = nEle.offset();
var cBottom = cOffset.top + current.height();
if(cBottom > nOffset.top){
return true;
}
next = nEle;
findNext = true;
// Current element left set -20 to manager next scale (css) element on hover
if(cOffset.left - 20 <= nOffset.left){
return false;
}
return true;
}
_next.each(function(){
return searchNext(jQuery(this));
});
if(!findNext){
var gNext = current.parent().nextAll('.pagelayer-widget-group:visible').first();
_next = gNext.children('.pagelayer-shortcode-holder:visible');
_next.each(function(){
return searchNext(jQuery(this));
});
}
}
if(next.length < 1){
next = current.parent().nextAll('.pagelayer-widget-group:visible').first().find('.pagelayer-shortcode-holder:visible');
}
if(next.length < 1){
return;
}
next.first().trigger('widget_active');
}
}
// Is this in the editable area ?
if (tEle.is('input, textarea') || editable.length > 0) {
return;
}
// Delete
if(event.keyCode == 46){
pagelayer_delete_element('[pagelayer-active]');
}
// ctrl+z handle
if(event.keyCode == 90 && event.ctrlKey){
pagelayer_do_history('undo');
}
// ctrl+y handle
if(event.keyCode == 89 && event.ctrlKey){
pagelayer_do_history('redo');
}
});
// Handle Copy of content
jQuery(document).on('copy', function(copyEvent){
// Is Selected string?
var selectedText = "";
if (window.getSelection){ // all modern browsers and IE9+
selectedText = window.getSelection().toString();
}
if(selectedText.length > 0){
return;
}
if(pagelayer_active.el && pagelayer_active.el.id){
// Do empty clipbord data
(copyEvent.originalEvent || copyEvent).clipboardData.setData('text/plain', '');
copyEvent.preventDefault();
// Save the active element id
pagelayer_copy_select("[pagelayer-id='"+pagelayer_active.el.id+"']");
}
});
// Handle Paste in the editor
jQuery(document).on('paste', function(pasteEvent){
var pEle_target = jQuery((pasteEvent.originalEvent || pasteEvent).target);
var tag = pagelayer_tag(pEle_target.closest('[pagelayer-id]'));
var clipboardData = (pasteEvent.originalEvent || pasteEvent).clipboardData;
var items = clipboardData.items;
var pagelayer_ajax_func = {};
var contenteditable = false;
var pasteWidget = false;
if( pEle_target.closest('[contenteditable="true"]').length > 0 || pEle_target.is('input, textarea') ){
pEle_target = pEle_target.closest('[contenteditable="true"], input, textarea');
contenteditable = true;
}
if( items.length < 1 || (items.length == 1 && pagelayer_empty(clipboardData.getData(items[0].type))) ){
pasteWidget = true;
}
// This function for ajax before send call back
pagelayer_ajax_func['beforeSend'] = function(xhr){
// If target is not content editable
if( pagelayer_empty(contenteditable) ){
// If we dont have an active element then return false and stop ajax
if( !(pagelayer_active.el && pagelayer_active.el.id) ){
pagelayer_show_msg(pagelayer_l('active_ele_paste_msg'));
return false;
}
pagelayer.copy_selected = jQuery('');
// Is it to be pastable
if(!pagelayer_can_copy_to('[pagelayer-id="'+pagelayer_active.el.id+'"]')){
pagelayer.copy_selected = '';
return false;
}
}
pEle_target.css({'opacity': '0.33' , 'transition' : '0.1s'});
}
// This function for ajax success call back
pagelayer_ajax_func['success'] = function(obj){
// Successfully Uploaded
if(obj['success']){
// For content editable e.g. Rich Text
if( !pagelayer_empty(contenteditable) ){
document.execCommand('insertImage', false, obj['data']['url']);
// For our widgets
}else{
if(pagelayer_empty(pagelayer_active.el) || pagelayer_empty(pagelayer_active.el.id)){
pagelayer_show_msg('active_ele_paste_msg');
return;
}
var fTo = pagelayer_can_copy_to('[pagelayer-id="'+pagelayer_active.el.id+'"]');
// We need to empty pagelayer.copy_selected
pagelayer.copy_selected = '';
var pasteAfter = function(){
// Prevent to add action history
pagelayer.history_action = false;
// Create image html
var html = pagelayer_create_sc('pl_image');
pagelayer_set_atts(html, 'id', obj['data']['id']);
pagelayer_set_tmp_atts(html, 'id-url', obj['data']['url']);
// Allow to add action history
pagelayer.history_action = true;
// Copy the element
var id = pagelayer_copy_element(html, fTo);
jQuery('[pagelayer-id="'+id+'"]').click();
};
var replaceURL = function(){
// Finding widget image setting using id of jEle. Finding image editor setting from all of the other settings.
var row = pagelayer.$$('[pagelayer-element-id='+pagelayer_active.el.id+']').find('.pagelayer-elp-image').eq(0).parent().parent();
row.find('.pagelayer-elp-image').css('background-image', 'url(\''+obj['data']['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', '');
}
// Save and render
_pagelayer_set_tmp_atts(row, 'url', obj['data']['url']);
_pagelayer_set_atts(row, obj['data']['id']);
};
// Image paste confirmation.
if(!pagelayer_empty(pagelayer_active.el.tag) && pagelayer_active.el.tag == 'pl_image'){
pagelayer_confirmation_box(pagelayer_l('img_paste_conf'), replaceURL, pasteAfter, pagelayer_l('replace_img'), pagelayer_l('paste_after'));
}else{
pasteAfter();
}
}
// Some error occured
}else{
pagelayer_show_msg(obj['data']['message'], 'error', 10000);
}
}
// This function for ajax complete call back
pagelayer_ajax_func['complete'] = function(xhr){
//console.log(xhr);
pEle_target.css({'opacity': '1' , 'transition' : '0.1s'});
}
var findImg = pagelayer_editable_paste_handler(pasteEvent, pagelayer_ajax_func);
if(pagelayer_empty(findImg) && pagelayer_empty(contenteditable) || pasteWidget){
// Check the active element
if(pagelayer_active.el && pagelayer_active.el.id && pagelayer_active.el.tag != 'pl_post_props'){
var jEle = jQuery("[pagelayer-id='"+pagelayer_active.el.id+"']");
// Check if the any element is copied
pagelayer_paste_element("[pagelayer-id='"+pagelayer_active.el.id+"']");
}else{
pagelayer_show_msg(pagelayer_l('no_active_ele_paste'));
}
}
});
// Delete an element as per the selector
function pagelayer_delete_element(selector){
var jEle = jQuery(selector);
var nearBy = jEle;
// Anything found ?
if(jEle.length > 0){
var id = pagelayer_assign_id(jEle);
var sc = pagelayer_tag(jEle);
// Is there a wrap
var wrap = jQuery('[pagelayer-wrap-id="'+id+'"]');
var par = wrap.parent();
// Save this element in history action
if(pagelayer.history_action){
var cEle = pagelayer_near_by_ele(id, sc);
nearBy = jQuery(cEle.cEle);
// To save in history, we need to save only element not the wraps as we call setup if we redo or undo
jEle.find('style').remove();
jEle.find('.pagelayer-ele-overlay').remove();
// Unwrap the wraps
jEle.find('.pagelayer-ele').each(function (){
var ele = jQuery(this);
if(ele.parent().is('.pagelayer-ele-wrap')){
ele.unwrap();
}
});
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[sc]['name'],
'action' : 'Deleted',
'pl_id' : id,
'html' : jEle[0].outerHTML,
'cEle' : cEle
});
}
wrap.remove();
pagelayer_empty_col(par);
if( (pagelayer_active.el && pagelayer_active.el.id == id) ||
(pagelayer_active.el && pagelayer_active.el.id && jQuery('[pagelayer-id="'+pagelayer_active.el.id+'"]').length < 1)){
pagelayer.$$('.pagelayer-elpd-close').click();
}
}
// Do Pagelayer dirty
pagelayer_do_dirty(nearBy);
};
// Select an element
function pagelayer_copy_select(selector){
var eHtml = jQuery(selector)[0].outerHTML;
// Copy data on localStorage
localStorage.setItem("pagelayer_ele", eHtml);
pagelayer.copy_selected = selector;
pagelayer_show_msg( pagelayer_l('copied_msg'));
}
function pagelayer_can_copy_to(to){
var jEle = jQuery(pagelayer.copy_selected);
var tEle = jQuery(to);
var eTag = pagelayer_tag(jEle);
var tTag = pagelayer_tag(tEle);
//console.log(eTag+' - '+tTag);
// Final to
var fTo;
// Selected element is a Row, can go only after a row
if(eTag == 'pl_row'){
fTo = tEle.closest('.pagelayer-ele.pagelayer-row');
if(fTo.length != 1) return false;
return fTo;
}
// Selected element is a Column, can go only after a col
if(eTag == 'pl_col'){
fTo = tEle.closest('.pagelayer-ele.pagelayer-col');
if(fTo.length != 1) return false;
return fTo;
}
// Is the TARGET a row or column when the selected item is a element
if(tTag == 'pl_row' || tTag == 'pl_col'){
return false;
}
return tEle;
}
// Select an element
function pagelayer_paste_element(to){
// Copy data from localStorage
pagelayer_copy_from_localStorage();
var fTo = pagelayer_can_copy_to(to);
// Is it a valid to
if(!fTo){
return false;
}
if(!pagelayer_empty(pagelayer.copy_selected)){
pagelayer_copy_element(pagelayer.copy_selected, fTo);
return true;
}
pagelayer_show_msg(pagelayer_l('no_copied'));
return false;
}
// If copy_selected is empty then copy data from localStorage
function pagelayer_copy_from_localStorage(){
if(!pagelayer_empty(localStorage.getItem("pagelayer_ele"))){
// Set copy data from localStorage
pagelayer.copy_selected = localStorage.getItem("pagelayer_ele");
}
}
// Copy an element
// Note : insertAfter should always be an pagelayer-ele
function pagelayer_copy_element(selector, insertAfter){
var src = jQuery(selector);
var tag = pagelayer_tag(src);
insertAfter = insertAfter || src;
insertAfter = insertAfter.parent();
var jEle = pagelayer_element_unsetup(src);
// Give it an ID
var id = pagelayer_assign_id(jEle);
jQuery(insertAfter).after(jEle);
pagelayer_element_setup('[pagelayer-id='+id+'], [pagelayer-id='+id+'] .pagelayer-ele', true);
if(pagelayer_is_group(tag)){
pagelayer_sc_render(jEle);
}
// Save this element in history action
if(pagelayer.history_action){
var cEle = pagelayer_near_by_ele(id, tag);
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[tag]['name'],
'action' : 'Copied',
'pl_id' : id,
'html' : jEle[0].outerHTML,
'cEle' : cEle
});
}
//If column then renumber columns
if(tag == 'pl_col'){
var row = src.parent().closest('.pagelayer-row');
pagelayer_renumber_col(row);
}
pagelayer_do_dirty(jEle);
return id;
};
// Traversing up one step an element
function pagelayer_move_element_up(selector){
var src = jQuery(selector);
var srcParent = src.parent();
var srcParentPrev = srcParent.prev('.pagelayer-wrap-row, .pagelayer-wrap-inner-row, .pagelayer-wrap-ele');
if(srcParentPrev.length<=0){
return;
}
var srcTopValue = srcParent.offset().top;
if(srcParentPrev.hasClass('pagelayer-wrap-ele')){
var animUpCalc = srcTopValue-srcParentPrev.offset().top;
srcParent.animate({top:-animUpCalc}, 200, function(){
srcParent.css('top', '');
srcParentPrev.css('top', '');
srcParentPrev.before(srcParent.detach());
});
srcParentPrev.animate({top:(srcParent.height()+srcParentPrev.height())-animUpCalc}, 200, function(){
srcParentPrev.css('top', '');
});
// Traverse window scroll with the element
jQuery('html, body').animate({scrollTop:('-='+(srcTopValue-(srcParentPrev.offset().top)))},200);
}else{
srcParentPrev.before(srcParent.detach());
// Traverse window scroll with the element
jQuery('html, body').animate({scrollTop:('-='+(srcTopValue-(src.parent().offset().top)))},200);
}
pagelayer_do_dirty(src);
}
// Traversing down one step an element
function pagelayer_move_element_down(selector){
var src = jQuery(selector);
var srcParent = src.parent();
var srcParentNext = srcParent.next('.pagelayer-wrap-row, .pagelayer-wrap-inner-row, .pagelayer-wrap-ele');
if(srcParentNext.length<=0){
return;
}
var srcTopValue = srcParent.offset().top;
if(srcParentNext.hasClass('pagelayer-wrap-ele')){
var animDownCalc = srcParentNext.offset().top-srcTopValue;
srcParent.animate({top:(animDownCalc-(srcParent.height()-srcParentNext.height()))}, 200, function(){
srcParent.css('top', '');
srcParentNext.css('top', '');
srcParentNext.after(srcParent.detach());
});
srcParentNext.animate({top:-animDownCalc}, 200, function(){
srcParentNext.css('top', '');
});
// Traverse window scroll with the element
jQuery('html, body').animate({scrollTop:('+='+(animDownCalc-(srcParent.height()-srcParentNext.height())))},200);
}else{
srcParentNext.after(srcParent.detach());
// Traverse window scroll with the element
jQuery('html, body').animate({scrollTop:('+='+((src.parent().offset().top)-srcTopValue))},200);
}
pagelayer_do_dirty(src);
}
// Save sections as template
function pagelayer_ajax_save_template(data, ajax_call_back = ''){
if(pagelayer_empty(data)){
return;
}
//save global sections and widgets
jQuery.ajax({
type: "POST",
url: pagelayer_ajax_url+'&action=pagelayer_save_templ_content&postID='+pagelayer_postID,
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
global_widgets : data
},
success: function(response, status, xhr){
//alert(data);
var obj = jQuery.parseJSON(response);
if(!pagelayer_empty(ajax_call_back) || typeof ajax_call_back == 'function'){
ajax_call_back(obj);
}
},
error: function(errorThrown){
console.log(errorThrown);
}
});
}
// Get global id of the element
function pagelayer_get_global_id(jEle){
return pagelayer_get_att(jEle, 'global_id');
}
// Set element as a global widget
function pagelayer_set_ele_global(jEle, post_id){
// Add attribute for global ID
jEle.attr('pagelayer-global-id', post_id);
pagelayer.history_action = false;
pagelayer_set_atts(jEle, 'global_id', post_id);
pagelayer.history_action = true;
return jEle;
}
// Save widgets as a global widget
function pagelayer_save_sections(sel, section = 'section'){
var jEle = jQuery(sel);
var pagelayer_ajax_func = {};
var label = 'Please enter the title';
var content = pagelayer_generate_sc(jEle, true);
var data = {};// create array for template data
data[0] = {};
switch(section){
case 'global_widget' :
var title = prompt(label, 'Global Widget');
if (title == null) return;
// Save the widget data in global widget array
if(pagelayer_empty(pagelayer_global_widgets)){
pagelayer_global_widgets = {};
}
break;
case'global_section' :
var title = prompt(label, 'Global Section');
if (title == null) return;
break;
case 'section':
var title = prompt(label, 'Section');
if (title == null) return;
break;
}
// Add Data
data[0]['title'] = title;
data[0]['post_type'] = 'pagelayer-template';
data[0]['type'] = section;
data[0]['content'] = content.replace(/pagelayer-id="(.*?)"/g, ""); // Need to remove pagelayer id,
data[0]['content'] = pagelayer_Base64.encode(data[0]['content']);
// This function for ajax success call back of global widget
pagelayer_ajax_func['global_widget'] = function(obj){
if(pagelayer_empty(obj['success'])){
return;
}
for(var post_id in obj['success']){
pagelayer_set_ele_global(jEle, post_id);
// Add global
jData = {};
jData['post_id'] = post_id;
jData['title'] = title; // TODO : create modal to input title
jData['$'] = jEle;
jData['is_dirty'] = true;
// Add the array in global widgets array
pagelayer_global_widgets[post_id] = jData;
pagelayer.$$('.pagelayer-elpd-close').click();
pagelayer.$$('.pagelayer-widget-tab').click();
break;
}
}
// This function for ajax success call back of global sections
pagelayer_ajax_func['global_section'] = function(obj){
// TODO: For global Sections
//console.log(obj);
}
// This function for ajax success call back of section s
pagelayer_ajax_func['section'] = function(obj){
//console.log(obj);
}
pagelayer_ajax_save_template(data, pagelayer_ajax_func[section]);
}
// Genrate sc for global widgets
function pagelayer_generate_sc_global_widget(){
var global_widgets = {};
// Create shortcode for all the global widgets
for(var y in pagelayer_global_widgets){
var cWidget = pagelayer_global_widgets[y];
// If is_dirty empty then continue the loop
if(pagelayer_empty(cWidget['is_dirty'])){
continue;
}
global_widgets[y] = {};
global_widgets[y]['title'] = cWidget['title'];
global_widgets[y]['post_id'] = pagelayer_empty(cWidget['post_id']) ? 0 : cWidget['post_id'];
global_widgets[y]['post_type'] = 'pagelayer-template';
global_widgets[y]['type'] = 'global_widget';
var content = pagelayer_generate_sc(jQuery(cWidget.$), true);
var tag = pagelayer_tag(jQuery(cWidget.$));
// IF is group then need to remove pagelayer id,
if(!pagelayer_empty(tag) && pagelayer_is_group(tag)){
content = content.replace(/pagelayer-id="(.*?)"/g, "");
}
global_widgets[y]['content'] = pagelayer_Base64.encode(content);
pagelayer_global_widgets[y]['is_dirty'] = false;
}
return global_widgets;
}
var pagelayer_set_global_timmer = {};
// If you edit one Global widget it should be copied to other instances of the same global widget
function pagelayer_setup_global_widgets(id, jEle){
if(pagelayer_empty(id) || pagelayer_empty(pagelayer_global_widgets[id])){
return;
}
var elData = pagelayer_global_widgets[id];
clearTimeout(pagelayer_set_global_timmer);
pagelayer_set_global_timmer = setTimeout(function(){
// Set attrs for all the global widgets
jQuery(pagelayer_editable+' [pagelayer-global-id='+ id +']').each(function(){
var cEle = jQuery(this);
var cEleID = pagelayer_id(cEle);
if( jEle.length > 0 && jEle.is(cEle)){
return true;
}
pagelayer.history_action = false;
pagelayer.global_render = false;
// Get HTML form global array
var html = pagelayer_element_unsetup(elData.$, cEleID);
if(cEle.parent().is('.pagelayer-ele-wrap')){
cEle.parent().children('.pagelayer-ele-overlay').remove();
cEle.unwrap();
}
cEle[0].outerHTML = html[0].outerHTML;
pagelayer_element_setup('[pagelayer-id='+cEleID+'], [pagelayer-id='+cEleID+'] .pagelayer-ele');
pagelayer_sc_render(jQuery('[pagelayer-id="'+cEleID+'"]'));
pagelayer.history_action = true;
pagelayer.global_render = true;
});
}, 3000);
}
// Language key
function pagelayer_l(k){
if(k in pagelayer_lang){
return pagelayer_lang[k];
}
return k;
}
// Get props based on the tag
function pagelayer_get_props(jEle){
var props = pagelayer_shortcodes[pagelayer_tag(jEle)];
return props;
}
// Get all props based on the tag but in a single structure
function pagelayer_make_props_ref(){
// Loop through pagelayer_shortcodes
for(var tag in pagelayer_shortcodes){
var all_props = pagelayer_shortcodes[tag];
pagelayer.props_ref[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];
// In case of widgets its possible !
if(pagelayer_empty(props)){
continue;
}
for(var x in props){
// Create an easy REFERENCE for access
pagelayer.props_ref[tag][x] = props[x];
// Screen option REFERENCE is also needed for lookup
if('screen' in props[x]){
pagelayer.props_ref[tag][x+'_tablet'] = props[x];
pagelayer.props_ref[tag][x+'_mobile'] = props[x];
}
}
}
}
}
}
// Set the given jELE as active
function pagelayer_set_active(jEle){
// Make all other element as inactive
jQuery('[pagelayer-active]').each(function(){
var $j = jQuery(this);
$j.removeAttr('pagelayer-active');
});
jEle.attr('pagelayer-active', 1);
// Add and remove the class
jQuery('.pagelayer-active').removeClass('pagelayer-active');
jEle.parent().children('.pagelayer-ele-overlay').addClass('pagelayer-active');
}
function pagelayer_sc(sc){
return sc.replace('pl_', '');
};
// Create a HTML dom element of the Short code
// Return the jEle
function pagelayer_create_sc(sc){
var html;
var _sc = pagelayer_sc(sc);
var func = window['pagelayer_create_sc_'+sc];
// Generate the HTML
if(typeof func == 'function'){
html = window['pagelayer_create_sc_'+sc]();
}else{
html = '';
}
html = jQuery(html);
// Add the tag
html.attr('pagelayer-tag', sc);
// Give it an ID
id = pagelayer_assign_id(html);
// Try to set the default values over 5 loops
pagelayer_set_default_atts(html, 5);
return html;
};
// Returns a list of default attributes to set as per the current selection
function pagelayer_set_default_atts(jEle, set){
set = set || 0;
var hasSet = false;
for(var i = 1; i <= set;i++){
//console.log('[pagelayer_set_default_atts] Loop :'+i);
//console.log(jEle);
// Get existing data
var el = pagelayer_data(jEle, true);
// If it is the last loop and we are greater than 1
if(i > 1 && i == set){
console.log('[pagelayer_default_atts] Still vars to set. Please check your shortcode params !');
}
// We are supposed to set !
if('set' in el && !pagelayer_empty(el.set)){
pagelayer_set_atts(jEle, el.set);
hasSet = true;
}else{
break;
}
}
return hasSet;
}
// Returns the tag
function pagelayer_tag(jEle){
// It could be the wrap
if(jEle.hasClass('pagelayer-ele-wrap')){
return jEle.children('.pagelayer-ele').attr('pagelayer-tag');
}
// It could be the row or col holder
if(jEle.hasClass('pagelayer-row-holder') || jEle.hasClass('pagelayer-col-holder')){
return jEle.parent().attr('pagelayer-tag');
}
return jEle.attr('pagelayer-tag');
}
function pagelayer_el_data_ref(jEle){
var id = pagelayer_id(jEle);
if(!(id in pagelayer.el)){
pagelayer.el[id] = {};
}
if(typeof pagelayer.el[id] !== 'object'){
pagelayer.el[id] = {};
}
if(!('attr' in pagelayer.el[id])){
pagelayer.el[id]['attr'] = {};
}
if(Array.isArray(pagelayer.el[id]['attr'])){
pagelayer.el[id]['attr'] = {};
}
if(!('tmp' in pagelayer.el[id])){
pagelayer.el[id]['tmp'] = {};
}
if(Array.isArray(pagelayer.el[id]['tmp'])){
pagelayer.el[id]['tmp'] = {};
}
return pagelayer.el[id];
};
// Gets the data node which can be position 0 or 1
function pagelayer_el_get_data_node(jEle){
var node = jEle[0].childNodes[0];
if(node && node.nodeType === 8){
return node;
}
node = jEle[0].childNodes[1];
if(node && node.nodeType === 8){
return node;
}
return false;
}
// Get the data
function pagelayer_el_get_data(jEle){
var node = pagelayer_el_get_data_node(jEle);
if(node){
return JSON.parse(node.nodeValue);
}
return false;
};
// Add the data back again
function pagelayer_el_dump_data(jEle){
var node = pagelayer_el_get_data_node(jEle);
var d = pagelayer_serializeAttributes(pagelayer_el_data_ref(jEle));
if(node){
node.nodeValue = d;
}else{
jEle.prepend('');
}
};
// Gets a single attribute value
function pagelayer_get_att(jEle, att){
var ref_data = pagelayer_el_data_ref(jEle);
if(att in ref_data['attr']){
return ref_data['attr'][att];
}
return;
};
// Gets a single attribute value
function pagelayer_get_tmp_att(jEle, att){
var ref_data = pagelayer_el_data_ref(jEle);
if(att in ref_data['tmp']){
return ref_data['tmp'][att];
}
return;
};
// This function will just set atts and not do anything else
// Atts can be string or object. If its string, then val is needed
function pagelayer_set_atts(jEle, atts, val){
if(typeof atts == 'string'){
var tmp = {};
tmp[atts] = val;
atts = tmp;
}
if(typeof atts != 'object'){
return false;
}
var tag = pagelayer_tag(jEle);
var trigger_onchange = 0;
if(pagelayer_empty(tag)){
console.log('Set atts found no tag');
console.log(jEle);
return;
}
// All props
var all_props = pagelayer_shortcodes[tag];//console.log(tag);console.log(jEle);
var trigger_props = {};
var no_val = {};
var defaults = {};
var _props = {};
// 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){
if('default' in props[x]){
defaults[x] = 1;
}
// Create an easy REFERENCE for access
_props[x] = props[x];
// Screen option REFERENCE is also needed for lookup
if('screen' in _props[x]){
_props[x+'_tablet'] = props[x];
_props[x+'_mobile'] = props[x];
}
// Dont set any val, but we set temp value
if('no_val' in props[x]){
no_val[x] = 1;
}
if('req' in props[x] || 'show' in props[x]){
var show = 'req' in props[x] ? props[x]['req'] : props[x]['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 props[x] && 'show' in props[x]){
// Add the req values
show = JSON.parse(JSON.stringify(props[x]['req']));
// Now the show values need to be looped
for(var t in props[x]['show']){
show[t] = props[x]['show'][t];
}
}
for(var showParam in show){
var val = show[showParam];
var except = showParam.substr(0, 1) == '!' ? true : false;
showParam = except ? showParam.substr(1) : showParam;
trigger_props[showParam] = 1;
}
}
}
}
}
var ref_data = pagelayer_el_data_ref(jEle);
for(var x in atts){
// Are we to trigger change
if(x in trigger_props){
trigger_onchange = 1;
}
//console.log(x+'-'+atts[x]);
// Is this a pro feature and we are not pro ? Then we dont do anything and continue !
if(!pagelayer_empty(_props[x]) && 'pro' in _props[x] && pagelayer_empty(pagelayer_pro)){
continue;
}
if(x in no_val){
pagelayer_set_tmp_atts(jEle, x, atts[x]);
continue;
}
// Record History
if(pagelayer.history_action){
var old_val = pagelayer_get_att(jEle, x) || '';
var label = x;
if(x in _props && 'label' in _props[x]){
label = _props[x]['label'];
}
pagelayer_history_action_push({
'title' : all_props['name'],
'subTitle' : label,
'action' : 'Edited',
'attrType' : 'a_attr',
'pl_id' : pagelayer_id(jEle),
'atts' : x,
'oldVal' : old_val,
'newVal' : atts[x]
});
}
// Remove the attribute if its BLANK and there is no default for it
// If there is a default, we set it to blank to keep record of the current val
if(pagelayer_length(atts[x]) < 1){
// Remove values which are not defaults
if(!(x in defaults)){
delete ref_data['attr'][x];
// Otherwise keep value set for avoiding resetting
}else{
ref_data['attr'][x] = atts[x];
}
// Remove the tmp atts anyway
pagelayer_clear_tmp_atts(jEle, x);
// Set the value
}else{
ref_data['attr'][x] = pagelayer_trim(atts[x]);
}
// Are you the active element
if(pagelayer_is_active(jEle)){
// TODO : Record Undo and Redo
}
}
pagelayer_el_dump_data(jEle);
// Trigger the change of the parameter and show the required properties
if(trigger_onchange){
pagelayer_elpd_show_rows();
}
pagelayer_do_dirty(jEle);
};
// This function will just set atts and not do anything else
// Atts can be string or object. If its string, then val is needed
function pagelayer_set_tmp_atts(jEle, atts, val){
if(typeof atts == 'string'){
var tmp = {};
tmp[atts] = val;
atts = tmp;
}
if(typeof atts != 'object'){
return false;
}
var ref_data = pagelayer_el_data_ref(jEle);
for(var x in atts){
// Record history
if(pagelayer.history_action){
var old_val = pagelayer_get_tmp_att(jEle, x) || '';
pagelayer_history_action_push({
'title' : pagelayer_shortcodes[pagelayer_tag(jEle)]['name'],
'subTitle' : x,
'action' : 'Edited',
'attrType' : 'tmp_attr',
'pl_id' : pagelayer_id(jEle),
'atts' : x,
'oldVal' : old_val,
'newVal' : atts[x]
});
}
ref_data['tmp'][x] = atts[x];
}
pagelayer_el_dump_data(jEle);
};
// This function removes the temporary attributes of an ele
function pagelayer_clear_tmp_atts(jEle, attr){
var to_del = new Array();
var regexp = new RegExp('^'+attr+'\-', 'gi');
var ref_data = pagelayer_el_data_ref(jEle);
//console.log(to_del);
for(var n in ref_data['tmp']){
if(n.match(regexp)){
delete ref_data['tmp'][n];
}
}
}
// This function removes the temporary attributes of an ele
function pagelayer_img_tmp_atts(jEle, attr){
var found = {};
var regexp = new RegExp('^'+attr+'\-', 'gi');
var ref_data = pagelayer_el_data_ref(jEle);
for(var n in ref_data['tmp']){
if(n.match(regexp)){
found[n] = 1;
}
}
return found;
}
// Set the att and classes of an HTML which is not yet created
function pagelayer_sc_atts(classes){
var r = new Array();
return 'class="'+classes+' pagelayer-ele" '+r.join(' ');
}
// Is the jEle the active element ?
function pagelayer_is_active(jEle){
// Is this the active Element ?
if(pagelayer_empty(pagelayer_active.el) || jEle.attr('pagelayer-id') != pagelayer_active.el.id){
return false;
}
return true;
};
// Removes {{}} from the variable name
function pagelayer_var(val){
return val.substring(2, (val.length - 2));
}
// Take care of the CSS
function pagelayer_css_render(css, val, seperator){
//console.log('CSS '+css+' | '+val);
// Seperator
seperator = seperator || ',';
var replaceCss = function(rule, value, toreplace){
value = pagelayer_hex8_to_rgba(value);
// If value has css var then we remove units
if(value.match(/var\(/)){
var toreplace = toreplace.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
toreplace = new RegExp( toreplace+'?[^\\s|;]+', 'ig');
}
return rule.split(toreplace).join(value);
}
// Replace the val
css = replaceCss(css, val, '{{val}}');
// If there is an array
if(css.match(/val\[\d/)){
if(typeof val != 'object' || val === null){
val = String(val).split(seperator);
}
for(var i in val){
css = replaceCss(css, val[i], '{{val['+i+']}}');
}
}
//console.log('Final CSS '+css);
return css;
};
// Handle hexa to rgba and also remove alpha which is ff
function pagelayer_hex8_to_rgba(val){
val = String(val);
// If opacity is ff then discard ff
if(val.match(/^#([a-f0-9]{6})ff$/)){
return val.substr(0,7);
}
// Lets handle the RGB+opacity
if(val.match(/^#([a-f0-9]{8})$/)){
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(val);
val = 'rgba('+parseInt(result[1], 16)+', '+parseInt(result[2], 16)+', '+parseInt(result[3], 16)+', '+(parseInt(result[4], 16)/255).toFixed(2)+')';
}
return val;
};
// Replace the variables
function pagelayer_parse_el_vars(str, el){
str = str.split('{{element}}').join(el.CSS.cssSel);
str = str.split('{{wrap}}').join(el.CSS.wrap);
str = str.split('{{ele_id}}').join(el.id);
return str;
}
// Replace the variables
function pagelayer_parse_vars(str, el){
for(var x in el.tmp){
str = str.split('{{{'+x+'}}}').join(el.tmp[x]);
}
for(var x in el.atts){
str = str.split('{{'+x+'}}').join(el.atts[x]);
}
return str;
};
// Render the Element
function pagelayer_sc_render(jEle){
// We render only the active element
if(!pagelayer_is_active(jEle)){
//return false;
}
//console.log('Rendering');
// Handle the CSS part
// Get the id, tag, atts, data, etc
var el = pagelayer_data(jEle, true);
var all_props = pagelayer_shortcodes[el.tag];
var elCSS = {
classes: [],
remove_classes: [],
attr: [],
remove_attr: [],
css: [],
edit: [],
cssSel: '.p-'+el.id,
sel: '[pagelayer-id="'+el.id+'"]',
wrap: '[pagelayer-wrap-id="'+el.id+'"]'
};
// Create a reference
el.CSS = elCSS;
// Make sure if we have the class selector
el.$.addClass('p-'+el.id);
//console.log(el.atts);
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[el.tag] ? pagelayer_shortcodes[el.tag][section] : pagelayer_styles[section];//console.log(props);
// Loop the props
for(var x in props){
// pagelayer_data will return attributes even if they are BLANK e.g. attr=""
// Render doesnt consider BLANK values as values, and we are unsetting them now
// If in any situation you need to consider blank values, please handle in the JS / PHP function of the Shortcode
if(x in el.atts && pagelayer_length(el.atts[x]) < 1){
delete el.atts[x];
}
// Any editor ?
if('edit' in props[x]){
elCSS.edit.push({prop: x, sel: props[x]['edit']});
}
// Load permalink values
if(props[x]['type'] == 'link'){
if('selector' in props[x] && typeof el.atts[x] == 'object'){
var tmp = {};
// Link is required for check IF and IF-EXT in html
if(pagelayer_length(el.atts[x]['link']) < 1){
delete el.atts[x];
continue;
}
if( 'target' in el.atts[x] && !pagelayer_empty(el.atts[x]['target']) ){
tmp = {'sel': props[x]['selector'], 'val': 'target="_blank"'};
elCSS['attr'].push(tmp);
}
if( 'rel' in el.atts[x] && !pagelayer_empty(el.atts[x]['rel']) ){
tmp = {'sel': props[x]['selector'], 'val': 'rel="nofollow"'};
elCSS['attr'].push(tmp);
}
if( 'attrs' in el.atts[x] && !pagelayer_empty(el.atts[x]['attrs']) ){
var attrsVal = pagelayer_trim(el.atts[x]['attrs'].split(';'));
attrsVal.forEach(function(item, index){
var splitValue = item.split(/=(.*)/);
var attKey = pagelayer_trim(splitValue[0]);
var setAtt = '';
// Validate the attrs name
if(attKey.length < 1 || pagelayer_empty(attKey.match(/^[a-z_]+[\w:.-]*$/i))){
return;
}
if(splitValue.length < 2){
setAtt = attKey+'=""';
}else{
setAtt = attKey+'="'+splitValue[1]+'"';
}
tmp = {'sel': props[x]['selector'], 'val': setAtt};
elCSS['attr'].push(tmp);
});
}
}
}
// Do we have a addClass ?
// We are checking before the element has a value so that we can add or remove the class
if('addClass' in props[x]){
var addClasses;
// Convert the string to an array
if(typeof props[x]['addClass'] === 'string'){
addClasses = [props[x]['addClass']];
}else{
addClasses = props[x]['addClass'];
}
for(var c in addClasses){
// The selector
var tSel = jQuery.isNumeric(c) ? '' : c;
// If there is a VAL
// NOTE : Only val is allowed when there is a list
if(addClasses[c].match(/\{\{val\}\}/) && 'list' in props[x]){
for(var l in props[x]['list']){
var tmp = {'sel': tSel, 'val': addClasses[c].replace('{{val}}', l)};
if(el.atts[x] == l){
elCSS['classes'].push(tmp);
}else{
elCSS['remove_classes'].push(tmp);
}
}
}else{
var tmp = {'sel': tSel, 'val': addClasses[c].replace('{{val}}', el.atts[x])};
// If the value is there
if(x in el.atts){
elCSS['classes'].push(tmp);
}else{
elCSS['remove_classes'].push(tmp);
}
}
}
}
// Do we have a addAttr ?
// We are checking before the element has a value so that we can add or remove the attr
if('addAttr' in props[x]){
var addAttr;
// Convert the string to an array
if(typeof props[x]['addAttr'] === 'string'){
addAttr = [props[x]['addAttr']];
}else{
addAttr = props[x]['addAttr'];
}
for(var c in addAttr){
// The selector
var tSel = jQuery.isNumeric(c) ? '' : c;
var tmp = {'sel': tSel, 'val': addAttr[c]};
// If the value is there
if(x in el.atts){
elCSS['attr'].push(tmp);
}else{
elCSS['remove_attr'].push(tmp);
}
}
}
// Do we have a CSS ?
if('css' in props[x]){
var css;
// Convert the string to an array
if(typeof props[x]['css'] === 'string'){
css = [props[x]['css']];
}else{
css = props[x]['css'];
}
// Screen modes
var modes = {desktop: '', tablet: '_tablet', mobile: '_mobile'};
var desk_global = (props[x]['type'] == 'typography') ? pagelayer_is_global_typo(el.atts[x]) : '';
for(var m in modes){
var xm = x+modes[m];
// If the value is there
if(!(xm in el.atts) && pagelayer_empty(desk_global)){
continue;
}
var xm_val = el.atts[xm];
// If is global color
if(props[x]['type'] == 'color'){
xm_val = pagelayer_parse_color(el.atts[xm]);
}
// If is global font
if(props[x]['type'] == 'typography'){
xm_val = pagelayer_parse_typo(xm_val, false, desk_global, m);
}
// If there is global gradient color
if(props[x]['type'] == 'gradient'){
if(pagelayer_is_string(xm_val)){
xm_val = xm_val.split(',');
}
for(key in xm_val){
xm_val[key] = pagelayer_parse_color(xm_val[key]);
}
}
for(var c in css){
// The selector
var tSel = jQuery.isNumeric(c) ? '{{element}}' : c;
var tmp = {
sel: tSel,
val: pagelayer_css_render(css[c], xm_val, (props[x].sep || ',')),
};
// Is this a tablet
if(m == 'tablet'){
tmp.sel = '@media (max-width: '+ pagelayer_settings['tablet_breakpoint'] +'px) and (min-width: '+ (pagelayer_settings['mobile_breakpoint'] +1) +'px){'+tmp.sel;
tmp.val = tmp.val+'}';
}
// Is this a mobile mode ?
if(m == 'mobile'){
tmp.sel = '@media (max-width: '+ pagelayer_settings['mobile_breakpoint'] +'px){'+tmp.sel;
tmp.val = tmp.val+'}';
}
// Push to store
elCSS.css.push(tmp);
}
}
}
}
}
}
// If there is an HTML, then process it
if('html' in pagelayer_shortcodes[el.tag]){
// Is there a function to render ?
var fn = window['pagelayer_render_'+jEle.attr('pagelayer-tag')];
if(typeof fn == 'function'){
fn(el);
}
el.iHTML = jQuery('
'+pagelayer_shortcodes[el.tag]['html']+'
');
// Lets process the 'if-ext'
el.iHTML.find('[if-ext]').each(function (){
var $j = jQuery(this);
var reqvar = pagelayer_var($j.attr('if-ext'));
$j.removeAttr('if-ext');
// Is the element there ?
if(!(reqvar in el.atts && !pagelayer_empty(el.atts[reqvar]))){
//console.log('HERE');
$j[0].outerHTML = $j.html();
}
});
// Lets process the 'if'
el.iHTML.find('[if]').each(function (){
var $j = jQuery(this);
var reqvar = pagelayer_var($j.attr('if'));
$j.removeAttr('if');
// Is the element there ?
if(!(reqvar in el.atts && !pagelayer_empty(el.atts[reqvar]))){
//console.log('HERE');
$j.remove();
}
});
//console.log(el.atts);
// Parse the variables
var new_html = pagelayer_parse_vars(el.iHTML.html(), el);
el.iHTML.html(new_html);
// Do we have to wrap the innerHTML ?
if('holder' in pagelayer_shortcodes[el.tag]){
var hSel = pagelayer_shortcodes[el.tag]['holder'];
var holder = jEle.find(hSel).first();
// Detach the holder
holder.detach();
// Add the new HTML
el.$.html(el.iHTML.html());
// reAttach the children only
el.$.find(hSel).html(holder.children());
// No holder
}else{
//console.log(el.iHTML.html());
el.$.html(el.iHTML.html());
}
// Rows, Cols and Groups
}else{
// Is there a function to render ?
var fn = window['pagelayer_sc_render_'+jEle.attr('pagelayer-tag')];
if(typeof fn == 'function'){
fn(el);
}
}
// Is there a function to render after HTML insertion but before CSS and attr ?
var post = window['pagelayer_render_html_'+jEle.attr('pagelayer-tag')];
if(typeof post == 'function'){
post(el);
}
////////////////////////////
// Are there any edit fields ?
////////////////////////////
if(elCSS.edit.length > 0){
for(var c in elCSS.edit){
var prop = elCSS.edit[c]['prop'];
var tSel = elCSS.edit[c]['sel'];
var node = tSel.length < 1 ? jEle : jEle.find(tSel);
node.attr({'pagelayer-editable': prop, 'contenteditable' : 'true'});
}
}
////////////////////////////
// Are there any addClass ?
////////////////////////////
// If we have any classes to add
if(elCSS.classes.length > 0){
//console.log(elCSS.classes);
for(var c in elCSS.classes){
var tSel = elCSS.classes[c]['sel'].replace('{{element}}', '');
var node = tSel.length < 1 ? jEle : jEle.find(tSel);
if(!node.hasClass(elCSS.classes[c]['val'])){
node.addClass(elCSS.classes[c]['val']);
}
}
}
// If we have any classes to remove
if(elCSS.remove_classes.length > 0){
//console.log(elCSS.remove_classes);
for(var c in elCSS.remove_classes){
var tSel = elCSS.remove_classes[c]['sel'].replace('{{element}}', '');
var node = tSel.length < 1 ? jEle : jEle.find(tSel);
if(node.hasClass(elCSS.remove_classes[c]['val'])){
node.removeClass(elCSS.remove_classes[c]['val']);
}
}
}
////////////////////////////
// Are there any addAttr ?
////////////////////////////
// If we have any attributes to add
if(elCSS.attr.length > 0){
//console.log(elCSS.attr);
for(var c in elCSS.attr){
var tSel = elCSS.attr[c]['sel'].replace('{{element}}', '');
var node = tSel.length < 1 ? jEle : jEle.find(tSel);
var att = elCSS.attr[c]['val'].split(/=(.*)/);
att[1] = pagelayer_parse_vars(att[1], el);
att[1] = pagelayer_trim(att[1], '"');
// Is it the same val ?
if(!node.attr(att[0]) !== att[1]){
node.attr(att[0], att[1]);
}
}
}
// If we have any attributes to add
if(elCSS.remove_attr.length > 0){
//console.log(elCSS.remove_attr);
for(var c in elCSS.remove_attr){
var tSel = elCSS.remove_attr[c]['sel'].replace('{{element}}', '');
var node = tSel.length < 1 ? jEle : jEle.find(tSel);
var att = elCSS.remove_attr[c]['val'].split('=');
if(node.is('['+att[0]+']')){
node.removeAttr(att[0]);
}
}
}
// The style element
var style = pagelayer.$('[pagelayer-style-id='+el.id+']');
// If we have any RULES CSS, then handle it
if(elCSS.css.length > 0){
// Did we find it ?
if(style.length < 1){
jEle.prepend('');
}
// Get it again
style = pagelayer.$('[pagelayer-style-id='+el.id+']');
// Make the rules
var rules = [];
// Loop
for(var c in elCSS.css){
var tSel = pagelayer_parse_el_vars(elCSS.css[c]['sel'], el);
var rule = elCSS.css[c]['val'];
if(tSel.length > 0){
rules.push(tSel+'{'+rule+'}');
}else{
rules.push(pagelayer_parse_el_vars(rule, el));
}
}
// CSS Selector overide
if(!pagelayer_empty(all_props['overide_css_selector'])){
for(var r in rules){
var overide_css_selector = pagelayer_parse_el_vars(all_props['overide_css_selector'], el);
rules[r] = rules[r].split(el.CSS.cssSel).join(overide_css_selector);
rules[r] = rules[r].split(el.CSS.wrap).join(overide_css_selector);
}
}
// Set the style
style.html(pagelayer_parse_vars(rules.join("\n"), el));
//console.log(style);
}else{
style.remove();
}
// Is there a function to render at the end ?
var end = window['pagelayer_render_end_'+jEle.attr('pagelayer-tag')];
if(typeof end == 'function'){
end(el);
}
// If the element have any parent
var par = pagelayer_get_parent(jEle);
var eleId = el.id;
if(par){
eleId = par;
pagelayer_sc_render(pagelayer_ele_by_id(par));
}
// Render End trigger
pagelayer_trigger_action('pagelayer_sc_render_end', [el]);
var gEle = pagelayer_ele_by_id(eleId);
var gId = pagelayer_get_global_id(gEle);
pagelayer_el_dump_data(jEle);
// If global id exist then update the global array and restup the all global element
if(!pagelayer_empty(gId) && !pagelayer_empty(pagelayer.global_render)){
if(!pagelayer_empty(pagelayer_global_widgets[gId])){
pagelayer_global_widgets[gId].$ = gEle[0].outerHTML;
pagelayer_global_widgets[gId]['is_dirty'] = true;
pagelayer_setup_global_widgets(gId, pagelayer_ele_by_id(eleId), true);
}else{
pagelayer_set_atts(gEle, 'global_id', '');
}
};
};
// Is the given global color
function pagelayer_is_global_color(color){
var color_key = color.substr(0, 1) == '$' ? color.substr(1) : '';
// If global color not exist
if(!pagelayer_empty(color_key)){
if(!(color_key in pagelayer_global_colors)){
color_key = 'primary';
}
return color_key;
}
return false;
}
// Is the given global color
function pagelayer_is_global_typo(value){
var typo_key = '';
// Backward compatibility
if(pagelayer_is_string(value) && value.substr(0, 1) == '$'){
typo_key = value.substr(1);
}
if(typeof value == 'object' && 'global-font' in value){
typo_key = value['global-font'];
}
// If global color not exist
if(!pagelayer_empty(typo_key) && !(typo_key in pagelayer_global_fonts)){
typo_key = 'primary';
}
return typo_key;
}
// Parse typography and handle Backward compatibility
function pagelayer_parse_typo(value, noglobal, desk_global, mode){
noglobal = noglobal || false;
mode = mode || 'desktop';
desk_global = desk_global || '';
if(pagelayer_empty(value)){
value = {};
}
// Backward compatibility for comma seperated val
if(pagelayer_is_string(value) && value.substr(0, 1) != '$'){
return value.split(',');
}
var val = ['','','','','','','','','','',''];
var typos = ['font-family', 'font-size', 'font-style', 'font-weight', 'font-variant', 'text-decoration-line', 'text-decoration-style', 'line-height', 'text-transform', 'letter-spacing', 'word-spacing'];
var global_typo = pagelayer_is_global_typo(value);
var _desk_global = false;
if(pagelayer_empty(global_typo)){
global_typo = desk_global;
_desk_global = true;
}
// Apply global typo
for(var typo in typos){
var typoKey = typos[typo];
// Backspace compatibility for normal array
if(typeof value == 'object' && !pagelayer_empty(value[typo])){
val[typo] = value[typo];
}
if(!pagelayer_empty(value[typoKey])){
val[typo] = value[typoKey];
}
if(pagelayer_empty(global_typo) || !pagelayer_empty(val[typo]) || noglobal){
continue;
}
var globalVal = pagelayer_global_fonts[global_typo]['value'];
if( !(typoKey in globalVal) || pagelayer_empty(globalVal[typoKey]) || (typeof globalVal[typoKey] == 'object' && pagelayer_empty(globalVal[typoKey][mode])) || (typeof globalVal[typoKey] != 'object' && !pagelayer_empty(_desk_global) && mode != 'desktop') ){
continue;
}
val[typo] = 'var(--pagelayer-font-'+global_typo+'-'+typoKey+')';
}
return val;
}
// Parse color for global color
function pagelayer_parse_color(value, glob_var = true){
var is_global = pagelayer_is_global_color(value);
if(pagelayer_empty(is_global)){
return value;
}
if(pagelayer_empty(glob_var)){
return pagelayer_global_colors[is_global]['value'];
}
return 'var(--pagelayer-color-'+is_global+')';
}
// Is the given tag a group
function pagelayer_is_group(tag){
if('has_group' in pagelayer_shortcodes[tag] && !pagelayer_empty(pagelayer_shortcodes[tag]['has_group'])){
return true;
}
return false;
}
// Do action / event
function pagelayer_trigger_action(act, param = []){
jQuery(document).trigger(act, param);
}
// Perform a function on an action / event
function pagelayer_add_action(act, func){
jQuery(document).on(act, func);
}
// Create array of the contact from template params
function pagelayer_get_contact_templates(){
var contacts = jQuery(pagelayer_editable+' [pagelayer-tag=pl_contact]');
var contacts_props = {};
if(contacts.length > 0){
contacts.each(function(){
var tmp = pagelayer_data(jQuery(this));
var con_allowed = ['to_email', 'from_email', 'cont_subject', 'cont_header', 'cont_body', 'cont_use_html'];
if(pagelayer_empty(tmp.atts['contact_custom_templ'])) return true;
// Define blank array
contacts_props[tmp.id] = {};
for(var x in con_allowed){
var key = con_allowed[x];
if(!pagelayer_empty(tmp.atts[key])){
contacts_props[tmp.id][key] = tmp.atts[key];
}
}
});
}
return contacts_props;
}
// Save data or meta of the post
function pagelayer_update_post_data(){
var tag = 'pl_post_props';
var jEle = jQuery(pagelayer_editable+' [pagelayer-tag="'+tag+'"]');
if(jEle.length < 1){
return;
}
var tmp = pagelayer_data(jEle, true);
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){
//Set pagelayer POST data to send with save ajax
if(x in tmp['atts']){
pagelayer_ajax_post_data[x] = tmp['atts'][x];
}else if(x in pagelayer_ajax_post_data){
delete pagelayer_ajax_post_data[x];
}
}
}
}
}
// Get the nav menu updated data
function pagelayer_get_nav_items(jEle, _content){
_content = _content || false;
var pagelayer_nav_items = {};
jEle.find('[pagelayer-tag="pl_nav_menu_item"]').each(function(){
var cEle = jQuery(this),
postID = pagelayer_get_att(cEle, 'ID');
if(!(postID in pagelayer_menus_items_ref)){
return;
}
var ref_data = pagelayer_menus_items_ref[postID];
if(!('pagelayer_content' in ref_data) && pagelayer_empty(ref_data['pagelayer_content'])){
ref_data['pagelayer_content'] = cEle;
}
if(!('is_dirty' in ref_data) || pagelayer_empty(ref_data['is_dirty'])){
return;
}
var content = '',
tmp = {};
tmp = Object.assign(tmp, ref_data);
pagelayer_nav_items[postID] = {};
// Update Mega menu content
if(!pagelayer_empty(_content)){
var navItem = jQuery(ref_data['pagelayer_content'])[0].outerHTML;
var _navItem = jQuery(navItem);
// If is not mega menu
if('menu_type' in tmp && tmp['menu_type'] != 'mega'){
_navItem.find('.pagelayer-menu-item-holder').empty();
}
content = pagelayer_generate_sc(_navItem, true);
content = pagelayer_Base64.encode(content);
// Send data to save
var allowed_post = ['title'];
for(var key in allowed_post){
var post_prop = allowed_post[key];
if(!(post_prop in tmp)){
continue;
}
pagelayer_nav_items[postID][post_prop] = tmp[post_prop]
}
}else{
pagelayer_nav_items[postID] = tmp;
}
// Delete the html content
delete tmp['pagelayer_content'];
pagelayer_nav_items[postID]['_pagelayer_content'] = content;
});
return pagelayer_nav_items;
}
// Save data or meta of the nav post
function pagelayer_update_nav_menu_data(){
var tag = 'pl_wp_menu';
pagelayer_ajax_post_data['pagelayer_nav_items'] = {};
jQuery(pagelayer_editable+' [pagelayer-tag="'+tag+'"]').each(function(){
var jEle = jQuery(this);
var menu_ID = pagelayer_get_att(jEle, 'nav_list');
if(!pagelayer_empty(pagelayer_ajax_post_data['pagelayer_nav_items'][menu_ID])){
return;
}
// Get the Current menu items
var items = pagelayer_get_nav_items(jEle, true);
if(pagelayer_empty(items)){
return;
}
pagelayer_ajax_post_data['pagelayer_nav_items'][menu_ID] = items;
});
}
// Save the customizer settings
function pagelayer_update_customizer_settings(){
var tag = 'pl_customizer';
var jEle = jQuery(pagelayer_editable+' [pagelayer-tag="'+tag+'"]');
if(jEle.length < 1){
return;
}
var tmp = pagelayer_data(jEle, true);
pagelayer_ajax_post_data['pagelayer_customizer_options'] = JSON.stringify(tmp['atts']);
}
// Save the post
function pagelayer_save(){
// hiding and showing loading animation
pagelayer.$$('.pagelayer-update-text').hide();
pagelayer.$$('.pagelayer-update-loader').show();
pagelayer_trigger_action('pagelayer_save');
var pagelayerajaxurl = pagelayer_ajax_url+'&action=pagelayer_save_content&postID='+pagelayer_postID;
var post = pagelayer_generate_sc(pagelayer_editable);//alert(post);return;
// Update data or meta of the post
pagelayer_update_post_data();
// Update Customizer Settings
pagelayer_update_customizer_settings();
// Update nav menu
pagelayer_update_nav_menu_data();
if(pagelayer_empty(pagelayer.post_status) && !pagelayer_empty(pagelayer_ajax_post_data['post_status'])){
pagelayer.post_status = pagelayer_ajax_post_data['post_status'];
}
// Do we have contact templates ?
var contacts_props = pagelayer_get_contact_templates();
// Do we have any global widget to save ?
var global_data = {};
if(!pagelayer_empty(pagelayer_global_widgets)){
global_data = pagelayer_generate_sc_global_widget();
}
var cancel = function(){
pagelayer.$$('.pagelayer-update-text').show();
pagelayer.$$('.pagelayer-update-loader').hide();
}
var save = function(){
var post_data = {
pagelayer_update_content : pagelayer_Base64.encode(post),
pagelayer_nonce: pagelayer_ajax_nonce,
global_widgets: global_data,
contacts: contacts_props,
post_status: pagelayer.post_status,
copyright: pagelayer_copyright
}
post_data = Object.assign(pagelayer_ajax_post_data, post_data);
jQuery.ajax({
type: "POST",
url: pagelayerajaxurl,
data: post_data,
success: function(response, status, xhr){
//alert(data);
var obj = jQuery.parseJSON(response);
//alert(obj);
if(obj['error']){
pagelayer_show_msg(obj['error'], 'error', 10000);
}else{
pagelayer_show_msg(obj['success'], 'success', 10000);
pagelayer_get_revision();
// Update the post status in the post_props, but first find if its actually there !
var jEle = jQuery(pagelayer_editable).find("[pagelayer-tag=pl_post_props]");
if(jEle.length > 0){
var id = pagelayer_id(jEle);
pagelayer_set_atts(jEle, 'post_status', obj['post_status']);
pagelayer_trigger_action('pagelayer_save_success', obj['post_status']);
}
pagelayer_do_undirty();
}
},
error: function(jqXHR, textStatus, errorThrown){
console.log(errorThrown);
pagelayer_show_msg('An error occured while saving ! Status : '+textStatus+' and Error : '+errorThrown, 'error', 10000);
},
complete: function(xhr,status){
pagelayer.$$('.pagelayer-update-text').show();
pagelayer.$$('.pagelayer-update-loader').hide();
if(!pagelayer_empty(pagelayer.post_status)){
pagelayer.$$('.pagelayer-props-modal .pagelayer-meta-iframe').attr('src', pagelayer_post_props );
pagelayer.post_status = '';
}
}
});
}
// If the content is empty
if(pagelayer_empty(post)){
pagelayer_confirmation_box(pagelayer_l('empty_post_content'), save, cancel);
return;
}
save();
};
//Close the Editor
function pagelayer_close(){
if(pagelayer_isDirty == true){
var r = confirm('Your Data has not been Saved yet! \n Press OK to stay on the Page.'+
'\n Press Cancel to Close Editor. ');
if(r == false){
window.top.location.href = pagelayer_returnURL;
}
}else{
window.top.location.href = pagelayer_returnURL;
}
};
function pagelayer_htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
}
function pagelayer_serializeAttributes(attributes) {
return JSON.stringify(attributes) // Don't break HTML comments.
.replace(/--/g, "\\u002d\\u002d") // Don't break non-standard-compliant tools.
.replace(//g, "\\u003e").replace(/&/g, "\\u0026") // Bypass server stripslashes behavior which would unescape stringify's
// escaping of quotation mark.
// See: https://developer.wordpress.org/reference/functions/wp_kses_stripslashes/
.replace(/\\"/g, "\\u0022");
}
// Generate blocks Post to save
function pagelayer_generate_sc(selector, selfEle){
selfEle = selfEle || false;
var txt = '';
var generate_sc_single = function(jEle){
// The ID
var id = jEle.attr('pagelayer-id');
// If there is an Add element wrapper
if(pagelayer_empty(id)){
return;
}
// Find the type of tag
var tag = jEle.attr('pagelayer-tag');
var final_tag = tag;
var closestEle = jEle.closest('.pagelayer-col-holder');
// Skip to create shortcode to prevent save, allowed by tag
if('skip_save' in pagelayer_shortcodes[tag] && !pagelayer_empty(pagelayer_shortcodes[tag]['skip_save'])){
return;
}
// Define inner row | Note : Commented as we now have a new widget of type inner_row
/*if(tag == 'pl_row' && closestEle.length > 0 && closestEle.closest(pagelayer_editable).length > 0){
final_tag = 'pl_inner_row';
}*/
if(pagelayer_empty(tag)){
var err = 'Found an error in the content as the TAG was missing. The console will have more details.';
pagelayer_show_msg(err, 'error');
console.log(err);
console.log(jEle);
}
// Define inner column
if(tag == 'pl_col' && closestEle.length > 0 && closestEle.closest(pagelayer_editable).length > 0){
final_tag = 'pl_inner_col';
}
//console.log(tag);
// Is there an innerHTML ele
var inner = '';
if('innerHTML' in pagelayer_shortcodes[tag]){
inner = pagelayer_shortcodes[tag]['innerHTML'];
}
// Data reference
var ref_data = pagelayer_el_data_ref(jEle);
// Create the tag
var data = JSON.parse(JSON.stringify(ref_data['attr']));
data['pagelayer-id'] = id;
data = pagelayer_serializeAttributes(data);
var content = '';
// Any internal function to handle the save ?
var func = window['pagelayer_tag_'+tag];
if(typeof func == 'function'){
content = func(jEle);
// If its a Row or Column or Group then it will have children
}else if(jEle.hasClass('pagelayer-row') || jEle.hasClass('pagelayer-col') || jEle.hasClass('pagelayer-inner_row') || pagelayer_is_group(tag)){
var sel = jEle;
// Any holder which holds children ?
if('holder' in pagelayer_shortcodes[tag]){
sel = jEle.find(pagelayer_shortcodes[tag]['holder']);
}
// Select the top-most element
sel = jQuery(sel).first();
// Any child selector - Majorly for owl carousel
// NOTE : Child selector should be very specific with immediate child selection at all levels
var child_selector = false;
if('child_selector' in pagelayer_shortcodes[tag]){
childSel = sel.find(pagelayer_shortcodes[tag]['child_selector']);
if(childSel.length > 0){
sel = childSel;
}
}
if(jQuery(sel).children(".pagelayer-ele-wrap").length < 1){
content = jQuery(sel).html(); // Backward Compatibility
}else{
content = pagelayer_generate_sc(sel);
content = "\n"+content;
}
// Its a normal element so we might need to handle the content
}else{
if(inner.length > 0){
content = pagelayer_get_att(jEle, inner);
if(!content){
content = '';
}
}else{
content = '';//jEle.html();
}
}
// Leaving HTML and non-pagelayer supported content intact
if(final_tag == 'pl_missing'){
txt += content;
return;
}
if (pagelayer_empty(content)) {
txt += "\n");
}else{
txt += "").concat(content, "\n");
}
};
// Are you an element for which to generate the codes ?
if(jQuery(selector).hasClass('pagelayer-ele') && selfEle){
generate_sc_single(jQuery(selector));
// The selector is the holder, so loop thru
}else{
jQuery(selector).children(".pagelayer-ele-wrap").each(function(){
var jEle = jQuery(this).children('.pagelayer-ele');
generate_sc_single(jEle);
});
}
return txt;
};
// Show the required leftbar tab
function pagelayer_leftbar_tab(tab){
pagelayer.$$('.pagelayer-leftbar-tab').hide();
pagelayer.$$('#'+tab).show();
}
// Sets up the leftbar
function pagelayer_leftbar(){
// Toggle the holder
pagelayer.$$('.pagelayer-leftbar-toggle').on('click', function(){
pagelayer.$$('.pagelayer-leftbar-table').toggleClass('pagelayer-leftbar-hidden');
pagelayer_trigger_action('pagelayer-leftbar-toggle');
});
// Close leftbar
pagelayer.$$('.pagelayer-leftbar-close').on('click', function(){
pagelayer.$$('.pagelayer-leftbar-toggle').click();
});
// Minimize leftbar
pagelayer.$$('.pagelayer-leftbar-minimize').on('click', function(){
pagelayer.$$('.pagelayer-leftbar-table').toggleClass('pagelayer-leftbar-minimize');
});
var html = '
'+
'
'+
'
'+
'
'+
'
Settings
'+
'
Widgets
'+
'
Global
'+
'
'+
'
'+
'
'+
'×'+
'
';
for(var x in pagelayer_groups){
// Title
html += '
'+x+'
';
// Indivdual icon
for(var y in pagelayer_groups[x]){
var sc = pagelayer_groups[x][y];
if(!(sc in pagelayer_shortcodes) || 'not_visible' in pagelayer_shortcodes[sc]){
continue;
}
html += '
'+
'
'+
'
';
if('icon' in pagelayer_shortcodes[sc]){
html += '';
}else{
html += '';
}
html += '
'+
''+pagelayer_shortcodes[sc]['name']+''+
'
'+
'
';
}
html += '
';
}
html += '
'+
''+
'
'+
''+
''+
''+
''+
''+
''+
'
'+
'
';
pagelayer.$$('.pagelayer-leftbar-holder').prepend(html);
pagelayer_leftbar_tab('pagelayer-shortcodes');
pagelayer.$$('.pagelayer-leftbar-scroll').slimScroll({
height: '100%',
railVisible: false,
alwaysVisible: true,
color: '#000',
size: '5px',
});
// Hide the ones which are not supposed to be shown
pagelayer.$$('.pagelayer-search-field').on('input', function(){
var val = jQuery(this).val();
var re = new RegExp(val, 'i');
// Show only the required tags
pagelayer.$$('.pagelayer-leftbar-group').each(function(){
var group = jQuery(this);
var res = group.find('[pagelayer-tag]');
var hidden = 0;
res.each(function(){
var tEle = jQuery(this);
if(tEle.find('.pagelayer-shortcode-text').html().match(re)){
tEle.show();
}else{
hidden += 1;
tEle.hide();
}
});
// Hide the whole group
if(hidden == res.length){
group.hide();
}else{
group.show();
}
});
});
// On click Pagelayer setting icon
pagelayer.$$('.pagelayer-settings-icon, .pagelayer-settings').click(function(event){
pagelayer_active = {};
var pl_tag = jQuery(this).attr('pagelayer-tag') || 'pl_post_props';
var nModal = jQuery(this).attr('pagelayer-modal-none');
pagelayer_post_settings(pl_tag);
});
// Pagelayer post advance setting modal handler
var propsModal = pagelayer.$$('.pagelayer-props-modal');
propsModal.find('.pagelayer-props-modal-close').on('click', function(event){
propsModal.hide();
});
propsModal.on('click', function(event){
var target = jQuery(event.target);
if(target.closest('.pagelayer-props-modal-wrap').length > 0){
return;
}
propsModal.hide();
});
// On click Pagelayer setting icon
var global_widget_list = function(){
var gHtml = '';
if(pagelayer_empty(pagelayer_pro)){
gHtml += '
'+pagelayer.pro_txt+
'
Using this feature, you can save the widgets globally and use them on the entire site. The global widget will be editable from one place.
';
}
pagelayer.$$('#pagelayer-global-widget').html(gHtml);
};
// The widget tabs
pagelayer.$$('.pagelayer-widget-tab').on('click', function(){
var attr = 'pagelayer-elpd-active-tab';
pagelayer.$$('.pagelayer-widget-tab').each(function(){
jQuery(this).removeAttr(attr);
});
var cEle = jQuery(this);
cEle.attr(attr, 1);
if(cEle.attr('pagelayer-widget-tab') == 'global'){
cEle.closest('#pagelayer-shortcodes').find('.pagelayer-shortcodes-widget').addClass('pagelayer-hidden');
cEle.closest('#pagelayer-shortcodes').find('.pagelayer-global-widget').removeClass('pagelayer-hidden');
// Trigger create global widgets
global_widget_list();
}else{
cEle.closest('#pagelayer-shortcodes').find('.pagelayer-shortcodes-widget').removeClass('pagelayer-hidden');
cEle.closest('#pagelayer-shortcodes').find('.pagelayer-global-widget').addClass('pagelayer-hidden');
}
});
// On click search empty
pagelayer.$$('.pagelayer-leftbar-search>.pagelayer-sf-empty').click(function(){
pagelayer.$$('.pagelayer-search-field').val('').trigger('input');
});
// Pagelayer General options
pagelayer.$$('.pagelayer-options-icon ').click(function(){
pagelayer.$$('.pagelayer-elpd-header').show().find('.pagelayer-elpd-title').text(pagelayer_l('general_options'));
pagelayer.$$('.pagelayer-logo').hide();
// Setup General options
pagelayer_setup_general_options();
pagelayer_leftbar_tab('pagelayer-general-options');
pagelayer_active = {};
});
// Hide color and typography global list
pagelayer.$$('.pagelayer-leftbar-table').on('click', function(e){
var closest = jQuery(e.target).closest('.pagelayer-elp-color-global, .pagelayer-elp-global-icon, .pagelayer-global-color-list, .pagelayer-global-font-list');
var list = pagelayer.$$('.pagelayer-global-color-list, .pagelayer-global-font-list');
if(closest.length > 0 ){
var lEle = closest.closest('.pagelayer-elp-color-div-holder').find('.pagelayer-global-color-list');
var lFont = closest.closest('.pagelayer-form-item').find('.pagelayer-global-font-list');
list = list.not(lFont);
list = list.not(lEle);
}
list.not(closest).slideUp();
});
};
// Post setting holder
function pagelayer_post_settings(pl_tag, to_click){
to_click = to_click == -1 ? false : true;
// Is there a post settings ?
var jEle = jQuery(pagelayer_editable+' [pagelayer-tag="'+ pl_tag +'"]');
// Could not find
if(jEle.length < 1){
jEle = pagelayer_create_sc(pl_tag);
var id = pagelayer_id(jEle);
jQuery(pagelayer_editable).prepend(jEle);
pagelayer_element_setup('[pagelayer-id='+id+']', true);
// Dont mark as dirty as post_props is not editing anything
pagelayer_do_undirty();
}
if(to_click){
jEle.click();
}
return jEle;
}
// Get the closest element and method
function pagelayer_near_by_ele(id, sc){
// Get the previous element of the id element
var prevEle_id = jQuery('[pagelayer-wrap-id="'+id+'"]').prev().attr('pagelayer-wrap-id') || '';
var method, cEle, args = {};
if(prevEle_id.length > 0){
// If have previous element of the id element
// Set the method and previous element selector
args = {'method' : 'after', 'cEle' : '[pagelayer-wrap-id="'+prevEle_id+'"]'};
}else{
// If don't have previous element of the id element then get parent element
if(sc == "pl_row"){
args = {'method' : 'prepend', 'cEle' : pagelayer_editable};
}else{
// Get the parent element
var pEle_id = pagelayer_id(jQuery('[pagelayer-wrap-id="'+id+'"]').closest('.pagelayer-ele'));
// Get the parent element tag
var pEle_tag = pagelayer_tag(jQuery('[pagelayer-id="'+pEle_id+'"]'));
var holder = '>'+ pagelayer_shortcodes[pEle_tag]['holder'] || '';
args = {'method' : 'prepend', 'cEle' : '[pagelayer-id="'+pEle_id+'"] '+ holder+' '};
}
}
return args;
};
// Push the action data in the pagelayer_history_obj object
function pagelayer_history_action_push(args){
var currentTime = new Date();
var history_obj_len = pagelayer_history_obj['action_data'].length;
// If the history_obj_len is less then 1 then set the data in array 0 position
if(history_obj_len < 1){
pagelayer_history_obj['action_data'][0] = {'title' : 'Start Editing', 'action' : 'Start' };
pagelayer_history_obj['current_active_item_id'] = 0;
}
// Remove the second array element if the history_obj_len greater then 100
if(history_obj_len > 100){
pagelayer_history_obj['action_data'].splice(1, 1);
pagelayer_history_obj['current_active_item_id'] = pagelayer_history_obj['action_data'].length - 1;
}
// Get current active history action id
var action_id = parseInt(pagelayer_history_obj['current_active_item_id']) || 0;
// Remove the all array element after the active array element
var del_ele = history_obj_len - action_id - 1;
pagelayer_history_obj['action_data'].splice(action_id + 1, del_ele);
// Check if the same attr set as current active history
if(args.action == "Edited" && history_obj_len > 1 && currentTime - pagelayer.history_lastTime < 1000){
var atts = pagelayer_history_obj['action_data'][action_id] || '';
if(atts['atts'] == args['atts'] && atts['pl_id'] == args['pl_id'] && pagelayer_empty(atts['sub_actions_group']) ){
args['oldVal'] = atts['oldVal'];
pagelayer_history_obj['action_data'][action_id] = args;
pagelayer_history_setup();
// Set the last history time
pagelayer.history_lastTime = currentTime;
return true;
}
}
// If the action time within 200 millisecond then it count as sub-actions
if(currentTime - pagelayer.history_lastTime < 200 && history_obj_len > 1){
var cur_action_data = pagelayer_history_obj['action_data'][action_id];
var sub_actions_len = cur_action_data['sub_actions_group'] || '';
if( !('attrType' in cur_action_data && cur_action_data['attrType'] == 'tmp_attr' && 'attrType' in args && args['attrType'] == 'a_attr') ) {
// If the sub_actions_len is less then 1 then set the data in array 0 position
if(sub_actions_len.length < 1){
pagelayer_history_obj['action_data'][action_id]['sub_actions_group'] = [args];
}else{
pagelayer_history_obj['action_data'][action_id]['sub_actions_group'].push(args);
}
return true;
}
}
pagelayer_history_obj['action_data'].push(args);
pagelayer_history_obj['current_active_item_id'] = pagelayer_history_obj['action_data'].length - 1;
pagelayer_history_setup();
// Set the last history time
pagelayer.history_lastTime = currentTime;
}
// Setup pagelayer history
function pagelayer_history_setup(force){
var force = force || false;
// If the history tab is visible, only then setup
if(!pagelayer.$$('#pagelayer-history').is(':visible') && !force){
return;
}
// The current active action id
var current_id = pagelayer_history_obj['current_active_item_id'];
// pagelayer-HISTORY - Element Properties Dialog
var pagelayer_history_html = '
'+
'
Actions
'+
'
Revisions
'+
'
'+
'
'+
'
';
// Any actions
if(pagelayer_history_obj['action_data'].length > 0){
for(var x in pagelayer_history_obj['action_data']){
if(pagelayer_empty(pagelayer_history_obj['action_data'][x])){continue;}
var title = pagelayer_history_obj['action_data'][x]['title'] || '';
var subTitle = pagelayer_history_obj['action_data'][x]['subTitle'] || '';
var action = pagelayer_history_obj['action_data'][x]['action'] || '';
var tmp_attr = pagelayer_history_obj['action_data'][x]['attrType'] || '';
var eAttr = '';
if(!pagelayer_empty(tmp_attr) && tmp_attr == "tmp_attr"){
eAttr = "pagelayer-history-hidden";
}
pagelayer_history_html += '
';
// Create the dialog box
pagelayer.$$('#pagelayer-history').html(pagelayer_history_html);
var holder = pagelayer.$$('#pagelayer-history');
// Set active history holder
holder.find('.pagelayer-history-holder').on('click', function(){
var hEle = jQuery(this);
var prev_item_id = pagelayer_history_obj['current_active_item_id'];
hEle.parent().children().removeClass('current_active_item');
hEle.addClass('current_active_item');
var do_item_id = parseInt(hEle.attr('history-action-id'));
pagelayer_history_action_setup(do_item_id, prev_item_id);
});
// Apply revision
holder.find('.pagelayer-revision-holder').on('click', function(){
var revision_id = jQuery(this).attr('revision-id');
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_apply_revision&revisionID='+revision_id,
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
'pagelayer-live' : 1,
},
success: function(response, status, xhr){
var obj = jQuery.parseJSON(response);
if(obj['error']){
pagelayer_show_msg(obj['error'] , 'error');
}else{
// Get the current post_name and post_status
var props = jQuery(pagelayer_editable).find('.pagelayer-post_props');
var post_name = '', post_status = '';
if(props.length > 0){
post_name = pagelayer_get_att(props, 'post_name');
post_status = pagelayer_get_att(props, 'post_status');
}
// Set content
jQuery(pagelayer_editable).html(obj['content']);
// Add previous post_name and post_status
var props_new = jQuery(pagelayer_editable).find('.pagelayer-post_props');
if(props_new.length > 0){
if(pagelayer_empty(post_name)){
post_name = pagelayer_default_params.pl_post_props.post_name;
}
if(pagelayer_empty(post_status)){
post_status = pagelayer_default_params.pl_post_props.post_status;
}
var tmp = {};
tmp['post_name'] = post_name;
tmp['post_status'] = post_status;
pagelayer_set_atts(props_new, tmp);
}
// Need to pass true to render table
pagelayer_element_setup('.pagelayer-ele', true);
pagelayer_add_widget();
pagelayer_show_msg(obj['success'], 'success');
}
}
});
});
// Delete the revision
holder.find('.pagelayer-revision-delete').click(function(e){
e.stopPropagation();
var rEle = jQuery(this).closest('.pagelayer-revision-holder');
var revision_id = rEle.attr('revision-id');
if(confirm("Are you sure you want to delete the revision ?")){
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_delete_revision&revisionID='+revision_id,
type: 'post',
data: {pagelayer_nonce: pagelayer_ajax_nonce},
success: function(response, status, xhr){
var obj = jQuery.parseJSON(response);
if(obj['error']){
pagelayer_show_msg(obj['error'], 'error');
}else{
pagelayer_show_msg(obj['success'], 'success');
rEle.hide();
}
}
});
}
});
// The tabs
holder.find('.pagelayer-history-tab').on('click', function(){
var attr = 'pagelayer-history-active-tab';
holder.find('.pagelayer-history-tab').each(function(){
jQuery(this).removeAttr(attr);
});
jQuery(this).attr(attr, 1);
// Get the active tab
var active_tab = holder.find('[pagelayer-history-active-tab]').attr('pagelayer-history-tab');
// Trigger the showing of rows
holder.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();
}
});
});
}
// Get revisions Handler
function pagelayer_get_revision(){
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_get_revision&postID='+pagelayer_postID,
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
},
//async:false,
success: function(response, status, xhr){
var obj = jQuery.parseJSON(response);
if(!pagelayer_empty(obj['error'])){
pagelayer_show_msg(obj['error'], 'error');
}else{
pagelayer_revision_obj = obj;
pagelayer_history_setup(true);
}
}
});
};
// Do the history action - use for ctrl-z and ctrl-y
function pagelayer_do_history(action){
var cur_id = pagelayer_history_obj['current_active_item_id'];
var new_id = cur_id;
var action_data_len = pagelayer_history_obj['action_data'].length;
if(action == 'undo'){
// You cannot undo from the first movement
if(cur_id == 0){
return true;
}
for(var i = (cur_id - 1); i => 0; i--){
var action = pagelayer_history_obj['action_data'][i];
if('attrType' in action && action['attrType'] == 'tmp_attr'){
continue;
}
new_id = i;
break;
}
}else if(action == 'redo'){
for(var i = cur_id + 1; i < action_data_len; i++){
var action = pagelayer_history_obj['action_data'][i];
if('attrType' in action && action['attrType'] == 'tmp_attr'){
continue;
}
new_id = i;
break;
}
}
// Do the action
pagelayer_history_action_setup(new_id, cur_id);
pagelayer_history_setup();
};
// Action setup handle on ctrl-z and ctrl-y
function pagelayer_history_action_setup(current_item_id, prev_item_id){
// Set this as the current active
pagelayer_history_obj['current_active_item_id'] = current_item_id;
// Delete the element
var delete_ele = function(id){
// Set Pagelayer History FALSE to prevent saving delete action in action history
pagelayer.history_action = false;
pagelayer_delete_element('[pagelayer-id='+id+']');
// Set Pagelayer History TRUE
pagelayer.history_action = true;
};
// Re-setup the element
var resetup_ele = function(history_array){
jQuery(history_array.cEle.cEle)[history_array.cEle.method](history_array.html);
pagelayer_element_setup('[pagelayer-id='+history_array.pl_id+'], [pagelayer-id='+history_array.pl_id+'] .pagelayer-ele', true);
var rEle = jQuery('[pagelayer-id="'+history_array.pl_id+'"]');
pagelayer_empty_col(rEle.closest('.pagelayer-col-holder'));
pagelayer_do_dirty(rEle);
};
// Re-setup the element attr
var reset_ele_attr = function(hEle, atts, val, attrType){
// Set Pagelayer History FALSE to prevent saving attributes in action history
pagelayer.history_action = false;
if(attrType == "tmp_attr"){
pagelayer_set_tmp_atts(hEle, atts, val);
}else{
pagelayer_set_atts(hEle, atts, val);
}
// The property holder
var holder = pagelayer.$$('.pagelayer-elpd-body');
holder.html(' ');
pagelayer_sc_render(hEle);
pagelayer_elpd_generate(hEle, holder);
pagelayer.history_action = true;
};
// Move element
var pagelayer_move_ele = function(id, move_loc){
var eWrap = pagelayer_wrap_by_id(id);
var pCol = eWrap.closest('.pagelayer-col-holder') || '';
jQuery(move_loc.cEle)[move_loc.method](eWrap);
// Ensure the column is not empty
if(!pagelayer_empty(pCol)){
pagelayer_empty_col(pCol);
pagelayer_empty_col(pagelayer_wrap_by_id(id).closest('.pagelayer-col-holder'));
}
pagelayer_do_dirty(eWrap);
};
// Undo actions
var pagelayer_undo_action = function(history_array){
var action = history_array.action;
var id = history_array.pl_id;
if(action == "Edited"){
hEle = jQuery('[pagelayer-id="'+id+'"]');
reset_ele_attr(hEle, history_array.atts, history_array.oldVal, history_array.attrType);
}else if(action == "Added"){
delete_ele(id);
}else if(action == "Deleted"){
resetup_ele(history_array);
}else if(action == "Copied"){
delete_ele(id);
}else if(action == "Moved"){
pagelayer_move_ele(id, history_array.before_loc);
}
};
// Redo actions
var pagelayer_redo_action = function(history_array){
var action = history_array.action;
var id = history_array.pl_id;
if(action == "Edited"){
hEle = jQuery('[pagelayer-id="'+id+'"]');
reset_ele_attr(hEle, history_array.atts, history_array.newVal, history_array.attrType);
}else if(action == "Added"){
resetup_ele(history_array);
if(history_array.tag != "pl_row" && history_array.tag != "pl_col" ){
// Ensure the column is not empty
pagelayer_empty_col(history_array.cEle.cEle);
}
}else if(action == "Deleted"){
delete_ele(id);
}else if(action == "Copied"){
resetup_ele(history_array);
}else if(action == "Moved"){
pagelayer_move_ele(id, history_array.after_loc);
}
};
if(prev_item_id > current_item_id){
// All Actions for undo here
var i = parseInt(prev_item_id);
for(i; i > current_item_id; i--){
var history_array = pagelayer_history_obj['action_data'][i];
var sub_actions_group = history_array['sub_actions_group'] || '';
// If it has sub-actions
if(!pagelayer_empty(sub_actions_group)){
var j = sub_actions_group.length;
for(j--; j >= 0; j--){
pagelayer_undo_action(sub_actions_group[j]);
}
}
// Main action
pagelayer_undo_action(history_array);
// Activate the current element and scroll it into viewport
var jEle = jQuery('[pagelayer-id="'+history_array.pl_id+'"]');
if(jEle.length > 0){
pagelayer_set_active(jEle);
pagelayer_scroll_to_viewport(jEle, 0);
}
}
}else{
// All Actions for redo here
var i = parseInt(prev_item_id)+1;
for(i; i <= current_item_id; i++){
var history_array = pagelayer_history_obj['action_data'][i];
var sub_actions_group = history_array['sub_actions_group'] || '';
// Main action
pagelayer_redo_action(history_array);
// If it has sub-actions
if(!pagelayer_empty(sub_actions_group)){
for(var x in sub_actions_group){
pagelayer_redo_action(sub_actions_group[x]);
}
}
// Activate the current element and scroll it into viewport
var jEle = jQuery('[pagelayer-id="'+history_array.pl_id+'"]');
if(jEle.length > 0){
pagelayer_set_active(jEle);
pagelayer_scroll_to_viewport(jEle, 0);
}
}
}
};
// Report an error
function pagelayer_error(error, func){
var prefix = func || '';
alert(prefix+error);
};
function pagelayer_bottombar(){
var holder = pagelayer.$$('.pagelayer-bottombar-holder');
var html = '
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
''+
'
'+
'
'+
''+
''+
''+
''+
//''+
'
'+
'
';
holder.html(html);
holder.find('.pagelayer-update-button').on('click', function(){
pagelayer_save();
pagelayer_history_setup();// Setup history tab after update
});
holder.find('.pagelayer-close-button').on('click', function(){
pagelayer_close();
});
holder.find('.screen-mode').on('click', function(){
var screen_mode = jQuery(this).attr('pagelayer-mode-data');
pagelayer_set_screen_mode(screen_mode);
holder.find('.pagelayer-mode-buttons-wrapper').toggle();
});
holder.find('.pagelayer-mode-button').on('click', function(){
holder.find('.pagelayer-mode-buttons-wrapper').toggle();
});
holder.find('.pagelayer-history-icon').click(function(){
pagelayer.$$('.pagelayer-elpd-header').show().find('.pagelayer-elpd-title').text(pagelayer_l('pagelayer_history'));
pagelayer.$$('.pagelayer-logo').hide();
pagelayer_leftbar_tab('pagelayer-history');
pagelayer_active = {};
pagelayer_history_setup();
});
holder.find('.pagelayer-navigator-icon').click(function(){
pagelayer.$$('.pagelayer-elpd-header').show().find('.pagelayer-elpd-title').text(pagelayer_l('pagelayer_navigator'));
pagelayer.$$('.pagelayer-logo').hide();
// If the navigator tab visible, then don't setup
if(!pagelayer.$$('#pagelayer-navigator').is(':visible')){
pagelayer_navigator_setup();
}
pagelayer_leftbar_tab('pagelayer-navigator');
pagelayer_active = {};
});
holder.find('.pagelayer-preview').click(function(){
// If the page is not dirty
if(!pagelayer_isDirty){
// Open in new tab the existing page itself
window.open(pagelayer_post_permalink, '_blank');
return;
}
// Get post content
var post = pagelayer_generate_sc(pagelayer_editable);//alert(post);return;
pagelayer.$$('.pagelayer-body').css({'opacity' : '0.33'});
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_create_post_autosave&postID='+pagelayer_postID,
type: 'POST',
data: {
'pagelayer_nonce': pagelayer_ajax_nonce,
'pagelayer_post_content': pagelayer_Base64.encode(post)
},
success: function(data) {
var data = JSON.parse(data);
// If there is some error
if(!pagelayer_empty(data['error']) || pagelayer_empty(data['id'])){
pagelayer_show_msg('Unable to set preview for some reason', 'error');
return;
}
var url = data['url']+'&preview_id='+pagelayer_postID+'&preview_nonce='+
pagelayer_preview_nonce;
// Open in new tab
window.open(url, '_blank');
},
complete: function(){
pagelayer.$$('.pagelayer-body').css({'opacity' : '1'});
}
});
});
};
///////////////////////////////
// Miscellaneuos Functions
///////////////////////////////
// Setup General options
function pagelayer_setup_general_options(){
var holder = pagelayer.$$('.pagelayer-general-options');
if(holder.children().length > 0){
return;
}
// TODO: To create this HTML get Array form php
var html = '
';
holder.html(html);
// Open customizer settings
holder.find('.pagelayer-open-customizer').click(function(){
window.open(pagelayer_customizer_url+'&autofocus%5Bpanel%5D=pagelayer_settings', '_blank');
});
// Open help / support link
holder.find('.pagelayer-open-help').click(function(){
window.open(pagelayer_support_url, '_blank');
});
// Show Pagelayer History
holder.find('.pagelayer-options-history-icon').click(function(){
pagelayer.$$('.pagelayer-bottombar-holder .pagelayer-history-icon').click();
});
// Show Pagelayer Navigator
holder.find('.pagelayer-options-navigator-icon').click(function(){
pagelayer.$$('.pagelayer-bottombar-holder .pagelayer-navigator-icon').click();
});
// Show Pagelayer Preview
holder.find('.pagelayer-options-preview').click(function(){
pagelayer.$$('.pagelayer-bottombar-holder .pagelayer-preview').click();
});
// Show keyboard shortcut modal
holder.find('.pagelayer-open-keyboard-shortcuts').click(function() {
var modal = pagelayer.$$('.pagelayer-shortcuts-modal');
modal.css('display','flex');
modal.find('.pagelayer-editor-modal-close-icon').unbind('click');
modal.find('.pagelayer-editor-modal-close-icon').click(function(){
modal.hide();
});
modal.unbind('click');
modal.on('click', function(e){
if(e.target != this) {
return;
}
modal.hide();
});
});
}
// Setup navigator
function pagelayer_navigator_setup(){
var navigator_ele = pagelayer.$$('#pagelayer-navigator'),
navigator_padding = 10,
navigator_html = '';
// Get the child elements list
var pagelayer_create_navi_list = function(selector){
var navigator_list = '';
selector.children('.pagelayer-ele-wrap, .pagelayer-ele').each(function(){
var cEle = jQuery(this),
tag = pagelayer_tag(cEle),
id = pagelayer_id(cEle),
child_ele = false,
ele_class = '';
// If tag is not found then return
if(pagelayer_empty(tag)){
return;
}
// if is row or col or inner-row
if(tag == 'pl_row' || tag == 'pl_col' || tag == 'pl_inner_row'){
ele_class = 'pagelayer-navigator-toggle';
child_ele = true;
}
navigator_list += '
'+
'
'+
''+
pagelayer_shortcodes[tag]['name']+
''+
'
';
// Create the list of child element
if(child_ele){
navigator_padding += 15; // Increment padding left for widget
navigator_list += pagelayer_create_navi_list( cEle.find(pagelayer_shortcodes[tag]['holder']).first() );
navigator_padding -= 15; // Decrement padding left for widget
}
navigator_list += '
';
});
return navigator_list;
}
// Create list of all rows and their child widgets
jQuery(pagelayer_editable).children('.pagelayer-wrap-row').each(function(){
navigator_html += pagelayer_create_navi_list(jQuery(this));
});
// Put the navigator list
navigator_ele.html('
'+navigator_html+'
');
// edit and delete element click handler
navigator_ele.find('.pagelayer-navigator-options .pli').on('click', function(event){
var sEle = jQuery(this).closest('.pagelayer-navigetor-ele');
var sId = sEle.attr('pagelayer-id');
var action = jQuery(this).data('action');
if( action == 'edit'){
pagelayer_edit_element('[pagelayer-id = '+sId+']', event);
}else if(action == 'delete'){
sEle.find('.pagelayer-ele-name').css({'background':'rgb(255, 114, 114)','opacity':'0.5'});
pagelayer_delete_element('[pagelayer-id = '+sId+']');
}
});
// On click toggle the element
navigator_ele.find('.pagelayer-ele-name').on('click', function(){
var tEle = jQuery(this);
var pl_id = tEle.parent().attr('pagelayer-id'); // Get Pagelayer id
var jEle = pagelayer_ele_by_id(pl_id);
// If the class "pagelayer-navigator-toggle" exist then toggle
if(tEle.hasClass('pagelayer-navigator-toggle')){
tEle.parent().toggleClass('pagelayer-navigator-open');
}
// Also open all parents
tEle.parent().parents('.pagelayer-navigetor-ele').addClass('pagelayer-navigator-open');
// Set the click element active
navigator_ele.find('.pagelayer-ele-name').removeClass('pagelayer-navi-active');
tEle.addClass('pagelayer-navi-active')
// Set the element active
if(jEle.length > 0){
//pagelayer_active.el = pagelayer_data(jEle);
pagelayer_set_active(jEle);
pagelayer_scroll_to_viewport(jEle);
}
});
// Do active ele tab open
if( pagelayer_active.el && pagelayer_active.el.id ){
navigator_ele.find('[pagelayer-id="'+pagelayer_active.el.id+'"]').children('.pagelayer-ele-name').click();
}
/* var posY = 0, orig_eleY= 0;
// On mouse down in pagelayer-ele-name
navigator_ele.find('.pagelayer-ele-name').on('mousedown', function(e){
e = e || window.event;
e.preventDefault();
// Get ele position
orig_eleY = jQuery(this).offset().top;
// Get the mouse cursor at startup:
posY = e.clientY;
// The variable needs to be empty.
newMethod = '';
// Mouse up handler
var ele_mousemove = function(){
}
// Mouse move handler
var ele_mouseup = function(){
pagelayer.$$(document).off('mouseup', ele_mouseup);
pagelayer.$$(document).off('mousemove', ele_mousemove);
}
pagelayer.$$(document).on('mouseup', ele_mouseup);
pagelayer.$$(document).on('mousemove', ele_mousemove);
}); */
}
// Scroll page to element view port
function pagelayer_scroll_to_viewport(jEle, timeout, parentEle){
var scrolled = parentEle || jQuery('html, body');
timeout = timeout || 500;
parentEle = parentEle || jQuery(window);
setTimeout(function(){
var parentHeight = parentEle.height(),
parentScrollTop = parentEle.scrollTop(),
elementTop = jEle.offset().top,
topToCheck = elementTop - parentScrollTop;
if (topToCheck > 0 && topToCheck < parentHeight) {
return;
}
var scrolling = elementTop - parentHeight / 2;
scrolled.stop(true).animate({
scrollTop: scrolling
}, 1000);
}, timeout);
}
// Generates a random string of "n" characters
function pagelayer_randstr(n, special){
var text = '';
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
special = special || 0;
if(special){
possible = possible + '$%@';
}
for(var i=0; i < n; i++){
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
function pagelayer_randInt(max) {
return Math.floor(Math.random() * Math.floor(max));
}
// Convert the regular URL of a Video to a Embed URL
function pagelayer_video_url(src, no_url){
no_url = no_url || false;
var youtubeRegExp = /youtube\.com|youtu\.be/;
var vimeoRegExp = /vimeo\.com/;
var match = '';
var videoId = '';
var vid_params = {};
if (youtubeRegExp.exec(src)) {
match = 'youtube';
} else if (vimeoRegExp.exec(src)) {
match = 'vimeo';
}
switch(match){
case 'youtube':
var youtubeRegExp1 = /youtube\.com/;
var youtubewatch = /watch/;
var youtubeembed = /embed/;
var youtube = /youtu\.be/;
if (youtubeRegExp1.exec(src)) {
if (youtubewatch.exec(src)) {
videoId = src.split('?v=');
} else if (youtubewatch.exec(src)) {
videoId = src.split('embed/');
}
} else if (youtube.exec(src)) {
videoId = src.split('.be/');
}
vid_params = {
type : 'youtube',
src : '//www.youtube.com/embed/'+videoId[1],
id : videoId[1]
};
pagelayer_yt_api_register();
break;
case 'vimeo':
var vimeoplayer = /player\.vimeo\.com/;
var vimeovideo = /video/;
if (vimeoplayer.exec(src) && vimeovideo.exec(src)) {
videoId = src.split('video/');
} else if (vimeoRegExp.exec(src)) {
videoId = src.split('.com/');
}
vid_params = {
type : 'vimeo',
src : '//player.vimeo.com/video/'+videoId[1],
id : videoId[1]
};
break;
default:
vid_params = {
type : 'local',
src : src
};
}
if(!no_url){
return vid_params.src;
}
return vid_params;
};
// Youtube API Register
function pagelayer_yt_api_register(){
if(jQuery('#pagelayer-youtube-script-js').length > 0){
return;
}
jQuery('body').append('');
}
// Add widget section
function pagelayer_add_widget(){
html='
'+
''+
''+
'
Click here to add new row OR drag widgets
'+
'
';
jQuery(pagelayer_editable).append(html);
var add_area = jQuery('.pagelayer-add-widget-area');
// Add a code before this
var add_sc = function(tag, global_id = ''){
var attr = '';
if(!pagelayer_empty(global_id)){
attr = ' pagelayer-global-id="'+global_id+'" ';
}
// Create Row
var row = jQuery('');
add_area.before(row);
var row_id = pagelayer_onadd(row, false);
var rEle = pagelayer_ele_by_id(row_id);
if(tag == 'pl_row' && !pagelayer_empty(global_id)){
rEle.click();
return row_id;
}
// Create Column
var col = jQuery('');
rEle.find('.pagelayer-row-holder').append(col);
var col_id = pagelayer_onadd(col, false);
var cEle = pagelayer_ele_by_id(col_id);
if(tag == 'pl_row'){
rEle.click();
return row_id;
}
if(tag == 'pl_col'){
cEle.click();
return col_id;
}
// Create element
var ele = jQuery('');
cEle.find('.pagelayer-col-holder').append(ele);
//console.log(ele);
var id = pagelayer_onadd(ele);
//console.log(id);
//console.log(col_id);
var eEle = pagelayer_ele_by_id(col_id);
//console.log(eEle);
// Ensure the column is not empty
pagelayer_empty_col(cEle.find('.pagelayer-col-holder'));
if(tag == 'pl_inner_row' && pagelayer_empty(global_id)){
// Create Column
var in_col = jQuery('');
eEle.find('.pagelayer-row-holder').append(in_col);
var in_col_id = pagelayer_onadd(in_col, false);
}
return id;
}
// Handle Click
add_area.on('click', function(e){
e.stopPropagation();
add_sc('pl_col');
});
// Handle Click
add_area.find('.pagelayer-add-section').on('click', function(e){
e.stopPropagation();
pagelayer_add_section_area();// Setup and show sections modal
});
// Handle Drag over
add_area.on('dragover', function(e){
//console.log(e)
add_area.addClass('pagelayer-add-widget-drag');
});
// Handle Drag Leave
add_area.on('dragleave', function(e){
//console.log(e)
add_area.removeClass('pagelayer-add-widget-drag');
});
// Handle On Drop
add_area.on('drop', function(e){
//console.log(e);
//console.log(e.originalEvent.dataTransfer.getData('tag'));
add_area.removeClass('pagelayer-add-widget-drag');
jQuery('.pagelayer-is-dragging').removeClass('pagelayer-is-dragging');
var tag = e.originalEvent.dataTransfer.getData('tag');
var global_id = e.originalEvent.dataTransfer.getData('global_id');
// Is it an existing element ?
if(tag.length < 1){
return false;
}
e.preventDefault();
//console.log(tag);
add_sc(tag, global_id);
});
};
// Is the element in view while scrolling
function pagelayer_isElementInView(elem, holder, partial) {
partial = partial || true;
var container = jQuery(holder);
var contHeight = container.height();
var contTop = container.scrollTop();
var contBottom = contTop + contHeight ;
var elemTop = jQuery(elem).offset().top - container.offset().top;
var elemBottom = elemTop + jQuery(elem).height();
var isTotal = (elemTop >= 0 && elemBottom <=contHeight);
var isPart = ((elemTop < 0 && elemBottom > 0 ) || (elemTop > 0 && elemTop <= container.height())) && partial;
return isTotal || isPart ;
}
// Append section modal into body
function pagelayer_add_section_area(){
var body = pagelayer.$$('body');
var mEle = body.find('.pagelayer-add-section-modal-container');
if(mEle.length > 0){
mEle.show();
return;
}
var section_modal = '
'+
'
'+
'
'+
'
'+
'
Add Sections
'+
'
Type : '+
''+
'
'+
'
×
'+
'
'+
'
'+
'
'+
'
'+
'×'+
'
'+
''+
'
'+
'
'+
''+
'
'+
'
'+
'
'+
'
'+
'
'+
''+
'
'+
'Please wait a moment'+
'
'+
'
'+
'
'+
'
'+
'
';
mEle = jQuery(section_modal);
// Append the element in the body
body.append(mEle);
// On click close modal
mEle.find('.pagelayer-add-section-modal-close').on('click', function(){
mEle.hide();
});
// Search Empty
mEle.find('.pagelayer-sf-empty').on('click', function(){
mEle.find('.pagelayer-section-search').val('');
});
// On select section type
mEle.find('#pagelayer-section-type').on('change', function(){
var val = jQuery(this).val();
pagelayer_add_sections_list_setup(val);
});
// Append the list items into modal body
pagelayer_add_sections_list_setup();
mEle.show();// Show the modal
};
// Append section list into modal body
function pagelayer_add_sections_list_setup(type){
var mEle = pagelayer.$$('.pagelayer-add-section-modal-container');
var body = mEle.find('.pagelayer-add-section-modal-body');
var add_area = jQuery('.pagelayer-add-widget-area');
type = type || 'section';
// Find the number of cols
var body_width = jQuery(window.parent).width();
var num_cols = 3;
if(body_width >= 1500){
num_cols = 4;
}else if(body_width >= 992){
num_cols = 3;
}else if(body_width >= 768){
num_cols = 2;
}else if(body_width >= 360){
num_cols = 1;
}
//console.log(num_cols+' - '+body_width);
var viewer = '';
var selected_tags = {};
var result_set = {};
// Setup the scroll
mEle.find('.pagelayer-section-tags-holder').slimScroll({
height: 'calc(100vh - 150px)',
railVisible: false,
alwaysVisible: true,
color: '#000',
size: '5px',
});
// Create list of items
var pagelayer_section_list = function(){
// List the tags
if(!pagelayer_empty(pagelayer_add_section_data[type]['tags'])){
var tags_html = '';
var tags = pagelayer_add_section_data[type]['tags'];
for(var k in tags){
tags_html += ''+k+' ('+tags[k].length+')';
}
mEle.find('.pagelayer-section-tags-holder').html(tags_html);
// Handle tag click
mEle.find('.pagelayer-section-tags').unbind('click');
mEle.find('.pagelayer-section-tags').on('click', function(e){
var search = mEle.find('.pagelayer-section-search');
// Blank the search
if(search.val().length > 0){
search.val('');
selected_tags = {};
}
// Fill the selected_tags
tEle = jQuery(this);
var tag = tEle.attr('tag')
if(tEle.attr('on') == '1'){
delete selected_tags[tag];
tEle.removeAttr('on');
}else{
tEle.attr('on', 1);
selected_tags[tag] = 1;
}
// Filter
pagelayer_section_filter(false, 1);
});
}
// Fill in the result
result_set = { ...pagelayer_add_section_data[type]['list']};
show_result();
};
// How the result and setup scroll
var show_result = function(){
var html = '';
for(var i = 0; i < num_cols; i++){
html += '';
}
// Blank the body
body.html(html+viewer);
mEle.find('.pagelayer-section-modal-body-holder').unbind('scroll');
mEle.find('.pagelayer-section-modal-body-holder').on('scroll', pagelayer_section_body_scroll);
pagelayer_section_body_scroll();
}
var scroll_accessed = false;
// Section body ON scroll
var pagelayer_section_body_scroll = function(){
// Check if there is anything to display in the first place, as we do delete pagelayer_add_section_data
if(pagelayer_empty(result_set)){
return;
}
var tester = mEle.find('.pagelayer-section-is-visible');
var modal = mEle.find('.pagelayer-section-modal-body-holder');
// If we have scroll
if(!pagelayer_isElementInView(tester, modal) || scroll_accessed){
return;
}
scroll_accessed = true;
var html = '';
var i = 0;
// Loop result_set
for(var id in result_set){
if(i >= (num_cols * 5)){
break;
}
var col = i % num_cols;
//console.log(col);
i++;
var pro = 0;
// Is it pro ?
if(!pagelayer_empty(result_set[id]) && pagelayer_empty(pagelayer_pro)){
pro = 1;
}
html = '
'+
''+
(pro ? '
Pro
'+pagelayer.pro_txt+'
' : '')+
'
';
body.find('.pagelayer-section-holder[num='+col+']').append(html);
delete result_set[id];
}
//console.log(result_set);
mEle.find('.pagelayer-section-item').unbind('click');
mEle.find('.pagelayer-section-item').on('click', function(e){
pagelayer_section_item_clickable(jQuery(this));
});
scroll_accessed = false;
}
// If we have searched something / or clicked tags
var pagelayer_section_filter = function(event, not_input){
var txt = mEle.find('.pagelayer-section-search').val();
var tags = pagelayer_add_section_data[type]['tags'];
// Searched anything
if(!pagelayer_empty(txt) || pagelayer_empty(not_input)){
// Blank the tags
selected_tags = {};
mEle.find('.pagelayer-section-tags').removeAttr('on');
for(var k in tags){
if(k.search(txt) >= 0){
selected_tags[k] = 1;
mEle.find('.pagelayer-section-tags[tag="'+k+'"]').attr('on', 1);
}
}
}
var new_result = {};
var new_length = 0;
// Filter the content
for(var t in selected_tags){
for(var i in tags[t]){
new_length++;
new_result[tags[t][i]] = tags[t][i];
}
}
// Copy the result
result_set = {...new_result};
//console.log(type);console.log(selected_tags);console.log(result_set);
show_result();
}
// On search change
mEle.find('.pagelayer-section-search').unbind('input');
mEle.find('.pagelayer-section-search').on('input', pagelayer_section_filter);
// On click items
var pagelayer_section_item_clickable = function(jEle){
var section_id = jEle.attr('pagelayer-add-section-id');
// IF section id not found
if(pagelayer_empty(section_id)){
return false;
}
if(jEle.find('.pagelayer-section-pro-req').length > 0){
return false;
}
// Show the overlay
mEle.find('.pagelayer-add-section-modal-overlay').show();
// Do shortcode the content
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_get_section_shortcodes&postID='+pagelayer_postID,
type: 'POST',
data: {
'pagelayer_nonce': pagelayer_ajax_nonce,
'pagelayer_section_id': section_id,
'pagelayer-live': 1
},
success: function(data) {
try{
var data = JSON.parse(data);
if(!pagelayer_empty(data['error'])){
pagelayer_show_msg('Error getting the section', 'error');
mEle.find('.pagelayer-add-section-modal-overlay').hide();
mEle.hide();
return;
}
var cEle = jQuery(data['code']);
// Add section before add widget area
add_area.before(cEle);
// We need to it setup
cEle.each(function(){
var pl_id = pagelayer_id(jQuery(this));
if(!pagelayer_empty(pl_id)){
pagelayer_element_setup('[pagelayer-id="'+pl_id+'"], [pagelayer-id='+pl_id+'] .pagelayer-ele', true);
}
});
}catch(e){
pagelayer_show_msg('Error getting the section', 'error');
mEle.find('.pagelayer-add-section-modal-overlay').hide();
mEle.hide();
return;
}
},
complete: function(){
mEle.find('.pagelayer-add-section-modal-overlay').hide();
mEle.hide();
}
});
}
// Load the data if not there
if(!(type in pagelayer_add_section_data)){
// Show the loading
mEle.find('.pagelayer-add-section-modal-overlay').show();
// Get the sections list data and append it
jQuery.ajax({
url: pagelayer_api_url+'/library.php?give='+type,
type: 'post',
success: function(response){
var tmp = JSON.parse(response);
// Is the list there ?
if( !('list' in tmp && !pagelayer_empty(tmp['list'])) ){
return;
}
pagelayer_add_section_data[type] = tmp;
// Create the Type
pagelayer_section_list(type);
// Hide the loading
mEle.find('.pagelayer-add-section-modal-overlay').hide();
},
complete: function(){
mEle.find('.pagelayer-add-section-modal-overlay').hide();
}
});
// We have the data, so show it
}else{
pagelayer_section_list(type);
}
}
// Upload an image
function pagelayer_upload_image(fileName, blob, pagelayer_ajax_func){
var formData = new FormData();
formData.append('action', 'upload-attachment');
formData.append('_ajax_nonce', pagelayer_media_ajax_nonce);
formData.append('async-upload', blob, fileName);
jQuery.ajax({
url:pagelayer_ajax_url,
data: formData,// the formData function is available in almost all new browsers.
type:"post",
contentType:false,
processData:false,
cache:false,
beforeSend: function( xhr ) {
if(typeof pagelayer_ajax_func.beforeSend == 'function'){
pagelayer_ajax_func.beforeSend(xhr);
}
},
xhr: function() {
var xhr = new window.XMLHttpRequest();
if(typeof pagelayer_ajax_func.uploadProgress == 'function'){
xhr = pagelayer_ajax_func.uploadProgress(xhr);
}
return xhr;
},
error:function(err){
//console.error(err);
pagelayer_show_msg('Unable to upload image for some reason.', 'error');
},
success:function(response){
var obj = jQuery.parseJSON(response);
if(typeof pagelayer_ajax_func.success == 'function'){
pagelayer_ajax_func.success(obj);
}
},
complete:function(xhr){
if(typeof pagelayer_ajax_func.complete == 'function'){
pagelayer_ajax_func.complete(xhr);
}
}
});
};
// On editable area image paste handler
function pagelayer_editable_paste_handler(pasteEvent, pagelayer_ajax_func){
var items,
is_Paste = (pasteEvent.type == 'paste' ? true : false),
mustPreventDefault = false,
reader;
try {
if(is_Paste){
items = (pasteEvent.originalEvent || pasteEvent).clipboardData.items;
}else{
items = [pasteEvent];
}
for (var i = items.length - 1; i >= 0; i -= 1) {
if (items[i].type.match(/^image\//)) {
reader = new FileReader();
/* jshint -W083 */
reader.onloadend = function(event) {
var src = event.target.result;
if(src.indexOf('data:image') === 0 ) {
var block = src.split(";");
var contentType = block[0].split(":")[1];
var realData = block[1].split(",")[1];
if(is_Paste){
var fileName = "image."+contentType.split("/")[1];
}else{
var fileName = items[0]['name'];
}
// Convert it to a blob to upload
var blob = pagelayer_b64toBlob(realData, contentType);
pagelayer_upload_image(fileName, blob, pagelayer_ajax_func);
}
};
/* jshint +W083 */
if(is_Paste){
reader.readAsDataURL(items[i].getAsFile());
}else{
reader.readAsDataURL(items[i]);
}
mustPreventDefault = true;
}
}
if(mustPreventDefault && is_Paste){
pasteEvent.stopPropagation();
pasteEvent.preventDefault();
}
}catch(err){
console.log(err);
}
return mustPreventDefault;
}
// Convert base64 to Blob
function pagelayer_b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
var byteCharacters = atob(b64Data);
var byteArrays = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {type: contentType});
return blob;
}
// Function to check if the URL is external
function pagelayer_parse_theme_vars(img_url){
for(x in pagelayer_theme_vars){
img_url = img_url.replace(x, pagelayer_theme_vars[x]);
}
return img_url;
};
// Tooltip Setup for Editor
function pagelayer_tooltip_setup(){
//pagelayer.$$('[data-tlite]').each(function(){pagelayer_tlite.show(jQuery(this).get(0));});return;
pagelayer.$$('[data-tlite]').hover(function(){
pagelayer_tlite.show(jQuery(this).get(0));
}, function(){
pagelayer_tlite.hide(jQuery(this).get(0));
});
};
// Pagelayer Messages
function pagelayer_show_msg(msg, state, time){
time = time || 5000;
state = !pagelayer_empty(state) ? 'pagelayer-editor-msg-state-'+state : '';
var nholder = pagelayer.$$('.pagelayer-editor-notice');
var mEle = jQuery('
');
pagelayer.$$('body').append(dialog);
dialog.find('.pagelayer-btnyes').on('click', function() {
dialog.remove();
if(typeof yesCallback == 'function'){
yesCallback();
}
});
dialog.find('.pagelayer-btnno').on('click', function() {
dialog.remove();
if(typeof noCallback == 'function'){
noCallback();
}
});
dialog.show();
}
function pagelayer_trim(str, charlist){
// discuss at: http://locutus.io/php/trim/
if(typeof str != 'string'){
return str;
}
var whitespace = [' ', '\n', '\r', '\t', '\f', '\x0b', '\xa0', '\u2000', '\u2001', '\u2002', '\u2003', '\u2004', '\u2005', '\u2006', '\u2007', '\u2008', '\u2009', '\u200a', '\u200b', '\u2028', '\u2029', '\u3000' ].join('');
var l = 0;
var i = 0;
str += '';
if (charlist) {
whitespace = (charlist + '').replace(/([[\]().?/*{}+$^:])/g, '$1');
}
l = str.length;
for (i = 0; i < l; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break;
}
}
l = str.length;
for (i = l - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
};
function pagelayer_ucwords(str) {
return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
return $1.toUpperCase();
});
}
// Check length for string and object
function pagelayer_length(mixed_var) {
var length = 0;
var undef, key, i, len;
var emptyValues = [undef, null, false];
for(i = 0, len = emptyValues.length; i < len; i++) {
if (mixed_var === emptyValues[i]) {
return length;
}
}
// Is array, object or jQuery object?
if(typeof mixed_var === 'object'){
// If is jQuery object
if( mixed_var.hasOwnProperty('length')){
return mixed_var.length;
}
for (key in mixed_var) {
// TODO: should we check for own properties only?
//if ( .hasOwnProperty(key)) {
length++;
//}
}
return length;
}
length = String(mixed_var).length;
return length;
};
// Create Widget list dropdown
function pagelayer_create_widget_tooltip(){
var html = '
'+
'
'+
'
'+
'×'+
'
'+
'
';
for(var x in pagelayer_groups){
// Title
html += '
'+x+'
';
// Indivdual icon
for(var y in pagelayer_groups[x]){
var sc = pagelayer_groups[x][y];
if(!(sc in pagelayer_shortcodes) || 'not_visible' in pagelayer_shortcodes[sc]){
continue;
}
html += '
'+
'
'+
'
';
if('icon' in pagelayer_shortcodes[sc]){
html += '';
}else{
html += '';
}
html += '
'+
''+pagelayer_shortcodes[sc]['name']+''+
'
'+
'
';
}
html += '
';
}
html += '
';
pagelayer.$$('body').append(html);
var wdHolder = pagelayer.$$('.pagelayer-widget-tooltip');
// Hide the ones which are not supposed to be shown
wdHolder.find('.pagelayer-search-field').on('input', function(){
var val = jQuery(this).val();
var re = new RegExp(val, 'i');
// Show only the required tags
wdHolder.find('.pagelayer-widget-group').each(function(){
var group = jQuery(this);
var res = group.find('[pagelayer-tag]');
var hidden = 0;
res.each(function(){
var tEle = jQuery(this);
if(tEle.find('.pagelayer-shortcode-text').html().match(re)){
tEle.show();
}else{
hidden += 1;
tEle.hide();
}
});
// Hide the whole group
if(hidden == res.length){
group.hide();
}else{
group.show();
}
});
wdHolder.find('.pagelayer-shortcode-holder:visible').first().trigger('widget_active');
});
// On click search empty
wdHolder.find('.pagelayer-widget-search>.pagelayer-sf-empty').click(function(){
wdHolder.find('.pagelayer-search-field').val('').trigger('input');
});
// Register widget active event
wdHolder.find('.pagelayer-shortcode-holder').on('widget_active', function(){
var activeEle = jQuery(this);
wdHolder.find('.pagelayer-list-widget-active').removeClass('pagelayer-list-widget-active');
if(!activeEle.hasClass('pagelayer-list-widget-active')){
activeEle.addClass('pagelayer-list-widget-active');
}
activeEle[0].scrollIntoView({behavior: "smooth", block: "end"});
});
pagelayer.gDocument.on('mousedown.pagelayer_wdlist', function(e){
var target = jQuery(e.target);
if(target.closest('.pagelayer-widget-tooltip').is(wdHolder)){
return;
}
wdHolder.find('.pagelayer-shortcode-holder:visible').first().trigger('widget_active');
wdHolder.hide();
jQuery('.pagelayer-show-wiget-list').removeClass('pagelayer-show-wiget-list');
jQuery(window).off('scroll.pagelayer_wdlist resize.pagelayer_wdlist');
});
}
// Show Widget list dropdown
function pagelayer_show_widget_list(jEle, val){
val = val || '';
jEle = jQuery(jEle);
var wEle = pagelayer.$$('.pagelayer-widget-tooltip'),
winH = jQuery(window).height(),
iframe = pagelayer.$$('#pagelayer-iframe'),
iframeTop = iframe.offset().top,
iframeLeft = iframe.offset().left,
style = {},
wTop = 'auto',
wBottom = 'auto',
wLeft = '';
wHeight = '';
searchField = wEle.find('.pagelayer-search-field');
searchField.val(val);
searchField.trigger('input');
// Add widget show class
if(jEle.hasClass('pagelayer-shortcode-plus')){
jEle.parent('.pagelayer-ele-overlay').addClass('pagelayer-show-wiget-list');
}
var bounds = jEle[0].getBoundingClientRect();
wEle.removeClass('pagelayer-widget-list-tooltip');
wLeft = (bounds.left + iframeLeft) - wEle.width() / 2;
// In list view?
if(jEle.closest('[pagelayer-editable]').length > 0){
wEle.addClass('pagelayer-widget-list-tooltip');
var selection = window.getSelection();
var range = selection.getRangeAt(0);
wLeft = (range.getBoundingClientRect().left + iframeLeft) - wEle.width() / 2;
}
wEle.closest('.pagelayer-widget-tooltip').show();
wEle.find('.pagelayer-shortcode-holder:visible').first().trigger('widget_active');
// Hide Widget list
if(jEle.closest('[pagelayer-editable]').length > 0 && wEle.find('.pagelayer-widget-group:visible').length < 1){
pagelayer.gDocument.trigger('mousedown.pagelayer_wdlist');
return;
}else{
searchField.focus().select();
}
var docW = iframeLeft + iframe.width() - 30;
// Prevent to hide on left or right
if(docW < wLeft + wEle.width()){
wLeft = docW - wEle.width();
}else if(iframeLeft > wLeft){
wLeft = iframeLeft;
}
if(winH / 2 < bounds.top + 10){
wBottom = winH - bounds.top + 10;
wHeight = bounds.top - 10;
}else{
wTop = bounds.bottom + iframeTop + 10;
wHeight = winH - bounds.bottom - 10;
}
style['left'] = wLeft;
style['top'] = wTop;
style['bottom'] = wBottom;
style['max-height'] = '';
if(wHeight < 350){
style['max-height'] = wHeight;
}
wEle.css(style);
jQuery(window).off('scroll.pagelayer_wdlist resize.pagelayer_wdlist');
jQuery(window).on('scroll.pagelayer_wdlist resize.pagelayer_wdlist', function(){
var _val = wEle.find('.pagelayer-search-field').val();
pagelayer_show_widget_list(jEle, _val);
});
wEle.find('.pagelayer-shortcode-holder').off('click');
wEle.find('.pagelayer-shortcode-holder').on('click', function(e){
var tag = jQuery(this).attr('pagelayer-tag');
var mWrap = jEle.closest('.pagelayer-ele-wrap[pagelayer-wrap-id]');
var mTag = pagelayer_tag(mWrap);
var ele = jQuery('');
// Is col?
if(mTag == 'pl_col'){
var colHolder = mWrap.find('>.pagelayer-col > .pagelayer-col-holder');
colHolder.append(ele);
pagelayer_empty_col(colHolder);
}else{
mWrap.after(ele);
}
// Replace widget
if(jEle.closest('[pagelayer-editable]').length > 0){
pagelayer_delete_element(mWrap.find('>.pagelayer-ele'));
}
var eleId = pagelayer_onadd(ele, false);
var eEle = pagelayer_ele_by_id(eleId);
// Create Column
if( tag == 'pl_inner_row' ){
var in_col = jQuery('');
eEle.find('>.pagelayer-row-holder').append(in_col);
var in_col_id = pagelayer_onadd(in_col, false);
}
eEle.click();
// Hide Widget list
pagelayer.gDocument.trigger('mousedown.pagelayer_wdlist');
});
}
// Set Selection By Character Offsets
function pagelayer_setCaret(containerEl, start, end){
end = end || start;
// Refered from http://jsfiddle.net/zQUhV/47/
if(window.getSelection && document.createRange){
var charIndex = 0, range = document.createRange();
range.setStart(containerEl, 0);
range.collapse(true);
var nodeStack = [containerEl], node, foundStart = false, stop = false;
while (!stop && (node = nodeStack.pop())) {
if (node.nodeType == 3) {
var nextCharIndex = charIndex + node.length;
if (!foundStart && start >= charIndex && start <= nextCharIndex) {
range.setStart(node, start - charIndex);
foundStart = true;
}
if (foundStart && end >= charIndex && end <= nextCharIndex) {
range.setEnd(node, end - charIndex);
stop = true;
}
charIndex = nextCharIndex;
} else {
var i = node.childNodes.length;
while (i--) {
nodeStack.push(node.childNodes[i]);
}
}
}
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(containerEl);
textRange.collapse(true);
textRange.moveEnd("character", end);
textRange.moveStart("character", start);
textRange.select();
}
}
// Set Selection By Character Offsets
function pagelayer_content_line(containerEl){
var lines = [], charIndex = 0, range = document.createRange();
range.setStart(containerEl, 0);
range.collapse(true);
var bounding = range.getBoundingClientRect();
var nodeStack = [containerEl], node, prevX = bounding.x, nextStart = 0;
while(node = nodeStack.pop()){
if (node.nodeType == 3) {
for(var i = 1; i <= node.length; i++){
range.setStart(node, i);
range.setEnd(node, i);
bounding = range.getBoundingClientRect();
charIndex ++;
if(prevX > bounding.x){
lines.push({start:nextStart, end:charIndex - 1});
nextStart = charIndex;
}
prevX = bounding.x;
}
} else {
var i = node.childNodes.length;
while(i--){
nodeStack.push(node.childNodes[i]);
}
}
}
// Push last line
if(nextStart != charIndex || nextStart == 0){
lines.push({start:nextStart, end:charIndex});
}
return lines;
}
//http://jsfiddle.net/TjXEG/900/
function pagelayer_getCaretCharacterOffsetWithin(element){
var caretOffset = 0;
var doc = element.ownerDocument || element.document;
var win = doc.defaultView || doc.parentWindow;
var sel;
if( typeof win.getSelection != "undefined" ){
sel = win.getSelection();
if (sel.rangeCount > 0) {
var range = win.getSelection().getRangeAt(0);
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length;
}
}else if( (sel = doc.selection) && sel.type != "Control" ){
var textRange = sel.createRange();
var preCaretTextRange = doc.body.createTextRange();
preCaretTextRange.moveToElementText(element);
preCaretTextRange.setEndPoint("EndToEnd", textRange);
caretOffset = preCaretTextRange.text.length;
}
return caretOffset;
}
pagelayer_svg_cache = {};
var pagelayer_document_width;
// For automatic row parent change
jQuery(window).resize(function(){
var new_vw = jQuery(document).width();
if(new_vw == pagelayer_document_width){
return false;
}
pagelayer_document_width = new_vw;
// Set a timeout to prevent bubbling
setTimeout(function(){
jQuery(pagelayer_editable+' .pagelayer-row-stretch-full').each(function(){
var par = jQuery(this).parent();
pagelayer_pl_row_parent_full(par);
});
}, 200);
});
// Render for row
function pagelayer_render_pl_row(el){
var img_urls = !pagelayer_empty(el.tmp['bg_slider-urls']) ? JSON.parse(el.tmp['bg_slider-urls']) : [];
el.atts['slider'] = '';
if(!pagelayer_empty(img_urls)){
for(var x in img_urls){
el.atts['slider'] += '';
}
}
// Row background parallax image.
if(!pagelayer_empty(el.atts['parallax_img'])){
el.atts['parallax_img_src'] = el.tmp['parallax_img-'+el.atts['parallax_id_size']+'-url'] || el.tmp['parallax_img-url'];
el.atts['parallax_img_src'] = el.atts['parallax_img_src'] || el.atts['parallax_img'];
}
pagelayer_bg_video(el);
}
// Render for inner row
function pagelayer_render_pl_inner_row(el){
pagelayer_render_pl_row(el);
}
// Render for col
function pagelayer_render_pl_col(el){
var img_urls = !pagelayer_empty(el.tmp['bg_slider-urls']) ? JSON.parse(el.tmp['bg_slider-urls']) : [];
el.atts['slider'] = '';
if(!pagelayer_empty(img_urls)){
for(var x in img_urls){
el.atts['slider'] += '';
}
}
// We need the parent of type pagelayer-wrap-col
var par = el.$.parent('.pagelayer-wrap-col');
// Apply to wrapper
if(!pagelayer_empty(el.atts['col'])){
for(var x=1; x<=12; x++){
if(par.hasClass('pagelayer-col-'+x)){
par.removeClass('pagelayer-col-'+x);
break;
}
}
par.addClass('pagelayer-col-'+el.atts['col']);
par.css('width', '');
}
if(el.atts['col_width']){
par.css('width', '');
}
// Col background parallax image.
if(!pagelayer_empty(el.atts['parallax_img'])){
el.atts['parallax_img_src'] = el.tmp['parallax_img-'+el.atts['parallax_id_size']+'-url'] || el.tmp['parallax_img-url'];
el.atts['parallax_img_src'] = el.atts['parallax_img_src'] || el.atts['parallax_img'];
}
pagelayer_bg_video(el);
}
function pagelayer_bg_video(el){
el.tmp['bg_video_src-url'] = el.tmp['bg_video_src-url'] || el.atts['bg_video_src'];
var src = el.tmp['bg_video_src-url'];
if(pagelayer_empty(src)){
return;
}
var iframe_atts = pagelayer_video_url(src, true);
// console.log(iframe_atts);
iframe_atts['src'] += (iframe_atts['src'].indexOf('?') == -1 ? '?' : '');
// Adding mute and loop option in row or col
if(el.atts['mute'] == "true"){
iframe_atts['src'] +="&mute=1";
el.atts['mute'] = " muted ";
}else{
iframe_atts['src'] +="&mute=0";
el.atts['mute'] = "";
}
if(el.atts['stop_loop'] != "true"){
iframe_atts['src'] +="&loop=1";
el.atts['stop_loop'] = " loop ";
}else{
iframe_atts['src'] +="&loop=0";
el.atts['stop_loop'] ="";
}
if (iframe_atts['type'] == 'youtube') {
var settings = 'data-loop="'+(!pagelayer_empty(el['atts']['stop_loop']) ? 1 : 0)+'" data-mute="'+ (!pagelayer_empty(el['atts']['mute']) ? 1 : 0)+'" data-videoid="'+(iframe_atts['id'].split('&')[0])+'"';
el.atts['vid_src'] = '';
} else if (iframe_atts['type'] == 'vimeo') {
el.atts['vid_src'] = '';
}else{
el.atts['vid_src'] = '';
}
}
// Load the full width row
function pagelayer_render_end_pl_row(el){
// The parent
var par = el.$.parent();
// Any class with full width
if(el.$.hasClass('pagelayer-row-stretch-full')){
// Give it the full width
pagelayer_pl_row_full(el.$);
// Give full width to the parent
pagelayer_pl_row_parent_full(par);
// Also add that we had a full width
el.$.addClass('pagelayer-row-stretch-had-full');
// Did this row have full width ?
}else if(el.$.hasClass('pagelayer-row-stretch-had-full')){
// Remove style
el.$.removeAttr('style');
par.removeAttr('style');
par.children('.pagelayer-ele-overlay').removeAttr('style');
// Remove HAD class
el.$.removeClass('pagelayer-row-stretch-had-full');
}
pagelayer_pl_row_video(el.$);
el.$.find('.pagelayer-parallax-window img').each(function(){
pagelayer_pl_row_parallax(jQuery(this));
});
el.$.find('.pagelayer-bgimg-slider').each(function(){
pagelayer_pl_row_slider(jQuery(this));
});
// Row shape
if('row_shape_type_top' in el.atts){
pagelayer_render_row_shape(el, 'top')
}
if('row_shape_type_bottom' in el.atts){
pagelayer_render_row_shape(el, 'bottom')
}
}
// Render for inner row
function pagelayer_render_end_pl_inner_row(el){
pagelayer_render_end_pl_row(el);
}
// Set Row parent width
function pagelayer_pl_row_parent_full(par){
var vw = jQuery('html').width();
par.css({'width': vw,'max-width': '100vw'});
par.offset({left: 0});
par.children('.pagelayer-row').css({left: 0});
}
// Row shape render
function pagelayer_render_row_shape(el, shape_pos){
var name = el.atts['row_shape_type_'+shape_pos]+'-'+shape_pos+'.svg';
// DO we have in cache
if(!(name in pagelayer_svg_cache)){
// Make url and fetch
var url = pagelayer_url+'/images/shapes/'+name;
jQuery.get(url, function(data){
el.$.find('.pagelayer-svg-'+shape_pos).html(data);
pagelayer_svg_cache[name] = data;
}, 'html');
// Fill with cache
}else{
el.$.find('.pagelayer-svg-'+shape_pos).html(pagelayer_svg_cache[name]);
}
}
// Load the col
function pagelayer_render_end_pl_col(el){
pagelayer_pl_row_video(el.$);
el.$.find('.pagelayer-parallax-window img').each(function(){
pagelayer_pl_row_parallax(jQuery(this));
});
el.$.find('.pagelayer-bgimg-slider').each(function(){
pagelayer_pl_row_slider(jQuery(this));
});
}
// Render the image object
function pagelayer_render_pl_image(el){
// Decide the image URL
el.atts['func_id'] = el.tmp['id-'+el.atts['id-size']+'-url'] || el.tmp['id-url'];
el.atts['func_id'] = el.atts['func_id'] || el.atts['id'];
el.atts['pagelayer-srcset'] = el.atts['func_id']+', '+el.atts['func_id']+' 1x, ';
var image_atts = {
name : 'id',
size : 'id-size'
};
pagelayer_get_img_src(el, image_atts);
// What is the link ?
if('link_type' in el.atts){
// Custom url
if(el.atts['link_type'] == 'custom_url'){
el.atts['func_link'] = el.tmp['link'] || '';
}
// Link to the media file itself
if(el.atts['link_type'] == 'media_file'){
el.atts['func_link'] = el.tmp['id-url'] || el.atts['id'];
}
// Lightbox
if(el.atts['link_type'] == 'lightbox'){
el.atts['func_link'] = el.tmp['id-url'] || el.atts['id'];
}
}
}
// Incase if there is a lightbox
function pagelayer_render_end_pl_image(el){
pagelayer_pl_image(el.$);
}
// Pre DragAndDrop function
function pagelayer_preDAndD_image(jEle){
dropzoneParent = jEle.find('.pagelayer-img').parent();
// Check if drop zone is already there then return
if(dropzoneParent.find('.pagelayer-image-drop-zone').length > 0){
return;
}
var dropDiv = '
'+
'
'+
''+
'
'+pagelayer_l('drop_file')+'
'+
'
'+
''+
'
'+
'
'+
'
';
dropzoneParent.prepend(dropDiv);
dropZone = dropzoneParent.find('.pagelayer-image-drop-zone');
// Inserting values in image drag and drop function
pagelayer_img_dragAndDrop(dropzoneParent, dropZone, jEle, '');
}
// Render for video
function pagelayer_render_pl_video(el){
el.atts['video_overlay_image-url'] = el.tmp['video_overlay_image-'+el.atts['custom_size']+'-url'] || el.tmp['video_overlay_image-url'];
el.atts['video_overlay_image-url'] = el.atts['video_overlay_image-url'] || el.atts['video_overlay_image'];
el.tmp['src-url'] = el.tmp['src-url'] || el.atts['src'];
el.tmp['ele_id'] = el['id'];
var vid_atts = pagelayer_video_url(el.tmp['src-url'], true);
vid_atts['src'] += (vid_atts['src'].indexOf('?') == -1 ? '?' : '');
vid_atts['src'] += el.atts['autoplay'] == 'true' ? '&autoplay=1' : '&autoplay=0' ;
var mute = el.atts['mute'] == 'true' ? 1 : 0;
vid_atts['src'] +='&'+(vid_atts['type'] == 'vimeo' ? 'muted' : 'mute')+'='+mute;
vid_atts['src'] += el.atts['loop'] == 'true' ? '&loop=1' : '&loop=0' ;
el.atts['vid_src'] = vid_atts['src']+(vid_atts['type'] == 'youtube' ? '&playlist='+vid_atts['id'] : '');
}
// Incase if there is a lightbox
function pagelayer_render_end_pl_video(el){
pagelayer_pl_video(el.$);
}
// Render the testimonial
function pagelayer_render_pl_testimonial(el){
if(!pagelayer_empty(el.tmp['avatar-no-image-set'])){
el.atts['avatar'] = '';
return;
}
//console.log(el);
// Decide the image URL
el.atts['func_image'] = el.tmp['avatar-'+el.atts['custom_size']+'-url'] || el.tmp['avatar-url'];
el.atts['func_image'] = el.atts['func_image'] || el.atts['avatar'];
}
// Render the stars
function pagelayer_render_end_pl_stars(el){
var jEle = el.$.find('.pagelayer-stars-container');
pagelayer_stars(jEle);
};
// Render the service box
function pagelayer_render_pl_service(el){
// Decide the image URL
el.atts['func_image'] = el.tmp['service_image-'+el.atts['service_image_size']+'-url'] || el.tmp['service_image-url'];
el.atts['func_image'] = el.atts['func_image'] || el.atts['service_image'];
el.atts['pagelayer-srcset'] = el.atts['func_image']+', '+el.atts['func_image']+' 1x, ';
var image_atts = {
name : 'service_image',
size : 'service_image_size'
};
pagelayer_get_img_src(el, image_atts);
}
function pagelayer_render_end_pl_service(el){
// Drag and Drop function for image
if (typeof pagelayer_preDAndD_image !== "undefined") {
pagelayer_preDAndD_image(el.$);
}
}
function pagelayer_social(jEle,sel){
var holder = jEle.find(sel);
var icon = holder.data('icon');
if(pagelayer_empty(icon)){
return;
}
//alert(icon);
var icon_splited = icon.split(' fa-');
//console.log(icon_splited);
holder.addClass('pagelayer-'+icon_splited[1]);
}
function pagelayer_social_icon_onchange(jEle, row, val){
var url = '';
// Lets get the value of the nearest social icon
for(var k in pagelayer_social_urls){
var patt = new RegExp(k, 'i');
if(patt.test(val)){
url = pagelayer_social_urls[k];
}
}
if(url.length > 0){
var social_url_row = row.parent().find('[pagelayer-elp-name="social_url"]');
//console.log(social_url_row);
social_url_row.find('.pagelayer-elp-link').val(url).trigger('change');
}
}
// Render the social icon
function pagelayer_render_end_pl_social(el){
pagelayer_social(el.$, '.pagelayer-icon-holder');
}
// Render the social profile group
function pagelayer_render_end_pl_social_grp(el){
// Removing extra animation classes
el.$.find('.pagelayer-icon-holder').removeClass (function (index, className) {
return (className.match (/(^|\s)pagelayer-animation-\S+/g) || []).join(' ');
});
pagelayer_pl_social_profile(el.$);
}
// Render the counter
function pagelayer_render_end_pl_counter(el){
pagelayer_counter();
};
// Render the progress
function pagelayer_render_end_pl_progress(el){
pagelayer_progress();
};
// Render the image slider
function pagelayer_render_pl_image_slider(el){
// The URLs
var img_urls = !pagelayer_empty(el.tmp['ids-urls']) ? JSON.parse(el.tmp['ids-urls']) : [];
var all_urls = !pagelayer_empty(el.tmp['ids-all-urls']) ? JSON.parse(el.tmp['ids-all-urls']) : [];
var img_title = !pagelayer_empty(el.tmp['ids-all-titles']) ? JSON.parse(el.tmp['ids-all-titles']) : [];
//console.log(img_urls);
var ul = '';
var is_link = 'link_type' in el.atts && !pagelayer_empty(el.atts['link_type']) ? true : false;
// Create figure HTML
for (var x in img_urls){
// Use the default URL first
var url = img_urls[x];
// But if we have a custom size, use that
if(el.atts['size'] != 'custom' && x in all_urls && el.atts['size'] in all_urls[x]){
url = all_urls[x][el.atts['size']];
}
ul += '
';
if(is_link){
var link = (el.atts['link_type'] == 'media_file' ? (!pagelayer_empty(img_urls[x]) ? img_urls[x] : url) : (el.tmp['link'] || ''))
ul += '';
}
ul += '';
if(is_link){
ul += '';
}
ul += '
';
}
if(pagelayer_empty(ul)){
ul = '
'+ pagelayer_l('Please select Images from left side Widget properties.')+'
';
}
el.atts['ul'] = ul;
// Which arrows to show
if('controls' in el.atts && (el.atts['controls'] == 'arrows' || el.atts['controls'] == 'none')){
el.CSS.attr.push({'sel': '.pagelayer-image-slider-ul', 'val': 'data-pager="false"'});
}
if('controls' in el.atts && (el.atts['controls'] == 'pager' || el.atts['controls'] == 'none')){
el.CSS.attr.push({'sel': '.pagelayer-image-slider-ul', 'val': 'data-controls="false"'});
}
};
// Render the image slider
function pagelayer_render_end_pl_image_slider(el){
pagelayer_owl_destroy(el.$, '.pagelayer-image-slider-ul');
pagelayer_pl_image_slider(el.$);
}
// Render the grid gallery
function pagelayer_render_pl_grid_gallery(el){
// The URLs
var img_urls = !pagelayer_empty(el.tmp['ids-urls']) ? JSON.parse(el.tmp['ids-urls']) : [];
var all_urls = !pagelayer_empty(el.tmp['ids-all-urls']) ? JSON.parse(el.tmp['ids-all-urls']) : [];
var img_title = !pagelayer_empty(el.tmp['ids-all-titles']) ? JSON.parse(el.tmp['ids-all-titles']) : [];
var img_links = !pagelayer_empty(el.tmp['ids-all-links']) ? JSON.parse(el.tmp['ids-all-links']) : [];
var img_captions = !pagelayer_empty(el.tmp['ids-all-captions']) ? JSON.parse(el.tmp['ids-all-captions']) : [];
//console.log(img_urls);
var ul = '';
var pagin = '
1
';
var is_link = 'link_to' in el.atts && !pagelayer_empty(el.atts['link_to']) ? true : false;
var i = 0;
var j = 1;
if(pagelayer_empty(el.tmp)){
ul = '
';
var gallery_rand = 'gallery-id-'+Math.floor((Math.random() * 100) + 1);
var imgInPage = el.atts['images_no'];
// Create figure HTML
for (var x in img_urls){
if(imgInPage != 0 && (i % imgInPage) == 0 && i != 0){
ul += '
';
j++;
pagin += '
'+j+'
';
}
// Use the default URL first
var url = img_urls[x];
// But if we have a custom size, use that
if(el.atts['size'] != 'custom' && x in all_urls && el.atts['size'] in all_urls[x]){
url = all_urls[x][el.atts['size']];
}
ul += '
' : '';
el.tmp['gallery-random-id'] = gallery_rand;
el.atts['ul'] = ul;
}
function pagelayer_render_end_pl_grid_gallery(el){
pagelayer_pl_grid_lightbox(el.$);
}
// Render for tabs
function pagelayer_render_html_pl_tabs(el){
el.CSS.attr.push({'sel': '{{element}}', 'val': 'pagelayer-tabs-rotate="'+el.atts["rotate"]+'"'});
};
// Render the tab item
function pagelayer_render_end_pl_tabs(el){
pagelayer_pl_tabs(el.$);
}
// Render the accordion item
function pagelayer_render_end_pl_accordion(el){
pagelayer_pl_accordion(el.$);
};
// Render the collapse item
function pagelayer_render_end_pl_collapse(el){
pagelayer_pl_collapse(el.$);
};
// Render the accordion item handler
pagelayer_add_action('pagelayer_element_setup', function(e, jEle){
var tag = pagelayer_tag(jEle);
if( tag != 'pl_accordion_item'){
return;
}
var panel = jEle.find('.pagelayer-accordion-panel');
pagelayer_add_inner_row_notice(panel);
});
// Render the accordion item handler
pagelayer_add_action('pagelayer_do_dirty', function(e, jEle){
var panel = jEle.closest('.pagelayer-accordion-panel');
pagelayer_add_inner_row_notice(panel);
});
// Add inner row notice
function pagelayer_add_inner_row_notice(panel){
if(panel.length < 1 || panel.children('.pagelayer-ele-wrap, .pagelayer-ele').not('.pagelayer-row-not-found').length > 0){
if(panel.children('.pagelayer-row-not-found').length > 0){
panel.children('.pagelayer-row-not-found').remove();
}
return;
}
var div = `
There is no editable area found. Please click here to Add a Row and continue editing!
`;
panel.html(div);
panel.find('.pagelayer-click-add-row').on('click', function(){
panel.find('.pagelayer-row-not-found').remove();
// Create Row
var row = jQuery('');
panel.append(row);
var row_id = pagelayer_onadd(row, false);
var rEle = pagelayer_ele_by_id(row_id);
// Create Column
var col = jQuery('');
rEle.find('.pagelayer-row-holder').append(col);
var col_id = pagelayer_onadd(col, false);
var cEle = pagelayer_ele_by_id(col_id);
cEle.click();
});
}
// Shortcode Handler
var pagelayer_shortcodes_timer;
function pagelayer_render_pl_shortcodes(el){
// Clear any previous timeout
clearTimeout(pagelayer_shortcodes_timer);
// Set a timer for constant change
pagelayer_shortcodes_timer = setTimeout(function(){
// Make the call
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_do_shortcodes',
type: 'POST',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
shortcode_data: el.atts['data']
},
success:function(data) {
el.$.find('.pagelayer-shortcodes-container').html(data);
}
});
}, 500);
};
// Render the widget area i.e. Sidebars
function pagelayer_render_pl_wp_widgets(el){
// Clear any previous timeout
clearTimeout(pagelayer_shortcodes_timer);
// Set a timer for constant change
pagelayer_shortcodes_timer = setTimeout(function(){
// Make the call
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_fetch_sidebar',
type: 'POST',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
sidebar: el.atts['sidebar']
},
success:function(data) {
el.$.find('.pagelayer-wp-sidebar-holder').html(data);
}
});
}, 500);
};
function pagelayer_owl_destroy(jEle, slides_class){
var ul = jEle.find(slides_class);
var setup = jEle.attr('pagelayer-setup');
// Already setup ?
if(setup && setup.length > 0){
if(ul.children('.pagelayer-ele-wrap')){
ul.pagelayerOwlCarousel('destroy');
ul.find('[class^="pagelayer-owl-"]').remove();
jEle.removeAttr('pagelayer-setup');
}
}
}
// Render the google maps v3
function pagelayer_render_pl_google_maps(el){
el.atts['show_v2'] = true;
if(pagelayer_empty(el.atts['api_version'])){
el.atts['src_code'] = '';
return;
}
el.atts['show_v2'] = false;
var gmaps_key = (pagelayer_empty(pagelayer_gmaps_key) ? '' : pagelayer_gmaps_key);
var api_key = (pagelayer_empty(el.atts['api_key']) ? gmaps_key : el.atts['api_key']);
if(el.atts['map_modes'] == 'view'){
el.atts['center'] = pagelayer_empty(el.atts['center']) ? '-33.8569,151.2152' : el.atts['center'];
}
var src_code = (pagelayer_empty(el.atts['center']) ? '' : '¢er='+el.atts['center'])+(el.atts['map_modes'] == 'streetview' ? '' : '&maptype='+el.atts['map_type']+'&zoom='+el.atts['zoom']);
switch(el.atts['map_modes']){
case 'place':
src_code += encodeURI('&q='+(pagelayer_empty(el.atts['address']) ? 'New York, New York, USA' : el.atts['address'] ));
break;
case 'directions':
src_code += encodeURI('&origin='+(pagelayer_empty(el.atts['direction_origin']) ? 'Oslow Norway' : el.atts['direction_origin'] ));
src_code += encodeURI('&destination='+(pagelayer_empty(el.atts['direction_destination']) ? 'Telemark Norway' : el.atts['direction_destination'] ));
src_code += (pagelayer_empty(el.atts['direction_waypoints']) ? '' : '&waypoints='+(el.atts['direction_waypoints'].trim()).split(' ').join('|') );
src_code += (pagelayer_empty(el.atts['direction_modes']) ? '' : '&mode='+el.atts['direction_modes'] );
src_code += (pagelayer_empty(el.atts['direction_avoid']) ? '' : '&avoid='+el.atts['direction_avoid'].split(',').join('|') );
src_code += (pagelayer_empty(el.atts['direction_units']) ? '' : '&units='+el.atts['direction_units'] );
break;
case 'streetview':
src_code += '&pano='+(pagelayer_empty(el.atts['streetview_pano']) ? 'eTnPNGoy4bxR9LpjjfFuOw' : el.atts['streetview_pano'] );
src_code += '&location='+(pagelayer_empty(el.atts['streetview_location']) ? '46.414382,10.013988' : el.atts['streetview_location'] );
src_code += (pagelayer_empty(el.atts['streetview_heading']) ? '' : '&heading='+el.atts['streetview_heading'] );
src_code += (pagelayer_empty(el.atts['streetview_pitch']) ? '' : '&pitch='+el.atts['streetview_pitch'] );
src_code += (pagelayer_empty(el.atts['streetview_fov']) ? '' : '&fov='+el.atts['streetview_fov'] );
break;
case 'search':
src_code += encodeURI('&q='+(pagelayer_empty(el.atts['search_term']) ? 'Record stores in Seattle' : el.atts['search_term'] ));
break;
}
var src_code_url = 'https://www.google.com/maps/embed/v1/'+el.atts['map_modes']+'?key='+api_key+src_code;
el.atts['src_code'] = '';
}
////////////
// Freemium
////////////
// Render the excerpt
function pagelayer_render_html_pl_post_excerpt(el){
el.$.find('.pagelayer-post-excerpt').addClass('pagelayer-empty-widget');
}
// Render the featured image
function pagelayer_render_html_pl_featured_img(el){
var param = {};
param['pagelayer_nonce'] = pagelayer_ajax_nonce;
// Post Id
param['post_id'] = pagelayer_postID;
// Image size
if('size' in el.atts){
param['size'] = el.atts['size'];
}
jQuery.ajax({
url: pagelayer_ajax_url+'action=pagelayer_fetch_featured_img',
type: 'post',
data: param,
dataType: 'json',
success: function(data){
var src = '';
var title = '';
var alt = '';
if(pagelayer_empty(data)){
src = el.tmp['img-'+el.atts['size']+'-url'] || el.tmp['img-url'];
src = src || el.atts['img'];
}else{
src = data['url'];
alt = data['alt'];
title = data['title'];
if(el.atts['size']+'-url' in data){
src = data[el.atts['size']+'-url'];
}
}
var img_html = '';
if(src){
img_html = '';
}
el.$.find('.pagelayer-featured-img').html(img_html);
if('link_type' in el.atts){
// Custom url
if(el.atts['link_type'] == 'custom_url'){
el.$.find('a').attr('href', el.tmp['link']);
}
// Link to the media file itself
if(el.atts['link_type'] == 'media_file' || el.atts['link_type'] == 'lightbox'){
el.$.find('a').attr('href', src);
}
}
pagelayer_pl_image(el.$);
}
});
}
// Retina image setting attribute.
function pagelayer_get_img_src(el, image_atts){
// Check if retina images is set
if(!pagelayer_empty(el.tmp[image_atts.name+'-retina-url']) && el.tmp[image_atts.name+'-retina-url'].includes('default-image') == false){
var retina_image = el.tmp[image_atts.name+'-retina-'+el.atts[image_atts.size]+'-url'];
retina_image = pagelayer_empty(retina_image) ? el.tmp[image_atts.name+'-retina-url'] : retina_image;
el.atts['pagelayer-srcset'] += retina_image +' 2x, ';
}
// Check if retina mobile images is set
if(!pagelayer_empty(el.tmp[image_atts.name+'-retina-mobile-url']) && el.tmp[image_atts.name+'-retina-mobile-url'].includes('default-image') == false){
var retina_image_mobile = el.tmp[image_atts.name+'-retina-mobile-'+el.atts[image_atts.size]+'-url'];
retina_image_mobile = pagelayer_empty(retina_image_mobile) ? el.tmp[image_atts.name+'-retina-mobile-url'] : retina_image_mobile;
el.atts['pagelayer-srcset'] += retina_image_mobile +' 3x';
}
}
/////////////////
// Freemium
/////////////////
// If you want to store ajax data then you can use this variable
var pagelayer_ajax_data = {};
var pagelayer_posts_data = {};
// Compare two objects
function pagelayer_compare_object(obj1, obj2){
var objectsAreSame = true;
for(var propertyName in obj1){
if(obj1[propertyName] !== obj2[propertyName]){
objectsAreSame = false;
break;
}
}
for(var propertyName in obj2){
if(obj1[propertyName] !== obj2[propertyName]){
objectsAreSame = false;
break;
}
}
return objectsAreSame;
}
// Incase if there is a lightbox
function pagelayer_render_end_pl_featured_img(el){
pagelayer_pl_image(el.$);
}
// Render the archive Posts
function pagelayer_render_pl_archive_posts(el){
// Need to do empty
el.atts['pagelayer_pagination_top'] = '';
el.atts['pagelayer_pagination_bottom'] = '';
}
// Render the archive Posts
function pagelayer_render_end_pl_archive_posts(el){
var post = {};
// All atts
post['atts'] = JSON.parse(JSON.stringify(el.atts));
post['atts']['pagelayer-id'] = el['id'];
// The nonce
post['pagelayer_nonce'] = pagelayer_ajax_nonce;
var data_handle = function(data){
//console.log(data);
var d = jQuery(data);
el.$.children(':not(style)').remove();
var child = el.$.append(d.children(':not(style)'));
pagelayer_ajax_data[el['id']] = data;
}
if(pagelayer_empty(pagelayer_posts_data) || !pagelayer_compare_object(pagelayer_posts_data, post) || pagelayer_empty(pagelayer_ajax_data[el['id']])){
pagelayer_posts_data = post;
jQuery.ajax({
url: pagelayer_ajax_url+'action=pagelayer_archive_posts_data',
type: 'post',
data: post,
success: data_handle
});
}else{
data_handle(pagelayer_ajax_data[el['id']]);
}
}
function pagelayer_apply_megamenu_items(html, menuID, menuEle, eleActive){
if(pagelayer_empty(pagelayer_menus_items_list[menuID])){
return html;
}
var menu_data = jQuery('
').html(html);
var $elements = pagelayer_menus_items_list[menuID];
var unset_ele = function(navItem){
var src = jQuery(navItem);
var nhtml = src[0].outerHTML;
var nEle = jQuery(nhtml);
nEle.removeAttr('pagelayer-parent');
nEle.find('[pagelayer-parent]').removeAttr('pagelayer-parent');
nEle.find('style').remove();
nEle.find('.pagelayer-ele-overlay').remove();
// Unwrap the wraps
nEle.find('.pagelayer-ele').each(function (){
var ele = jQuery(this);
if(ele.parent().is('.pagelayer-ele-wrap')){
ele.unwrap();
}
});
return nEle;
}
for($e in $elements){
var savedHTML = '';
if(pagelayer_empty($elements[$e]['pagelayer_content'])){
continue;
}
var mID = $elements[$e]['ID'];
var navItem = menuEle.find('.pagelayer-mega-editor-'+mID).find('.pagelayer-nav_menu_item').first();
var id = pagelayer_id(menuEle);
if(navItem.length > 0 && eleActive){
savedHTML = unset_ele(navItem);
}else{
savedHTML = pagelayer_element_unsetup($elements[$e]['pagelayer_content']);
}
menu_data.find('.pagelayer-mega-editor-'+mID).html(savedHTML[0].outerHTML);
}
return menu_data.html();
}
var pagelayer_nav = {};
var pagelayer_wp_menu_timer;
var pagelayer_nav_force_refresh = {};
// Render the Primary menu
function pagelayer_render_pl_wp_menu(el){
var jEle = el.$;
var menuID = el.atts['nav_list'];
var parMenu = jEle.parent().closest('.pagelayer-wp_menu');
var inside_mega = '';
var menu_error = '';
// If we are inside primary menu and have a same menu ID
if(parMenu.length > 0){
var parMenuID = pagelayer_get_att(parMenu, 'nav_list');
if(menuID == parMenuID){
pagelayer_show_msg('Not allowed same Menu inside the Primary menu widget!', 'warning');
inside_mega = true;
// If parent menu menuID is empty then we prevent menu inside menu
}else if(pagelayer_empty(menuID) || pagelayer_empty(parMenuID) ){
menu_error = 'Primary Menu Holder. Please select the correct menu or parent menu.';
inside_mega = true;
}
}
// Set atts for easy rendering in PHP
pagelayer_set_atts(jEle, 'inside_mega', inside_mega);
if(!pagelayer_empty(inside_mega)){
if(pagelayer_empty(menu_error)){
menu_error = 'Primary Menu Holder. Please select the correct menu.';
}
el.atts['nav_menu'] = menu_error;
return;
}
// Setting default toggle icon. If the icon is empty.
if(pagelayer_empty(el.atts['menu_toggle_icon'])){
el.atts['menu_toggle_icon'] = 'fas fa-bars';
}
// To avoid remove pagelayer id of mega menu item
var eleActive = !pagelayer_empty(pagelayer_active.el) && (el.id == pagelayer_active.el.id || jEle.find(pagelayer_active.el.$).length > 0);
if(pagelayer_empty(pagelayer_nav[menuID]) || !pagelayer_empty(pagelayer_nav_force_refresh[el.id])){
var pagelayer_nav_items_list = pagelayer_get_nav_items(jEle);
var findPar = jEle.find('.pagelayer-wp_menu-ul').parent();
el.atts['nav_menu'] = '';
// Get menu container for the hold place of the menu
if(findPar.length > 0){
el.atts['nav_menu'] = findPar[0].outerHTML;
}
// Clear any previous timeout
clearTimeout(pagelayer_wp_menu_timer);
// Set a timer for constant change
pagelayer_wp_menu_timer = setTimeout(function(){
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_fetch_primary_menu&postID='+pagelayer_postID, // Send post id to on live mode
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
nav_list: menuID,
pagelayer_nav_items: pagelayer_nav_items_list,
'pagelayer-live': 1
},
success: function(data) {
//console.log(data);
data = pagelayer_apply_megamenu_items(data, menuID, jEle, eleActive);
pagelayer_nav[menuID] = data;
},
complete: function() {
//console.log(data);
// Is element html rendered ?
var findCont = setInterval( function(){
var container = jEle.find('.pagelayer-wp-menu-container');
if(container.length < 1){
return;
}
clearInterval(findCont);
// Replace the menu HTML
container.find('.pagelayer-wp_menu-ul').parent().remove();
container.append(pagelayer_nav[menuID]);
var render_ref = pagelayer_render_menu_par;
pagelayer_render_menu_par = false;
container.find('.pagelayer-ele').each(function(){
var iEle = jQuery(this);
if(iEle.parent('.pagelayer-ele-wrap').length > 0){
return;
}
var id = pagelayer_assign_id(iEle);
pagelayer_element_setup('[pagelayer-id="'+id+'"]', true);
});
pagelayer_render_menu_par = render_ref;
pagelayer_primary_menu(jEle);
}, 100);
}
});
}, 500);
}else{
el.atts['nav_menu'] = pagelayer_apply_megamenu_items(pagelayer_nav[menuID], menuID, jEle, eleActive);
}
pagelayer_nav_force_refresh[el.id] = false;
}
// Render end the Primary menu
function pagelayer_render_end_pl_wp_menu(el){
var jEle = el.$;
var render_ref = pagelayer_render_menu_par;
pagelayer_render_menu_par = false;
// Re-setup the element
jEle.find('.pagelayer-ele').each(function(){
var ele = jQuery(this);
if(ele.parent('.pagelayer-ele-wrap').length > 0){
return;
}
var id = pagelayer_assign_id(ele);
pagelayer_element_setup('[pagelayer-id="'+id+'"]', true);
});
pagelayer_render_menu_par = render_ref;
pagelayer_primary_menu(el.$);
}
// The Primary menu handler on live
pagelayer_add_action('pagelayer_primary_menu_setup_end', function(e, jEle){
jEle.find('li.pagelayer-mega-menu-item a > .after-icon').unbind('click');
jEle.unbind('click.mega_menu');
jEle.on('click.mega_menu', 'li.pagelayer-mega-menu-item', function(e){
var target = jQuery(e.target);
var mEle = jQuery(this);
if(target.closest('.pagelayer-mega-menu').length > 0 || target.closest(mEle).length < 1){
return;
}
jQuery('.pagelayer-active-mega-menu').each(function(){
var oEle = jQuery(this);
if(mEle.is(oEle)){
return;
}
oEle.removeClass('pagelayer-active-mega-menu');
});
mEle.toggleClass('pagelayer-active-mega-menu');
});
});
var pagelayer_render_menu = {};
var pagelayer_render_menu_par = true;
// Render end the Primary menu
function pagelayer_render_end_pl_nav_menu_item(el){
if(pagelayer_empty(pagelayer_menus_items_ref[el.atts['ID']])){
return;
}
var jEle = el.$;
if(pagelayer_render_menu_par){
// Render parent
clearTimeout(pagelayer_render_menu);
pagelayer_render_menu = setTimeout(function(){
var par = jEle.closest('.pagelayer-wp_menu');
var plID = pagelayer_id(par);
if(par.length < 1) return;
pagelayer_nav_force_refresh[plID] = true;
pagelayer_render_menu_par = false;
pagelayer_sc_render(par);
pagelayer_render_menu_par = true;
}, 500);
}
}
var pagelayer_nav_menu_timmer = {}
// On nav dirty handler
pagelayer_add_action('pagelayer_do_dirty', function(e, jEle){
var navEle = jEle.closest('[pagelayer-tag="pl_nav_menu_item"]');
if(navEle.length < 1){
return;
}
var itemData = pagelayer_data(navEle);
var atts = itemData.atts;
var itemID = atts['ID'];
if( !(itemID in pagelayer_menus_items_ref) ){
pagelayer_menus_items_ref[itemID] = {};
}
var props = pagelayer_get_props(navEle);
var menuEle = jEle.closest('.pagelayer-wp_menu');
var plID = pagelayer_id(menuEle);
for(var prop in props['settings']){
for(var section in props[prop]){
if(section in atts){
pagelayer_menus_items_ref[itemID][section] = atts[section];
continue;
}
pagelayer_menus_items_ref[itemID][section] = '';
}
}
pagelayer_menus_items_ref[itemID]['pagelayer_content'] = navEle;
pagelayer_menus_items_ref[itemID]['is_dirty'] = true;
var currentID = pagelayer_get_att(menuEle, 'nav_list');
// Prevent unnecessary render
jQuery(pagelayer_editable).find('.pagelayer-wp_menu').each(function(){
var mEle = jQuery(this);
var mID = pagelayer_get_att(mEle, 'nav_list');
if(currentID != mID){
return;
}
mEle.attr('pagelayer-click-render', 1);
});
menuEle.removeAttr('pagelayer-click-render');
});
// We need to render the original content before we can start editing
pagelayer_add_action('pagelayer_element_clicked', function(e, jEle){
var menus = jQuery(pagelayer_editable).find('.pagelayer-wp_menu');
// Prevent unnecessary render
if(!jEle.hasClass('pagelayer-wp_menu') || menus.length < 2 || pagelayer_empty(jEle.attr('pagelayer-click-render'))){
return;
}
jEle.find('[pagelayer-tag="pl_nav_menu_item"]').each(function(){
var cEle = jQuery(this),
postID = pagelayer_get_att(cEle, 'ID');
if(!(postID in pagelayer_menus_items_ref)){
return;
}
var ref_data = pagelayer_menus_items_ref[postID];
if(!('is_dirty' in ref_data) || pagelayer_empty(ref_data['is_dirty'])){
return;
}
pagelayer_sc_render(jEle);
return false; // Break the loop
});
});
// Render the post navigation
function pagelayer_render_end_pl_post_nav(el){
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_post_nav&postID='+pagelayer_postID,
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
data: el['atts'],
},
async:false,
success: function(response){
//console.log(response);
var obj = jQuery.parseJSON(response);
el.$.find('.pagelayer-prev-post').html(obj['atts']['prev_link']);
el.$.find('.pagelayer-next-post').html(obj['atts']['next_link']);
}
});
}
// Render the site title
function pagelayer_render_pl_wp_title(el){
//console.log(el.tmp);
// Use default logo
if(pagelayer_empty(el.atts['logo_img_type'])){
// But is there a default logo
if(!pagelayer_empty(pagelayer_site_logo)){
el.atts['func_image'] = pagelayer_site_logo[el.atts['logo_img_size']+'-url'] || pagelayer_site_logo['url'];
el.atts['logo_img-title'] = pagelayer_empty(pagelayer_site_logo.title) ? '' : pagelayer_site_logo.title;
el.atts['logo_img-alt'] = pagelayer_empty(pagelayer_site_logo.alt) ? '' : pagelayer_site_logo.alt;
}
// Custom logo
}else{
el.atts['func_image'] = el.tmp['logo_img-'+el.atts['logo_img_size']+'-url'] || el.tmp['logo_img-url'];
el.atts['func_image'] = pagelayer_empty(el.atts['func_image']) ? el.atts['logo_img'] : el.atts['func_image'];
}
}
// Render the Post comment
function pagelayer_render_end_pl_post_comment(el){
var postID = pagelayer_postID;
if(el['atts']['post_type'] == 'custom' && el['atts']['post_id']){
postID = el['atts']['post_id'];
}
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_post_comment&postID='+postID,
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
},
success: function(response){
el.$.find('.pagelayer-post-comment-container').html(response);
}
});
}
var pagelayer_post_info_timer = {};
// Render the Post info list
function pagelayer_render_pl_post_info_list(el){
el.atts['post_info_content'] = 1;
// Clear any previous timeout
clearTimeout(pagelayer_post_info_timer[el.id]);
// Set a timer for constant change
pagelayer_post_info_timer[el.id] = setTimeout(function(){
// Make the call
jQuery.ajax({
url: pagelayer_ajax_url+'&action=pagelayer_post_info&postID='+pagelayer_postID,
type: 'post',
data: {
pagelayer_nonce: pagelayer_ajax_nonce,
el: el.atts,
},
success: function(response){
var obj = jQuery.parseJSON(response);
//console.log(obj);el['atts'] = obj;
if( pagelayer_empty(obj['post_info_content']) ){
el.$.find('.pagelayer-post-info-list-container').remove();
return;
}
el.$.find('.pagelayer-post-info-list-container').show();
el.$.find('.pagelayer-post-info-label').html(obj['post_info_content']);
el.$.find('.pagelayer-post-info-icon img').attr('src', obj['avatar_url']);
el.$.find('.pagelayer-post-info-list-container > a').attr('href', obj['link']);
}
});
}, 500);
}
// Render the Post info list
function pagelayer_render_html_pl_post_info_list(el){
el.$.find('.pagelayer-post-info-list-container').hide();
}
// Render the contact form
function pagelayer_render_pl_contact(el){
// Set post id in atts
el.atts['con_post_id'] = pagelayer_postID;
el.atts['grecaptcha'] = pagelayer_recaptch_site_key;
}
// Render the contact form
function pagelayer_render_end_pl_contact(el){
jQuery(el.$).find('.pagelayer-recaptcha').each(function(){
var recaptcha = jQuery(this);
var widgetID = recaptcha.attr('recaptcha-widget-id');
if( !pagelayer_empty(window.grecaptcha) && (!pagelayer_empty(widgetID) || widgetID == 0) ){
grecaptcha.reset(widgetID);
}else{
pagelayer_recaptcha_loader(recaptcha, true);
}
});
// Showing contact form message in the editor only.
if(el.atts['show_msg_box']){
var msgBox = el.$.find('.pagelayer-message-box');
if(el.$.find('.pagelayer-message-box').length==2){
msgBox.eq(0).text('Demo success box');
msgBox.eq(0).addClass('pagelayer-cf-msg-suc');
msgBox.eq(1).text('Demo failed box');
msgBox.eq(1).addClass('pagelayer-cf-msg-err');
}
}
pagelayer_set_atts(el.$, 'con_post_id', pagelayer_postID);
}
function pagelayer_render_end_pl_heading(el) {
pagelayer_search_widgets(el.$);
}
function pagelayer_render_end_pl_text(el) {
pagelayer_search_widgets(el.$);
}
// Render the contact form
function pagelayer_render_pl_contact_item(el){
var html = '';
var options = '';
var placeholder = '';
var required = '';
if(!pagelayer_empty(el.atts['required'])){
required = 'required';
}
if(!pagelayer_empty(el.atts['label_name']) && pagelayer_empty(el.atts['label_as_holder'])){
html = '';
}
if(!pagelayer_empty(el.atts['label_as_holder'])){
placeholder = el.atts['label_name'];
}else{
if(!pagelayer_empty(el.atts['placeholder'])) placeholder = el.atts['placeholder'];
}
// File accept
var file_accept = '.jpg,.jpeg,.png,.gif,.pdf,.doc,.docx,.ppt,.pptx,.odt,.avi,.ogg,.m4a,.mov,.mp3,.mp4,.mpg,.wav,.wmv';
if(!pagelayer_empty(el.atts['accept_file'])){
file_accept = el.atts['accept_file'];
}
if(el.atts['field_type'] == 'select'){
html += '';
}else if(el.atts['field_type'] == 'checkbox'){
if(!pagelayer_empty(el.atts['values'])){
options = el.atts['values'].split("\n");
html += '
';
}
// Required classes for particular rotate
el.atts['rotate_req'] = '';
var letters = ['pagelayer-aheading-rotate2', 'pagelayer-aheading-rotate3', 'type', 'pagelayer-aheading-scale'];
if(jQuery.inArray(el.atts['animations'], letters) != -1){
el.atts['rotate_req'] = 'letters ';
}
if(el.atts['animations'] == 'pagelayer-aheading-clip'){
el.atts['rotate_req'] = 'is-full-width ';
}
}
// Render animated heading
function pagelayer_render_end_pl_anim_heading(el){
var jEle = el.$;
pagelayer_anim_heading(jEle);
}
function pagelayer_render_pl_post_title(el){
el['atts']['open_html_tag'] = !pagelayer_empty(el['atts']['html_tag']) ? '<'+el['atts']['html_tag']+'>' : '';
el['atts']['close_html_tag'] = !pagelayer_empty(el['atts']['html_tag']) ? ''+el['atts']['html_tag']+'>' : '';
}
////////////////
// Freemium End
////////////////
// 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 = '
'+
'
Settings
'+
//'
Style
'+
'
Options
'+
'
Advanced
'+
'
'+
''+
''+
'
'+
'
'+
''+
'';
// 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('');
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('
'+
'
'+all_props[tab][section]+'
'+
''+
'
');
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('');
// 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('');
}
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('');
// 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 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('');
var label = row.children('.pagelayer-elp-label-div');
// Do we have screen ?
if('screen' in prop){
var mode = pagelayer_get_screen_mode();
var screen = '
'+
''+
''+
''+
''+
'
';
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('
Pro
');
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 += ''+prop['units'][i]+'';
}
label.append('
'+units+'
');
// 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 = '';
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('
'+label+'
');
};
// The Text property
function pagelayer_elp_text(row, prop){
var 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 '';
}
for (x in prop['list']){
// Single item
if(typeof prop['list'][x] == 'string'){
options += option(x, prop['list'][x]);
// Groups
}else{
options += '';
}
}
var 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 '
'+lang+'
';
}
var show_sel = function(val){
var sel_html = '';
jQuery.each(val, function(index, value){
sel_html += ''+prop['list'][value]+' x';
});
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 = '
'+
'
'+show_sel(selection)+'
'+
'
'+options+'
'+
'
';
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 = '
'+
''+
'
';
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 = '
';
for(var x in prop.list){
var addclass = (prop.c['val'] == x) ? active : '';
div += ''+prop.list[x]+'';
}
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 = '
'+
'
'+
'
'+
''+
'
'+pagelayer_l('drop_file')+'
'+
'
'+
''+
'
'+
'
'+
'
'+
''+
'
';
// Retina image icon
if(isRetina){
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 +='
'+
''+
'
'+
'
'+
'
'+
'
'+
''+
'
'+pagelayer_l('drop_file')+'
'+
'
'+
''+
'
'+
'
'+
'
'+
''+
'
'+
'
'+
'
'+
'
'+
''+
'
'+
'
'+
''+
'
'+
'
'+
'
'+
'
'+
'
'+
''+
'
'+pagelayer_l('drop_file')+'
'+
'
'+
''+
'
'+
'
'+
'
'+
''+
'
'+
'
';
}
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 = '
'+
'
'+
''+
'
';
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('');
}
}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('');
}
}
});
}
}
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('');
}
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('');
//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 = '
'+
''+
''+
'
';
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 = '
'+
''+
''+
'
';
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 = '
'+
''+
''+
'
';
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 = '
'+
''+
''+
'
'+
'
';
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 = '
'+
''+
'
';
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 = '
'+
''+
''+
'
'+
'
';
if(settingOpt){
div += '
'+
'
'+
'
'+
''+
'
'+
'
'+
''+
'
'+
'
'+
'
'+
'
'+
''+
'
'+
'
'+
''+
'
'+
'
'+
'
'+
'
'+
''+
'
'+
'
'+
''+
'
'+pagelayer_l('link_custom_attr_desc')+'
'+
'
'+
'
'+
'
';
}
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('ID : '+permaID+'');
}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 += '
';
row.append(div);
// Make all icons list
var html = '
';
if(pagelayer_loaded_icons.length > 1){
html += '';
}
html += ''+
'
'+pagelayer_l('Solid')+'
'+
'
'+pagelayer_l('Regular')+'
'+
'
'+pagelayer_l('Brand')+'
'+
''+
''+
'
';
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 += '
'+
'
';
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(''+name+'');
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(''+pagelayer_l('choose_icon')+'');
// Save and Render
_pagelayer_set_atts(row, '');
jQuery(this).hide();
return false;
});
}
// The Access Property
function pagelayer_elp_access(row, prop){
var 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 = '
'+
''+
'
'+
'
'+
'
'+
prop.label +''+
'
'+
''+
'
'+
'
'+
'
';
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 = '
'+
''+
'
'+
''+
''+
'
'+
'
'+
'
'+
'Global Colors'+
'
';
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 += '
';
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 = '
'+
''+
'
';
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 = ''+
'
';
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('
'+
'
'+
''+
''+title+''+
''+
''+
'
'+
''+
'
');
// 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 = '
'+
''+
'
';
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 = '
'+
''+
''+
''+
''+
''+
'
';
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 = ''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
'
'+
''+
''+
'
'+
'
'+
'
';
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 = ''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
''+
'
'+
'
'+
''+
'
'+
''+
''+
'
'+
'
'+
'
'+
''+
''+
'
'+
'
';
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 = ''+
'
';
jQuery.each(val,function(key, value){
div += '
'+
''+
''+
''+value+''+
'
';
});
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 = '
'+
'
'+
'Global Colors'+
'
';
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 += '