158 lines
4.0 KiB
JavaScript
158 lines
4.0 KiB
JavaScript
|
/* global wp */
|
||
|
|
||
|
/**
|
||
|
* media-library.js
|
||
|
*
|
||
|
* Adapted from WordPress
|
||
|
*
|
||
|
* @copyright 2017 by the WordPress contributors.
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
*
|
||
|
* This program incorporates work covered by the following copyright and
|
||
|
* permission notices:
|
||
|
*
|
||
|
* b2 is (c) 2001, 2002 Michel Valdrighi - m@tidakada.com - http://tidakada.com
|
||
|
*
|
||
|
* b2 is released under the GPL
|
||
|
*
|
||
|
* WordPress - Web publishing software
|
||
|
*
|
||
|
* Copyright 2003-2010 by the contributors
|
||
|
*
|
||
|
* WordPress is released under the GPL
|
||
|
*/
|
||
|
|
||
|
var Select = wp.media.view.MediaFrame.Select,
|
||
|
Library = wp.media.controller.Library,
|
||
|
l10n = wp.media.view.l10n;
|
||
|
|
||
|
wp.media.view.MediaFrame.ETSelect = wp.media.view.MediaFrame.Select.extend({
|
||
|
initialize: function() {
|
||
|
_.defaults( this.options, {
|
||
|
multiple: true,
|
||
|
editing: false,
|
||
|
embed: true,
|
||
|
state: 'insert',
|
||
|
metadata: {},
|
||
|
title: l10n.insertMediaTitle,
|
||
|
button: {
|
||
|
text: l10n.insertIntoPost
|
||
|
},
|
||
|
});
|
||
|
|
||
|
// Call 'initialize' directly on the parent class.
|
||
|
Select.prototype.initialize.apply( this, arguments );
|
||
|
this.createIframeStates();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Create the default states.
|
||
|
*/
|
||
|
createStates: function() {
|
||
|
var options = this.options;
|
||
|
|
||
|
var states = [
|
||
|
// Main states.
|
||
|
new Library({
|
||
|
id: 'insert',
|
||
|
title: options.title,
|
||
|
priority: 20,
|
||
|
toolbar: 'main-insert',
|
||
|
filterable: 'all',
|
||
|
library: wp.media.query( options.library ),
|
||
|
multiple: options.multiple ? 'reset' : false,
|
||
|
editable: true,
|
||
|
allowLocalEdits: true,
|
||
|
displaySettings: true,
|
||
|
displayUserSettings: true
|
||
|
}),
|
||
|
];
|
||
|
if (options.embed) {
|
||
|
// Embed states.
|
||
|
states.push(new wp.media.controller.Embed( { metadata: options.metadata } ))
|
||
|
}
|
||
|
this.states.add(states);
|
||
|
},
|
||
|
|
||
|
bindHandlers: function() {
|
||
|
var handlers;
|
||
|
|
||
|
Select.prototype.bindHandlers.apply( this, arguments );
|
||
|
|
||
|
this.on( 'toolbar:create:main-insert', this.createToolbar, this );
|
||
|
this.on( 'toolbar:create:main-embed', this.mainEmbedToolbar, this );
|
||
|
|
||
|
handlers = {
|
||
|
content: {
|
||
|
'embed': 'embedContent',
|
||
|
},
|
||
|
|
||
|
toolbar: {
|
||
|
'main-insert': 'mainInsertToolbar',
|
||
|
}
|
||
|
};
|
||
|
|
||
|
_.each( handlers, function( regionHandlers, region ) {
|
||
|
_.each( regionHandlers, function( callback, handler ) {
|
||
|
this.on( region + ':render:' + handler, this[ callback ], this );
|
||
|
}, this );
|
||
|
}, this );
|
||
|
},
|
||
|
|
||
|
// Content
|
||
|
embedContent: function() {
|
||
|
var view = new wp.media.view.Embed({
|
||
|
controller: this,
|
||
|
model: this.state()
|
||
|
}).render();
|
||
|
|
||
|
this.content.set( view );
|
||
|
|
||
|
if ( ! wp.media.isTouchDevice ) {
|
||
|
view.url.input.focus();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// Toolbars
|
||
|
mainInsertToolbar: function( view ) {
|
||
|
var options = this.options;
|
||
|
var controller = this;
|
||
|
|
||
|
view.set( 'insert', {
|
||
|
style: 'primary',
|
||
|
priority: 80,
|
||
|
text: options.button.text,
|
||
|
requires: { selection: true },
|
||
|
|
||
|
/**
|
||
|
* @fires wp.media.controller.State#insert
|
||
|
*/
|
||
|
click: function() {
|
||
|
var state = controller.state(),
|
||
|
selection = state.get('selection');
|
||
|
|
||
|
controller.close();
|
||
|
state.trigger( 'insert', selection ).reset();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
mainEmbedToolbar: function( toolbar ) {
|
||
|
toolbar.view = new wp.media.view.Toolbar.Embed({
|
||
|
controller: this
|
||
|
});
|
||
|
}
|
||
|
});
|