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 );