2012-11-14 22:52:30 +00:00
/*! tableSorter 2.4+ widgets - updated 11/14/2012 */
2012-09-29 13:42:58 +00:00
; ( function ( a ) {
a . tablesorter = a . tablesorter || { } ;
a . tablesorter . themes = { bootstrap : { table : "table table-bordered table-striped" , header : "bootstrap-header" , icons : "" , sortNone : "bootstrap-icon-unsorted" , sortAsc : "icon-chevron-up" , sortDesc : "icon-chevron-down" , active : "" , hover : "" , filterRow : "" , even : "" , odd : "" } , jui : { table : "ui-widget ui-widget-content ui-corner-all" , header : "ui-widget-header ui-corner-all ui-state-default" , icons : "ui-icon" , sortNone : "ui-icon-carat-2-n-s" , sortAsc : "ui-icon-carat-1-n" , sortDesc : "ui-icon-carat-1-s" , active : "ui-state-active" , hover : "ui-state-hover" , filterRow : "" , even : "ui-widget-content" , odd : "ui-state-default" } } ;
2012-11-14 22:52:30 +00:00
a . tablesorter . storage = function ( e , c , d ) { var b , i = ! 1 ; b = { } ; var f = e . id || a ( ".tablesorter" ) . index ( a ( e ) ) , g = window . location . pathname ; try { i = ! ! localStorage . getItem } catch ( n ) { } a . parseJSON && ( i ? b = a . parseJSON ( localStorage [ c ] ) || { } : ( b = document . cookie . split ( /[;\s|=]/ ) , e = a . inArray ( c , b ) + 1 , b = 0 !== e ? a . parseJSON ( b [ e ] ) || { } : { } ) ) ; if ( d && JSON && JSON . hasOwnProperty ( "stringify" ) ) { if ( ! b [ g ] || ! b [ g ] [ f ] ) b [ g ] || ( b [ g ] = { } ) ; b [ g ] [ f ] = d ; i ? localStorage [ c ] = JSON . stringify ( b ) : ( e = new Date , e . setTime ( e . getTime ( ) + 31536E6 ) , document . cookie = c + "=" + JSON . stringify ( b ) . replace ( /\"/g , '"' ) + "; expires=" + e . toGMTString ( ) + "; path=/" ) } else return b && b . hasOwnProperty ( g ) && b [ g ] . hasOwnProperty ( f ) ? b [ g ] [ f ] : { } } ;
a . tablesorter . addWidget ( { id : "uitheme" , format : function ( e ) { var c , d , b , i , f = a ( e ) , g = e . config , n = g . widgetOptions , m = "object" === typeof n . uitheme ? "jui" : n . uitheme || "jui" , h = "object" === typeof n . uitheme && ! Object . prototype . toString . call ( n . uitheme ) . test ( "Array" ) ? n . uitheme : a . tablesorter . themes [ a . tablesorter . themes . hasOwnProperty ( m ) ? m : "jui" ] , l = a ( g . headerList ) , q = "tr." + ( n . stickyHeaders || "tablesorter-stickyHeader" ) , p = h . sortNone + " " + h . sortDesc + " " + h . sortAsc ; g . debug && ( c = new Date ) ; if ( ! f . hasClass ( "tablesorter-" + m ) || g . theme === m || ! e . hasInitialized ) "" !== h . even && ( n . zebra [ 0 ] += " " + h . even ) , "" !== h . odd && ( n . zebra [ 1 ] += " " + h . odd ) , f . removeClass ( "" === g . theme ? "" : "tablesorter-" + g . theme ) . addClass ( "tablesorter-" + m + " " + h . table ) , g . theme = "" , l . addClass ( h . header ) . filter ( ":not(.sorter-false)" ) . hover ( function ( ) { a ( this ) . addClass ( h . hover ) } , function ( ) { a ( this ) . removeClass ( h . hover ) } ) , l . find ( ".tablesorter-wrapper" ) . length || l . wrapInner ( '<div class="tablesorter-wrapper" style="position:relative;height:100%;width:100%"></div>' ) , g . cssIcon && l . find ( "." + g . cssIcon ) . addClass ( h . icons ) , f . hasClass ( "hasFilters" ) && l . find ( ".tablesorter-filter-row" ) . addClass ( h . filterRow ) ; a . each ( l , function ( c ) { b = a ( this ) ; i = g . cssIcon ? b . find ( "." + g . cssIcon ) : b ; this . sortDisabled ? ( b . removeClass ( p ) , i . removeClass ( p + " tablesorter-icon " + h . icons ) ) : ( f . hasClass ( "hasStickyHeaders" ) && f . find ( q ) . find ( "th" ) . eq ( c ) . add ( b ) , d = b . hasClass ( g . cssAsc ) ? h . sortDesc : b . hasClass ( g . cssDesc ) ? h . sortAsc : b . hasClass ( g . cssHeader ) ? h . sortNone : "" , b [ d === h . sortNone ? "removeClass" : "addClass" ] ( h . active ) , i . removeClass ( p ) . addClass ( d ) ) } ) ; g . debug && a . tablesorter . benchmark ( "Applying " + m + " theme" , c ) } , remove : function ( e , c , d ) { var e = a ( e ) , b = "object" === typeof d . uitheme ? "jui" : d . uitheme || "jui" , d = "object" === typeof d . uitheme ? d . uitheme : a . tablesorter . themes [ a . tablesorter . themes . hasOwnProperty ( b ) ? b : "jui" ] , i = e . children ( "thead" ) . children ( ) , f = d . sortNone + " " + d . sortDesc + " " + d . sortAsc ; e . removeClass ( "tablesorter-" + b + " " + d . table ) . find ( c . cssHeader ) . removeClass ( d . header ) ; i . unbind ( "mouseenter mouseleave" ) . removeClass ( d . hover + " " + f + " " + d . active ) . find ( ".tablesorter-filter-row" ) . removeClass ( d . filterRow ) ; i . find ( ".tablesorter-icon" ) . removeClass ( d . icons ) } } ) ;
a . tablesorter . addWidget ( { id : "columns" , format : function ( e ) { var c , d , b , i , f , g , n , m , h , l = a ( e ) , q = e . config , p = q . widgetOptions , s = l . children ( "tbody:not(." + q . cssInfoBlock + ")" ) , u = q . sortList , v = u . length , k = [ "primary" , "secondary" , "tertiary" ] , k = q . widgetColumns && q . widgetColumns . hasOwnProperty ( "css" ) ? q . widgetColumns . css || k : p && p . hasOwnProperty ( "columns" ) ? p . columns || k : k ; g = k . length - 1 ; n = k . join ( " " ) ; q . debug && ( f = new Date ) ; for ( h = 0 ; h < s . length ; h ++ ) c = a . tablesorter . processTbody ( e , a ( s [ h ] ) , ! 0 ) , d = c . children ( "tr" ) , d . each ( function ( ) { i = a ( this ) ; if ( "none" !== this . style . display && ( b = i . children ( ) . removeClass ( n ) , u && u [ 0 ] && ( b . eq ( u [ 0 ] [ 0 ] ) . addClass ( k [ 0 ] ) , 1 < v ) ) ) for ( m = 1 ; m < v ; m ++ ) b . eq ( u [ m ] [ 0 ] ) . addClass ( k [ m ] || k [ g ] ) } ) , a . tablesorter . processTbody ( e , c , ! 1 ) ; d = ! 1 !== p . columns _thead ? "thead tr" : "" ; ! 1 !== p . columns _tfoot && ( d += ( "" === d ? "" : "," ) + "tfoot tr" ) ; if ( d . length && ( i = l . find ( d ) . children ( ) . removeClass ( n ) , u && u [ 0 ] && ( i . filter ( '[data-column="' + u [ 0 ] [ 0 ] + '"]' ) . addClass ( k [ 0 ] ) , 1 < v ) ) ) for ( m = 1 ; m < v ; m ++ ) i . filter ( '[data-column="' + u [ m ] [ 0 ] + '"]' ) . addClass ( k [ m ] || k [ g ] ) ; q . debug && a . tablesorter . benchmark ( "Applying Columns widget" , f ) } , remove : function ( e , c ) { var d , b , i = a ( e ) . children ( "tbody:not(." + c . cssInfoBlock + ")" ) , f = ( c . widgetOptions . columns || [ "primary" , "secondary" , "tertiary" ] ) . join ( " " ) ; for ( d = 0 ; d < i . length ; d ++ ) b = a . tablesorter . processTbody ( e , a ( i [ d ] ) , ! 0 ) , b . children ( "tr" ) . each ( function ( ) { a ( this ) . children ( ) . removeClass ( f ) } ) , a . tablesorter . processTbody ( e , b , ! 1 ) } } ) ;
a . tablesorter . addWidget ( { id : "filter" , format : function ( e ) { if ( e . config . parsers && ! a ( e ) . hasClass ( "hasFilters" ) ) { var c , d , b , i , f , g , n , m , h , l , q , p , s , u , v , k , x , F = "" , z = a . tablesorter , r = e . config , A = a ( r . headerList ) , j = r . widgetOptions , y = j . filter _cssFilter || "tablesorter-filter" , t = a ( e ) . addClass ( "hasFilters" ) , D = t . children ( "tbody:not(." + r . cssInfoBlock + ")" ) , E = r . parsers . length , B = [ /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})?$/ , RegExp ( r . cssChildRow ) , /undefined|number/ , /(^[\"|\'|=])|([\"|\'|=]$)/ , /[\"\'=]/g , /[^\w,. \-()]/g , /[<>=]/g ] , L = A . map ( function ( b ) { return z . getData ? "parsed" === z . getData ( A . filter ( '[data-column="' + b + '"]:last' ) , r . headers [ b ] , "filter" ) : a ( this ) . hasClass ( "filter-parsed" ) } ) . get ( ) , G , H , C = function ( b ) { var c = a . isArray ( b ) , e = t . find ( "thead" ) . eq ( 0 ) . children ( "tr" ) . find ( "select." + y + ", input." + y ) , d = c ? b : e . map ( function ( ) { return a ( this ) . val ( ) || "" } ) . get ( ) , f = ( d || [ ] ) . join ( "" ) ; c && e . each ( function ( c , d ) { a ( d ) . val ( b [ c ] || "" ) } ) ; ! 0 === j . filter _hideFilters && t . find ( ".tablesorter-filter-row" ) . trigger ( "" === f ? "mouseleave" : "mouseenter" ) ; if ( ! ( F === f && ! 1 !== b ) ) if ( t . trigger ( "filterStart" , [ d ] ) , r . showProcessing ) setTimeout ( function ( ) { I ( b , d , f ) ; return ! 1 } , 30 ) ; else return I ( b , d , f ) , ! 1 } , I = function ( g , i , h ) { var l , q , s , p , x , w , y ; r . debug && ( y = new Date ) ; for ( b = 0 ; b < D . length ; b ++ ) { g = a . tablesorter . processTbody ( e , a ( D [ b ] ) , ! 0 ) ; l = g . children ( "tr" ) ; x = l . length ; if ( "" === h ) l . show ( ) . removeClass ( "filtered" ) ; else for ( d = 0 ; d < x ; d ++ ) if ( ! B [ 1 ] . test ( l [ d ] . className ) ) { p = ! 0 ; s = l . eq ( d ) . nextUntil ( "tr:not(." + r . cssChildRow + ")" ) ; k = s . length && ( j && j . hasOwnProperty ( "filter_childRows" ) && "undefined" !== typeof j . filter _childRows ? j . filter _childRows : 1 ) ? s . text ( ) : "" ; k = j . filter _ignoreCase ? k . toLocaleLowerCase ( ) : k ; q = l . eq ( d ) . children ( "td" ) ; for ( c = 0 ; c < E ; c ++ ) if ( i [ c ] ) { n = j . filter _useParsedData || L [ c ] ? r . cache [ b ] . normalized [ d ] [ c ] : a . trim ( q . eq ( c ) . text ( ) ) ; m = ! B [ 2 ] . test ( typeof n ) && j . filter _ignoreCase ? n . toLocaleLowerCase ( ) : n ; w = p ; f = j . filter _ignoreCase ? i [ c ] . toLocaleLowerCase ( ) : i [ c ] ; if ( j . filter _functions && j . filter _functions [ c ] ) ! 0 === j . filter _functions [ c ] ? w = A . filter ( '[data-column="' + c + '"]:last' ) . hasClass ( "filter-match" ) ? 0 <= m . search ( f ) : i [ c ] === n : "function" === typeof j . filter _functions [ c ] ? w = j . filter _functions [ c ] ( n , r . cache [ b ] . normalized [ d ] [ c ] , i [ c ] , c ) : "function" === typeof j . filter _functions [ c ] [ i [ c ] ] && ( w = j . filter _functions [ c ] [ i [ c ] ] ( n , r . cache [ b ] . normalized [ d ] [ c ] , i [ c ] , c ) ) ; else if ( B [ 0 ] . test ( f ) ) { u = B [ 0 ] . exec ( f ) ; try { w = RegExp ( u [ 1 ] , u [ 2 ] ) . test ( m ) } catch ( C ) { w = ! 1 } } else B [ 3 ] . test ( f ) && m === f . replace ( B [ 4 ] , "" ) ? w = ! 0 : /^\!/ . test ( f ) ? ( f = f . replace ( "!" , "" ) , v = m . search ( a . trim ( f ) ) , w = "" === f ? ! 0 : ! ( j . filter _startsWith ? 0 === v : 0 <= v ) ) : /^[<>]=?/ . test ( f ) ? ( u = isNaN ( m ) ? a . tablesorter . formatFloat ( m . replace ( B [ 5 ] , "" ) , e ) : a . tablesorter . formatFloat ( m , e ) , v = a . tablesorter . formatFloat ( f . replace ( B [ 5 ] , "" ) . replace ( B [ 6 ] , "" ) , e ) , />/ . test ( f ) && ( w = />=/ . test ( f ) ? u >= v : u > v ) , /</ . test ( f ) && ( w = /<=/ . test ( f ) ? u <= v : u < v ) ) : /[\?|\*]/ . test ( f ) ? w = RegExp ( f . replace ( /\?/g , "\\S{1}" ) . replace ( /\*/g , "\\S*" ) ) . test ( m ) : ( n = ( m + k ) . indexOf ( f ) , w = ! j . filter _startsWith && 0 <= n || j . filter _startsWith && 0 === n ) ; p = w ? p ? ! 0 : ! 1 : ! 1 } l [ d ] . style . display = p ? "" : "none" ; l . eq ( d ) [ p ? "removeClass" : "addClass" ] ( "filtered" ) ; if ( s . length ) s [ p ? "show" : "hide" ] ( ) } a . tablesorter . processTbody ( e , g , ! 1 ) } F = h ; r . debug && z . benchmark ( "Completed filter widget search" , y ) ; t . trigger ( "applyWidgets" ) ; t . trigger ( "filterEnd" ) } , J = function ( c , f ) { var g , h = [ ] , c = parseInt ( c , 10 ) ; g = '<option value="">' + ( A . filter ( '[data-column="' + c + '"]:last' ) . attr ( "data-placeholder" ) || "" ) + "</option>" ; for ( b = 0 ; b < D . length ; b ++ ) { i = r . cache [ b ] . row . length ; for ( d = 0 ; d < i ; d ++ ) j . filter _useParsedData ? h . push ( "" + r . cache [ b ] . normalized [ d ] [ c ] ) : ( k = r . cache [ b ] . row [ d ] [ 0 ] . cells [ c ] ) && h . push ( a . trim ( r . supportsTextContent ? k . textContent : a ( k ) . text ( ) ) ) } h = a . grep ( h , function ( c , b ) { return a . inArray ( c , h ) === b } ) ; h = z . sortText ? h . sort ( function ( a , b ) { return z . sortText ( e , a , b , c ) } ) : h . sort ( ! 0 ) ; for ( b = 0 ; b < h . length ; b ++ ) g += '<option value="' + h [ b ] + '">' + h [ b ] + "</option>" ; t . find ( "thead" ) . find ( "select." + y + '[data-column="' + c + '"]' ) [ f ? "html" : "append" ] ( g ) } , K = function ( a ) { for ( c = 0 ; c < E ; c ++ ) k = A . filter ( '[data-column="' + c + '"]:last' ) , k . hasClass ( "filter-select" ) && ( ! k . hasClass ( "filter-false" ) && ! ( j . filter _functions && ! 0 === j . filter _functions [ c ] ) ) && ( j . filter _functions || ( j . filter _functions = { } ) , j . filter _functions [ c ] = ! 0 , J ( c , a ) )
a . tablesorter . addWidget ( { id : "stickyHeaders" , format : function ( e ) { if ( ! a ( e ) . hasClass ( "hasStickyHeaders" ) ) { var c = a ( e ) . addClass ( "hasStickyHeaders" ) , d = e . config , b = d . widgetOptions , i = a ( window ) , f = a ( e ) . children ( "thead:first" ) , g = f . children ( "tr:not(.sticky-false)" ) . children ( ) , e = b . stickyHeaders || "tablesorter-stickyHeader" , n = g . eq ( 0 ) . parent ( ) , m = c . find ( "tfoot" ) , b = c . clone ( ) , h = b . children ( "thead:first" ) . addClass ( e ) . css ( { width : f . outerWidth ( ! 0 ) , position : "fixed" , margin : 0 , top : 0 , visibility : "hidden" , zIndex : 1 } ) , l = h . children ( "tr:not(.sticky-false)" ) . children ( ) , q = "" , p = 0 , s = function ( ) { var b = navigator . userAgent ; p = 0 ; "collapse" !== c . css ( "border-collapse" ) && ! /(webkit|msie)/i . test ( b ) && ( p = 2 * parseInt ( g . eq ( 0 ) . css ( "border-left-width" ) , 10 ) ) ; h . css ( { left : f . offset ( ) . left - i . scrollLeft ( ) - p , width : f . outerWidth ( ) } ) ; l . each ( function ( b ) { b = g . eq ( b ) ; a ( this ) . css ( { width : b . width ( ) - p , height : b . height ( ) } ) } ) . find ( ".tablesorter-header-inner" ) . each ( function ( b ) { b = g . eq ( b ) . find ( ".tablesorter-header-inner" ) . width ( ) ; a ( this ) . width ( b ) } ) } ; b . find ( "thead:gt(0),tr.sticky-false,tbody,tfoot,caption" ) . remove ( ) ; b . css ( { height : 0 , width : 0 , padding : 0 , margin : 0 , border : 0 } ) ; h . find ( "tr.sticky-false" ) . remove ( ) ; l . find ( ".tablesorter-resizer" ) . remove ( ) ; c . bind ( "sortEnd.tsSticky" , function ( ) { g . each ( function ( b ) { b = l . eq ( b ) ; b . attr ( "class" , a ( this ) . attr ( "class" ) ) ; d . cssIcon && b . find ( "." + d . cssIcon ) . attr ( "class" , a ( this ) . find ( "." + d . cssIcon ) . attr ( "class" ) ) } ) } ) . bind ( "pagerComplete.tsSticky" , function ( ) { s ( ) } ) ; g . find ( "*" ) . andSelf ( ) . filter ( d . selectorSort ) . each ( function ( b ) { var c = a ( this ) ; l . eq ( b ) . bind ( "mouseup" , function ( a ) { c . trigger ( a , ! 0 ) } ) . bind ( "mousedown" , function ( ) { this . onselectstart = function ( ) { return ! 1 } ; return ! 1 } ) } ) ; c . before ( b ) ; i . bind ( "scroll.tsSticky" , function ( ) { var a = n . offset ( ) , b = i . scrollTop ( ) , d = c . height ( ) - ( h . height ( ) + ( m . height ( ) || 0 ) ) , a = b > a . top && b < a . top + d ? "visible" : "hidden" ; h . css ( { left : f . offset ( ) . left - i . scrollLeft ( ) - p , visibility : a } ) ; a !== q && ( s ( ) , q = a ) } ) . bind ( "resize.tsSticky" , function ( ) { s ( ) } ) } } , remove : function ( e , c , d ) { e = a ( e ) ; d = d . stickyHeaders || "tablesorter-stickyHeader" ; e . removeClass ( "hasStickyHeaders" ) . unbind ( "sortEnd.tsSticky pagerComplete.tsSticky" ) . find ( "." + d ) . remove ( ) ; a ( window ) . unbind ( "scroll.tsSticky resize.tsSticky" ) } } ) ;
a . tablesorter . addWidget ( { id : "resizable" , format : function ( e ) { if ( ! a ( e ) . hasClass ( "hasResizable" ) ) { a ( e ) . addClass ( "hasResizable" ) ; var c , d , b , i , f , g = a ( e ) , n = e . config , m = n . widgetOptions , h = 0 , l = null , q = null , p = function ( ) { h = 0 ; l = q = null ; a ( window ) . trigger ( "resize" ) } ; if ( b = a . tablesorter . storage && ! 1 !== m . resizable ? a . tablesorter . storage ( e , "tablesorter-resizable" ) : { } ) for ( d in b ) ! isNaN ( d ) && d < n . headerList . length && a ( n . headerList [ d ] ) . width ( b [ d ] ) ; g . children ( "thead:first" ) . find ( "tr" ) . each ( function ( ) { i = a ( this ) . children ( ) ; a ( this ) . find ( ".tablesorter-wrapper" ) . length || i . wrapInner ( '<div class="tablesorter-wrapper" style="position:relative;height:100%;width:100%"></div>' ) ; i = i . slice ( 0 , - 1 ) ; f = f ? f . add ( i ) : i } ) ; f . each ( function ( ) { c = a ( this ) ; d = parseInt ( c . css ( "padding-right" ) , 10 ) + 8 ; c . find ( ".tablesorter-wrapper" ) . append ( '<div class="tablesorter-resizer" style="cursor:w-resize;position:absolute;height:100%;width:16px;right:-' + d + 'px;top:0;z-index:1;"></div>' ) } ) . bind ( "mousemove.tsresize" , function ( a ) { if ( 0 !== h && l ) { var b = a . pageX - h ; l . width ( l . width ( ) + b ) ; q . width ( q . width ( ) - b ) ; h = a . pageX } } ) . bind ( "mouseup.tsresize" , function ( ) { a . tablesorter . storage && l && ( b [ l . index ( ) ] = l . width ( ) , b [ q . index ( ) ] = q . width ( ) , ! 1 !== m . resizable && a . tablesorter . storage ( e , "tablesorter-resizable" , b ) ) ; p ( ) } ) . find ( ".tablesorter-resizer" ) . bind ( "mousedown" , function ( b ) { l = a ( b . target ) . parents ( "th:last" ) ; q = l . next ( ) ; h = b . pageX } ) ; g . find ( "thead:first" ) . bind ( "mouseup.tsresize mouseleave.tsresize" , function ( ) { p ( ) } ) . bind ( "contextmenu.tsresize" , function ( ) { a . tablesorter . resizableReset ( e ) ; var c = a . isEmptyObject ? a . isEmptyObject ( b ) : b === { } ; b = { } ; return c } ) } } , remove : function ( e ) { a ( e ) . removeClass ( "hasResizable" ) . find ( "thead" ) . unbind ( "mouseup.tsresize mouseleave.tsresize contextmenu.tsresize" ) . find ( "tr" ) . children ( ) . unbind ( "mousemove.tsresize mouseup.tsresize" ) . find ( ".tablesorter-wrapper" ) . each ( function ( ) { a ( this ) . find ( ".tablesorter-resizer" ) . remove ( ) ; a ( this ) . replaceWith ( a ( this ) . contents ( ) ) } ) ; a . tablesorter . resizableReset ( e ) } } ) ; a . tablesorter . resizableReset = function ( e ) { a ( e . config . headerList ) . width ( "auto" ) ; a . tablesorter . storage ( e , "tablesorter-resizable" , { } ) } ;
a . tablesorter . addWidget ( { id : "saveSort" , init : function ( a , c ) { c . format ( a , ! 0 ) } , format : function ( e , c ) { var d , b , i = e . config ; d = ! 1 !== i . widgetOptions . saveSort ; var f = { sortList : i . sortList } ; i . debug && ( b = new Date ) ; a ( e ) . hasClass ( "hasSaveSort" ) ? d && ( e . hasInitialized && a . tablesorter . storage ) && ( a . tablesorter . storage ( e , "tablesorter-savesort" , f ) , i . debug && a . tablesorter . benchmark ( "saveSort widget: Saving last sort: " + i . sortList , b ) ) : ( a ( e ) . addClass ( "hasSaveSort" ) , f = "" , a . tablesorter . storage && ( f = ( d = a . tablesorter . storage ( e , "tablesorter-savesort" ) ) && d . hasOwnProperty ( "sortList" ) && a . isArray ( d . sortList ) ? d . sortList : "" , i . debug && a . tablesorter . benchmark ( 'saveSort: Last sort loaded: "' + f + '"' , b ) ) , c && f && 0 < f . length ? i . sortList = f : e . hasInitialized && ( f && 0 < f . length ) && a ( e ) . trigger ( "sorton" , [ f ] ) ) } , remove : function ( e ) { a . tablesorter . storage ( e , "tablesorter-savesort" , "" ) } } )
2012-10-17 15:15:54 +00:00
} ) ( jQuery ) ;