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