2015-02-22 07:56:27 +01:00
|
|
|
/*globals wp */
|
|
|
|
|
2015-02-09 01:43:50 +01:00
|
|
|
/**
|
|
|
|
* wp.media.view.MediaFrame.MediaDetails
|
|
|
|
*
|
2015-02-22 07:28:26 +01:00
|
|
|
* @class
|
2015-02-09 01:43:50 +01:00
|
|
|
* @augments wp.media.view.MediaFrame.Select
|
|
|
|
* @augments wp.media.view.MediaFrame
|
|
|
|
* @augments wp.media.view.Frame
|
|
|
|
* @augments wp.media.View
|
|
|
|
* @augments wp.Backbone.View
|
|
|
|
* @augments Backbone.View
|
|
|
|
* @mixes wp.media.controller.StateMachine
|
|
|
|
*/
|
2015-02-22 09:29:25 +01:00
|
|
|
var View = wp.media.View,
|
|
|
|
Toolbar = wp.media.view.Toolbar,
|
|
|
|
Select = wp.media.view.MediaFrame.Select,
|
2015-02-09 01:43:50 +01:00
|
|
|
l10n = wp.media.view.l10n,
|
|
|
|
MediaDetails;
|
|
|
|
|
|
|
|
MediaDetails = Select.extend({
|
|
|
|
defaults: {
|
|
|
|
id: 'media',
|
|
|
|
url: '',
|
|
|
|
menu: 'media-details',
|
|
|
|
content: 'media-details',
|
|
|
|
toolbar: 'media-details',
|
|
|
|
type: 'link',
|
|
|
|
priority: 120
|
|
|
|
},
|
|
|
|
|
|
|
|
initialize: function( options ) {
|
|
|
|
this.DetailsView = options.DetailsView;
|
|
|
|
this.cancelText = options.cancelText;
|
|
|
|
this.addText = options.addText;
|
|
|
|
|
2015-02-09 05:14:26 +01:00
|
|
|
this.media = new wp.media.model.PostMedia( options.metadata );
|
|
|
|
this.options.selection = new wp.media.model.Selection( this.media.attachment, { multiple: false } );
|
2015-02-09 01:43:50 +01:00
|
|
|
Select.prototype.initialize.apply( this, arguments );
|
|
|
|
},
|
|
|
|
|
|
|
|
bindHandlers: function() {
|
|
|
|
var menu = this.defaults.menu;
|
|
|
|
|
|
|
|
Select.prototype.bindHandlers.apply( this, arguments );
|
|
|
|
|
|
|
|
this.on( 'menu:create:' + menu, this.createMenu, this );
|
|
|
|
this.on( 'content:render:' + menu, this.renderDetailsContent, this );
|
|
|
|
this.on( 'menu:render:' + menu, this.renderMenu, this );
|
|
|
|
this.on( 'toolbar:render:' + menu, this.renderDetailsToolbar, this );
|
|
|
|
},
|
|
|
|
|
|
|
|
renderDetailsContent: function() {
|
|
|
|
var view = new this.DetailsView({
|
|
|
|
controller: this,
|
|
|
|
model: this.state().media,
|
|
|
|
attachment: this.state().media.attachment
|
|
|
|
}).render();
|
|
|
|
|
|
|
|
this.content.set( view );
|
|
|
|
},
|
|
|
|
|
|
|
|
renderMenu: function( view ) {
|
|
|
|
var lastState = this.lastState(),
|
|
|
|
previous = lastState && lastState.id,
|
|
|
|
frame = this;
|
|
|
|
|
|
|
|
view.set({
|
|
|
|
cancel: {
|
|
|
|
text: this.cancelText,
|
|
|
|
priority: 20,
|
|
|
|
click: function() {
|
|
|
|
if ( previous ) {
|
|
|
|
frame.setState( previous );
|
|
|
|
} else {
|
|
|
|
frame.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
separateCancel: new View({
|
|
|
|
className: 'separator',
|
|
|
|
priority: 40
|
|
|
|
})
|
|
|
|
});
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
setPrimaryButton: function(text, handler) {
|
|
|
|
this.toolbar.set( new Toolbar({
|
|
|
|
controller: this,
|
|
|
|
items: {
|
|
|
|
button: {
|
|
|
|
style: 'primary',
|
|
|
|
text: text,
|
|
|
|
priority: 80,
|
|
|
|
click: function() {
|
|
|
|
var controller = this.controller;
|
|
|
|
handler.call( this, controller, controller.state() );
|
|
|
|
// Restore and reset the default state.
|
|
|
|
controller.setState( controller.options.state );
|
|
|
|
controller.reset();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}) );
|
|
|
|
},
|
|
|
|
|
|
|
|
renderDetailsToolbar: function() {
|
|
|
|
this.setPrimaryButton( l10n.update, function( controller, state ) {
|
|
|
|
controller.close();
|
|
|
|
state.trigger( 'update', controller.media.toJSON() );
|
|
|
|
} );
|
|
|
|
},
|
|
|
|
|
|
|
|
renderReplaceToolbar: function() {
|
|
|
|
this.setPrimaryButton( l10n.replace, function( controller, state ) {
|
|
|
|
var attachment = state.get( 'selection' ).single();
|
|
|
|
controller.media.changeAttachment( attachment );
|
|
|
|
state.trigger( 'replace', controller.media.toJSON() );
|
|
|
|
} );
|
|
|
|
},
|
|
|
|
|
|
|
|
renderAddSourceToolbar: function() {
|
|
|
|
this.setPrimaryButton( this.addText, function( controller, state ) {
|
|
|
|
var attachment = state.get( 'selection' ).single();
|
|
|
|
controller.media.setSource( attachment );
|
|
|
|
state.trigger( 'add-source', controller.media.toJSON() );
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2015-02-09 17:01:29 +01:00
|
|
|
module.exports = MediaDetails;
|