File: //var/www/zaklada/wp-content/plugins/responsive-lightbox/js/admin-widgets.js
( function( window, $ ) {
/* Gallery widget */
var rl_galleries = [ ],
rl_gallery_frames = [ ],
rl_gallery_ids = [ ],
rl_gallery_images = [ ];
/* Single image widget */
var rl_image_frame,
rl_image_container,
rl_image_input;
// ready event
$( function() {
init_rl_gallery_widget();
init_rl_image_widget();
} );
// custom events trigger
$( document ).on( 'widget-updated widget-added', function() {
init_rl_gallery_widget();
init_rl_image_widget();
} );
function init_rl_gallery_widget() {
rl_galleries = $( '.rl-gallery-widget' );
if ( rl_galleries.length > 0 ) {
$.each( rl_galleries, function( index, gallery ) {
var gallery_id_attr = $( gallery ).attr( 'id' ),
gallery_id_arr = gallery_id_attr.match( /\-\d*\-/ );
if ( gallery_id_arr != null ) {
var gallery_id = gallery_id_arr.shift().replace( /-/g, '' );
rl_gallery_frames[gallery_id] = [ ];
rl_gallery_ids[gallery_id] = $( gallery ).find( '.rl-gallery-ids' );
rl_gallery_images[gallery_id] = $( gallery ).find( '.rl-gallery-images' );
// image ordering
rl_gallery_images[gallery_id].sortable( {
items: 'li.rl-gallery-image',
cursor: 'move',
scrollSensitivity: 40,
forcePlaceholderSize: true,
forceHelperSize: false,
helper: 'clone',
opacity: 0.65,
placeholder: 'rl-gallery-sortable-placeholder',
start: function( event, ui ) {
ui.item.css( 'border-color', '#f6f6f6' );
},
stop: function( event, ui ) {
ui.item.removeAttr( 'style' );
},
update: function( event, ui ) {
var attachment_ids = [ ];
$( rl_gallery_images[gallery_id] ).find( 'li.rl-gallery-image' ).each( function() {
var attachment_id = jQuery( this ).attr( 'data-attachment_id' );
attachment_ids.push( attachment_id );
} );
rl_gallery_ids[gallery_id].val( attachment_ids.join( ',' ) );
}
} );
// removing images
$( rl_gallery_images[gallery_id] ).on( 'click', '.rl-gallery-image-remove', function() {
var li = $( this ).closest( 'li.rl-gallery-image' ),
attachment_ids = rl_gallery_ids[gallery_id].val().split( ',' ).map( function( el ) {
return parseInt( el )
} );
// remove id
attachment_ids = _.without( attachment_ids, parseInt( li.data( 'attachment_id' ) ) );
// remove attachment
li.remove();
// update attachment ids
rl_gallery_ids[gallery_id].val( attachment_ids.join( ',' ) );
return false;
} );
}
} );
}
// open the modal on click
$( '.rl-gallery-widget-select' ).on( 'click', function( event ) {
event.preventDefault();
var gallery = $( this ).closest( '.rl-gallery-widget' ),
gallery_id = 0,
gallery_id_attr = $( gallery ).attr( 'id' ),
gallery_id_arr = gallery_id_attr.match( /\-\d*\-/ );
if ( gallery_id_arr != null ) {
gallery_id = gallery_id_arr.shift().replace( /-/g, '' );
var attachment_ids = rl_gallery_ids[gallery_id].val();
// if the media frame already exists, reopen it.
if ( rl_gallery_frames[gallery_id].length != 0 ) {
rl_gallery_frames[gallery_id].open();
return;
}
// create the media frame.
rl_gallery_frames[gallery_id] = wp.media( {
// Set the title of the modal.
title: rlArgsWidgets.textSelectImages,
multiple: true,
button: {
text: rlArgsWidgets.textUseImages
},
library: { type: 'image' },
multiple: true
} );
rl_gallery_frames[gallery_id].on( 'open', function() {
var selection = rl_gallery_frames[gallery_id].state().get( 'selection' ),
attachment_ids = rl_gallery_ids[gallery_id].val().split( ',' );
$.each( attachment_ids, function() {
let _this = this;
if ( ! isNaN( parseFloat( _this ) ) && isFinite( _this ) ) {
attachment = wp.media.attachment( this );
attachment.fetch();
selection.add( attachment ? [ attachment ] : [ ] );
}
} );
} );
// when an image is selected, run a callback.
rl_gallery_frames[gallery_id].on( 'select', function() {
var selection = rl_gallery_frames[gallery_id].state().get( 'selection' ),
selected_ids = [ ],
attachment_ids = rl_gallery_ids[gallery_id].val().split( ',' ).map( function( el ) {
return parseInt( el )
} );
if ( selection ) {
selection.map( function( attachment ) {
if ( attachment.id ) {
selected_ids.push( attachment.id );
// is image already in gallery?
if ( $.inArray( attachment.id, attachment_ids ) !== -1 ) {
return;
}
attachment_ids.push( attachment.id );
attachment = attachment.toJSON();
// is preview size available?
if ( attachment.sizes && attachment.sizes['thumbnail'] ) {
attachment.url = attachment.sizes['thumbnail'].url;
}
rl_gallery_images[gallery_id].append( '\
<li class="rl-gallery-image" data-attachment_id="' + attachment.id + '">\
<div class="rl-gallery-inner"><img src="' + attachment.url + '" /></div>\
<div class="rl-gallery-actions"><a href="#" class="rl-gallery-image-remove dashicons dashicons-no" title="' + rlArgsWidgets.textRemoveImage + '"></a></div>\
</li>'
);
}
} );
}
// assign copy of attachments ids
var copy = attachment_ids;
for ( var i = 0; i < attachment_ids.length; i++ ) {
// unselected image?
if ( $.inArray( attachment_ids[i], selected_ids ) === -1 ) {
$( rl_gallery_images[gallery_id] ).find( 'li.rl-gallery-image[data-attachment_id="' + attachment_ids[i] + '"]' ).remove();
copy = _.without( copy, attachment_ids[i] )
}
}
rl_gallery_ids[gallery_id].val( _.uniq( copy ).join( ',' ) );
} );
// finally, open the modal.
rl_gallery_frames[gallery_id].open();
}
} );
}
function init_rl_image_widget() {
$( '.rl-image-widget-select' ).on( 'click', function( event ) {
var _this = $( this );
rl_image_container = _this.parent().find( '.rl-image-widget-content' );
rl_image_input = _this.parent().find( '.rl-image-widget-image-id' );
event.preventDefault();
// create a new media frame
rl_image_frame = wp.media( {
title: rlArgsWidgets.textSelectImage,
button: {
text: rlArgsWidgets.textUseImage
},
library: { type: 'image' },
multiple: false
} );
// when an image is selected in the media frame...
rl_image_frame.on( 'select', function() {
// get media attachment details from the frame state
var attachment = rl_image_frame.state().get( 'selection' ).first().toJSON();
// send the attachment URL to our custom image input field.
rl_image_container.html( '<img src="' + attachment.url + '" alt="" />' );
// send the attachment id to our hidden input
rl_image_input.val( attachment.id );
} );
// when an image is already selected in the media frame...
rl_image_frame.on( 'open', function() {
var selection = rl_image_frame.state().get( 'selection' );
// get current image
var attachment = wp.media.attachment( rl_image_input.val() );
attachment.fetch();
// preselect in media frame
selection.add( attachment ? [ attachment ] : [ ] );
} );
rl_image_frame.open();
} );
$( '.rl-image-link-to' ).on( 'change', function() {
if ( $( this ).val() == 'custom' ) {
$( this ).parent().next().slideDown( 'fast' );
} else {
$( this ).parent().next().slideUp( 'fast' );
}
} );
}
} )( this, jQuery );