mirror of
https://github.com/WordPress/WordPress.git
synced 2025-01-23 00:31:28 +01:00
a5478d7adb
* The way that the JS modules for media are currently set up turns the existing global `wp.media` namespace into a read-only API, this is bad. * For the existing module implementation to work with plugins, those looking to override or extend a class would have to modify their own plugin to use `browserify` - we can't expect this to happen * Because the general way that plugins override media classes is via machete (resetting them to something else), we cannot use `require( 'module' )` in the internal code for media modules We CAN continue to use `require( 'fun/js' )` in the manifests for media. Future code/projects should carefully consider what is made to be public API. In 3.5, EVERYTHING was made public, so everything shall remain public. See #31684, #28510. Built from https://develop.svn.wordpress.org/trunk@31935 git-svn-id: http://core.svn.wordpress.org/trunk@31914 1a063a9b-81f0-0310-95a4-ce76da25c4cd
116 lines
2.0 KiB
JavaScript
116 lines
2.0 KiB
JavaScript
/**
|
|
* wp.media.view.Menu
|
|
*
|
|
* @class
|
|
* @augments wp.media.view.PriorityList
|
|
* @augments wp.media.View
|
|
* @augments wp.Backbone.View
|
|
* @augments Backbone.View
|
|
*/
|
|
var MenuItem = wp.media.view.MenuItem,
|
|
PriorityList = wp.media.view.PriorityList,
|
|
Menu;
|
|
|
|
Menu = PriorityList.extend({
|
|
tagName: 'div',
|
|
className: 'media-menu',
|
|
property: 'state',
|
|
ItemView: MenuItem,
|
|
region: 'menu',
|
|
|
|
/* TODO: alternatively hide on any click anywhere
|
|
events: {
|
|
'click': 'click'
|
|
},
|
|
|
|
click: function() {
|
|
this.$el.removeClass( 'visible' );
|
|
},
|
|
*/
|
|
|
|
/**
|
|
* @param {Object} options
|
|
* @param {string} id
|
|
* @returns {wp.media.View}
|
|
*/
|
|
toView: function( options, id ) {
|
|
options = options || {};
|
|
options[ this.property ] = options[ this.property ] || id;
|
|
return new this.ItemView( options ).render();
|
|
},
|
|
|
|
ready: function() {
|
|
/**
|
|
* call 'ready' directly on the parent class
|
|
*/
|
|
PriorityList.prototype.ready.apply( this, arguments );
|
|
this.visibility();
|
|
},
|
|
|
|
set: function() {
|
|
/**
|
|
* call 'set' directly on the parent class
|
|
*/
|
|
PriorityList.prototype.set.apply( this, arguments );
|
|
this.visibility();
|
|
},
|
|
|
|
unset: function() {
|
|
/**
|
|
* call 'unset' directly on the parent class
|
|
*/
|
|
PriorityList.prototype.unset.apply( this, arguments );
|
|
this.visibility();
|
|
},
|
|
|
|
visibility: function() {
|
|
var region = this.region,
|
|
view = this.controller[ region ].get(),
|
|
views = this.views.get(),
|
|
hide = ! views || views.length < 2;
|
|
|
|
if ( this === view ) {
|
|
this.controller.$el.toggleClass( 'hide-' + region, hide );
|
|
}
|
|
},
|
|
/**
|
|
* @param {string} id
|
|
*/
|
|
select: function( id ) {
|
|
var view = this.get( id );
|
|
|
|
if ( ! view ) {
|
|
return;
|
|
}
|
|
|
|
this.deselect();
|
|
view.$el.addClass('active');
|
|
},
|
|
|
|
deselect: function() {
|
|
this.$el.children().removeClass('active');
|
|
},
|
|
|
|
hide: function( id ) {
|
|
var view = this.get( id );
|
|
|
|
if ( ! view ) {
|
|
return;
|
|
}
|
|
|
|
view.$el.addClass('hidden');
|
|
},
|
|
|
|
show: function( id ) {
|
|
var view = this.get( id );
|
|
|
|
if ( ! view ) {
|
|
return;
|
|
}
|
|
|
|
view.$el.removeClass('hidden');
|
|
}
|
|
});
|
|
|
|
module.exports = Menu;
|