WordPress/wp-includes/js/media/views/attachment-filters.js
Scott Taylor d9a2e85bfe Media JS files:
* specify globals in more files
* add missing `wp.media.*` namespace docs
* add doc blocks to files that had none

See #28510.

Built from https://develop.svn.wordpress.org/trunk@31492


git-svn-id: http://core.svn.wordpress.org/trunk@31473 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-02-22 07:25:27 +00:00

79 lines
1.6 KiB
JavaScript

/*globals _, jQuery */
/**
* wp.media.view.AttachmentFilters
*
* @class
* @augments wp.media.View
* @augments wp.Backbone.View
* @augments Backbone.View
*/
var View = require( './view.js' ),
$ = jQuery,
AttachmentFilters;
AttachmentFilters = View.extend({
tagName: 'select',
className: 'attachment-filters',
id: 'media-attachment-filters',
events: {
change: 'change'
},
keys: [],
initialize: function() {
this.createFilters();
_.extend( this.filters, this.options.filters );
// Build `<option>` elements.
this.$el.html( _.chain( this.filters ).map( function( filter, value ) {
return {
el: $( '<option></option>' ).val( value ).html( filter.text )[0],
priority: filter.priority || 50
};
}, this ).sortBy('priority').pluck('el').value() );
this.listenTo( this.model, 'change', this.select );
this.select();
},
/**
* @abstract
*/
createFilters: function() {
this.filters = {};
},
/**
* When the selected filter changes, update the Attachment Query properties to match.
*/
change: function() {
var filter = this.filters[ this.el.value ];
if ( filter ) {
this.model.set( filter.props );
}
},
select: function() {
var model = this.model,
value = 'all',
props = model.toJSON();
_.find( this.filters, function( filter, id ) {
var equal = _.all( filter.props, function( prop, key ) {
return prop === ( _.isUndefined( props[ key ] ) ? null : props[ key ] );
});
if ( equal ) {
return value = id;
}
});
this.$el.val( value );
}
});
module.exports = AttachmentFilters;