%PDF- %PDF-
| Direktori : /home/infra/new-ong/bethemeold/muffin-options/fields/upload_multi/ |
| Current File : //home/infra/new-ong/bethemeold/muffin-options/fields/upload_multi/field_upload_multi.js |
(function($) {
/* globals jQuery, wp */
"use strict";
var MfnUploadMulti = (function() {
var group = '.form-group.browse-image.multi ';
var multiFileFrame, multiFileFrameOpen, multiFileFrameSelect, handle,
selector = '.browse-image.multi';
/**
* Attach events to buttons. Runs whole script.
*/
function init() {
openMediaGallery();
attachRemoveAction();
attachRemoveAllAction();
uiSortable();
}
/**
* UI Sortable Init
*/
function uiSortable() {
// TODO: when you add images to new item sortable won't init
$(document).on('mfn:builder:edit', function( $this, modal ){
var $el = $('.browse-image.multi .gallery-container', modal),
$parent = $el.closest(selector);
if ( $el.length ) {
// init sortable
if ( ! $el.hasClass( 'ui-sortable' ) ) {
$el.sortable({
opacity: 0.9,
update: function() {
fillInput( $parent, findAllIDs( $parent ) );
}
});
}
// enable inactive sortable
if ( $el.hasClass( 'ui-sortable-disabled' ) ) {
$el.sortable( 'enable' );
}
}
});
$(document).on('mfn:builder:close', function( $this ){
$('.gallery-container.ui-sortable').sortable('destroy');
});
}
/**
* Click | Add
*/
function openMediaGallery() {
$('.mfn-ui').on('click', group + '.mfn-button-upload', function(e) {
event.preventDefault();
handle = this;
// Create the media frame
multiFileFrame = wp.media.frames.mfnGallery = wp.media({
multiple: 'add',
library: {
type: 'image',
}
});
// Attach hooks to the events
multiFileFrame.on('open', multiFileFrameOpen);
multiFileFrame.on('select', multiFileFrameSelect);
multiFileFrame.open();
});
}
/**
* WP Media Frame | Open
*/
multiFileFrameOpen = function() {
var parent = handle.closest(selector),
library = multiFileFrame.state().get('selection'),
images = $('.upload-input', parent).val(),
imageIDs;
if (!images) {
return true;
}
imageIDs = images.split(',');
imageIDs.forEach(function(id) {
var attachment = wp.media.attachment(id);
attachment.fetch();
library.add(attachment ? [attachment] : []);
});
};
/**
* WP Media Frame | Select
*/
multiFileFrameSelect = function() {
var parent = handle.closest(selector),
gallery = $('.gallery-container', parent),
library = multiFileFrame.state().get('selection'),
imageURLs = [],
imageIDs = [],
imageURL, outputHTML, joinedIDs;
gallery.html('');
library.map(function(image) {
image = image.toJSON();
imageURLs.push(image.url);
imageIDs.push(image.id);
if (image.sizes.thumbnail) {
imageURL = image.sizes.thumbnail.url;
} else {
imageURL = image.url;
}
outputHTML = '<li class="selected-image">' +
'<img data-pic-id="' + image.id + '" src="' + imageURL + '" />' +
'<a class="mfn-option-btn mfn-button-delete" data-tooltip="Delete" href="#"><span class="mfn-icon mfn-icon-delete"></span></a>' +
'</li>';
gallery.append(outputHTML);
});
joinedIDs = imageIDs.join(',').replace(/^,*/, '');
if (joinedIDs.length !== 0) {
$(parent).removeClass('empty');
}
fillInput(parent, joinedIDs);
};
/**
* Click | Remove single
*/
function attachRemoveAction() {
$('.mfn-ui').on('click', group + '.mfn-button-delete', function(e) {
event.preventDefault();
var parent = $(this).closest(selector),
joinedIDs;
$(this).closest('.selected-image').remove();
joinedIDs = findAllIDs(parent);
if (joinedIDs === '') {
parent.addClass('empty');
}
fillInput(parent, joinedIDs);
});
}
/**
* Click | Remove all
*/
function attachRemoveAllAction() {
$('.mfn-ui').on('click', group + '.mfn-button-delete-all', function(e) {
event.preventDefault();
var parent = $(this).closest(selector);
parent.addClass('empty');
$('input', parent).val('').trigger('change');
$('.gallery-container', parent).html('');
});
}
/**
* Helper method. Find all IDs of added images.
* @method findAllIDs
* @return {String} joined ids separated by `;`
*/
function findAllIDs( parent ) {
var imageIDs = [],
id;
$('.gallery-container img', parent).each(function() {
id = $(this).attr('data-pic-id');
imageIDs.push(id);
});
return imageIDs.join( ',' );
}
/**
* Helper method. Set the value of image gallery input.
* @method fillInput
* @param {String} joinedIDs - string to be set into input
*/
function fillInput( parent, joinedIDs ) {
$('.upload-input', parent)
.val( joinedIDs )
.trigger('change');
}
/**
* Return
* Method to start the closure
*/
return {
init: init
};
})(jQuery);
/**
* $(document).ready
* Specify a function to execute when the DOM is fully loaded.
*/
$(function() {
MfnUploadMulti.init();
});
})(jQuery);