File: //home/madepabj/www/wp-content/themes/rehub-theme/js/jquery.tablesorter.min.js
/*! Tablesaw - v2.0.2 - 2015-10-28
* https://github.com/filamentgroup/tablesaw
* Copyright (c) 2015 Filament Group; Licensed */
/*
* tablesaw: A set of plugins for responsive tables
* Stack and Column Toggle tables
* Copyright (c) 2013 Filament Group, Inc.
* MIT License
*/
if( typeof Tablesaw === "undefined" ) {
Tablesaw = {
i18n: {
modes: [ 'Stack', 'Swipe', 'Toggle' ],
columns: 'Col<span class=\"a11y-sm\">umn</span>s',
columnBtnText: 'Columns',
columnsDialogError: 'No eligible columns.',
sort: ''
},
// cut the mustard
mustard: 'querySelector' in document &&
( !window.blackberry || window.WebKitPoint ) &&
!window.operamini
};
}
if( !Tablesaw.config ) {
Tablesaw.config = {};
}
if( Tablesaw.mustard ) {
jQuery( document.documentElement ).addClass( 'tablesaw-enhanced' );
}
;(function( $ ) {
var pluginName = "table",
classes = {
toolbar: "tablesaw-bar"
},
events = {
create: "tablesawcreate",
destroy: "tablesawdestroy",
refresh: "tablesawrefresh"
},
defaultMode = "stack",
initSelector = "table[data-tablesaw-mode],table[data-tablesaw-sortable]";
var Table = function( element ) {
if( !element ) {
throw new Error( "Tablesaw requires an element." );
}
this.table = element;
this.$table = $( element );
this.mode = this.$table.attr( "data-tablesaw-mode" ) || defaultMode;
this.init();
};
Table.prototype.init = function() {
// assign an id if there is none
if ( !this.$table.attr( "id" ) ) {
this.$table.attr( "id", pluginName + "-" + Math.round( Math.random() * 10000 ) );
}
this.createToolbar();
var colstart = this._initCells();
this.$table.trigger( events.create, [ this, colstart ] );
};
Table.prototype._initCells = function() {
var colstart,
thrs = this.table.querySelectorAll( "thead tr" ),
self = this;
$( thrs ).each( function(){
var coltally = 0;
$( this ).children().each( function(){
var span = parseInt( this.getAttribute( "colspan" ), 10 ),
sel = ":nth-child(" + ( coltally + 1 ) + ")";
colstart = coltally + 1;
if( span ){
for( var k = 0; k < span - 1; k++ ){
coltally++;
sel += ", :nth-child(" + ( coltally + 1 ) + ")";
}
}
// Store "cells" data on header as a reference to all cells in the same column as this TH
this.cells = self.$table.find("tr").not( thrs[0] ).not( this ).children().filter( sel );
coltally++;
});
});
return colstart;
};
Table.prototype.refresh = function() {
this._initCells();
this.$table.trigger( events.refresh );
};
Table.prototype.createToolbar = function() {
// Insert the toolbar
// TODO move this into a separate component
var $toolbar = this.$table.prev().filter( '.' + classes.toolbar );
if( !$toolbar.length ) {
$toolbar = $( '<div>' )
.addClass( classes.toolbar )
.insertBefore( this.$table );
}
this.$toolbar = $toolbar;
if( this.mode ) {
this.$toolbar.addClass( 'mode-' + this.mode );
}
};
Table.prototype.destroy = function() {
// Don’t remove the toolbar. Some of the table features are not yet destroy-friendly.
this.$table.prev().filter( '.' + classes.toolbar ).each(function() {
this.className = this.className.replace( /\bmode\-\w*\b/gi, '' );
});
var tableId = this.$table.attr( 'id' );
$( document ).unbind( "." + tableId );
$( window ).unbind( "." + tableId );
// other plugins
this.$table.trigger( events.destroy, [ this ] );
this.$table.removeAttr( 'data-tablesaw-mode' );
this.$table.removeData( pluginName );
};
// Collection method.
$.fn[ pluginName ] = function() {
return this.each( function() {
var $t = $( this );
if( $t.data( pluginName ) ){
return;
}
var table = new Table( this );
$t.data( pluginName, table );
});
};
$( document ).on( "enhance.tablesaw", function( e ) {
// Cut the mustard
if( Tablesaw.mustard ) {
$( e.target ).find( initSelector )[ pluginName ]();
}
});
}( jQuery ));
;(function( win, $, undefined ){
var classes = {
stackTable: 'tablesaw-stack',
cellLabels: 'tablesaw-cell-label',
cellContentLabels: 'tablesaw-cell-content'
};
var data = {
obj: 'tablesaw-stack'
};
var attrs = {
labelless: 'data-tablesaw-no-labels',
hideempty: 'data-tablesaw-hide-empty'
};
var Stack = function( element ) {
this.$table = $( element );
this.labelless = this.$table.is( '[' + attrs.labelless + ']' );
this.hideempty = this.$table.is( '[' + attrs.hideempty + ']' );
if( !this.labelless ) {
// allHeaders references headers, plus all THs in the thead, which may include several rows, or not
this.allHeaders = this.$table.find( "th" );
}
this.$table.data( data.obj, this );
};
Stack.prototype.init = function( colstart ) {
this.$table.addClass( classes.stackTable );
if( this.labelless ) {
return;
}
// get headers in reverse order so that top-level headers are appended last
var reverseHeaders = $( this.allHeaders );
var hideempty = this.hideempty;
// create the hide/show toggles
reverseHeaders.each(function(){
var $t = $( this ),
$cells = $( this.cells ).filter(function() {
return !$( this ).parent().is( "[" + attrs.labelless + "]" ) && ( !hideempty || !$( this ).is( ":empty" ) );
}),
hierarchyClass = $cells.not( this ).filter( "thead th" ).length && " tablesaw-cell-label-top",
// TODO reduce coupling with sortable
$sortableButton = $t.find( ".tablesaw-sortable-btn" ),
html = $sortableButton.length ? $sortableButton.html() : $t.html();
if( html !== "" ){
if( hierarchyClass ){
var iteration = parseInt( $( this ).attr( "colspan" ), 10 ),
filter = "";
if( iteration ){
filter = "td:nth-child("+ iteration +"n + " + ( colstart ) +")";
}
$cells.filter( filter ).prepend( "<strong class='" + classes.cellLabels + hierarchyClass + "'>" + html + "</strong>" );
} else {
$cells.wrapInner( "<div class='" + classes.cellContentLabels + "'></div>" );
$cells.prepend( "<strong class='" + classes.cellLabels + "'>" + html + "</strong>" );
}
}
});
};
Stack.prototype.destroy = function() {
this.$table.removeClass( classes.stackTable );
this.$table.find( '.' + classes.cellLabels ).remove();
this.$table.find( '.' + classes.cellContentLabels ).each(function() {
$( this ).replaceWith( this.childNodes );
});
};
// on tablecreate, init
$( document ).on( "tablesawcreate", function( e, Tablesaw, colstart ){
if( Tablesaw.mode === 'stack' ){
var table = new Stack( Tablesaw.table );
table.init( colstart );
}
} );
$( document ).on( "tablesawdestroy", function( e, Tablesaw ){
if( Tablesaw.mode === 'stack' ){
$( Tablesaw.table ).data( data.obj ).destroy();
}
} );
}( this, jQuery ));
;(function( $ ) {
function getSortValue( cell ) {
return $.map( cell.childNodes, function( el ) {
var $el = $( el );
if( $el.is( 'input, select' ) ) {
return $el.val();
} else if( $el.hasClass( 'tablesaw-cell-label' ) ) {
return;
}
return $.trim( $el.text() );
}).join( '' );
}
var pluginName = "tablesaw-sortable",
initSelector = "table[data-" + pluginName + "]",
sortableSwitchSelector = "[data-" + pluginName + "-switch]",
attrs = {
defaultCol: "data-tablesaw-sortable-default-col",
numericCol: "data-tablesaw-sortable-numeric"
},
classes = {
head: pluginName + "-head",
ascend: pluginName + "-ascending",
descend: pluginName + "-descending",
switcher: pluginName + "-switch",
tableToolbar: 'tablesaw-toolbar',
sortButton: pluginName + "-btn"
},
methods = {
_create: function( o ){
return $( this ).each(function() {
var init = $( this ).data( "init" + pluginName );
if( init ) {
return false;
}
$( this )
.data( "init"+ pluginName, true )
.trigger( "beforecreate." + pluginName )
[ pluginName ]( "_init" , o )
.trigger( "create." + pluginName );
});
},
_init: function(){
var el = $( this ),
heads,
$switcher;
var addClassToTable = function(){
el.addClass( pluginName );
},
addClassToHeads = function( h ){
$.each( h , function( i , v ){
$( v ).addClass( classes.head );
});
},
makeHeadsActionable = function( h , fn ){
$.each( h , function( i , v ){
var b = $( "<button class='" + classes.sortButton + "'/>" );
b.bind( "click" , { col: v } , fn );
$( v ).wrapInner( b );
});
},
clearOthers = function( sibs ){
$.each( sibs , function( i , v ){
var col = $( v );
col.removeAttr( attrs.defaultCol );
col.removeClass( classes.ascend );
col.removeClass( classes.descend );
});
},
headsOnAction = function( e ){
if( $( e.target ).is( 'a[href]' ) ) {
return;
}
e.stopPropagation();
var head = $( this ).parent(),
v = e.data.col,
newSortValue = heads.index( head );
clearOthers( head.siblings() );
if( head.hasClass( classes.descend ) ){
el[ pluginName ]( "sortBy" , v , true);
newSortValue += '_asc';
} else {
el[ pluginName ]( "sortBy" , v );
newSortValue += '_desc';
}
if( $switcher ) {
$switcher.find( 'select' ).val( newSortValue ).trigger( 'refresh' );
}
e.preventDefault();
},
handleDefault = function( heads ){
$.each( heads , function( idx , el ){
var $el = $( el );
if( $el.is( "[" + attrs.defaultCol + "]" ) ){
if( !$el.hasClass( classes.descend ) ) {
$el.addClass( classes.ascend );
}
}
});
},
addSwitcher = function( heads ){
$switcher = $( '<div>' ).addClass( classes.switcher ).addClass( classes.tableToolbar ).html(function() {
var html = [ '<label class="floatright"><span class="sort-label-intable">' + Tablesaw.i18n.sort + ':</span>' ];
html.push( '<span class="mb10"><select>' );
heads.each(function( j ) {
var $t = $( this );
var isDefaultCol = $t.is( "[" + attrs.defaultCol + "]" );
var isDescending = $t.hasClass( classes.descend );
var hasNumericAttribute = $t.is( '[data-sortable-numeric]' );
var numericCount = 0;
// Check only the first four rows to see if the column is numbers.
var numericCountMax = 5;
$( this.cells ).slice( 0, numericCountMax ).each(function() {
if( !isNaN( parseInt( getSortValue( this ), 10 ) ) ) {
numericCount++;
}
});
var isNumeric = numericCount === numericCountMax;
if( !hasNumericAttribute ) {
$t.attr( "data-sortable-numeric", isNumeric ? "" : "false" );
}
html.push( '<option' + ( isDefaultCol && !isDescending ? ' selected' : '' ) + ' value="' + j + '_asc">' + $t.text() + ' ' + ( isNumeric ? '↑' : '(A-Z)' ) + '</option>' );
html.push( '<option' + ( isDefaultCol && isDescending ? ' selected' : '' ) + ' value="' + j + '_desc">' + $t.text() + ' ' + ( isNumeric ? '↓' : '(Z-A)' ) + '</option>' );
});
html.push( '</select></span></label>' );
return html.join('');
});
var $toolbar = el.prev().filter( '.tablesaw-bar' ),
$firstChild = $toolbar.children().eq( 0 );
if( $firstChild.length ) {
$switcher.insertBefore( $firstChild );
} else {
$switcher.appendTo( $toolbar );
}
//$switcher.find( '.btn' ).tablesawbtn();
$switcher.find( 'select' ).on( 'change', function() {
var val = $( this ).val().split( '_' ),
head = heads.eq( val[ 0 ] );
clearOthers( head.siblings() );
el[ pluginName ]( 'sortBy', head.get( 0 ), val[ 1 ] === 'asc' );
});
};
addClassToTable();
heads = el.find( "thead th[data-" + pluginName + "-col]" );
addClassToHeads( heads );
makeHeadsActionable( heads , headsOnAction );
handleDefault( heads );
if( el.is( sortableSwitchSelector ) ) {
addSwitcher( heads, el.find('tbody tr:nth-child(-n+3)') );
}
},
getColumnNumber: function( col ){
return $( col ).prevAll().length;
},
getTableRows: function(){
return $( this ).find( "tbody tr" );
},
sortRows: function( rows , colNum , ascending, col ){
var cells, fn, sorted;
var getCells = function( rows ){
var cells = [];
$.each( rows , function( i , r ){
var element = $( r ).children().get( colNum );
cells.push({
element: element,
cell: getSortValue( element ),
rowNum: i
});
});
return cells;
},
getSortFxn = function( ascending, forceNumeric ){
var fn,
regex = /[^\-\+\d\.]/g;
if( ascending ){
fn = function( a , b ){
if( forceNumeric ) {
return parseFloat( a.cell.replace( regex, '' ) ) - parseFloat( b.cell.replace( regex, '' ) );
} else {
return a.cell.toLowerCase() > b.cell.toLowerCase() ? 1 : -1;
}
};
} else {
fn = function( a , b ){
if( forceNumeric ) {
return parseFloat( b.cell.replace( regex, '' ) ) - parseFloat( a.cell.replace( regex, '' ) );
} else {
return a.cell.toLowerCase() < b.cell.toLowerCase() ? 1 : -1;
}
};
}
return fn;
},
applyToRows = function( sorted , rows ){
var newRows = [], i, l, cur;
for( i = 0, l = sorted.length ; i < l ; i++ ){
cur = sorted[ i ].rowNum;
newRows.push( rows[cur] );
}
return newRows;
};
cells = getCells( rows );
var customFn = $( col ).data( 'tablesaw-sort' );
fn = ( customFn && typeof customFn === "function" ? customFn( ascending ) : false ) ||
getSortFxn( ascending, $( col ).is( '[data-sortable-numeric]' ) && !$( col ).is( '[data-sortable-numeric="false"]' ) );
sorted = cells.sort( fn );
rows = applyToRows( sorted , rows );
return rows;
},
replaceTableRows: function( rows ){
var el = $( this ),
body = el.find( "tbody" );
body.html( rows );
},
makeColDefault: function( col , a ){
var c = $( col );
c.attr( attrs.defaultCol , "true" );
if( a ){
c.removeClass( classes.descend );
c.addClass( classes.ascend );
} else {
c.removeClass( classes.ascend );
c.addClass( classes.descend );
}
},
sortBy: function( col , ascending ){
var el = $( this ), colNum, rows;
colNum = el[ pluginName ]( "getColumnNumber" , col );
rows = el[ pluginName ]( "getTableRows" );
rows = el[ pluginName ]( "sortRows" , rows , colNum , ascending, col );
el[ pluginName ]( "replaceTableRows" , rows );
el[ pluginName ]( "makeColDefault" , col , ascending );
}
};
// Collection method.
$.fn[ pluginName ] = function( arrg ) {
var args = Array.prototype.slice.call( arguments , 1),
returnVal;
// if it's a method
if( arrg && typeof( arrg ) === "string" ){
returnVal = $.fn[ pluginName ].prototype[ arrg ].apply( this[0], args );
return (typeof returnVal !== "undefined")? returnVal:$(this);
}
// check init
if( !$( this ).data( pluginName + "data" ) ){
$( this ).data( pluginName + "active", true );
$.fn[ pluginName ].prototype._create.call( this , arrg );
}
return $(this);
};
// add methods
$.extend( $.fn[ pluginName ].prototype, methods );
$( document ).on( "tablesawcreate", function( e, Tablesaw ) {
if( Tablesaw.$table.is( initSelector ) ) {
Tablesaw.$table[ pluginName ]();
}
});
}( jQuery ));
;(function( $ ) {
// DOM-ready auto-init of plugins.
// Many plugins bind to an "enhance" event to init themselves on dom ready, or when new markup is inserted into the DOM
$( function(){
$( document ).trigger( "enhance.tablesaw" );
});
})( jQuery );