(function () {
window.addEventListener('DOMContentLoaded', function () {
var frame;
// Open or create the the media frame
document.querySelector('#media-handler').addEventListener('click', function (event) {
event.preventDefault();
//if frame has been create, reopen it.
if (frame) {
frame.open();
return;
}
/**
* Please attach all the code below to a button click event
**/
//create a new Library, base on defaults
//you can put your attributes in
var insertImage = wp.media.controller.Library.extend({
defaults : _.defaults({
id: 'insert-image',
title: 'Insert Sizing Chart',
allowLocalEdits: true,
displaySettings: true,
displayUserSettings: true,
multiple : true,
type : 'image'//audio, video, application/pdf, ... etc
}, wp.media.controller.Library.prototype.defaults )
});
//Setup media frame
frame = wp.media({
button : { text : 'Select' },
state : 'insert-image',
states : [
new insertImage()
]
});
//on close, if there is no select files, remove all the files already selected in your main frame
frame.on('close',function() {
var selection = frame.state('insert-image').get('selection');
if(!selection.length){
// #remove file nodes
// #such as: jq("#my_file_group_field").children('div.image_group_row').remove();
// #...
}
});
frame.on( 'select',function() {
var state = frame.state('insert-image');
var selection = state.get('selection');
var imageArray = [];
if ( ! selection ) return;
// #remove file nodes
// #such as: jq("#my_file_group_field").children('div.image_group_row').remove();
// #...
//to get right side attachment UI info, such as: size and alignments
//org code from /wp-includes/js/media-editor.js, arround `line 603 -- send: { ... attachment: function( props, attachment ) { ... `
selection.each(function(attachment) {
var display = state.display( attachment ).toJSON();
var obj_attachment = attachment.toJSON()
var caption = obj_attachment.caption, options, html;
// If captions are disabled, clear the caption.
if ( ! wp.media.view.settings.captions )
delete obj_attachment.caption;
display = wp.media.string.props( display, obj_attachment );
options = {
id: obj_attachment.id,
post_content: obj_attachment.description,
post_excerpt: caption
};
if ( display.linkUrl )
options.url = display.linkUrl;
if ( 'image' === obj_attachment.type ) {
html = wp.media.string.image( display );
_.each({
align: 'align',
size: 'image-size',
alt: 'image_alt'
}, function( option, prop ) {
if ( display[ prop ] )
options[ option ] = display[ prop ];
});
} else if ( 'video' === obj_attachment.type ) {
html = wp.media.string.video( display, obj_attachment );
} else if ( 'audio' === obj_attachment.type ) {
html = wp.media.string.audio( display, obj_attachment );
} else {
html = wp.media.string.link( display );
options.post_title = display.title;
}
//attach info to attachment.attributes object
attachment.attributes['nonce'] = wp.media.view.settings.nonce.sendToEditor;
attachment.attributes['attachment'] = options;
attachment.attributes['html'] = html;
attachment.attributes['post_id'] = wp.media.view.settings.post.id;
//do what ever you like to use it
//in my case, I update the previous image with new image
//#image-sizing-chart-url is an <img/> tag
jQuery('#image-sizing-chart-url').attr('href', attachment.attributes.sizes.large.url);
jQuery('#image-sizing-chart').attr('src', attachment.attributes.sizes.thumbnail.url);
jQuery('#image-sizing-chart').attr('width', 150);
jQuery('#image-sizing-chart').attr('height', 150);
jQuery('#image-sizing-chart-id').attr('value', attachment.attributes.id);
});
});
//now open the popup
frame.open();
});//click
});//event listener
})(); //dom ready then execute