72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
|
|
this.jetpackModules = this.jetpackModules || {};
|
|
|
|
window.jetpackModules.models = (function( window, $, _, Backbone ) {
|
|
'use strict';
|
|
|
|
var models = {};
|
|
|
|
models.Modules = Backbone.Model.extend({
|
|
visibles : {},
|
|
|
|
/**
|
|
* Updates modules.items dataset to be a reflection of both the current
|
|
* modules.raw data, as well as any filters or sorting that may be in effect.
|
|
*/
|
|
filter_and_sort : function() {
|
|
var subsubsub = $('.subsubsub .current'),
|
|
items = this.get( 'raw' ),
|
|
m_filter = $('.button-group.filter-active .active'),
|
|
m_sort = $('.button-group.sort .active'),
|
|
m_search = $('#srch-term-search-input').val().toLowerCase(),
|
|
groups;
|
|
|
|
// If a module filter has been selected, filter it!
|
|
if ( ! subsubsub.closest('li').hasClass( 'all' ) ) {
|
|
items = _.filter( items, function( item ) {
|
|
return _.contains( item.module_tags, subsubsub.data( 'title' ) );
|
|
} );
|
|
}
|
|
|
|
if ( m_filter.data('filter-by') ) {
|
|
items = _.filter( items, function( item ) {
|
|
return item[ m_filter.data('filter-by') ] === m_filter.data('filter-value');
|
|
} );
|
|
}
|
|
|
|
if ( m_search.length ) {
|
|
items = _.filter( items, function( item ) {
|
|
var search_text = item.name + ' ' + item.description + ' ' + item.long_description + ' ' + item.search_terms + ' ' + item.jumpstart_desc + ' ' + item.module_tags;
|
|
return ( -1 !== search_text.toLowerCase().indexOf( m_search ) );
|
|
} );
|
|
}
|
|
|
|
if ( m_sort.data('sort-by') ) {
|
|
items = _.sortBy( items, m_sort.data('sort-by') );
|
|
if ( 'reverse' === m_sort.data('sort-order') ) {
|
|
items.reverse();
|
|
}
|
|
}
|
|
|
|
// Sort unavailable modules to the end if the user is running in local mode.
|
|
groups = _.groupBy( items, 'available' );
|
|
if ( _.has( groups, 'false' ) ) {
|
|
items = [].concat( groups[true], groups[false] );
|
|
}
|
|
|
|
// Now shove it back in.
|
|
this.set( 'items', items );
|
|
|
|
return this;
|
|
},
|
|
|
|
initialize : function() {
|
|
var items = this.get( 'items' );
|
|
this.set( 'raw', items );
|
|
}
|
|
|
|
});
|
|
|
|
return models;
|
|
|
|
})( this, jQuery, _, Backbone );
|