/*! tablesorter enable/disable sort & filter (BETA) - 11/10/2015 (v2.24.4) * Requires tablesorter v2.24.4+ & jQuery 1.7+ * by Rob Garrison */ ;( function( $ ) { 'use strict'; var ts = $.tablesorter, tst = ts.toggleTS = { init : function( c, wo ) { wo.toggleTS_isEnabled = true; // enabled wo.toggleTS_areDisabled = { headers : [], filters : [] }; c.$table.on('enable.toggleTS disable.toggleTS', function( event ) { tst.toggle( this.config, this.config.widgetOptions, event.type === 'enable' ); }); }, toggle : function( c, wo, isEnabled ) { if ( wo.toggleTS_isEnabled !== isEnabled ) { wo.toggleTS_isEnabled = isEnabled; var indx, $el, len = c.$headers.length; // table headers for ( indx = 0; indx < len; indx++ ) { $el = c.$headers.eq( indx ); // function added in v2.24.4 ts.setColumnSort( c, $el, !isEnabled ); // function added in v2.24.4; passing "isEnabled" allows removal of "next sort" labels ts.setColumnAriaLabel( c, $el, isEnabled ); } if ( wo.toggleTS_hideFilterRow ) { c.$table.find( '.' + ts.css.filterRow ).toggle( isEnabled ); } else if ( ts.hasWidget( c.$table, 'filter' ) ) { // c.$filters points to filter CELL len = c.$filters.length; for ( indx = 0; indx < len; indx++ ) { if ( isEnabled && !wo.toggleTS_areDisabled.filters[ indx ] ) { c.$filters.eq( indx ).find( 'input, select' ) .removeClass( ts.css.filterDisabled ) .prop( 'disabled', false ); } else if ( !isEnabled ) { $el = c.$filters.eq( indx ).find( 'input, select' ); if ( $el.hasClass( ts.css.filterDisabled ) ) { wo.toggleTS_areDisabled.filters[ indx ] = true; } $el .addClass( ts.css.filterDisabled ) .prop( 'disabled', true ); } } } // include external filters wo.filter_$externalFilters .toggleClass( ts.css.filterDisabled, isEnabled ) .prop( 'disabled', !isEnabled ); } if ( typeof wo.toggleTS_callback === 'function' ) { wo.toggleTS_callback( c, isEnabled ); } } }; ts.addWidget({ id: 'toggle-ts', options: { toggleTS_hideFilterRow : false, toggleTS_callback : null }, init : function( table, thisWidget, c, wo ) { tst.init( c, wo ); }, remove : function( table, c ) { c.$table.off( 'enable.toggleTS disable.toggleTS' ); } }); })( jQuery );