File: //var/www/wintergenomics_site/wp-content/jetpack/_inc/jetpack-modules.models.js
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 );