File: //var/www/lipovac/wp-content/plugins/LayerSlider/static/js/admin.js
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
if (this === null) {
throw new TypeError();
}
var t = Object(this);
var len = t.length >>> 0;
if (len === 0) {
return -1;
}
var n = 0;
if (arguments.length > 1) {
n = Number(arguments[1]);
if (n != n) { // shortcut for verifying if it's NaN
n = 0;
} else if (n != 0 && n != Infinity && n != -Infinity) {
n = (n > 0 || -1) * Math.floor(Math.abs(n));
}
}
if (n >= len) {
return -1;
}
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
for (; k < len; k++) {
if (k in t && t[k] === searchElement) {
return k;
}
}
return -1;
};
}
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function ucFirst(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
(function( $ ) {
$.fn.customCheckbox = function() {
return this.each(function() {
// Get element & hide it
var $el = $(this).hide();
// Create replacement element
var $rep = $('<a href="#"><span></span></a>').addClass('ls-checkbox').insertAfter(this);
// Check help attr
if($el.attr('data-help') !== "undefined") {
$rep.attr('data-help', $el.attr('data-help'));
}
// Set default state
if($el.prop('checked')) {
$rep.addClass('on');
} else {
$rep.addClass('off');
}
});
};
})( jQuery );
var lsScreenOptionsActions = {
init : function() {
// Form submit
jQuery(document).on('submit', '#ls-screen-options-form', function(e) {
e.preventDefault(); lsScreenOptionsActions.saveSettings(this, true);
});
// Checkboxes
jQuery(document).on('click', '#ls-screen-options-form input:checkbox', function() {
var reload = false;
if(typeof lsScreenOptionsActions[ jQuery(this).attr('name')] != "undefined") {
lsScreenOptionsActions[ jQuery(this).attr('name')](this); }
if(jQuery(this).hasClass('reload')) { reload = true; }
lsScreenOptionsActions.saveSettings( jQuery(this).closest('form'), reload );
});
},
saveSettings : function(form, reload) {
var options = {};
jQuery(form).find('input').each(function() {
if( jQuery(this).is(':checkbox')) {
options[jQuery(this).attr('name')] = jQuery(this).prop('checked');
} else {
options[jQuery(this).attr('name')] = jQuery(this).val();
}
});
// Save settings
jQuery.post(ajaxurl, jQuery.param({ action : 'ls_save_screen_options', options : options }), function() {
if(typeof reload != "undefined" && reload === true) {
document.location.href = 'admin.php?page=layerslider';
}
});
},
showTooltips : function(el) {
if( jQuery(el).prop('checked') === true ) {
lsTooltip.init();
} else {
lsTooltip.destroy();
}
}
};
var LS_BoxToggles = {
init : function() {
jQuery('.ls-box-toggle').click(function() {
// Get parent
var parent = jQuery(this).closest('.ls-box');
var button = jQuery(this);
// Check state
if(parent.hasClass('collapsed')) {
parent.removeClass('collapsed');
button.removeClass('dashicons-arrow-right').addClass('dashicons-arrow-down');
jQuery.post(ajaxurl, {
action : 'ls_update_box_toggles',
key : button.attr('id'),
collapsed : false
});
} else {
parent.addClass('collapsed');
button.removeClass('dashicons-arrow-down').addClass('dashicons-arrow-right');
jQuery.post(ajaxurl, {
action : 'ls_update_box_toggles',
key : button.attr('id'),
collapsed : true
});
}
});
}
};
var lsTooltip = {
timeout : 0,
init : function() {
jQuery(document).on('mouseover', '[data-help]', function() {
var el = this;
lsTooltip.timeout = setTimeout(function() {
lsTooltip.open(el);
}, 400);
});
jQuery(document).on('mouseout', '[data-help]', function() {
clearTimeout(lsTooltip.timeout);
lsTooltip.close();
});
},
destroy : function() {
jQuery(document).off('mouseover', '[data-help]');
jQuery(document).off('mouseout', '[data-help]');
},
open : function(el) {
// Create tooltip
jQuery('body').prepend( jQuery('<div>', { 'class' : 'ls-tooltip' })
.append( jQuery('<div>', { 'class' : 'inner' }))
.append( jQuery('<span>') )
);
// Get tooltip
var tooltip = jQuery('.ls-tooltip');
// Set tooltip text
tooltip.find('.inner').html( jQuery(el).data('help') );
// Get viewport dimensions
var v_w = jQuery(window).width();
// Get element dimensions
var e_w = jQuery(el).width();
// Get element position
var e_l = jQuery(el).offset().left;
var e_t = jQuery(el).offset().top;
// Get toolip dimensions
var t_w = tooltip.outerWidth();
var t_h = tooltip.outerHeight();
// Position tooltip
tooltip.css({ top : e_t - t_h - 10, left : e_l - (t_w - e_w) / 2 });
// Fix right position
if(tooltip.offset().left + t_w > v_w) {
tooltip.css({ 'left' : 'auto', 'right' : 10 });
tooltip.find('span').css({ left : 'auto', right : v_w - jQuery(el).offset().left - jQuery(el).outerWidth() / 2 - 17, marginLeft : 'auto' });
}
},
close : function() {
jQuery('.ls-tooltip').remove();
}
};
var LayerSlider = {
uploadInput : null,
dragIndex : 0,
newIndex : 0,
timeout : 0,
counter : 0,
selectMainTab : function(el) {
// Remove highlight from the other tabs
jQuery('#ls-main-nav-bar a').removeClass('active');
// Highlight selected tab
jQuery(el).addClass('active');
// Hide other pages
jQuery('#ls-pages .ls-page').removeClass('active');
// Show selected page
jQuery('#ls-pages .ls-page').eq( jQuery(el).index() ).addClass('active');
// Init CodeMirror
if(jQuery(el).hasClass('callbacks')) {
if(jQuery('.ls-callback-page .CodeMirror-code').length === 0) {
LS_CodeMirror.init({ mode: 'javascript', autofocus : false, styleActiveLine : false });
jQuery(window).scrollTop(0);
}
}
},
selectSettingsTab : function(li) {
var index = jQuery(li).index();
jQuery(li).siblings().removeClass('active');
jQuery(li).addClass('active');
jQuery('div.ls-settings-contents tbody.active').removeClass('active');
jQuery('div.ls-settings-contents tbody').eq(index).addClass('active');
// SliderStyle Editor
if(jQuery(li).hasClass('codemirror')) {
if(jQuery('div.ls-settings-contents tbody:eq('+index+') .CodeMirror-code').length === 0) {
var cm = CodeMirror.fromTextArea( jQuery('div.ls-settings-contents tbody:eq('+index+') textarea.ls-codemirror')[0], {
mode: 'css', theme: 'solarized', lineWrapping : true
});
cm.on("change", function(instance) {
instance.getTextArea().value = instance.getValue();
});
}
}
},
addLayer : function() {
// Clone the sample layer page
var clone = jQuery('#ls-sample > div').clone();
// Append to place
clone.appendTo('#ls-layers');
// Close other layers
jQuery('#ls-layer-tabs a').removeClass('active');
// Get layer index
var index = clone.index();
// Add layer tab
var tab = jQuery('<a href="#">Slide #'+(index+1)+'<span class="dashicons dashicons-dismiss"></span>').insertBefore('#ls-add-layer');
// Open new layer
tab.click();
// Add sortables
LayerSlider.addSortables();
// Generate preview
LayerSlider.generatePreview(index);
LayerSlider.addPreviewSlider( jQuery('.ls-editor-slider', clone) );
LayerSlider.addColorPicker( clone.find('.ls-colorpicker') );
},
removeLayer : function(el) {
if(confirm('Are you sure you want to remove this slide?')) {
// Get menu item
var item = jQuery(el).parent();
// Get layer
var layer = jQuery(el).closest('#ls-layer-tabs').next().children().eq( item.index() );
// Open next or prev layer
if(layer.next().length > 0) {
item.next().click();
} else if(layer.prev().length > 0) {
item.prev().click();
}
// Remove menu item
item.remove();
// Remove the layer
layer.remove();
// Reindex layers
LayerSlider.reindexLayers();
}
},
selectLayer : function(el) {
// Close other layers
jQuery('#ls-layer-tabs a').removeClass('active');
jQuery('#ls-layers .ls-layer-box').removeClass('active');
// Open new layer
jQuery(el).addClass('active');
jQuery('#ls-layers .ls-layer-box').eq( jQuery(el).index() ).addClass('active');
// Open first sublayer
// jQuery('#ls-layers .ls-layer-box').eq( jQuery(el).index() ).find('.ls-sublayers td:first').click();
// Update preview
LayerSlider.generatePreview( jQuery(el).index() );
// Stop preview
LayerSlider.stop();
// Hide Timeline
lsTimeLine.hide( jQuery('.ls-tl') );
},
duplicateLayer : function(el) {
// Clone fix
LayerSlider.cloneFix();
// Get layer index
var index = jQuery(el).closest('.ls-layer-box').index();
// Append new tab
jQuery('<a href="#">Slide #0<span class="dashicons dashicons-dismiss"></span></a>').insertBefore('#ls-layer-tabs a:last');
// Rename tab
LayerSlider.reindexLayers();
// Clone layer
var clone = jQuery(el).closest('.ls-layer-box').clone();
// Append new layer
clone.appendTo('#ls-layers');
// Remove active class if any
clone.removeClass('active');
// Add sortables
LayerSlider.addSortables();
// Color picker
jQuery('.ls-editor-slider', clone).empty().next().text('100%');
LayerSlider.addPreviewSlider( jQuery('.ls-editor-slider', clone) );
clone.find('.ls-colorpicker').minicolors('destroy');
LayerSlider.addColorPicker( clone.find('.ls-colorpicker') );
},
addPreviewSlider : function(target) {
jQuery(target).slider({
value: 1,
min: 0.3,
max: 2,
step: 0.1,
range: 'min',
orientation: "horizontal",
slide : function(event, ui) {
// Set value
jQuery(ui.handle).parent().next().text(''+parseInt(ui.value*100)+'%');
// Get vars
var $slide = jQuery(ui.handle).closest('.ls-layer-box');
var $preview = $slide.find('.ls-preview-wrapper').css('zoom', ui.value);
}
});
},
addSublayer : function(el) {
// Get clone from sample
var clone = jQuery('#ls-sample .ls-sublayers > tr').clone();
// Appent to place
clone.appendTo( jQuery(el).prev().find('.ls-sublayers') );
// Get sublayer index
var index = clone.index();
// Rewrite sublayer number
clone.find('.ls-sublayer-number').html( index + 1);
clone.find('.ls-sublayer-title').val('Layer #' + (index + 1) );
// Open it
clone.click();
LayerSlider.addColorPicker( clone.find('.ls-colorpicker') );
},
selectSubLayer : function(el) {
if(jQuery(el).index() == jQuery(el).parent().children('.active:first').index() ) {
return;
}
// Close other sublayers
jQuery(el).parent().children().removeClass('active');
// Open the new one
jQuery(el).addClass('active');
// Hide Timeline
lsTimeLine.hide( jQuery(el).closest('table').find('.ls-tl') );
},
selectSublayerPage : function(el) {
// Close previous page
jQuery(el).parent().children().removeClass('active');
jQuery(el).parent().next().find('.ls-sublayer-page').removeClass('active');
// Open the selected one
jQuery(el).addClass('active');
jQuery(el).parent().next().find('.ls-sublayer-page').eq( jQuery(el).index() ).addClass('active');
},
removeSublayer : function(el) {
if(!confirm('Are you sure you want to remove this layer?')) {
return;
}
// Get sublayer
var sublayer = jQuery(el).closest('tr');
// Get layer index
var layer = jQuery(el).closest('.ls-layer-box');
// Open the next or prev sublayer
if(sublayer.next().length > 0) {
sublayer.next().click();
} else if(sublayer.prev().length > 0) {
sublayer.prev().click();
}
// Remove menu item
jQuery(el).remove();
// Remove sublayer
sublayer.remove();
// Update preview
LayerSlider.generatePreview( layer.index() );
},
highlightSublayer : function(el) {
if(!jQuery(el).hasClass('active')) {
// Deselect other checkboxes
jQuery('.ls-highlight').removeClass('active');
jQuery(el).addClass('active');
// Restore sublayers in the preview
jQuery(el).closest('.ls-layer-box').find('.draggable').children().css({ opacity : 0.5 });
// Get element index
var index = jQuery(el).closest('tr').index();
// Highlight selected one
jQuery(el).closest('.ls-layer-box').find('.draggable').children().eq(index).css({ zIndex : 1000, opacity : 1 });
} else {
// Restore sublayers in the preview
jQuery(el).removeClass('active');
jQuery(el).closest('.ls-layer-box').find('.draggable').children().each(function(index) {
jQuery(this).css({ zIndex : 10 + index });
jQuery(this).css('opacity', 1);
});
}
},
eyeSublayer : function(el) {
if(jQuery(el).hasClass('active')) {
jQuery(el).removeClass('active');
} else {
jQuery(el).addClass('active');
}
// Update preview
LayerSlider.generatePreview( jQuery('.ls-box.active').index() );
},
lockSublayer : function(el) {
if(jQuery(el).hasClass('active')) {
jQuery(el).removeClass('active');
} else {
jQuery(el).addClass('active');
}
// Update preview
LayerSlider.generatePreview( jQuery('.ls-box.active').index() );
},
addColorPicker : function(el) {
jQuery(el).minicolors({
opacity: true,
changeDelay : 100,
position: 'bottom right',
change : function(hex, opacity) {
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
}
});
},
duplicateSublayer : function(el) {
// Clone fix
LayerSlider.cloneFix();
// Clone sublayer
var clone = jQuery(el).closest('.ls-sublayer-wrapper').closest('tr').clone();
// Remove active class
clone.removeClass('active');
// Append
clone.appendTo( jQuery(el).closest('.ls-sublayers') );
// Rename sublayer
clone.find('.ls-sublayer-title').val( clone.find('.ls-sublayer-title').val() + ' copy' );
LayerSlider.reindexSublayers();
// Update preview
LayerSlider.generatePreview( jQuery(el).closest('.ls-layer-box').index() );
// Color picker
clone.find('.ls-colorpicker').minicolors('destroy');
LayerSlider.addColorPicker( clone.find('.ls-colorpicker') );
},
skipSublayer : function(el) {
LayerSlider.generatePreview( jQuery(el).closest('.ls-layer-box').index() );
},
selectMediaType : function(el) {
// Layer and sections
var layer = jQuery(el).closest('.ls-sublayer-page');
var section = jQuery(el).data('section');
var sections = jQuery('.ls-layer-sections', layer).children();
// Set active class
jQuery(el).siblings().removeAttr('class');
jQuery(el).attr('class', 'active');
// Store selection
jQuery('input[name="media"]', layer).val(section);
// Show the corresponding sections
sections.hide().removeClass('ls-hidden');
jQuery('.ls-sublayer-element', layer).hide().removeClass('ls-hidden');
jQuery('.ls-html-code p', layer).hide().removeClass('ls-hidden');
switch(section) {
case 'img': sections.eq(0).show(); break;
case 'text':
sections.eq(1).show();
layer.find('.ls-sublayer-element').show();
break;
case 'html':
sections.eq(1).show();
jQuery('.ls-html-code p', layer).show();
break;
case 'post':
sections.eq(1).show();
sections.eq(2).show();
break;
}
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
},
selectElementType : function(el) {
// Layer and properties
var layer = jQuery(el).closest('.ls-sublayer-page');
var element = jQuery(el).data('element');
// Set active class
jQuery(el).siblings().removeClass('active');
jQuery(el).addClass('active');
// Store selection
jQuery('input[name="type"]', layer).val(element);
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
},
willGeneratePreview : function(index) {
clearTimeout(LayerSlider.timeout);
LayerSlider.timeout = setTimeout(function() {
if(index == -1) {
jQuery('#ls-layers .ls-layer-box').each(function( index ) {
LayerSlider.generatePreview(index);
});
} else {
LayerSlider.generatePreview(index);
}
}, 1000);
},
generatePreview : function(index) {
// Get main elements
var slide = jQuery('#ls-layers .ls-layer-box').eq(index);
var preview = jQuery('.ls-preview').eq( index + 1 );
var draggable = preview.find('.draggable');
var $settings = jQuery('.ls-settings');
// Get sizes
var width = jQuery('input[name="width"]', $settings).val();
var height = jQuery('input[name="height"]', $settings).val();
height = (height.indexOf('%') != -1) ? 400 : height;
var sub_container = jQuery('input[name="sublayercontainer"]', $settings).val();
// Which width?
if(sub_container != '' && sub_container != 0) {
width = sub_container;
}
// Set sizes
preview.add(draggable).css({ width : width, height : height });
preview.parent().css({ width : width });
// Get post content if any
var posts = window.lsPostsJSON;
var postOffset = jQuery('input[name="post_offset"]', slide).val();
if(postOffset == -1) { postOffset = index; }
var post = posts[postOffset];
// Get backgrounds
var bgColor = jQuery('input[name="backgroundcolor"]', $settings).val();
bgColor = (bgColor !== '') ? bgColor : 'transparent';
var bgImage = jQuery('input[name="backgroundimage"]', $settings).val();
bgImage = (bgImage !== '') ? 'url('+bgImage+')' : 'none';
// Set backgrounds
preview.css({ backgroundColor : bgColor });
preview.css({ backgroundImage : bgImage });
// Get yourLogo
var yourLogo = jQuery('input[name="yourlogo"]', $settings).val();
var yourLogoStyle = jQuery('input[name="yourlogostyle"]', $settings).val();
// Remove previous yourLogo
preview.parent().find('.yourlogo').remove();
// Set yourLogo
if(yourLogo && yourLogo !== '') {
var logo = jQuery('<img src="'+yourLogo+'" class="yourlogo">').prependTo( jQuery(preview).parent() );
logo.attr('style', yourLogoStyle);
var oL = oR = oT = oB = 'auto';
if( logo.css('left') != 'auto' ){
var logoLeft = logo[0].style.left;
}
if( logo.css('right') != 'auto' ){
var logoRight = logo[0].style.right;
}
if( logo.css('top') != 'auto' ){
var logoTop = logo[0].style.top;
}
if( logo.css('bottom') != 'auto' ){
var logoBottom = logo[0].style.bottom;
}
if( logoLeft && logoLeft.indexOf('%') != -1 ){
oL = width / 100 * parseInt( logoLeft ) - logo.width() / 2;
}else{
oL = parseInt( logoLeft );
}
if( logoRight && logoRight.indexOf('%') != -1 ){
oR = width / 100 * parseInt( logoRight ) - logo.width() / 2;
}else{
oR = parseInt( logoRight );
}
if( logoTop && logoTop.indexOf('%') != -1 ){
oT = height / 100 * parseInt( logoTop ) - logo.height() / 2;
}else{
oT = parseInt( logoTop );
}
if( logoBottom && logoBottom.indexOf('%') != -1 ){
oB = height / 100 * parseInt( logoBottom ) - logo.height() / 2;
}else{
oB = parseInt( logoBottom );
}
logo.css({
left : oL,
right : oR,
top : oT,
bottom : oB
});
}
// Get slide background
var background = jQuery('input[name="background"]', slide).val();
if(background == '[image-url]') {
background = post['image-url'];
jQuery('.slide-image:eq(0) img', slide).attr('src', post['image-url']);
}
// Set slide background
if(background != '') {
draggable.css({
backgroundImage : 'url('+background+')',
backgroundPosition : 'center center'
});
} else {
draggable.css({
backgroundImage : 'none'
});
}
// Empty draggable
draggable.children().remove();
// Iterate over the sublayers
jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-sublayers > tr').each(function(layerkey) {
if(jQuery('input[name="skip"]', this).prop('checked')) {
jQuery('<div>').appendTo(draggable).hide();
return true; }
if(jQuery('.ls-icon-eye', this).hasClass('active')) {
jQuery('<div>').appendTo(draggable).hide();
return true;
}
var item;
var type = jQuery('input[name="type"]', this).val();
var html = jQuery('textarea[name="html"]', this).val();
switch( jQuery('input[name="media"]', this).val() ) {
case 'img': type = 'img'; break;
case 'html': type = 'div'; break;
case 'post': type = 'post'; break;
}
var id = jQuery('input[name="id"]', this).val();
var classes = jQuery('input[name="class"]', this).val();
// Append element
if(type == 'img') {
var url = jQuery('input[name="image"]', this).val();
if(url == '[image-url]') {
url = post['image-url'];
jQuery('.slide-image:eq(0) img', this).attr('src', post['image-url']);
}
var tmpContent = (url !== '') ? '<img src="'+url+'">' : '<div>';
item = jQuery(tmpContent).appendTo(draggable);
} else if(type == 'post') {
var textlength = jQuery('input[name="post_text_length"]', this).val();
for(var key in post) {
if(html.indexOf('['+key+']') !== -1) {
if( (key == 'title' || key == 'content' || key == 'excerpt') && textlength > 0) {
post[key] = post[key].substr(0, textlength);
}
html = html.replace('['+key+']', post[key]);
}
}
// Test for html wrapper
html = jQuery.trim(html);
var first = html.substr(0, 1);
var last = html.substr(html.length-1, 1);
if(first == '<' && last == '>') {
html = html.replace(/(\r\n|\n|\r)/gm,"");
item = jQuery(html).appendTo(draggable);
} else {
item = jQuery('<div>').html(html).appendTo(draggable);
}
} else {
item = jQuery('<'+type+'>').appendTo(draggable);
if(html !== '') { item.html(html); }
}
// Editor options
if(jQuery('.ls-icon-lock', this).hasClass('active')) {
item.addClass('disabled'); }
// Get style settings
var top = jQuery('input[name="top"]', this).val();
var left = jQuery('input[name="left"]', this).val();
var custom = jQuery('textarea[name="style"]', this).val();
// Styles
var styles = {};
jQuery('.ls-sublayer-style input.auto', this).each(function() {
var cssVal = jQuery(this).val();
var cssProp = jQuery(this).attr('name');
if(cssVal === '') {
return true;
}
if(cssVal.slice(-1) == ';' ) {
cssVal = cssVal.substring(0, cssVal.length - 1);
}
styles[cssProp] = isNumber(cssVal) ? cssVal + 'px' : cssVal;
});
// Apply style settings and attributes
item.attr('style', custom).css(styles);
item.attr('id', id).addClass(classes);
if(jQuery('input[name="wordwrap"]', this).prop('checked') === false) {
item.css('white-space', 'nowrap');
}
var pt = isNaN( parseInt( item.css('padding-top') ) ) ? 0 : parseInt( item.css('padding-top') );
var pl = isNaN( parseInt( item.css('padding-left') ) ) ? 0 : parseInt( item.css('padding-left') );
var bt = isNaN( parseInt( item.css('border-top-width') ) ) ? 0 : parseInt( item.css('border-top-width') );
var bl = isNaN( parseInt( item.css('border-left-width') ) ) ? 0 : parseInt( item.css('border-left-width') );
var setPositions = function(){
// Position the element
if(top.indexOf('%') !== -1) {
item.css({ top : draggable.height() / 100 * parseInt( top ) - item.height() / 2 - pt - bt });
} else {
item.css({ top : parseInt(top) });
}
if(left.indexOf('%') !== -1) {
item.css({ left : draggable.width() / 100 * parseInt( left ) - item.width() / 2 - pl - bl });
} else {
item.css({ left : parseInt(left) });
}
};
if( item.is('img') ){
item.load(function(){
setPositions();
}).attr('src',item.attr('src') );
}else{
setPositions();
}
// Z-index
item.css({ zIndex : 10 + item.index() });
});
// Add draggable
LayerSlider.addDraggable();
},
openMediaLibrary : function() {
// New 3.5 media uploader
if(newMediaUploader == true) {
jQuery(document).on('click', '.ls-upload', function(e) {
e.preventDefault();
uploadInput = this;
// Get library type
var type = jQuery(this).hasClass('ls-insert-media') ? 'video,audio' : 'image';
if(jQuery(this).hasClass('ls-insert-media') || jQuery(this).hasClass('ls-mass-upload')) {
var multiple = true;
} else {
var multiple = false;
}
// Media Library params
var frame = wp.media({
title : 'Pick an image to use it in LayerSlider WP',
multiple : multiple,
library : { type : type },
button : { text : 'Insert' }
});
// Runs on select
frame.on('select',function() {
// Image with preview
var attachment = frame.state().get('selection').first().toJSON();
var attachments = frame.state().get('selection').toJSON();
if( jQuery(uploadInput).hasClass('ls-mass-upload') ) {
// Get layer
var layer = jQuery(uploadInput).closest('.ls-layer-box');
var sublayer = layer.find('.ls-sublayers > tr:last-child');
// Set first image
jQuery(uploadInput).prev().val(attachment.url);
jQuery(uploadInput).prev().prev().val(attachment.id);
if(typeof attachment.sizes.thumbnail != "undefined") {
jQuery(uploadInput).find('img').attr('src', attachment.sizes.thumbnail.url);
} else {
jQuery(uploadInput).find('img').attr('src', attachment.sizes.full.url);
}
for(c = 1; c < attachments.length; c++) {
var count = layer.find('.ls-sublayers > tr').length + 1;
var clone = jQuery('#ls-sample .ls-sublayers > tr').clone();
var input = clone.appendTo( layer.find('.ls-sublayers') ).find('div.ls-image');
input.prev().val(attachments[c].url);
input.prev().prev().val(attachments[c].id);
if(typeof attachments[c].sizes.thumbnail != "undefined") {
input.find('img').attr('src', attachments[c].sizes.thumbnail.url);
} else {
input.find('img').attr('src', attachments[c].sizes.full.url);
}
clone.find('input[name="subtitle"]').val('Layer #' + count);
clone.find('.ls-sublayer-number').text(count);
}
// Expand lastly inserted layer
if(typeof clone != "undefined") {
clone.click();
}
} else if( jQuery(uploadInput).is('div.ls-image') ) {
jQuery(uploadInput).prev().val(attachment.url);
jQuery(uploadInput).prev().prev().val(attachment.id);
if(typeof attachment.sizes.thumbnail != "undefined") {
jQuery(uploadInput).find('img').attr('src', attachment.sizes.thumbnail.url);
} else {
jQuery(uploadInput).find('img').attr('src', attachment.sizes.full.url);
}
// Multimedia HTML
} else if( jQuery(uploadInput).hasClass('ls-insert-media')) {
var hasVideo = false;
var hasAudio = false;
var videos = [];
var audios = [];
var mediaHTML = '';
// Iterate over selected items
for(c = 0; c < attachments.length; c++) {
var url = '/' + attachments[c].url.split('/').slice(3).join('/');
if(attachments[c].type === 'video') {
hasVideo = true;
videos.push({ url: url, mime: attachment.mime });
} else if(attachments[c].type === 'audio') {
hasAudio = true;
audios.push({ url: url, mime: attachment.mime });
}
}
// Insert multimedia
if(hasVideo) {
mediaHTML += '<video width="320" height="240" preload="metadata" controls>\r\n';
for(c = 0; c < videos.length; c++) {
mediaHTML += '\t<source src="'+videos[c].url+'" type="'+videos[c].mime+'">\r\n';
}
mediaHTML += '</video>';
}
if(hasAudio) {
if(hasVideo) { mediaHTML += '\r\n\r\n'; }
mediaHTML += '<audio preload="metadata" nocontrols>\r\n';
for(c = 0; c < audios.length; c++) {
mediaHTML += '\t<source src="'+audios[c].url+'" type="'+audios[c].mime+'">\r\n';
}
mediaHTML += '</audio>';
}
jQuery(uploadInput).parent().prev().val(mediaHTML);
// Image with input field
} else {
jQuery(uploadInput).val( attachment['url'] );
if(jQuery(uploadInput).is('input[name="image"]')) {
jQuery(uploadInput).prev().attr('src', attachment['url']);
}
}
// Generate preview
LayerSlider.generatePreview( jQuery('.ls-layer-box.active').index() );
});
// Open ML
frame.open();
});
} else {
// Bind upload button to show media uploader
jQuery(document).on('click', '.ls-upload', function(e) {
e.preventDefault();
uploadInput = this;
tb_show('Upload or select a new image to insert into LayerSlider WP', 'media-upload.php?type=image&TB_iframe=true&width=650&height=400');
return false;
});
}
},
insertUpload : function() {
// Bind an event to image url insert
window.send_to_editor = function(html) {
// Insert image
var img = jQuery('img',html).attr('src');
if(jQuery(uploadInput).is('div.ls-image')) {
jQuery(uploadInput).prev().val(attachment.url);
jQuery(uploadInput).prev().prev().val(attachment.id);
jQuery(uploadInput).children('img').attr('src', attachment.sizes.thumbnail.url);
} else {
jQuery(uploadInput).val( img );
}
// Remove thickbox and update preview
tb_remove();
LayerSlider.generatePreview( jQuery('.ls-layer-box.active').index() );
};
},
addSortables : function() {
// Bind sortable function
jQuery('.ls-sublayer-sortable').sortable({
// Properties
handle : 'span.ls-sublayer-sortable-handle',
containment : 'parent',
tolerance : 'pointer',
delay: 150,
axis : 'y',
// Events
helper: function(e, tr) {
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index) {
// Set helper cell sizes to match the original sizes
jQuery(this).width($originals.eq(index).width());
});
return $helper;
},
update : function(event, ui) {
LayerSlider.reindexSublayers();
LayerSlider.generatePreview( jQuery('#ls-layers .ls-layer-box.active').index() );
},
});
},
addLayerSortables : function() {
// Bind sortable function
jQuery('#ls-layer-tabs').sortable({
//axis : 'x',
start : function() {
LayerSlider.dragIndex = jQuery('.ui-sortable-placeholder').index() - 1;
},
change: function() {
jQuery('.ui-sortable-helper').addClass('moving');
},
stop : function(event, ui) {
// Get old index
var oldIndex = LayerSlider.dragIndex;
// Get new index
var index = jQuery('.moving').index();
if( index > -1 ){
// Rearraange layer pages
if(index == 0) {
jQuery('#ls-layers .ls-layer-box').eq(oldIndex).prependTo('#ls-layers');
}else{
var layerObj = jQuery('#ls-layers .ls-layer-box').eq(oldIndex);
jQuery('#ls-layers .ls-layer-box').eq(oldIndex).remove();
layerObj.insertAfter('#ls-layers .ls-layer-box:eq('+(index-1)+')');
}
}
jQuery('.moving').removeClass('moving');
// Reindex layers
LayerSlider.reindexLayers();
// Sortable
LayerSlider.addSortables();
// Reinit colorpicker
jQuery('#ls-layers .ls-colorpicker').minicolors('destroy');
LayerSlider.addColorPicker('#ls-layers .ls-colorpicker');
},
containment : 'parent',
tolerance : 'pointer',
items : 'a:not(.unsortable)'
});
},
addDraggable : function() {
// Add dragable
jQuery('.draggable').children().draggable({
drag : function() {
LayerSlider.dragging();
},
stop : function() {
LayerSlider.dragging();
}
});
jQuery('.draggable .disabled').draggable('disable');
},
dragging : function() {
// Get positions
var top = parseInt(jQuery('.ui-draggable-dragging').position().top);
var left = parseInt(jQuery('.ui-draggable-dragging').position().left);
// Get index
var wrapper = jQuery('.ui-draggable-dragging').closest('.ls-layer-box');
var index = jQuery('.ui-draggable-dragging').index();
// Set positions
wrapper.find('input[name="top"]').eq(index).val(top + 'px');
wrapper.find('input[name="left"]').eq(index).val(left + 'px');
},
selectDragElement : function(el) {
jQuery(el).closest('.ls-layer-box').find('.ls-sublayers > tr').eq( jQuery(el).index() ).click();
jQuery(el).closest('.ls-layer-box').find('.ls-sublayers > tr').eq( jQuery(el).index() ).find('.ls-sublayer-nav a:eq(1)').click();
},
reindexSublayers : function(el) {
jQuery('#ls-layers .ls-layer-box.active .ls-sublayers > tr').each(function(index) {
// Reindex sublayer number
jQuery(this).find('.ls-sublayer-number').html( index + 1 );
// Reindex sublayer title if it is untoched
if(
jQuery(this).find('.ls-sublayer-title').val().indexOf('Sublayer') != -1 &&
jQuery(this).find('.ls-sublayer-title').val().indexOf('Layer') != -1 &&
jQuery(this).find('.ls-sublayer-title').val().indexOf('copy') == -1
) {
jQuery(this).find('.ls-sublayer-title').val('Layer #' + (index + 1) );
}
});
},
reindexLayers : function() {
jQuery('#ls-layer-tabs a:not(.unsortable)').each(function(index) {
jQuery(this).html('Slide #' + (index + 1) + '<span class="dashicons dashicons-dismiss"></span>');
});
},
play : function( index ) {
// Get layerslider contaier
var layerslider = jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-real-time-preview');
// Stop
if(layerslider.children().length > 0) {
jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview').show();
layerslider.find('.ls-container').layerSlider('stop');
layerslider.html('').hide();
jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview-button').html('Enter Preview').removeClass('playing');
// Remove Timeline slider
lsTimeLine.remove();
return;
}
// Slider settings
var width = jQuery('.ls-settings input[name="width"]').val();
var height = jQuery('.ls-settings input[name="height"]').val();
var posts = window.lsPostsJSON;
// Switch between preview and editor
layerslider.show();
layerslider = jQuery('<div class="layerslider">').appendTo(layerslider);
jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview').hide();
jQuery('#ls-layers .ls-layer-box').eq(index).find('.ls-preview-button').html('Exit Preview').addClass('playing');
// Apply global settings
layerslider.css({
width: width,
height : height
});
// Add backgrounds
var backgroundColor = jQuery('.ls-settings input[name="backgroundcolor"]').val();
var backgroundImage = jQuery('.ls-settings input[name="backgroundimage"]').val();
if(backgroundColor != '') {
layerslider.css({ backgroundColor : backgroundColor }); }
if(backgroundImage != '') {
layerslider.css({ backgroundImage : 'url('+backgroundImage+')' }); }
// Iterate over the slides
jQuery('#ls-layers .ls-layer-box').each(function(slidekey) {
// Get post data
var slide = jQuery(this);
// Get post content if any
var postOffset = jQuery('input[name="post_offset"]', slide).val();
if(postOffset == -1) { postOffset = index; }
var post = posts[postOffset];
// Slide properties
var layerprops = '';
jQuery(this).find('.layerprop').each(function() {
layerprops += ''+jQuery(this).attr('name')+':'+jQuery(this).val()+';';
});
// Build the Slide
var layer = jQuery('<div class="ls-layer">').appendTo(layerslider);
layer.attr('data-ls', layerprops);
// Get background
var background = jQuery(this).find('input[name="background"]').val();
if(background === '[image-url]') {
background = post['image-url'];
}
// Add background
if(background != '') {
jQuery('<img src="'+background+'" class="ls-bg">').appendTo(layer);
}
// Get selected transitions
var tr2d = jQuery('input[name="2d_transitions"]', this).val();
var tr3d = jQuery('input[name="3d_transitions"]', this).val();
var tr2dcustom = jQuery('input[name="custom_2d_transitions"]', this).val();
var tr3dcustom = jQuery('input[name="custom_3d_transitions"]', this).val();
// Apply transitions
if( tr2d == '' && tr3d == '' && tr2dcustom == '' && tr3dcustom == '' ) {
layer.attr('data-ls', layer.attr('data-ls') + ' transition2d: all; ');
layer.attr('data-ls', layer.attr('data-ls') + ' transition3d: all; ');
} else {
if(tr2d != '') layer.attr('data-ls', layer.attr('data-ls') + ' transition2d: '+tr2d+'; ');
if(tr3d != '') layer.attr('data-ls', layer.attr('data-ls') + ' transition3d: '+tr3d+'; ');
if(tr2dcustom != '') layer.attr('data-ls', layer.attr('data-ls') + ' customtransition2d: '+tr2dcustom+'; ');
if(tr3dcustom != '') layer.attr('data-ls', layer.attr('data-ls') + ' customtransition3d: '+tr3dcustom+'; ');
}
// Iterate over layers
jQuery(this).find('.ls-sublayers > tr').each(function(layerkey) {
// Skip sublayer?
if( jQuery('input[name="skip"]', this).prop('checked') ) {
jQuery('<div>').appendTo(layer)
return true;
}
// Gather sublayer data
var type = jQuery('input[name="type"]', this).val();
switch( jQuery('input[name="media"]', this).val() ) {
case 'img': type = 'img'; break;
case 'html': type = 'div'; break;
case 'post': type = 'post'; break;
}
var image = jQuery('input[name="image"]', this).val();
var html = jQuery('textarea[name="html"]', this).val();
var style = jQuery('textarea[name="style"]', this).val();
var top = jQuery('input[name="top"]', this).val();
var left = jQuery('input[name="left"]', this).val();
var skip = jQuery('input[name="skip"]', this).prop('checked');
var url = jQuery('input[name="url"]', this).val();
var id = jQuery('input[name="id"]', this).val();
var classes = jQuery('input[name="class"]', this).val();
// Sublayer properties
var sublayerprops = '';
jQuery(this).find('.sublayerprop').each(function() {
if(jQuery(this).is(':checkbox')) {
sublayerprops += jQuery(this).attr('name')+':'+jQuery(this).prop('checked')+';';
} else {
sublayerprops += jQuery(this).attr('name')+':'+jQuery(this).val()+';';
}
});
// Styles
var styles = {};
jQuery(this).find('.ls-sublayer-style input.auto').each(function() {
var cssVal = jQuery(this).val();
var cssProp = jQuery(this).attr('name');
if(cssVal === '') { return true; }
if(cssVal.slice(-1) == ';' ) {
cssVal = cssVal.substring(0, cssVal.length - 1);
}
styles[cssProp] = isNumber(cssVal) ? cssVal + 'px' : cssVal;
});
// Build the sublayer
var sublayer;
if(type == 'img') {
if(image == '') { return true; }
if(image == '[image-url]') { image = post['image-url']; }
sublayer = jQuery('<img src="'+image+'" class="ls-s">').appendTo(layer);
} else if(type == 'post') {
// Parse post placeholders
var textlength = jQuery('input[name="post_text_length"]', this).val();
for(var key in post) {
if(html.indexOf('['+key+']') !== -1) {
if( (key == 'title' || key == 'content' || key == 'excerpt') && textlength > 0) {
post[key] = post[key].substr(0, textlength);
}
html = html.replace('['+key+']', post[key]);
}
}
// Test html
html = jQuery.trim(html);
var first = html.substr(0, 1);
var last = html.substr(html.length-1, 1);
if(first == '<' && last == '>') {
html = html.replace(/(\r\n|\n|\r)/gm,"");
sublayer = jQuery(html).appendTo(layer).addClass('ls-s');
} else {
sublayer = jQuery('<div>').appendTo(layer).html(html).addClass('ls-s');
}
} else {
sublayer = jQuery('<'+type+'>').appendTo(layer).html(html).addClass('ls-s');
}
// Apply styles and attributes
sublayer.attr('id', id).attr('style', style).addClass(classes)
sublayer.css(styles);
if(jQuery('input[name="wordwrap"]', this).prop('checked') == false) {
sublayer.css('white-space', 'nowrap'); }
// Position the element
if(top.indexOf('%') != -1) { sublayer.css({ top : top });
} else { sublayer.css({ top : parseInt(top) }); }
if(left.indexOf('%') != -1) { sublayer.css({ left : left });
} else { sublayer.css({ left : parseInt(left) }); }
if(url != '' && url.match(/^\#[0-9]/)) {
sublayer.addClass('ls-linkto-' + url.substr(1));
}
sublayer.attr('data-ls', sublayerprops);
});
});
// Get slider settings
var autoPlayVideos = jQuery('.ls-settings-contents input[name="autoplayvideos"]').prop('checked');
autoPlayVideos = autoPlayVideos ? true : false;
// Init layerslider
jQuery(layerslider).layerSlider({
width : width,
height : height,
responsive : false,
skin : 'preview',
skinsPath : pluginPath + 'skins/',
animateFirstLayer : true,
firstLayer : (index + 1),
autoStart : false,
pauseOnHover : false,
autoPlayVideos : autoPlayVideos,
cbInit : function(){
lsTimeLine.create();
},
cbTimeLineStart : function(g,d){
if( g.nextLayerIndex == jQuery('#ls-layer-tabs .active').index() + 1 ){
lsTimeLine.start(d);
}
}
});
jQuery(layerslider).layerSlider('start');
},
stop : function() {
// Get layerslider contaier
var layersliders = jQuery('#ls-layers .ls-layer-box .ls-real-time-preview');
// Stop the preview if any
if(layersliders.children().length > 0) {
// Show the editor
jQuery('#ls-layers .ls-layer-box .ls-preview').show();
// Stop LayerSlider
layersliders.find('.ls-container').layerSlider('stop');
// Empty and hide the Preview
layersliders.html('').hide();
// Rewrote the Preview button text
jQuery('#ls-layers .ls-layer-box .ls-preview-button').text('Enter Preview').removeClass('playing');
}
// Remove Timeline slider
lsTimeLine.remove();
},
openTransitionGallery : function() {
// Create overlay
jQuery('body').prepend( jQuery('<div>', { 'class' : 'ls-overlay'}));
// Empty table
jQuery('#ls-transition-window table').empty();
// Append transitions
LayerSlider.appendTransition('', '2d_transitions', layerSliderTransitions['t2d']);
LayerSlider.appendTransition('', '3d_transitions', layerSliderTransitions['t3d']);
// Append custom transitions
if(typeof layerSliderCustomTransitions != "undefined") {
if(layerSliderCustomTransitions['t2d'].length) {
LayerSlider.appendTransition('Custom 2D transitions', 'custom_2d_transitions', layerSliderCustomTransitions['t2d']);
}
if(layerSliderCustomTransitions['t3d'].length) {
LayerSlider.appendTransition('Custom 3D transitions', 'custom_3d_transitions', layerSliderCustomTransitions['t3d']);
}
}
// Select proper tab
jQuery('#ls-transition-window .filters li.active').click();
// Close event
jQuery(document).one('click', '.ls-overlay', function() {
LayerSlider.closeTransitionGallery();
});
jQuery('#ls-transition-window').show();
},
closeTransitionGallery : function() {
jQuery('#ls-transition-window').hide();
jQuery('.ls-overlay').remove();
},
appendTransition : function(title, tbodyclass, transitions) {
// Append new tbody
var tbody = jQuery('<tbody>').data('tr-type', tbodyclass).appendTo('#ls-transition-window table');
// Get checked transitions
var checked = jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+tbodyclass+'"]').val();
checked = (checked != '') ? checked.split(',') : [];
if(title != '') {
jQuery('<tr>').appendTo(tbody).append('<th colspan="4">'+title+'</th>');
}
for(c = 0; c < transitions.length; c+=2) {
// Append new table row
var tr = jQuery('<tr>').appendTo(tbody)
.append( jQuery('<td class="c"></td>') )
.append( jQuery('<td></td>') )
.append( jQuery('<td class="c"></td>') )
.append( jQuery('<td></td>')
);
// Append transition col 1 & 2
tr.children().eq(0).append('<i>'+(c+1)+'</i><i class="dashicons dashicons-yes"></i>');
tr.children().eq(1).append( jQuery('<a>', { 'href' : '#', 'html' : transitions[c]['name']+'', 'data-key' : (c+1) } ) )
if(transitions.length > (c+1)) {
tr.children().eq(2).append('<i>'+(c+2)+'</i><i class="dashicons dashicons-yes"></i>');
tr.children().eq(3).append( jQuery('<a>', { 'href' : '#', 'html' : transitions[(c+1)]['name']+'', 'data-key' : (c+2) } ) );
}
// Check transitions
if(checked.indexOf(''+(c+1)+'') != -1 || checked == 'all') {
tr.children().eq(0).addClass('added');
tr.children().eq(1).addClass('added');
}
if((checked.indexOf(''+(c+2)+'') != -1 || checked == 'all') ) {
tr.children().eq(2).addClass('added');
tr.children().eq(3).addClass('added');
}
}
},
selectAllTransition : function(index, check) {
// Get checkbox and transition type
var checkbox = jQuery('#ls-transition-window header i:last');
var cat = jQuery('#ls-transition-window tbody').eq(index).data('tr-type');
if(typeof check != undefined && check == true) {
jQuery('#ls-transition-window tbody').eq(index).find('td').addClass('added');
checkbox.attr('class', 'on').text('Deselect all');
jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val('all');
} else {
jQuery('#ls-transition-window tbody').eq(index).find('td').removeClass('added');
checkbox.attr('class', 'off').text('Select all');
jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val('');
}
},
toggleTransition : function(el) {
// Toggle addded class
if(jQuery(el).parent().hasClass('added')) {
jQuery(el).parent().removeClass('added').prev().removeClass('added');
} else {
jQuery(el).parent().addClass('added').prev().addClass('added');
}
// Get transitions
var trs = jQuery(el).closest('tbody').find('td');
// All selected
if(trs.filter('.c.added').length == trs.filter('.c').length) {
LayerSlider.selectAllTransition( jQuery(el).closest('tbody').index(), true );
return;
// Uncheck select all
} else {
// Check the checkbox
jQuery('#ls-transition-window header i:last').attr('class', 'off').text('Select all');
}
// Get category
var cat = jQuery(el).closest('tbody').data('tr-type');
// Gather checked selected transitions
var checked = [];
trs.filter('.added').find('a').each(function() {
checked.push( jQuery(this).data('key') );
});
// Set hidden input
jQuery('#ls-layers .ls-layer-box.active').find('input[name="'+cat+'"]').val( checked.join(',') );
},
showTransition : function(el) {
// Get transition index
var index = parseInt(jQuery(el).data('key')) - 1;
// Create popup
jQuery('body').prepend( jQuery('<div>', { 'class' : 'ls-popup' })
.append( jQuery('<div>', { 'class' : 'inner ls-transition-preview' }))
);
// Get popup
var popup = jQuery('.ls-popup');
// Get viewport dimensions
var v_w = jQuery(window).width();
// Get element dimensions
var e_w = jQuery(el).width();
// Get element position
var e_l = jQuery(el).offset().left;
var e_t = jQuery(el).offset().top;
// Get toolip dimensions
var t_w = popup.outerWidth();
var t_h = popup.outerHeight();
// Position tooltip
popup.css({ top : e_t - t_h - 14, left : e_l - (t_w - e_w) / 2 });
// Fix top
if(popup.offset().top < 20) {
popup.css('top', e_t + 26);
}
// Fix left
if(popup.offset().left < 20) {
popup.css('left', 20);
}
// Get transition class
var trclass = jQuery(el).closest('tbody').data('tr-type');
// Built-in 3D
if(trclass == '3d_transitions') {
var trtype = '3d';
var trObj = layerSliderTransitions['t'+trtype+''][index];
// Built-in 2D
} else if(trclass == '2d_transitions') {
var trtype = '2d';
var trObj = layerSliderTransitions['t'+trtype+''][index];
// Custom 3D
} else if(trclass == 'custom_3d_transitions') {
var trtype = '3d';
var trObj = layerSliderCustomTransitions['t'+trtype+''][index];
// Custom 3D
} else if(trclass == 'custom_2d_transitions') {
var trtype = '2d';
var trObj = layerSliderCustomTransitions['t'+trtype+''][index];
}
// Init transition
popup.find('.inner').lsTransitionPreview({
transitionType : trtype,
transitionObject : trObj,
imgPath : lsTrImgPath,
skinsPath: lsTrImgPath+'../skins/',
delay : 100
});
},
hideTransition : function(el) {
// Stop transition
jQuery('.ls-popup').find('.inner').lsTransitionPreview('stop');
// Remove transition
jQuery('.ls-popup').remove();
},
save : function(el) {
var settings = slides = callbacks = [];
// Temporary disable submit button
jQuery('.ls-publish').addClass('saving').find('button').text('Saving ...').attr('disabled', true);
// Slider settings
jQuery('.ls-slider-settings').find('input:not(.nochange), select, textarea').each(function() {
jQuery(this).data('name', jQuery(this).attr('name') );
jQuery(this).attr('name', 'ls_data[properties]['+jQuery(this).attr('name')+']');
});
// Post options
jQuery('#ls-post-options').find('input, select').each(function() {
jQuery(this).data('name', jQuery(this).attr('name') );
if(jQuery(this).attr('name').substr(-2, 2) == '[]') {
var nameAttr = jQuery(this).attr('name');
nameAttr = nameAttr.substring(0, nameAttr.length - 2);
jQuery(this).attr('name', 'ls_data[properties]['+nameAttr+'][]');
} else {
jQuery(this).attr('name', 'ls_data[properties]['+jQuery(this).attr('name')+']');
}
});
// Slides
jQuery('#ls-layers .ls-layer-box').each(function(layer) {
jQuery('.ls-slide-options', this).find('input, select').each(function() {
jQuery(this).data('name', jQuery(this).attr('name') );
jQuery(this).attr('name', 'ls_data[layers]['+layer+'][properties]['+jQuery(this).attr('name')+']');
});
// Layers
jQuery(this).find('.ls-sublayers > tr').each(function(sublayer) {
// Transtions
var transitionProps = {};
jQuery(this).find('.sublayerprop').each(function() {
transitionProps[jQuery(this).attr('name')] = jQuery(this).is(':checkbox') ? jQuery(this).prop('checked') : jQuery(this).val();
jQuery(this).data('name', jQuery(this).attr('name') ).attr('name', '');
});
// Style editor
var styles = {};
jQuery(this).find('input.auto').each(function() {
if(jQuery(this).val() != '') {
styles[jQuery(this).attr('name')] = jQuery(this).val();
}
jQuery(this).data('name', jQuery(this).attr('name') ).attr('name', '');
});
// Generate styles object
jQuery(this).find('.ls-sublayer-style input[name="styles"]').val( JSON.stringify(styles) );
jQuery(this).find('.ls-sublayer-options input[name="transition"]').val( JSON.stringify(transitionProps) );
// Iterate over the sublayer properties
jQuery(this).find('input, select, textarea').filter(':not(.auto,.sublayerprop)').each(function() {
if(jQuery(this).attr('name') == '') { return true; }
jQuery(this).data('name', jQuery(this).attr('name') );
jQuery(this).attr('name', 'ls_data[layers]['+layer+'][sublayers]['+sublayer+']['+jQuery(this).attr('name')+']');
});
});
slides.push( jQuery('input, textarea, select', this).serialize() );
});
// Callbacks
jQuery('.ls-callback-page textarea').each(function() {
jQuery(this).data('name', jQuery(this).attr('name') );
jQuery(this).attr('name', 'ls_data[properties]['+jQuery(this).attr('name')+']');
});
// Save slider
jQuery.ajax({
type: 'post', url: ajaxurl, dataType: 'text',
data: {
action: 'ls_save_slider',
id: jQuery('#ls-slider-form input[name="slider_id"]').val(),
settings: jQuery('.ls-slider-settings, #ls-post-options').find('input:not(.nochange), select, textarea').serialize(),
callbacks: jQuery('.ls-callback-page textarea').serialize(),
slides: slides
},
error : function(jqXHR, textStatus, errorThrown) {
alert('It seems there is a server issue that prevented LayerSlider from saving your work. Please, try to temporary disable themes/plugins, or contact with your hosting provider. Your HTTP server thrown the following error: \n\n' + errorThrown);
},
complete : function(data) {
// Button feedback
jQuery('.ls-publish').removeClass('saving').addClass('saved').find('button').text('Saved');
setTimeout(function() {
jQuery('.ls-publish').removeClass('saved').find('button').text('Save changes').attr('disabled', false);
}, 2000);
// Store fields name attrs
jQuery('#ls-slider-form').find('input, select, textarea').each(function() {
if(!! jQuery(this).data('name')) {
jQuery(this).attr('name', jQuery(this).data('name'));
}
});
}
});
},
cloneFix : function() {
jQuery('textarea').each(function() {
jQuery(this).text( jQuery(this).val() );
});
// Select clone fix
jQuery('select:not([multiple])').each(function() {
// Get selected index
var index = jQuery(this).find('option:selected').index();
// Deselect old options
jQuery(this).find('option').attr('selected', false);
// Select the new one
jQuery(this).find('option').eq( index ).attr('selected', true);
});
}
};
var LS_GoogleFontsAPI = {
results : 0,
fontName : null,
fontIndex : null,
init : function() {
// Prefetch fonts
jQuery('.ls-font-search input').focus(function() {
LS_GoogleFontsAPI.getFonts();
});
// Search
jQuery('.ls-font-search button').click(function(e) {
e.preventDefault();
var input = jQuery(this).prev()[0];
LS_GoogleFontsAPI.timeout = setTimeout(function() {
LS_GoogleFontsAPI.search(input);
}, 500);
});
jQuery('.ls-font-search input').keydown(function(e) {
if(e.which === 13) {
e.preventDefault();
var input = this;
LS_GoogleFontsAPI.timeout = setTimeout(function() {
LS_GoogleFontsAPI.search(input);
}, 500);
}
});
// Select font
jQuery('.ls-google-fonts .fonts').on('click', 'li:not(.unselectable)', function() {
LS_GoogleFontsAPI.showVariants(this);
});
// Add font event
jQuery('.ls-font-search').on('click', 'button.add-font', function(e) {
e.preventDefault();
LS_GoogleFontsAPI.addFonts(this);
});
// Back to results event
jQuery('.ls-google-fonts .variants').on('click', 'button:last', function(e) {
e.preventDefault();
LS_GoogleFontsAPI.showFonts(this);
});
// Close event
jQuery(document).on('click', '.ls-overlay', function() {
if(jQuery(this).data('manualclose')) {
return false;
}
if(jQuery('.ls-pointer').length) {
jQuery(this).remove();
jQuery('.ls-pointer').children('div.fonts').show().next().hide();
jQuery('.ls-pointer').animate({ marginTop : 40, opacity : 0 }, 150, function() {
this.style.display = 'none';
});
}
});
// Remove font
jQuery('.ls-font-list').on('click', 'a.remove', function(e) {
e.preventDefault();
jQuery(this).parent().animate({ height : 0, opacity : 0 }, 300, function() {
// Add notice if needed
if(jQuery(this).siblings().length < 2) {
jQuery(this).parent().append(
jQuery('<li>', { 'class' : 'ls-notice', 'text' : 'You didn\'t add any Google font to your library yet.'})
);
}
jQuery(this).remove();
});
});
// Add script
jQuery('.ls-google-fonts .footer select').change(function() {
// Prevent adding the placeholder option tag
if(jQuery('option:selected', this).index() !== 0) {
// Selected item
var item = jQuery('option:selected', this);
var hasDuplicate = false;
// Prevent adding duplicates
jQuery('.ls-google-font-scripts input').each(function() {
if(jQuery(this).val() === item.val()) {
hasDuplicate = true;
return false;
}
});
// Add item
if(!hasDuplicate) {
var clone = jQuery('.ls-google-font-scripts li:first').clone();
clone.find('span').text( item.text() );
clone.find('input').val( item.val() );
clone.removeClass('ls-hidden').appendTo('.ls-google-font-scripts');
}
// Show the placeholder option tag
jQuery('option:first', this).prop('selected', true);
}
});
// Remove script
jQuery('.ls-google-font-scripts').on('click', 'li a', function(event) {
event.preventDefault();
if(jQuery('.ls-google-font-scripts li').length > 2) {
jQuery(this).closest('li').remove();
} else {
alert('You need to have at least one character set added. Please select another item before removing this one.');
}
});
},
getFonts : function() {
if(LS_GoogleFontsAPI.results == 0) {
var API_KEY = 'AIzaSyC_iL-1h1jz_StV_vMbVtVfh3h2QjVUZ8c';
jQuery.getJSON('https://www.googleapis.com/webfonts/v1/webfonts?key=' + API_KEY, function(data) {
LS_GoogleFontsAPI.results = data;
});
}
},
search : function(input) {
// Hide overlay if any
jQuery('.ls-overlay').remove();
// Get search field
var searchValue = jQuery(input).val().toLowerCase();
// Wait until fonts being fetched
if(LS_GoogleFontsAPI.results != 0 && searchValue.length > 2 ) {
// Search
var indexes = [];
var found = jQuery.grep(LS_GoogleFontsAPI.results.items, function(obj, index) {
if(obj.family.toLowerCase().indexOf(searchValue) !== -1) {
indexes.push(index);
return true;
}
});
// Get list
var list = jQuery('.ls-font-search .ls-pointer .fonts ul');
// Remove previous contents and append new ones
list.empty();
if(found.length) {
for(c = 0; c < found.length; c++) {
list.append( jQuery('<li>', { 'data-key' : indexes[c], 'text' : found[c]['family'] }));
}
} else {
list.append(jQuery('<li>', { 'class' : 'unselectable' })
.append( jQuery('<h4>', { 'text' : 'No results were found' }))
);
}
// Show pointer and append overlay
jQuery('.ls-font-search .ls-pointer').show().animate({ marginTop : 15, opacity : 1 }, 150);
jQuery('<div>', { 'class' : 'ls-overlay ls-add-slider-overlay'}).prependTo('body');
}
},
showVariants : function(li) {
// Get selected font
var fontName = jQuery(li).text();
var fontIndex = jQuery(li).data('key');
var fontObject = LS_GoogleFontsAPI.results.items[fontIndex]['variants'];
LS_GoogleFontsAPI.fontName = fontName;
LS_GoogleFontsAPI.fontIndex = fontIndex;
// Get and empty list
var list = jQuery(li).closest('div').next().children('ul');
list.empty();
// Change header
jQuery(li).closest('.ls-box').children('.header').text('Select "'+fontName+'" variants');
// Append variants
for(c = 0; c < fontObject.length; c++) {
list.append( jQuery('<li>', { 'class' : 'unselectable' })
.append( jQuery('<input>', { 'type' : 'checkbox'} ))
.append( jQuery('<span>', { 'text' : ucFirst(fontObject[c]) }))
);
}
// Init checkboxes
list.find(':checkbox').customCheckbox();
// Show variants
jQuery(li).closest('.fonts').hide().next().show();
},
showFonts : function(button) {
jQuery(button).closest('.ls-box').children('.header').text('Choose a font family');
jQuery(button).closest('.variants').hide().prev().show();
},
addFonts: function(button) {
// Get variants
var variants = jQuery(button).parent().prev().find('input:checked');
var apiUrl = [];
var urlVariants = [];
apiUrl.push(LS_GoogleFontsAPI.fontName.replace(/ /g, '+'));
if(variants.length) {
apiUrl.push(':');
variants.each(function() {
urlVariants.push( jQuery(this).siblings('span').text().toLowerCase() );
});
apiUrl.push(urlVariants.join(','));
}
LS_GoogleFontsAPI.appendToFontList( apiUrl.join('') );
},
appendToFontList : function(url) {
// Empty notice if any
jQuery('ul.ls-font-list li.ls-notice').remove();
var index = jQuery('ul.ls-font-list li').length - 1;
// Append list item
var item = jQuery('ul.ls-font-list li.ls-hidden').clone();
item.children('input:text').val(url).attr('name', 'urlParams[]');
item.children('input:checkbox').attr('name', 'onlyOnAdmin[]');
item.appendTo('ul.ls-font-list').attr('class', '');
// Reset search field
jQuery('.ls-font-search input').val('');
// Close pointer
jQuery('.ls-overlay').click();
}
};
var lsTimeLine = {
opened : false,
init : function(){
jQuery(document).on('click', '.ls-tl-toggle', function(e) {
e.preventDefault();
var t = jQuery(this).closest('table');
var tl = jQuery(this).closest('table').find('.ls-tl');
if( tl.eq(0).css('display') == 'none' ){
lsTimeLine.show(t,tl);
}else{
lsTimeLine.hide(tl);
}
});
},
show : function(t,tl){
if( t.find('tr').length != -1 ){
if( t.find('tr.active').length != -1 ){
this.opened = t.find('tr.active');
t.find('tr.active').removeClass('active');
}else{
this.opened = false;
}
// Adjust the width of layer's title field
jQuery('.ls-sublayer-title').outerWidth(138);
var osd = parseInt( jQuery('#ls-layers .active').find('input[name="slidedelay"]').val() );
tl.addClass('ls-tl-active');
tl.each(function(){
var slidedelay = osd;
var percent = slidedelay / 100;
var tableWidth = '100%';
var tlVal = [];
var tlName = ['delayin','durationin','showuntil','durationout'];
var tlTTName = ['Delay in','Duration in','Show until','Duration out'];
tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="delayin"]').val() ) );
tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="durationin"]').val() ) );
tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="showuntil"]').val() ) );
tlVal.push( parseInt( jQuery(this).closest('.ls-sublayer-wrapper').find('input[name="durationout"]').val() ) );
var osu = tlVal[2];
if( tlVal[2] === 0 ){
tlVal[3] = 0;
tlVal[2] = slidedelay - ( tlVal[0] + tlVal[1] ) > 0 ? slidedelay - ( tlVal[0] + tlVal[1] ) : 0;
}
if( slidedelay > tlVal[0] + tlVal[1] + tlVal[2] + tlVal[3] ){
tableWidth = ( tlVal[0] + tlVal[1] + tlVal[2] + tlVal[3] ) / percent + '%';
}
jQuery(this).find('table').css({
width : tableWidth
});
for(var x = 0; x<tlVal.length; x++ ){
slidedelay -= tlVal[x];
var el = jQuery(this).find('.ls-tl-'+tlName[x]);
var w = tlVal[x] / percent + '%';
if( slidedelay < 0 ){
w = ( tlVal[x] + slidedelay ) / percent + '%';
el.css('width',w);
el.attr('data-help', tlTTName[x] + ': ' + (tlVal[x] + slidedelay) + ' ms (original: ' + tlVal[x] + ' ms but the current Slide delay is ' + osd + ' ms, so this slide will change before)');
break;
}else{
el.css('width',w);
if( x == 2 && osu == 0 ){
el.attr('data-help', 'This layer will be shown until the slide change and it will be animate out with the other layers.');
}else{
el.attr('data-help', tlTTName[x] + ': ' + tlVal[x] + ' ms');
}
}
}
});
// create ruler
var h = t.find('.ls-sublayers').height();
var tr = jQuery('<div>').addClass('ls-tl-ruler').appendTo( t.find('tr:eq(0) td') );
var rn = osd%1000 === 0 ? osd/1000 + 1 : parseInt( osd/1000 ) + 2;
var l, d, ms;
for( var r=0; r<rn;r++ ){
l = r === rn-1 ? 100 + '%' : ( r * 1000 ) / ( osd / 100 ) + '%';
ms = r === rn-1 ? osd : r*1000;
d = jQuery('<div>').css({
top: -5,
left: l,
height: h+6
}).appendTo( tr );
jQuery('<p>').text( ms+' ms' ).appendTo( d );
}
}
},
hide : function(tl){
tl.removeClass('ls-tl-active');
// Adjust the width of layer's title field
jQuery('.ls-sublayer-title').width(250);
jQuery('.ls-tl-ruler').remove();
if( this.opened && jQuery('#ls-layers .active .ls-sublayers tr.active').length == 0 ){
this.opened.addClass('active');
}
this.opened = false;
},
create : function(){
var tls = jQuery('<div>').addClass('ls-tl-slider').appendTo('.ls-tl-active');
// var timer = jQuery('<div>').addClass('ls-tl-timer').appendTo('.ls-tl-slider:eq(0)');
},
start : function(d){
var slidedelay = parseInt( jQuery('#ls-layers .active').find('input[name="slidedelay"]').val() );
var tls = jQuery('.ls-tl-slider');
var w = jQuery('.ls-tl-active:eq(0)').width();
var d = d ? d : 0;
tls.css({
width: 0
}).delay(d).animate({
width : w
}, slidedelay, 'linear' );
/*
var timer;
var t = function(){
timer = parseInt( (tls.eq(0).width() / w * slidedelay)/50 ) * 50 + 50;
setTimeout(function(){
console.log('s')
jQuery('.ls-tl-timer').text( timer + ' ms');
if( timer < slidedelay ){
t();
}else{
jQuery('.ls-tl-timer').text( slidedelay + ' ms');
}
},50);
};
t();
*/
},
remove : function(){
jQuery('.ls-tl-slider').stop().remove();
}
};
var LS_CodeMirror = {
init : function(settings) {
var defaults = {
mode: 'css',
theme: 'solarized',
lineNumbers: true,
autofocus: true,
indentUnit: 4,
indentWithTabs: true,
foldGutter: true,
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
styleActiveLine: true,
extraKeys: {
"Ctrl-Q": function(cm) {
cm.foldCode(cm.getCursor());
}
}
}
if(typeof settings !== "undefined") {
jQuery.extend(defaults, settings);
}
jQuery('.ls-codemirror').each(function() {
var cm = CodeMirror.fromTextArea(this, defaults);
cm.on("change", function(instance) {
instance.getTextArea().value = instance.getValue();
});
});
}
};
var LS_PostOptions = {
init : function() {
jQuery('#ls-layers').on('click', '.ls-configure-posts', function(e) {
e.preventDefault(); LS_PostOptions.open(this);
});
jQuery('.ls-configure-posts-modal .header a').click(function(e) {
e.preventDefault(); LS_PostOptions.close();
});
jQuery('#ls-post-options select:not(.ls-post-taxonomy, .post_offset)').change(function() {
LS_PostOptions.change(this);
});
jQuery('#ls-post-options select.offset').change(function() {
jQuery('#ls-layers .ls-layer-box.active input[name="post_offset"]').val( jQuery(this).val() );
LayerSlider.willGeneratePreview( jQuery('.ls-layer-box.active').index() );
});
jQuery('#ls-post-options select.ls-post-taxonomy').change(function() {
LS_PostOptions.getTaxonoies(this);
});
jQuery('#ls-layers').on('click', '.ls-post-placeholders li', function() {
LS_PostOptions.insertPlaceholder(this);
});
},
open : function(el) {
// Create overlay
jQuery('body').prepend(jQuery('<div>', { 'class' : 'ls-overlay'}));
// Get slide's post offset
var offset = jQuery('#ls-layers .ls-layer-box.active input[name="post_offset"]').val();
offset = parseInt(offset) + 1;
// Show modal window
var modal = jQuery('#ls-post-options').show();
modal.find('select.offset option').prop('selected', false).eq(offset).prop('selected', true);
// Close event
jQuery(document).one('click', '.ls-overlay', function() {
LS_PostOptions.close();
});
// First open?
if(modal.find('.ls-post-previews ul').children().length === 0) {
LS_PostOptions.change( modal.find('select')[0] );
}
},
getTaxonoies : function(select) {
var target = jQuery(select).next().empty();
if(jQuery(select).val() == 0) {
LS_PostOptions.change(select);
} else {
jQuery.post(ajaxurl, jQuery.param({ action : 'ls_get_taxonomies', taxonomy : jQuery(select).val() }), function(data) {
var data = jQuery.parseJSON(data);
for(c = 0; c < data.length; c++) {
target.append( jQuery('<option>', { 'value' : data[c]['term_id'], 'text' : data[c]['name'] }));
}
});
}
},
change : function(el) {
// Get options
var items = {};
jQuery('#ls-post-options').find('select').each(function() {
items[ jQuery(this).data('param') ] = jQuery(this).val();
});
jQuery.post(ajaxurl, jQuery.param({ action: 'ls_get_post_details', params : items }), function(data) {
// Handle data
var parsed = jQuery.parseJSON(data);
window.lsPostsJSON = parsed;
// Update preview
LayerSlider.willGeneratePreview( jQuery('.ls-layer-box.active').index() );
LS_PostOptions.update(el, parsed );
});
},
update : function(el, data) {
var preview = jQuery('#ls-post-options').find('.ls-post-previews ul').empty();
if(data.length === 0) {
preview.append( jQuery('<li>')
.append( jQuery('<h4>', { 'text' : 'No posts were found with the current filters.' }) )
);
} else {
for(c = 0; c < data.length; c++) {
preview.append( jQuery('<li>')
.append( jQuery('<span>', { 'class' : 'counter', 'text' : ''+(c+1)+'. ' }))
.append( jQuery('<img>', { 'src' : data[c]['thumbnail'] } ))
.append( jQuery('<h3>', { 'html' : data[c]['title'] } ))
.append( jQuery('<p>', { 'html' : data[c]['content'] } ))
.append( jQuery('<span>', { 'class' : 'author', 'text' : data[c]['date-published']+' by '+data[c]['author'] } ))
);
}
}
},
close : function() {
jQuery('#ls-post-options').hide();
jQuery('.ls-overlay').remove();
},
insertPlaceholder : function(el) {
var element = jQuery(el).closest('.ls-sublayer-page').find('textarea[name="html"]')[0];
var text = (typeof jQuery(el).data('placeholder') != "undefined") ? jQuery(el).data('placeholder') : jQuery(el).children().text();
if (document.selection) {
element.focus();
var sel = document.selection.createRange();
sel.text = text;
element.focus();
} else if (element.selectionStart || element.selectionStart === 0) {
var startPos = element.selectionStart;
var endPos = element.selectionEnd;
var scrollTop = element.scrollTop;
element.value = element.value.substring(0, startPos) + text + element.value.substring(endPos, element.value.length);
element.focus();
element.selectionStart = startPos + text.length;
element.selectionEnd = startPos + text.length;
element.scrollTop = scrollTop;
} else {
element.value += text;
element.focus();
}
jQuery(element).keyup();
}
};
jQuery(document).ready(function() {
// Global
// Tooltips
if(typeof lsScreenOptions != 'undefined' && lsScreenOptions['showTooltips'] == 'true') {
lsTooltip.init();
}
// Screen options
jQuery('#ls-screen-options').children().first().appendTo('#screen-meta');
jQuery('#ls-screen-options').children().last().appendTo('#screen-meta-links');
// Screen option actions
lsScreenOptionsActions.init();
// CodeMirror
if(document.location.href.indexOf('&action=edit') === -1) {
LS_CodeMirror.init();
}
// Checkbox event
jQuery(document).on('click', '.ls-checkbox', function(e){
// Prevent browers default submission
e.preventDefault();
// Get checkbox
var el = jQuery(this).prev()[0];
if( jQuery(el).is(':checked') ) {
jQuery(el).prop('checked', false);
jQuery(this).removeClass('on').addClass('off');
} else {
jQuery(el).prop('checked', true);
jQuery(this).removeClass('off').addClass('on');
}
// Trigger events
jQuery('#ls-layers').trigger( jQuery.Event('click', { target : el } ) );
jQuery(document).trigger( jQuery.Event('click', { target : el } ) );
});
// Share sheet
jQuery('#ls-share-template .inner a').click(function(e) {
e.preventDefault();
var newWindow = window.open('', '_blank', 'width=700,height=400');
newWindow.location.href = jQuery(this).attr('href');
newWindow.focus();
});
jQuery('#ls-share-template h3 a').click(function(e) {
e.preventDefault();
jQuery('#ls-share-template, .ls-overlay').remove();
});
// List view
if(
document.location.href.indexOf('page=layerslider') != -1 &&
document.location.href.indexOf('layerslider_add_new') == -1 &&
document.location.href.indexOf('action=edit') == -1 &&
document.location.href.indexOf('ls-skin-editor') == -1 &&
document.location.href.indexOf('ls-style-editor') == -1 &&
document.location.href.indexOf('ls-transition-builder') == -1
) {
LS_BoxToggles.init();
// Checkboxes
jQuery('.ls-global-settings :checkbox').customCheckbox();
jQuery('.ls-google-fonts :checkbox').customCheckbox();
// Google Fonts API
LS_GoogleFontsAPI.init();
// Slider remove
jQuery('.ls-sliders-list a.remove').click(function(e) {
e.preventDefault();
if(confirm('Are you sure you want to remove this slider?')){
document.location.href = jQuery(this).attr('href');
}
});
// Add slider
jQuery('#ls-add-slider-button').click(function(e) {
e.preventDefault();
var offsets = jQuery(this).position();
var popup = jQuery('#ls-add-slider-template');
popup.css({
top : offsets.top + 35,
left : offsets.left - popup.outerWidth() / 2 + jQuery(this).width() / 2 + 7
}).show().animate({ marginTop : 0, opacity : 1 }, 150, function() {
jQuery(this).find('.inner input').focus();
});
jQuery('<div>', { 'class' : 'ls-overlay ls-add-slider-overlay'}).prependTo('body');
});
// Import sample slider
jQuery('#ls-import-samples-button').click(function(e) {
e.preventDefault();
var offsets = jQuery(this).position();
var popup = jQuery('#ls-import-samples-template');
popup.css({
top : offsets.top + 35,
left : offsets.left - popup.outerWidth() / 2 + jQuery(this).width() / 2 + 7
}).show().animate({ marginTop : 0, opacity : 1 }, 150);
jQuery('<div>', { 'class' : 'ls-overlay ls-add-slider-overlay'}).prependTo('body');
});
// Close add slider window
jQuery(document).on('click', '.ls-overlay', function() {
if(jQuery(this).data('manualclose')) {
return false;
}
if(jQuery('.ls-pointer').length) {
jQuery('.ls-overlay').remove();
jQuery('.ls-pointer').animate({ marginTop : 40, opacity : 0 }, 150);
}
});
// Auto-update authorization
jQuery('.ls-auto-update').submit(function(e) {
// Prevent browser default submission
e.preventDefault();
// Send request and provide feedback message
jQuery('.ls-auto-update span.status').text('Validating ...').css('color', '#333');
// Post it
jQuery.post( ajaxurl, jQuery(this).serialize(), function(data) {
// Parse response and set message
var data = jQuery.parseJSON(data);
var success = (typeof data.errCode === "undefined") ? true : false;
var color = success ? '#4b982f' : '#c33219';
var status = success ? 'Successfully set up automatic updates.' : 'Failed to set up automatic updates.';
status = (typeof data.status === "undefined") ? status : data.status;
// Status message
jQuery('.ls-auto-update span.status').html(status).css('color', color);
// Show or hide 'Check for updates' button
if(success) {
jQuery('.ls-auto-update .footer a').removeClass('ls-hidden');
} else {
jQuery('.ls-auto-update .footer a').addClass('ls-hidden');
}
// Alert message (if any)
if(typeof data.message !== "undefined") {
alert(data.message);
}
});
});
// Auto-update deauthorization
jQuery('.ls-auto-update a.ls-deauthorize').click(function(event) {
event.preventDefault();
jQuery.get( ajaxurl, jQuery.param({ action: 'layerslider_deauthorize_site'}), function(data) {
// Parse response and set message
var data = jQuery.parseJSON(data);
if(typeof data.errCode === "undefined") {
jQuery('.ls-auto-update span.status').html(data.status).css('color', '#c33219');
jQuery('.ls-auto-update .footer a').addClass('ls-hidden');
jQuery('.ls-auto-update input[name="purchase_code"]').val('');
}
// Alert message (if any)
if(typeof data.message !== "undefined") {
alert(data.message);
}
});
});
// Permission form
jQuery('#ls-permission-form').submit(function(e) {
e.preventDefault();
if(confirm('WARNING: This option controls who can access to this plugin, you can easily lock out yourself by accident. Please, make sure that you have entered a valid capability without whitespaces or other invalid characters. Do you want to proceed?')) {
this.submit();
}
});
// News filters
jQuery('.ls-news .filters li').click(function() {
// Highlight
jQuery(this).siblings().attr('class', '');
jQuery(this).attr('class', 'active');
// Get stuff
var page = jQuery(this).data('page');
var frame = jQuery(this).closest('.ls-box').find('iframe');
var baseUrl = frame.attr('src').split('#')[0];
// Set filter
frame.attr('src', baseUrl+'#'+page);
});
// Shortcode
jQuery('input.ls-shortcode').click(function() {
this.focus();
this.select();
});
// Import
jQuery('form.ls-import-box button').click(function() {
jQuery(this).addClass('saving').text('Importing');
});
jQuery('#ls-import-samples-template li').click(function() {
jQuery('#ls-import-samples-button').addClass('saving').text('Importing, please wait');
});
// Skin editor
} else if(
document.location.href.indexOf('ls-skin-editor') != -1 ||
document.location.href.indexOf('ls-style-editor') != -1
) {
// Select
jQuery('select[name="skin"]').change(function() {
document.location.href = 'admin.php?page=ls-skin-editor&skin=' + jQuery(this).children(':selected').val();
});
// Transition builder
} else if(document.location.href.indexOf('ls-transition-builder') != -1) {
// Editor view
} else {
// URL rewrite after creating slider
if( history.replaceState ) {
if(document.location.href.indexOf('&showsettings=1') != -1) {
var url = document.location.href.replace('&showsettings=1', '');
history.replaceState(null, document.title, url);
}
}
// Main tab bar page select
jQuery('#ls-main-nav-bar a:not(.unselectable)').click(function(e) {
e.preventDefault(); LayerSlider.selectMainTab( this );
});
// Generate preview if user resizes the browser
jQuery(window).resize(function(){
// LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
});
// Settings: checkboxes
jQuery('.ls-settings :checkbox, .ls-layer-box :checkbox:not(.noreplace)').customCheckbox();
// Generate preview
jQuery(window).load(function() {
LayerSlider.generatePreview( jQuery('.ls-box.active').index() );
});
// Uploads
LayerSlider.openMediaLibrary();
LayerSlider.insertUpload();
// Clear uploaded image
jQuery(document).on({
mouseenter : function() {
if(jQuery(this).prev().val() != '') {
jQuery(this).addClass('hover');
}
},
mouseleave : function() {
if(jQuery(this).prev().val() != '') {
jQuery(this).removeClass('hover');
}
}
}, '.ls-image');
jQuery(document).on('click', '.ls-image a', function(e) {
e.preventDefault();
e.stopPropagation();
jQuery(this).closest('.ls-image').removeClass('hover');
jQuery(this).closest('.ls-image').find('img').attr('src', lsTrImgPath+'/not_set.png');
jQuery(this).closest('.ls-image').prev().val('');
jQuery(this).closest('.ls-image').prev().prev().val('');
LayerSlider.generatePreview( jQuery('.ls-box.active').index() );
});
// Settings: width, height
jQuery('.ls-settings').find('input[name="width"], input[name="height"], input[name="sublayercontainer"]').keyup(function() {
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
});
// Settings: backgroundColor
jQuery('.ls-settings input[name="backgroundcolor"]').keyup(function() {
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
});
// Settings: reset button
jQuery(document).on('click', '.ls-reset', function() {
// Empty field
jQuery(this).prev().val('');
// Generate preview
LayerSlider.generatePreview( jQuery('.ls-box.active').index() );
});
// Settings: yourLogoStyle
jQuery('.ls-settings input[name="yourlogostyle"]').keyup(function() {
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
});
// Add layer
jQuery('#ls-add-layer').click(function(e) {
e.preventDefault();
LayerSlider.addLayer();
});
// Select layer
jQuery('#ls-layer-tabs').on('click', 'a:not(.unsortable)', function(e) {
e.preventDefault();
LayerSlider.selectLayer(this);
});
// Duplicate layer
jQuery('#ls-layers').on('click', 'button.ls-layer-duplicate', function(e){
e.preventDefault();
LayerSlider.duplicateLayer(this);
});
// Enter URL
jQuery('#ls-layers').on('click', '.ls-url-prompt', function(e){
e.preventDefault();
var $target = null;
var url = prompt('Enter an image URL');
if(!url || url == '') { return false; }
// Slide options
if(jQuery(this).parent().is('.slide-image')) {
$target = jQuery(this).closest('.slide-image');
// Image layer
} else if(jQuery(this).parent().parent().is('.ls-image-uploader')) {
$target = jQuery(this).closest('.ls-image-uploader');
}
$target.children('input').eq(0).val('');
$target.children('input').eq(1).val(url);
$target.find('.ls-image img').attr('src', url);
LayerSlider.willGeneratePreview( jQuery('.ls-box.active').index() );
});
// Open Transition gallery
jQuery('#ls-layers').on('click', '.ls-select-transitions', function(e) {
e.preventDefault();
LayerSlider.openTransitionGallery();
});
// Close transition gallery
jQuery(document).on('click', '#ls-transition-window header b', function(e) {
e.preventDefault();
LayerSlider.closeTransitionGallery();
});
// Add/Remove layer transitions
jQuery(document).on('click', '#ls-transition-window tbody a:not(.ls-checkbox)', function(e) {
e.preventDefault();
LayerSlider.toggleTransition(this);
});
// Add/Remove layer transitions
jQuery(document).on('click', '#ls-transition-window header i:last', function(e) {
var check = jQuery(this).hasClass('off') ? true : false;
jQuery('#ls-transition-window tbody.active').each(function() {
LayerSlider.selectAllTransition( jQuery(this).index(), check );
});
});
// Apply on others
jQuery(document).on('click', '#ls-transition-window header i:not(:last)', function(e) {
// Confirmation
if(!confirm('Are you sure you want to apply the currently selected transitions on the other slides?')) {
return false;
}
// Dim color briefly
var button = jQuery(this);
button.css('color', '#bbb');
setTimeout(function() {
button.css('color', '#444');
}, 2000);
// Apply to other slides
jQuery('.ls-layer-box:not(.active) input[name="3d_transitions"]').val(
jQuery('.ls-layer-box.active input[name="3d_transitions"]').val()
);
jQuery('.ls-layer-box:not(.active) input[name="2d_transitions"]').val(
jQuery('.ls-layer-box.active input[name="2d_transitions"]').val()
);
jQuery('.ls-layer-box:not(.active) input[name="custom_3d_transitions"]').val(
jQuery('.ls-layer-box.active input[name="custom_3d_transitions"]').val()
);
jQuery('.ls-layer-box:not(.active) input[name="custom_2d_transitions"]').val(
jQuery('.ls-layer-box.active input[name="custom_2d_transitions"]').val()
);
});
// Show transition
jQuery(document).on('mouseenter', '#ls-transition-window table a:not(.ls-checkbox)', function() {
LayerSlider.showTransition(this);
});
// Hide transition
jQuery(document).on('mouseleave', '#ls-transition-window table a:not(.ls-checkbox)', function() {
LayerSlider.hideTransition(this);
});
// Add sublayer
jQuery('#ls-layers').on('click', '.ls-add-sublayer', function(e) {
e.preventDefault();
LayerSlider.addSublayer(this);
});
// Remove layer
jQuery('#ls-layer-tabs').on('click', 'a span', function(e) {
e.preventDefault();
e.stopPropagation();
LayerSlider.removeLayer(this);
});
// Select sublayer
jQuery('#ls-layers').on('click', '.ls-sublayers tr', function() {
LayerSlider.selectSubLayer(this);
});
// Sublayer pages
jQuery('#ls-layers').on('click', '.ls-sublayer-nav a:not(:last-child)', function(e) {
e.preventDefault();
LayerSlider.selectSublayerPage(this);
});
// Remove sublayer
jQuery('#ls-layers').on('click', '.ls-sublayer-nav a:last-child', function(e) {
e.preventDefault();
LayerSlider.removeSublayer(this);
});
// Duplicate sublayer
jQuery('#ls-layers').on('click', '.ls-sublayer-options button.duplicate', function(e) {
e.preventDefault();
LayerSlider.duplicateSublayer(this);
});
// Highlight sublayer
jQuery('#ls-layers').on('click', '.ls-highlight', function(e) {
e.stopPropagation();
LayerSlider.highlightSublayer(this);
});
// Sublayer media type
jQuery('#ls-layers').on('click', '.ls-layer-kind li', function(e) {
e.preventDefault();
LayerSlider.selectMediaType(this);
});
// Sublayer element type
jQuery('#ls-layers').on('click', '.ls-sublayer-element > li', function(e) {
e.preventDefault();
LayerSlider.selectElementType(this);
});
// Restore sublayer media type
jQuery('#ls-layers .ls-sublayer-basic').each(function() {
var kind = jQuery('input[name="media"]', this).val();
var type = jQuery('input[name="type"]', this).val();
var kindEl = jQuery('.ls-layer-kind li[data-section="'+kind+'"]', this);
var typeEl = jQuery('.ls-sublayer-element > li[data-element="'+type+'"]', this);
LayerSlider.selectMediaType(kindEl);
LayerSlider.selectElementType(typeEl);
});
// Sublayer: Style
jQuery('#ls-layers').on('keyup', '.ls-sublayer-style input, .ls-sublayer-style select, .ls-sublayer-style textarea', function() {
LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() );
});
// Sublayer: WordWrap
jQuery('#ls-layers').on('click', '.ls-sublayers input[name="wordwrap"]', function() {
LayerSlider.generatePreview( jQuery(this).closest('.ls-layer-box').index() );
});
// Sublayer: HTML
jQuery('#ls-layers').on('keyup', '.ls-sublayers textarea[name="html"]', function() {
LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() );
});
// Post content text length
jQuery('#ls-layers').on('keydown change', '.ls-sublayers input[name="post_text_length"]', function() {
LayerSlider.willGeneratePreview( jQuery(this).closest('.ls-layer-box').index() );
});
// Sublayer: sortables, draggable, etc
LayerSlider.addSortables();
LayerSlider.addDraggable();
LayerSlider.addLayerSortables();
// Sublayer: skip
jQuery('#ls-layers').on('click', '.ls-sublayer-options input[name="skip"]', function() {
LayerSlider.skipSublayer(this);
});
// Preview
jQuery('#ls-layers').on('click', '.ls-preview-button', function(e) {
e.preventDefault();
LayerSlider.play( jQuery(this).closest('.ls-layer-box').index() );
});
// Preview drag element select
jQuery('#ls-layers').on('click', '.draggable > *', function(e) {
e.preventDefault();
LayerSlider.selectDragElement(this);
});
// Save changes
jQuery('#ls-slider-form').submit(function(e) {
e.preventDefault();
LayerSlider.save(this);
});
// Add color picker
LayerSlider.addColorPicker( jQuery('#ls-slider-form input.ls-colorpicker') );
// Show color picker on focus
jQuery('.color').focus(function() {
jQuery(this).next().slideDown();
});
// Show color picker on blur
jQuery('.color').blur(function() {
jQuery(this).next().slideUp();
});
// Eye icon for layers
jQuery('#ls-layers').on('click', '.ls-icon-eye', function(e) {
e.stopPropagation();
LayerSlider.eyeSublayer(this);
});
// Lock icon for layers
jQuery('#ls-layers').on('click', '.ls-icon-lock', function(e) {
e.stopPropagation();
LayerSlider.lockSublayer(this);
});
jQuery('ul.ls-settings-sidebar > li').click(function() {
LayerSlider.selectSettingsTab(this);
});
// Collapse layer before sorting
jQuery('#ls-layers').on('mousedown', '.ls-sublayer-sortable-handle', function(){
jQuery(this).closest('.ls-sublayers').addClass('dragging');
});
// Expand layer after sorting
jQuery('#ls-layers').on('mouseup', '.ls-sublayer-sortable-handle', function(){
jQuery('#ls-layers .ls-layer-box.active .ls-sublayer-sortable').removeClass('dragging');
});
// Timeline
lsTimeLine.init();
LS_PostOptions.init();
LayerSlider.addPreviewSlider( jQuery('#ls-layers .ls-editor-slider') );
// Transitions gallery
jQuery('#ls-transition-window .filters li').click(function() {
// Update navigation
jQuery(this).siblings().removeClass('active');
jQuery(this).addClass('active');
// Update view
jQuery('#ls-transition-window tbody').removeClass('active');
jQuery('#ls-transition-window tbody').eq( jQuery(this).index() ).addClass('active');
// Custom transitions
if(jQuery(this).index() == 2) {
jQuery('#ls-transition-window tbody').eq(3).addClass('active');
}
// Update 'Select all' button
var trs = jQuery('#ls-transition-window tbody.active td');
if(trs.filter('.c.added').length == trs.filter('.c').length) {
jQuery('#ls-transition-window header i:last').attr('class', 'on').text('Deselect all');
} else {
jQuery('#ls-transition-window header i:last').attr('class', 'off').text('Select all');
}
});
// Link slide to post url
jQuery('#ls-layers').on('click', '.ls-slide-link a', function(e) {
e.preventDefault();
jQuery(this).closest('.ls-slide-link').children('input').val('[post-url]');
});
// Use post image as slide background
jQuery('#ls-layers').on('click', '.slide-image .ls-post-image', function(e) {
e.preventDefault();
jQuery(this).closest('.slide-image').children('input[name="backgroundId"]').val('');
jQuery(this).closest('.slide-image').children('input[name="background"]').val('[image-url]');
jQuery(this).closest('.slide-image').children('input[name="imageId"]').val('');
jQuery(this).closest('.slide-image').children('input[name="image"]').val('[image-url]');
LayerSlider.generatePreview( jQuery(this).closest('.ls-layer-box').index() );
});
// Hide zoom slider if not supported by browser
if(typeof document.body.style.zoom === 'undefined') {
jQuery('.ls-editor-zoom').addClass('ls-hidden');
}
}
});