').html(html).appendToWithIndex(generateProperties.$targetArea, layerIndex);
}
} else {
// Empty media placeholder layer
if( layerData.media === 'media' && ! html ) {
item = jQuery('
').appendToWithIndex(generateProperties.$targetArea, layerIndex);
// Empty icon placeholder layer
} else if( layerData.media === 'icon' && ! html ) {
item = jQuery('
').appendToWithIndex(generateProperties.$targetArea, layerIndex);
} else {
item = jQuery('<'+type+'>').appendToWithIndex(generateProperties.$targetArea, layerIndex);
if(html !== '') { item.html(html); }
}
}
// Transition properties
var transforms = {}, trKey, trVal, defVal;
for( trKey in layerData.transition) {
if( LS_transformStyles.indexOf( trKey ) !== -1) {
trVal = layerData.transition[trKey];
if( ! trVal && trVal !== 0 ) { continue; }
trVal = trVal.toString();
defVal = ( trKey.indexOf('scale') !== -1 ) ? 1 : 0;
if( parseInt(trVal) !== defVal ) {
transforms[ trKey ] = parseFloat( trVal );
}
}
}
// Styles
var styles = { 'z-index': (100 + layerCount) - layerIndex };
for(var sKey in layerData.styles) {
var cssVal = layerData.styles[sKey];
if( ( ! cssVal && cssVal !== 0 ) || cssVal === 'unset' ) { continue; }
cssVal = cssVal.toString();
if( cssVal.slice(-1) == ';' ) { cssVal = cssVal.substring(0, cssVal.length - 1); }
styles[sKey] = isNumber(cssVal) ? cssVal + 'px' : cssVal;
if( ['z-index', 'font-weight', 'opacity'].indexOf( sKey ) !== -1 ) {
styles[sKey] = cssVal;
}
}
// Background
if( layerData.layerBackground ) {
if( layerData.layerBackground === '[image-url]') {
LS_GUI.updateImagePicker( 'layerBackground', post['image-url'], { fromPost: true } );
styles['background-image'] = 'url("'+post['image-url']+'")';
} else {
styles['background-image'] = 'url("'+layerData.layerBackground+'")';
}
}
// Locked layer
layerData.hasTransforms = ! jQuery.isEmptyObject( transforms );
// Apply style settings and attributes
item.attr( jQuery.extend({}, innerAttrs, outerAttrs) ).attr({
id: id,
style: layerData.style,
}).css(styles).css({
whiteSpace: !layerData.styles.wordwrap ? 'nowrap' : 'normal',
}).addClass(layerData['class']);
// Restore selection
if( ! generateProperties.isStatic ) {
LS_previewItems[layerIndex] = item;
if(LS_activeLayerIndexSet.indexOf(layerIndex) !== -1) {
item.addClass('ui-selected');
} else {
item.removeClass('ui-selected');
}
}
// Add ls-l or static layer classes
item.addClass( generateProperties.isStatic ? 'disabled ls-static-layer' : 'ls-l' );
if( layerData.locked ) { item.addClass('disabled'); }
if( layerData.hasTransforms ) { item.addClass('transformed'); }
if( document.location.href.indexOf('ls-revisions') !== -1 ) {
item.addClass('disabled');
}
// Iframes &Ā media embeds
var $iframe = item.children('iframe,video').eq(0);
if( $iframe.length ) {
if( layerData.transition.backgroundvideo ) {
item.addClass('disabled bgvideo').css({
pointerEvents: 'none'
}).children('video').prop('controls', false);
if( layerData.transition.overlay ) {
if( layerData.transition.overlayer !== 'disabled' ) {
jQuery('
', {
'class': 'video-overlay',
'style': 'background-image: url('+layerData.transition.overlay+')'
}).appendTo( item );
}
}
// Exit script
LayerSlider.updatePreviewSelection();
return;
} else {
var width = parseInt( $iframe.attr('width') ) || $iframe.width(),
height = parseInt( $iframe.attr('height') ) || $iframe.height();
if( ! layerData.styles.width ) {
item.width( width );
}
if( ! layerData.styles.height ) {
item.height( height );
}
}
}
// Make sure to override controls for media elements if set by media settings.
if( layerData.media === 'media' && item.children('audio,video').length ) {
if( layerData.transition.controls === 'enabled' ) {
item.children('audio,video').prop('controls', true);
} else if( layerData.transition.controls === 'disabled' ) {
item.children('audio,video').prop('controls', false);
}
}
if( item.is('img') ) {
item.on( 'load', function(){
LayerSlider.setPositions(item, top, left);
LayerSlider.updatePreviewSelection();
clearTimeout(LayerSlider.selectableTimeout);
LayerSlider.selectableTimeout = setTimeout(function() {
LayerSlider.updatePreviewSelection();
}, 100);
}).attr('src',item.attr('src') );
}else{
LayerSlider.setPositions(item, top, left);
LayerSlider.updatePreviewSelection();
}
// DO TRANSFORMS
transforms.transformPerspective = 500;
transforms.transformOrigin = layerData.transition.transformoriginin || '50% 50% 0';
if( transforms.transformOrigin.indexOf( 'slider') !== -1 ){
var sliderSize = LayerSlider.getSliderSize(),
sliderWidth = sliderSize.width,
sliderHeight = sliderSize.height,
itemLeft = parseFloat( item[0].style.left ),
itemTop = parseFloat( item[0].style.top ),
itemWidth = item.outerWidth(),
itemHeight = item.outerHeight();
transforms.transformOrigin = transforms.transformOrigin
.replace( 'sliderleft', -itemLeft + 'px' )
.replace( 'sliderright', sliderWidth - itemLeft + 'px' )
.replace( 'slidercenter', sliderWidth / 2 - itemLeft + 'px' )
.replace( 'slidermiddle', sliderHeight / 2 - itemTop + 'px' )
.replace( 'slidertop', -itemTop + 'px' )
.replace( 'sliderbottom', sliderHeight - itemTop + 'px' );
}
TweenMax.set( item[0], transforms );
// Add draggable
LayerSlider.addDraggable();
},
setPositions: function(item, top, left, returnOnly) {
item.show();
var cssTop = top ? parseInt(top) : 0,
cssLeft = left ? parseInt(left) : 0,
style = item[0].style,
marginLeft = parseInt( style.marginLeft ) || 0,
marginTop = parseInt( style.marginTop ) || 0;
// Position the element
if( top && top.indexOf('%') !== -1 ) {
if( cssTop === 0 ) {
cssTop = 0 + marginTop;
} else if( cssTop === 100 ) {
cssTop = LS_previewArea.height() - item.outerHeight() + marginTop;
} else {
cssTop = LS_previewArea.height() / 100 * cssTop - item.outerHeight() / 2 + marginTop;
}
} else if( LS_activeLayerIndexSet.length === 1 ) {
cssLeft += marginLeft;
}
if( left && left.indexOf('%') !== -1 ) {
if( cssLeft === 0 ) {
cssLeft = 0 + marginLeft;
} else if( cssLeft === 100 ) {
cssLeft = LS_previewArea.width() - item.outerWidth() + marginLeft;
} else {
cssLeft = LS_previewArea.width() / 100 * cssLeft - item.outerWidth() / 2 + marginLeft;
}
} else if( LS_activeLayerIndexSet.length === 1 ) {
cssTop += marginTop;
}
if( returnOnly ) {
return {
top: cssTop,
left: cssLeft
};
}
item.css({ top: cssTop, left: cssLeft });
},
previewItemAtIndex: function(index) {
return LS_previewArea.children('.ls-l').eq(index);
},
updatePreviewSelection: function() {
// Hide lasso and stop execution
// if there's no selected layers
if( ! LS_activeLayerIndexSet.length ||
! LS_activeSlideData.sublayers.length ||
jQuery('.ls-editing').length) {
$lasso.hide();
return;
}
if( LS_activeLayerIndexSet.length === 1 ) {
var layerData = LS_activeLayerDataSet[0];
if ( layerData && ( layerData.hasTransforms || layerData.locked ) ) {
$lasso.hide();
return;
}
}
var a = { left: Infinity, top: Infinity },
b = { left: -Infinity, top: -Infinity };
jQuery.each(LS_activeLayerIndexSet, function(idx, layerIndex) {
var $item = LS_previewItems[layerIndex];
if($item) {
var p = $item.position(),
q = {
top: p.top + $item.outerHeight() * LS_previewZoom,
left: p.left + $item.outerWidth() * LS_previewZoom
};
if( p.left < a.left ){ a.left = p.left; }
if( p.top < a.top ){ a.top = p.top; }
if( q.left > b.left ){ b.left = q.left; }
if( q.top > b.top ){ b.top = q.top; }
}
});
a.width = b.left - a.left;
a.height = b.top - a.top;
$lasso.css(a).show();
if( ! $lasso.hasClass('ls-resizable-disabled') ) {
$lasso.removeClass('ui-resizable-disabled').css(a).show();
}
if( LS_activeLayerIndexSet.length === 1 ) {
var layerIndex = LS_activeLayerIndexSet[0];
if( LS_previewItems[layerIndex] ) {
if( LS_previewItems[layerIndex].hasClass('ls-layer-placeholder') ) {
$lasso.addClass('ui-resizable-disabled');
}
}
}
// Mark the position of 0x0 px selection
if( ! a.width || ! a.height ) {
$lasso.addClass('ui-resizable-disabled');
}
},
hidePreviewSelection: function() {
jQuery('.ls-preview-wrapper').addClass('hide-selection');
},
showPreviewSelection: function() {
jQuery('.ls-preview-wrapper').removeClass('hide-selection');
},
openMediaLibrary: function() {
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'];
var multiple = jQuery(this).hasClass('ls-bulk-upload');
// Media Library params
var frame = wp.media({
title : 'image' === type[0] ? LS_l10n.SBMediaLibraryImage : LS_l10n.SBMediaLibraryMedia,
multiple : multiple,
library : { type: type },
button : { text: 'Insert' }
});
// Runs on select
frame.on('select',function() {
// Get attachment(s) data
var attachment = frame.state().get('selection').first().toJSON(),
attachments = frame.state().get('selection').toJSON(),
updateInfo = [],
previewImg, newLayerData;
// Slide image upload
// -------------------------------------
if(jQuery(uploadInput).hasClass('ls-slide-image') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Add action to UndoManager
LS_UndoManager.add('slide.general', LS_l10n.SBUndoSlideImage, {
itemIndex: LS_activeSlideIndex,
undo: {
background: LS_activeSlideData.properties.background,
backgroundId: LS_activeSlideData.properties.backgroundId,
backgroundThumb: LS_activeSlideData.properties.backgroundThumb
},
redo: {
background: attachment.url,
backgroundId: attachment.id,
backgroundThumb: previewImg
}
});
// Set current layer image
LS_activeSlideData.properties.background = attachment.url;
LS_activeSlideData.properties.backgroundId = attachment.id;
LS_activeSlideData.properties.backgroundThumb = previewImg;
// Set other images
for(c = 1; c < attachments.length; c++) {
// Get preview image url
previewImg = !typeof attachments[c].sizes.medium ? attachments[c].sizes.medium.url : attachments[c].sizes.full.url;
// Build new slide
var newSlideData = jQuery.extend(true, {}, LS_DataSource.getDefaultSlideData());
newSlideData.background = attachments[c].url;
newSlideData.backgroundId = attachments[c].id;
newSlideData.backgroundThumb = previewImg;
newSlideData = {
properties: newSlideData,
sublayers: []
};
LayerSlider.addSlide( newSlideData, {
selectSlide: false,
atIndex: LS_activeSlideIndex + c
} );
}
LayerSlider.updateSlidePreviews();
// Slide thumbnail upload
// -------------------------------------
} else if(jQuery(uploadInput).hasClass('ls-slide-thumbnail') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Set current layer image
LS_activeSlideData.properties.thumbnail = attachment.url;
LS_activeSlideData.properties.thumbnailId = attachment.id;
LS_activeSlideData.properties.thumbnailThumb = previewImg;
LayerSlider.updateSlidePreviews();
// Layer image upload
// -------------------------------------
} else if(jQuery(uploadInput).hasClass('ls-layer-image') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.thumbnail ? attachment.sizes.thumbnail.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoLayerImage, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
image: LS_activeLayerDataSet[0].image,
imageId: LS_activeLayerDataSet[0].imageId,
imageThumb: LS_activeLayerDataSet[0].imageThumb
},
redo: {
image: attachment.url,
imageId: attachment.id,
imageThumb: previewImg
}
});
// Set current layer image
LS_activeLayerDataSet[0].image = attachment.url;
LS_activeLayerDataSet[0].imageId = attachment.id;
LS_activeLayerDataSet[0].imageThumb = previewImg;
// Set other images
for(c = 1; c < attachments.length; c++) {
// Get preview image url
previewImg = !typeof attachments[c].sizes.thumbnail ? attachments[c].sizes.thumbnail.url : attachments[c].sizes.full.url;
// Build new layer
newLayerData = jQuery.extend(true, {}, LS_DataSource.getDefaultLayerData());
newLayerData.image = attachments[c].url;
newLayerData.imageId = attachments[c].id;
newLayerData.imageThumb = previewImg;
newLayerData.styles.top = (10*c)+'px';
newLayerData.styles.left = (10*c)+'px';
// Add new layer
LS_activeSlideData.sublayers.unshift(newLayerData);
updateInfo.push({
itemIndex: 0,
undo: { data: {} },
redo: { data: newLayerData }
});
}
// Rebuild layers list
LS_DataSource.buildLayersList();
// Maintain UndoManager
if(updateInfo.length) {
LS_UndoManager.add('slide.layers', LS_l10n.SBUndoNewLayers, updateInfo);
}
// Media (video/audio) image upload
// -------------------------------------
} else if( jQuery(uploadInput).hasClass('ls-media-image') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoVideoPoster, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
poster: LS_activeLayerDataSet[0].poster,
posterId: LS_activeLayerDataSet[0].posterId,
posterThumb: LS_activeLayerDataSet[0].posterThumb
},
redo: {
poster: attachment.url,
posterId: attachment.id,
posterThumb: previewImg
}
});
// Set current layer poster
LS_activeLayerDataSet[0].poster = attachment.url;
LS_activeLayerDataSet[0].posterId = attachment.id;
LS_activeLayerDataSet[0].posterThumb = previewImg;
// Layer background upload
// -------------------------------------
} else if( jQuery(uploadInput).hasClass('ls-layer-background-image') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoLayerBackground, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
poster: LS_activeLayerDataSet[0].layerBackground,
layerBackgroundId: LS_activeLayerDataSet[0].layerBackgroundId,
layerBackgroundThumb: LS_activeLayerDataSet[0].layerBackgroundThumb
},
redo: {
layerBackground: attachment.url,
layerBackgroundId: attachment.id,
layerBackgroundThumb: previewImg
}
});
// Set current layer background
LS_activeLayerDataSet[0].layerBackground = attachment.url;
LS_activeLayerDataSet[0].layerBackgroundId = attachment.id;
LS_activeLayerDataSet[0].layerBackgroundThumb = previewImg;
LayerSlider.updateLayerBackgroundNotification();
// Global slider background
// -------------------------------------
} else if( jQuery(uploadInput).hasClass('ls-global-background') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Store changes and update the preview
window.lsSliderData.properties.backgroundimage = attachment.url;
window.lsSliderData.properties.backgroundimageId = attachment.id;
// YourLogo
// -------------------------------------
} else if( jQuery(uploadInput).hasClass('ls-yourlogo-upload') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Store changes and update the preview
window.lsSliderData.properties.yourlogo = attachment.url;
window.lsSliderData.properties.yourlogoId = attachment.id;
// Slider Preview
// -------------------------------------
} else if( jQuery(uploadInput).hasClass('ls-slider-preview') ) {
// Set image chooser preview
previewImg = !typeof attachment.sizes.medium ? attachment.sizes.medium.url : attachment.sizes.full.url;
LS_GUI.updateImagePicker( jQuery(uploadInput), previewImg);
// Make sure that the meta object exits
if( ! window.lsSliderData.meta ) {
window.lsSliderData.meta = {};
}
// Store changes and update the preview
window.lsSliderData.meta.preview = attachment.url;
window.lsSliderData.meta.previewId = attachment.id;
// Multimedia HTML
} else if( jQuery(uploadInput).hasClass('ls-insert-media')) {
var hasVideo = false,
hasAudio = false,
videos = [],
audios = [],
url = '',
mediaHTML = '';
// Iterate over selected items
for(c = 0; c < attachments.length; c++) {
url = '/' + attachments[c].url.split('/').slice(3).join('/');
if(attachments[c].type === 'video') {
hasVideo = true;
videos.push({ url: url, mime: attachments[c].mime });
} else if(attachments[c].type === 'audio') {
hasAudio = true;
audios.push({ url: url, mime: attachments[c].mime });
}
}
// Insert multimedia
if(hasVideo) {
mediaHTML += '
';
}
if(hasAudio) {
if(hasVideo) { mediaHTML += '\r\n\r\n'; }
mediaHTML += '
';
}
// Set up undoManager action
LS_UndoManager.add('layer.general', LS_l10n.SBUndoLayer, {
itemIndex: LS_activeLayerIndexSet[0],
undo: { html: jQuery('.ls-html-textarea textarea').val() },
redo: { html: mediaHTML }
});
// Save new value to DataStore
LS_activeLayerDataSet[0].html = mediaHTML;
jQuery('.ls-html-textarea textarea').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();
});
// Open ML
frame.open();
});
},
loadImageEditor: function() {
},
openImageEditor: function( imageURL ) {
// Editor is ready, just open the image
if( window.pixieEditor ) {
pixieEditor.resetAndOpenEditor('image', imageURL );
// Editor needs to be loaded first
} else {
jQuery('
').prependTo('body');
jQuery('
').appendTo('head').attr({
type: 'text/css',
rel: 'stylesheet',
href: pixieCSSFile
});
jQuery.getScript( pixieJSFile ).done( function() {
window.pixieEditor = new Pixie({
crossOrigin: true,
urls: {
assets: pluginPath+'pixie/'
},
tools: {
stickers: {
replaceDefault: true,
items: []
}
},
ui: {
mode: 'overlay',
theme: 'dark',
openImageDialog: false,
toolbar: {
hideOpenButton: true
},
nav: {
position: 'top',
replaceDefault: true,
items: [
{name: 'filter', icon: 'filter-custom', action: 'filter'},
{type: 'separator'},
{name: 'resize', icon: 'resize-custom', action: 'resize'},
{name: 'crop', icon: 'crop-custom', action: 'crop'},
{name: 'transform', icon: 'transform-custom', action: 'rotate'},
{type: 'separator'},
{name: 'draw', icon: 'pencil-custom', action: 'draw'},
{name: 'text', icon: 'text-box-custom', action: 'text'},
{name: 'shapes', icon: 'polygon-custom', action: 'shapes'},
{name: 'frame', icon: 'frame-custom', action: 'frame'},
{type: 'separator'},
{name: 'corners', icon: 'rounded-corner-custom', action: 'round'},
{name: 'background', icon: 'background-custom', action: 'background'},
{name: 'merge', icon: 'merge-custom', action: 'merge'},
]
},
},
onLoad: function() {
pixieEditor.resetAndOpenEditor('image', imageURL );
},
onOpen: function() {
// Hide any open tooltips
kmUI.popover.close();
setTimeout( function() {
kmUI.popover.close();
}, 300 );
},
onClose: function( ) {
jQuery('#pixie-current-image').removeAttr('id');
},
onSave: function( imgData, dirtyName ) {
// Display saving notification
kmUI.notify.show({
icon: 'dashicons-admin-appearance',
iconColor: '#f9a241',
iconSize: 36,
text: LS_l10n.notifyPixieSave
});
// Introduce a little delay, so the
// saving notification can render properly
// before we try to do any thread-heavy thing.
setTimeout( function() {
// Begin image upload
LayerSlider.uploadImageEditorPic( imgData, function() {
// Success, hide the notification and
// close the image editor
kmUI.notify.hide();
window.pixieEditor.close();
});
}, 1000 );
}
});
});
}
},
uploadImageEditorPic: function( imgData, callback ) {
var $image = jQuery('#pixie-current-image').removeAttr('id');
$parent = $image.closest('.ls-image'),
imgName = 'pixie_'+Date.now()+'.png',
imgBlob = LS_Utils.dataURItoBlob( imgData );
imgBlob.lastModifiedDate = new Date();
imgBlob.name = imgName;
imgBlob.filename = imgName;
LayerSlider.uploadImageToMediaLibrary(imgBlob, function(data) {
$image.attr('src', data.url);
if( $parent.hasClass('ls-slide-image') ) {
// Add action to UndoManager
LS_UndoManager.add('slide.general', LS_l10n.SBUndoSlideImage, {
itemIndex: LS_activeSlideIndex,
undo: {
background: LS_activeSlideData.properties.background,
backgroundId: LS_activeSlideData.properties.backgroundId,
backgroundThumb: LS_activeSlideData.properties.backgroundThumb
},
redo: {
background: data.url,
backgroundId: data.id,
backgroundThumb: data.url
}
});
LS_activeSlideData.properties.background = data.url;
LS_activeSlideData.properties.backgroundId = data.id;
LS_activeSlideData.properties.backgroundThumb = data.url;
LayerSlider.updateSlidePreviews();
LayerSlider.generatePreview();
} else if( $parent.hasClass('ls-slide-thumbnail') ) {
LS_activeSlideData.properties.thumbnail = data.url;
LS_activeSlideData.properties.thumbnailId = data.id;
LS_activeSlideData.properties.thumbnailThumb = data.url;
LayerSlider.updateSlidePreviews();
} else if( $parent.hasClass('ls-layer-image') ) {
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoLayerImage, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
image: LS_activeLayerDataSet[0].image,
imageId: LS_activeLayerDataSet[0].imageId,
imageThumb: LS_activeLayerDataSet[0].imageThumb
},
redo: {
image: data.url,
imageId: data.id,
imageThumb: data.url
}
});
LS_activeLayerDataSet[0].image = data.url;
LS_activeLayerDataSet[0].imageId = data.id;
LS_activeLayerDataSet[0].imageThumb = data.url;
LayerSlider.generatePreviewItem( LS_activeLayerIndexSet[0] );
} else if( $parent.hasClass('ls-media-image') ) {
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoVideoPoster, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
poster: LS_activeLayerDataSet[0].poster,
posterId: LS_activeLayerDataSet[0].posterId,
posterThumb: LS_activeLayerDataSet[0].posterThumb
},
redo: {
poster: data.url,
posterId: data.id,
posterThumb: data.url
}
});
LS_activeLayerDataSet[0].poster = data.url;
LS_activeLayerDataSet[0].posterId = data.id;
LS_activeLayerDataSet[0].posterThumb = data.url;
} else if( $parent.hasClass('ls-layer-background-image') ) {
// Add action to UndoManager
LS_UndoManager.add('layer.general', LS_l10n.SBUndoLayerBackground, {
itemIndex: LS_activeLayerIndexSet[0],
undo: {
background: LS_activeLayerDataSet[0].layerBackground,
layerBackgroundId: LS_activeLayerDataSet[0].layerBackgroundId,
layerBackgroundThumb: LS_activeLayerDataSet[0].layerBackgroundThumb
},
redo: {
layerBackground: data.url,
layerBackgroundId: data.id,
layerBackgroundThumb: data.url
}
});
LS_activeLayerDataSet[0].layerBackground = data.url;
LS_activeLayerDataSet[0].layerBackgroundId = data.id;
LS_activeLayerDataSet[0].layerBackgroundThumb = data.url;
LayerSlider.generatePreviewItem( LS_activeLayerIndexSet[0] );
LayerSlider.updateLayerBackgroundNotification();
}
if( callback ) {
callback();
}
});
},
handleDroppedImages: function(event) {
var oe = event.originalEvent,
files = oe.dataTransfer.files,
p = LS_previewArea.offset(),
x = (jQuery(window).scrollLeft() + oe.clientX - p.left) / LS_previewZoom,
y = (jQuery(window).scrollTop() + oe.clientY - p.top) / LS_previewZoom,
updateInfo = [],
layerDataSet = [],
layerIndexSet = [],
counter = 1;
// Iterate over the dropped files
jQuery.each(files, function(index, file) {
LayerSlider.uploadImageToMediaLibrary(file, function(data) {
// Build new layer
var layerData = jQuery.extend(true, {}, LS_DataSource.getDefaultLayerData());
layerData.image = data.url;
layerData.imageId = data.id;
layerData.imageThumb = data.sizes.thumbnail ? data.sizes.thumbnail.url : data.url;
layerData.subtitle = file.name;
layerData.styles.left = x+'px';
layerData.styles.top = y+'px';
layerIndexSet.push(0);
layerDataSet.push(layerData);
// Increase next layer offsets
x += 20;
y += 20;
// Add new layers when every image
// has been uploaded
if(counter++ === files.length) {
LayerSlider.addLayer( layerDataSet, layerIndexSet );
}
});
});
},
uploadImageToMediaLibrary: function(file, callback) {
if(file.type.indexOf('image') === 0) {
// Build FormData object
var formData = new FormData();
formData.append('action', 'upload-attachment');
formData.append('async-upload', file, file.name);
formData.append('name', file.name);
formData.append('_wpnonce', _wpPluploadSettings.defaults.multipart_params._wpnonce);
jQuery.ajax({
url: ajaxurl.replace('admin-ajax', 'async-upload'),
method: 'POST',
data: formData,
dataType: 'json',
processData: false,
contentType: false,
error: function(jqXHR, textStatus, errorThrown) {
alert( LS_l10n.SBUploadErrorMessage.replace('%s', errorThrown) );
},
success: function(resp) {
if(!resp || !resp.success) {
alert(LS_l10n.SBUploadError);
return;
}
if(typeof callback != "undefined") {
callback(resp.data);
}
}
});
}
},
addLayerSortables: function() {
// Bind sortable function
jQuery('.ls-sublayer-sortable').sortable({
handle : 'span.ls-sublayer-sortable-handle',
containment : 'parent',
tolerance : 'pointer',
axis : 'y',
start: function() {
LayerSlider.dragIndex = jQuery('.ui-sortable-placeholder').index() - 1;
},
change: function() {
jQuery('.ui-sortable-helper').addClass('moving');
},
stop: function(event, ui) {
// Get indexes
var oldIndex = LayerSlider.dragIndex;
var index = jQuery('.moving').removeClass('moving').index();
LS_UndoManager.add('layer.order', LS_l10n.SBUndoSortLayers, {
itemIndex: null,
undo: { from: index, to: oldIndex },
redo: { from: oldIndex, to: index }
});
if( index > -1 ){
LS_Utils.moveArrayItem(LS_activeSlideData.sublayers, oldIndex, index);
}
// Update active layer index
LS_activeLayerIndexSet = [];
jQuery('.ls-sublayers li.active').each(function() {
LS_activeLayerIndexSet.push( jQuery(this).index() );
});
// Reindex layers
LayerSlider.reindexLayers();
LayerSlider.generatePreview();
}
});
},
addSlideSortables: function() {
if( document.location.href.indexOf('section=revisions') !== -1 ) {
return;
}
jQuery('#ls-slide-tabs').sortable({
containment: 'parent',
tolerance: 'pointer',
handle: '.ls-slide-preview',
items: '.ls-slide-tab',
cancel: '.unsortable',
distance: 3,
start: function() {
LayerSlider.dragIndex = jQuery('.ui-sortable-placeholder').index() - 1;
},
change: function() {
jQuery('.ui-sortable-helper').addClass('moving');
},
stop: function(event, ui) {
// Get indexes
var oldIndex = LayerSlider.dragIndex,
index = jQuery('.moving').removeClass('moving').index();
if( index > -1 ){
LS_Utils.moveArrayItem(window.lsSliderData.layers, oldIndex, index);
}
// Update active slide index
LS_activeSlideIndex = jQuery('#ls-slide-tabs .ls-slide-tab.active').index();
// Add static layers
LS_activeStaticLayersDataSet = LayerSlider.staticLayersForSlide( LS_activeSlideIndex );
// Reindex slides
LayerSlider.reindexStaticLayers();
LayerSlider.generateStaticPreview();
LS_DataSource.buildLayersList();
}
});
},
addDraggable: function() {
// Add dragables and update settings
// while and after dragging
LS_previewArea.children('.ls-l').draggable({
snap: true,
snapTolerance: 10,
cancel: '.disabled,.transformed',
start: function(e, ui) {
// Fix for deselect
if( !ui.helper.hasClass('ui-selected') ){
ui.helper.addClass('ui-selected').trigger('selectablestop.ls');
}
// Store selected layers & lasso originalPosition
$lasso.data('originalPosition', $lasso.position());
jQuery('.ls-preview .ui-selected').each(function() {
var pos = jQuery(this).position();
jQuery(this).data('originalPosition', {
'top': pos.top / LS_previewZoom,
'left': pos.left / LS_previewZoom,
});
});
},
drag: function(event, ui) {
LayerSlider.dragging(ui);
},
stop: function(event, ui) {
var updateInfo = [];
LayerSlider.dragging(ui);
jQuery('.ls-preview .ui-selected').each(function() {
var $layer = jQuery(this),
index = $layer.index(),
position = $layer.position(),
newTop = Math.round( position.top / LS_previewZoom ) +'px',
newLeft = Math.round( position.left / LS_previewZoom ) +'px',
origPosition = $layer.data('originalPosition');
// Maintain changes in data source
LS_activeSlideData.sublayers[index].styles.top = newTop;
LS_activeSlideData.sublayers[index].styles.left = newLeft;
// Gather changes for undoing
updateInfo.push({
itemIndex: index,
undo: { left: origPosition.left+'px', top: origPosition.top+'px' },
redo: { left: newLeft, top: newTop }
});
});
// Add changes to undoManager
LS_UndoManager.add('layer.style', LS_l10n.SBUndoLayerPosition, updateInfo.reverse());
}
});
},
dragging: function(ui) {
// Fix positions when zoomed
ui.position.top = Math.round(ui.position.top / LS_previewZoom );
ui.position.left = Math.round(ui.position.left / LS_previewZoom );
var index = ui.helper.index(),
top = Math.round( ui.position.top ),
left = Math.round( ui.position.left );
// Update input field values if it's visible
if(LS_activeLayerIndexSet.length === 1) {
// Update input fields
jQuery('.ls-sublayer-style input[name="top"]').val( ui.helper.position().top / LS_previewZoom + 'px');
jQuery('.ls-sublayer-style input[name="left"]').val( ui.helper.position().left / LS_previewZoom + 'px');
}
},
resizing: function(e, ui) {
var rh = ui.size.height / ui.originalSize.height,
rw = ui.size.width / ui.originalSize.width,
uiRatio = ui.originalSize.width / ui.originalSize.height,
tagNames = [], layer, $layer, layerIndex, layerData, width,
height, op, os, r;
if( !$lasso.data( 'dragDirection') ){
$lasso.data( 'dragDirection', rh === 1 ? 'horizontal' : 'vertical' );
}
// Update layer data
jQuery('.ls-preview .ui-selected').each(function() {
layer = this;
$layer = jQuery(this);
layerIndex = $layer.index();
layerData = LS_activeSlideData.sublayers[layerIndex];
tagNames.push( layer.tagName.toLowerCase() );
op = $layer.data('originalPosition');
os = $layer.data('originalSize');
layerData.styles.top = layer.style.top = Math.round( (op.top - Math.round( ui.originalPosition.top / LS_previewZoom ) ) * rh + Math.round( ui.position.top / LS_previewZoom ) ) + 'px';
layerData.styles.left = layer.style.left = Math.round( (op.left - Math.round( ui.originalPosition.left / LS_previewZoom ) ) * rw + Math.round( ui.position.left / LS_previewZoom ) ) + 'px';
width = Math.round(os.width * rw) + 'px';
height = Math.round(os.height * rh) + 'px';
if( layerData.styles.width || $layer.is('img,div') ) {
layerData.styles.width = width;
}
if( layerData.styles.height || $layer.is('img,div') ) {
layerData.styles.height = height;
}
$layer.outerWidth(width);
$layer.outerHeight(height);
// Font-size only
if( ! $layer.is( 'img, iframe, video, audio' ) ) {
r = ui.size.width / ui.originalSize.width;
layerData.styles['font-size'] = layer.style.fontSize = Math.round( r * os.fontSize ) +'px';
if( os.lineHeight ) {
layerData.styles['line-height'] = layer.style.lineHeight = Math.round( r * os.lineHeight ) +'px';
}
}
if(LS_activeLayerIndexSet.length === 1) {
if( layerData.styles.width || $layer.is('img,div') ) {
jQuery('.ls-sublayer-style input[name="width"]').val( layer.style.width);
}
if( layerData.styles.height || $layer.is('img,div') ) {
jQuery('.ls-sublayer-style input[name="height"]').val( layer.style.height);
}
jQuery('.ls-sublayer-style input[name="top"]').val( layer.style.top);
jQuery('.ls-sublayer-style input[name="left"]').val( layer.style.left);
jQuery('.ls-sublayer-style input[name="font-size"]').val(layerData.styles['font-size']);
if( os.lineHeight ) {
jQuery('.ls-sublayer-style input[name="line-height"]').val( layerData.styles['line-height']+'px' );
}
}
});
if( tagNames.indexOf('img') === -1 && tagNames.indexOf('div') === -1 ) {
switch( $lasso.data( 'dragDirection') ){
case 'horizontal':
ui.size.height = ui.size.width / uiRatio;
break;
case 'vertical':
ui.size.width = ui.size.height * uiRatio;
break;
}
}
// Update lasso size info
$lasso.attr({
'data-info-0': 'w: ' + Math.round(ui.size.width) + 'px',
'data-info-1': 'h: ' + Math.round(ui.size.height) + 'px'
});
},
contextMenu: function(e) {
// Bail out if preview is active or when using Revisions
if( LayerSlider.isSlidePreviewActive || LayerSlider.isLayerPreviewActive || document.location.href.indexOf('ls-revisions') !== -1 ) {
return;
}
// Vars to hold overlapping elements
// and mouse position
var items = [],
mt = e.pageY;
ml = e.pageX;
LS_contextMenuTop = e.pageY - LS_previewArea.offset().top;
LS_contextMenuLeft = e.pageX - LS_previewArea.offset().left;
// Loop through layers list
LS_previewArea.children('.ls-l').each(function(layerIndex) {
// Get layer item and data
var $layer = jQuery(this),
layerData = LS_activeSlideData.sublayers[ $layer.index() ],
// Get layer positions and dimensions
t = LS_previewArea.offset().top + $layer.position().top,
l = LS_previewArea.offset().left + $layer.position().left,
w = $layer.outerWidth() * LS_previewZoom,
h = $layer.outerHeight() * LS_previewZoom;
if( (mt > t && mt < t+h) && (ml > l && ml < l+w) ) {
items.push({ index: layerIndex, data: layerData });
}
});
// Attempt to find the contextmenu instance.
var $contextMenu = jQuery('.ls-preview-context-menu');
// Create new contextmenu instance if it wasn't
// added to the document previously.
if( ! $contextMenu.length ) {
$contextMenu = jQuery( jQuery('#tmpl-ls-preview-context-menu').text() ).hide().prependTo('body');
}
// Reset the contextmenu and position it to its new location
$contextMenu.find('.ls-context-overlapping-layers ul').empty();
$contextMenu.find('li').show();
$contextMenu
.stop( true, true )
.css({ top: mt, left: ml })
.fadeIn( 100 );
// Close event
jQuery('body').on('mousedown.ls-context-menu', function(e) {
var $target = jQuery( e.target );
// Prevent closing the context menu by default if
// the event target was within it and the action
// should depend on the clicked item.
if( $target.closest('.ls-preview-context-menu').length ) {
// Clicked item is not a group list and has an action
// to be executed. Close the context menu with a bit of
// delay, so the event handler can be triggered before the
// item becomes hidden, which can cause issues to browsers.
if( ! $target.is('li.group') ) {
setTimeout(function() {
LayerSlider.closeContextMenu();
}, 150 );
}
// The event target has nothing to do with the context
// menu, so it can be closed right away.
} else {
LayerSlider.closeContextMenu();
}
});
// Loop through intersecting elements (if any)
if( items.length > 1 ) {
jQuery.each( items, function( idx, data ) {
var layerIndex = data.index,
layerData = data.data,
$li = jQuery('
'+layerData.subtitle+'').appendTo( $contextMenu.find('.ls-context-overlapping-layers ul') );
$li.data('layerIndex', layerIndex);
LayerSlider.setLayerMedia( layerData.media, jQuery('p', $li), layerData );
});
} else {
$contextMenu.find('.ls-context-overlapping-layers').hide();
}
// Empty slide, no layers
if( ! LS_activeSlideData.sublayers.length ) {
$contextMenu.find(' > ul > li').not(':first-child, .ls-context-menu-paste-layer').hide();
}
},
closeContextMenu: function() {
jQuery('body').off('mousedown.ls-context-menu');
jQuery('.ls-preview-context-menu').fadeOut( 100 );
},
highlightPreviewItem: function(el) {
// Get layer related data
var layerIndex = jQuery(el).data('layerIndex');
var $previewItem = LS_previewArea.children('.ls-l').eq(layerIndex);
// Highlight item
$previewItem.addClass('highlighted').siblings().addClass('lowlighted');
},
selectPreviewItem: function( layerIndex, event ) {
// Remove layer highlights (if any)
LS_previewArea.children().removeClass('highlighted lowlighted');
if( ! event.ctrlKey && ! event.metaKey ) {
if( JSON.stringify(LS_activeLayerIndexSet) !== '['+layerIndex+']' ) {
return LayerSlider.selectLayer( [ layerIndex ] );
}
} else {
// Get layer
var $previewItem = LS_previewArea.children().eq( layerIndex );
// Select layer
LS_previewHolder.triggerHandler(
jQuery.Event('mousedown.ls', {
target: $previewItem[0],
which: 1,
shiftKey: event.shiftKey,
ctrlKey: event.ctrlKey,
metaKey: event.metaKey
})
);
}
},
editLayerToggle: function() {
if(LS_activeLayerIndexSet.length === 1) {
var $editing = jQuery('.ls-editing'),
$layer = LS_previewItems[ LS_activeLayerIndexSet[0] ];
if(!$editing.length) {
this.editLayerStart($layer);
} else {
this.editLayerEnd($editing);
}
}
},
editLayerStart: function( $layer ) {
// Bring up the Media Library in case of image layer
if( $layer.is('img') || LS_activeLayerDataSet[0].media === 'img' ) {
jQuery('.ls-layer-image').click();
return false;
// Bring up the Icon Chooser in case of an icon layer
} else if( LS_activeLayerDataSet[0].media === 'icon' ) {
jQuery('.ls-replace-icon').last().click();
return false;
// Do nothing with media layers
} else if( LS_activeLayerDataSet[0].media === 'media' ) {
LS_InsertMedia.open();
return false;
}
LayerSlider.selectLayer( [$layer.index() ] );
// Get layer data
var layerData = LS_activeLayerDataSet[0];
// Bail out early if it's a locked layer
if( $layer.hasClass('disabled') || layerData.locked) { return false; }
// Enable editing
$layer.addClass('disabled ls-editing')
.prop('contenteditable', true)
.focus();
// Hide selectable/resizable
$lasso.addClass('ui-resizable-disabled').hide();
// Save current value for undoManager
jQuery('.ls-html-code textarea').data('prevVal',layerData.html);
// Select all text
document.execCommand('selectAll');
// End editing when clicking away
jQuery(document).on('click.ls-editing', function(event) {
if(!jQuery(event.target).hasClass('ls-editing')) {
LayerSlider.editLayerEnd( jQuery('.ls-editing') );
}
});
},
editLayer: function(e) {
if((e.metaKey || e.ctrlKey || e.altKey) && e.which === 13) {
e.preventDefault();
document.execCommand('insertHTML', false, '\r\n ');
}
},
editLayerUpdate: function(layer) {
var content = layer.textContent,
$textarea = jQuery('.ls-html-code textarea'),
styles = LS_activeLayerDataSet[0].styles;
$textarea.val(content);
LS_activeLayerDataSet[0].html = content;
LayerSlider.setPositions( jQuery(layer), styles.top, styles.left);
},
editLayerPaste: function(event) {
event.preventDefault();
document.execCommand('insertHTML', false,
event.originalEvent.clipboardData.getData('text/plain')
);
},
editLayerEnd: function($layer) {
jQuery(document).off('click.ls-editing');
$layer.prop('contenteditable', false).removeClass('disabled ls-editing');
jQuery('.ls-html-code textarea').trigger('change');
LayerSlider.updatePreviewSelection();
},
reindexLayers: function(el) {
var layerCount = LS_activeSlideData.sublayers.length;
layerCount = layerCount ? layerCount : 0;
// Reindex default layers' title
jQuery('#ls-layers .ls-sublayers > li').each(function(index) {
var layerTitle = jQuery(this).find('.ls-sublayer-title').val(),
pattern = LS_l10n.SBLayerTitle.substring(0, LS_l10n.SBLayerTitle.length-2);
if( layerTitle.indexOf(pattern) != -1 && layerTitle.indexOf('copy') == -1) {
jQuery(this).find('.ls-sublayer-title').val( LS_l10n.SBLayerTitle.replace('%d', (layerCount-index) ) );
}
});
},
updateSlidePreviews: function() {
jQuery('#ls-slide-tabs .ls-slide-tab').each( function( index ) {
var $slide = jQuery( this ),
$preview = $slide.children('.ls-slide-preview'),
slideIndex = $slide.index(),
slideData = window.lsSliderData.layers[ slideIndex ],
slideProps = slideData.properties;
if( slideProps.thumbnail ) {
$preview.css('background-image', 'url('+slideProps.thumbnail+')' );
$slide.removeClass('empty');
} else if( slideProps.background ) {
$preview.css('background-image', 'url('+slideProps.background+')' );
$slide.removeClass('empty');
} else {
$preview.css('background-image', 'none');
$slide.addClass('empty');
}
});
},
rebuildSlides: function() {
var $tab;
jQuery.each(window.lsSliderData.layers, function(slideKey, slideData) {
// Try to locate a preview tab and update it if exists
$tab = jQuery('#ls-slide-tabs').children().eq( slideKey );
// Create a new tab if needed
if( ! $tab.length ) {
$tab = jQuery( jQuery('#tmpl-slide-tab').text() ).appendTo('#ls-slide-tabs');
}
// Update title
if( slideData.properties.title ) {
$tab.find('.ls-slide-name input').val( slideData.properties.title );
}
});
// Remove additional and unnecessary tabs (if any)
$tab.nextAll().remove();
// Restore active selection
jQuery('#ls-slide-tabs')
.children()
.removeClass('active')
.eq( LS_activeSlideIndex )
.addClass('active');
LayerSlider.updateSlidePreviews();
},
checkMediaAutoPlay: function( $textarea, prop, val ) {
clearTimeout( LayerSlider.mediaCheckTimeout );
LayerSlider.mediaCheckTimeout = setTimeout( function() {
if( val.indexOf('autoplay') !== -1 ) {
var $media = jQuery(val).filter('iframe'),
autoplayDetected = false;
if( $media.is('iframe') ) {
var URL = $media.attr('src').split('?'),
targetIndex = -1;
if( URL[1] ) {
params = URL[1].split('&');
jQuery.each(params, function(index, item) {
if( item.indexOf('autoplay') !== -1 ) {
autoplayDetected = true;
targetIndex = index;
}
});
if( targetIndex > -1 ) {
params.splice(targetIndex, 1);
}
}
if( typeof params !== 'undefined' ) {
$media.attr('src', URL[0]+'?'+params.join('&') );
}
} else if( $media.is('video') || $media.is('audio') ) {
autoplayDetected = true;
$media.removeAttr('autoplay');
}
if( autoplayDetected ) {
$textarea.val( $media[0].outerHTML );
$autoplay = jQuery('select[name="autoplay"]');
jQuery('option', $autoplay)
.prop('selected', false)
.eq(1).prop('selected', true);
TweenLite.to($autoplay[0], 0.2, {
css: { scale: 1.3 },
onComplete: function() {
TweenLite.to($autoplay[0], 0.2, {
css: { scale: 1 }
});
}
});
}
}
}, 100, $textarea, prop, val);
},
startSlidePreview: function( sliderOptions ) {
// Stop **layer** preview if it's currently running
// to prevent simultaneous instances
this.stopLayerPreview(true);
// Stop slide preview if it's currently running
if(this.isSlidePreviewActive) {
LayerSlider.stopSlidePreview();
return true;
}
this.isSlidePreviewActive = true;
sliderOptions = sliderOptions || {};
// Get slider settings and preview container
var sliderProps = window.lsSliderData.properties,
sliderSize = LayerSlider.getSliderSize(),
plugins = [];
// Switch between preview and editor
var $slider = jQuery('#ls-layers .ls-real-time-preview').show();
$slider = jQuery('
').appendTo( $slider );
if( sliderProps.sliderclass ) {
$slider.addClass( sliderProps.sliderclass );
}
jQuery('#ls-layers .ls-preview').hide();
jQuery('#ls-layers .ls-preview-button').html('Stop').addClass('playing');
LayerSlider.hidePreviewSelection();
// Empty the preview area to avoid ID collisions
LS_previewArea.empty();
// Append slides & layers
this.populateSliderPreview( $slider, plugins );
// Handle plugins
if( sliderOptions && sliderOptions.plugins ) {
sliderOptions.plugins = jQuery.merge(sliderOptions.plugins, plugins);
}
var sliderDefaults = {
type: 'responsive',
width: sliderSize.width,
height: sliderSize.height,
skin: 'v6',
skinsPath: pluginPath + 'layerslider/skins/',
firstSlide: LS_activeSlideIndex + 1,
autoStart: true,
pauseOnHover: false,
startInViewport: false,
autoPlayVideos: sliderProps.autoplayvideos ? true : false,
slideBGSize: sliderProps.slideBGSize,
slideBGPosition: sliderProps.slideBGPosition,
globalBGColor: sliderProps.backgroundcolor,
globalBGImage: sliderProps.backgroundimage,
globalBGAttachment: sliderProps.globalBGAttachment,
globalBGRepeat: sliderProps.globalBGRepeat,
globalBGPosition: sliderProps.globalBGPosition,
globalBGSize: sliderProps.globalBGSize,
parallaxScrollReverse: sliderProps.parallaxScrollReverse,
playByScroll: sliderProps.playByScroll ? true : false,
playByScrollStart: sliderProps.playByScrollStart ? true : false,
playByScrollSkipSlideBreaks: sliderProps.playByScrollSkipSlideBreaks ? true : false,
playByScrollSpeed: sliderProps.playByScrollSpeed || 1,
navButtons: false,
navStartStop: false,
forceLayersOutDuration: sliderProps.forceLayersOutDuration || 750,
allowRestartOnResize: sliderProps.allowRestartOnResize ? true : false,
preferBlendMode: sliderProps.preferBlendMode,
plugins: plugins
};
if( sliderProps.maxRatio ) {
sliderDefaults.maxRatio = sliderProps.maxRatio;
}
// Init layerslider
$slider.layerSlider(
jQuery.extend( true, sliderDefaults, sliderOptions )
).on('slideTimelineDidComplete', function( event, slider ) {
// if( jQuery('.ls-timeline-switch li').eq(0).hasClass('active') ) {
// slider.api('replay');
// return false;
// }
}).on( 'slideTimelineDidCreate', function(){
jQuery( '.ls-slidebar-slider' ).attr({
'data-help': LS_l10n.SBDragMe,
'data-km-ui-popover-once': 'true',
'data-km-ui-popover-theme': 'red',
'data-km-ui-popover-autoclose': 3,
'data-km-ui-popover-distance': 20
}).trigger( 'mouseenter' );
});
},
stopSlidePreview: function() {
if( this.isSlidePreviewActive ) {
this.isSlidePreviewActive = false;
// Show the editor
jQuery('#ls-layers .ls-preview').show();
// Stop LayerSlider and empty the preview contents
var layersliders = jQuery('#ls-layers .ls-real-time-preview');
layersliders.find('.ls-container').layerSlider( 'destroy', true );
layersliders.hide();
// Rewrote the Preview button text
var btnText = document.location.href.indexOf('ls-revisions') !== -1 ? LS_l10n.SBPreviewSlide : LS_l10n.slideNoun;
jQuery('#ls-layers .ls-preview-button').text( btnText ).removeClass('playing');
kmUI.popover.close();
LayerSlider.generatePreview();
LayerSlider.showPreviewSelection();
LayerSlider.updatePreviewSelection();
// Remove timeline
jQuery('.ls-timeline-switch li:first-child').click();
// SET: layer editor size
kmUI.smartResize.set();
}
},
startPopupPreview: function( sliderOptions, button ) {
// Stop both layer & slide preview if they are active
this.stopLayerPreview(true);
this.stopSlidePreview();
sliderOptions = sliderOptions || {};
// Prevent pressing the Preview button multiple times
jQuery(button).prop('disabled', true);
setTimeout(function() {
jQuery(button).prop('disabled', false);
}, 1000);
// Get slider settings and preview container
var sliderProps = window.lsSliderData.properties,
width = parseInt(sliderProps.popupWidth),
height = parseInt(sliderProps.popupHeight),
sliderCSS = sliderProps.sliderstyle,
circleTimer = sliderProps.circletimer ? true : false,
plugins = ['popup'];
// Append live preview element
var $slider = jQuery('