2015-03-28 20:03:50 +00:00
/*! Widget: filter jQuery UI formatter functions - updated 7/17/2014 (v2.17.5) */
2015-10-31 15:08:21 +00:00
/ *
* requires : tableSorter ( FORK ) 2.15 + and jQuery 1.4 . 3 +
*
* uiSpinner ( jQuery UI spinner )
* uiSlider ( jQuery UI slider )
* uiRange ( jQuery UI range slider )
* uiDateCompare ( jQuery UI datepicker ; 1 input )
* uiDatepicker ( jQuery UI datepicker ; 2 inputs , filter range )
* /
/*jshint browser:true, jquery:true, unused:false */
/*global jQuery: false */
! function ( a ) { "use strict" ; var b = a . tablesorter || { } ,
// compare option selector class name (jQuery selector)
c = ".compare-select" , d = b . filterFormatter = a . extend ( { } , b . filterFormatter , { addCompare : function ( b , d , e ) { if ( e . compare && a . isArray ( e . compare ) && e . compare . length > 1 ) { var f = "" , g = [ c . slice ( 1 ) , " " + c . slice ( 1 ) , "" ] , h = e . cellText ? '<label class="' + g . join ( "-label" ) + d + '">' + e . cellText + "</label>" : "" ; a . each ( e . compare , function ( a , b ) { f += "<option " + ( e . selected === a ? "selected" : "" ) + ">" + b + "</option>" } ) , b . wrapInner ( '<div class="' + g . join ( "-wrapper" ) + d + '" />' ) . prepend ( h + '<select class="' + g . join ( "" ) + d + '" />' ) . find ( "select" ) . append ( f ) } } , updateCompare : function ( b , d , e ) { var f = d . val ( ) || "" , g = f . replace ( /\s*?[><=]\s*?/g , "" ) , h = f . match ( /[><=]/g ) || "" ; return e . compare && ( a . isArray ( e . compare ) && ( h = ( h || [ ] ) . join ( "" ) || e . compare [ e . selected || 0 ] ) , b . find ( c ) . val ( h ) ) , [ f , g ] } , / * * * * * * * * * * * * * * * * * * * * * * \
jQuery UI Spinner
\ * * * * * * * * * * * * * * * * * * * * * * /
uiSpinner : function ( e , f , g ) { var h = a . extend ( {
// filter formatter options
delayed : ! 0 , addToggle : ! 0 , exactMatch : ! 0 , value : 1 , cellText : "" , compare : "" ,
// include ANY jQuery UI spinner options below
min : 0 , max : 100 , step : 1 , disabled : ! 1 } , g ) , i = e . closest ( "table" ) [ 0 ] . config ,
// Add a hidden input to hold the range values
j = a ( '<input class="filter" type="hidden">' ) . appendTo ( e ) . bind ( "change" + i . namespace + "filter" , function ( ) { l ( { value : this . value , delayed : ! 1 } ) } ) , k = [ ] ,
// this function updates the hidden input and adds the current values to the header cell text
l = function ( d , f ) { var g , j = ! 0 ,
// ui is not undefined on create
l = d && d . value && b . formatFloat ( ( d . value + "" ) . replace ( /[><=]/g , "" ) ) || e . find ( ".spinner" ) . val ( ) || h . value , m = ( a . isArray ( h . compare ) ? e . find ( c ) . val ( ) || h . compare [ h . selected || 0 ] : h . compare ) || "" , n = d && "boolean" == typeof d . delayed ? d . delayed : i . $table [ 0 ] . hasInitialized ? h . delayed || "" : ! 0 ; h . addToggle && ( j = e . find ( ".toggle" ) . is ( ":checked" ) ) , g = h . disabled || ! j ? "disable" : "enable" , e . find ( ".filter" ) . val ( j ? ( m ? m : h . exactMatch ? "=" : "" ) + l : "" ) . trigger ( f ? "" : "search" , n ) . end ( ) . find ( ".spinner" ) . spinner ( g ) . val ( l ) , k . length && ( k . find ( ".spinner" ) . spinner ( g ) . val ( l ) . end ( ) . find ( c ) . val ( m ) , h . addToggle && ( k . find ( ".toggle" ) [ 0 ] . checked = j ) ) } ;
// add callbacks; preserve added callbacks
// make sure we use parsed data
// add a jQuery UI spinner!
// update spinner from hidden input, in case of saved filters
// add compare select
// has sticky headers?
// on reset
return h . oldcreate = h . create , h . oldspin = h . spin , h . create = function ( a , b ) { l ( ) , // ui is an empty object on create
"function" == typeof h . oldcreate && h . oldcreate ( a , b ) } , h . spin = function ( a , b ) { l ( b ) , "function" == typeof h . oldspin && h . oldspin ( a , b ) } , h . addToggle && a ( '<div class="button"><input id="uispinnerbutton' + f + '" type="checkbox" class="toggle" /><label for="uispinnerbutton' + f + '"></label></div>' ) . appendTo ( e ) . find ( ".toggle" ) . bind ( "change" , function ( ) { l ( ) } ) , e . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . addClass ( "filter-parsed" ) , a ( '<input class="spinner spinner' + f + '" />' ) . val ( h . value ) . appendTo ( e ) . spinner ( h ) . bind ( "change keyup" , function ( ) { l ( ) } ) , i . $table . bind ( "filterFomatterUpdate" , function ( ) { var a = d . updateCompare ( e , j , h ) [ 0 ] ; e . find ( ".spinner" ) . val ( a ) , l ( { value : a } , ! 0 ) , b . filter . formatterUpdated ( e , f ) } ) , h . compare && ( d . addCompare ( e , f , h ) , e . find ( c ) . bind ( "change" , function ( ) { l ( ) } ) ) , i . $table . bind ( "stickyHeadersInit" , function ( ) { k = i . widgetOptions . $sticky . find ( ".tablesorter-filter-row" ) . children ( ) . eq ( f ) . empty ( ) , h . addToggle && a ( '<div class="button"><input id="stickyuispinnerbutton' + f + '" type="checkbox" class="toggle" /><label for="stickyuispinnerbutton' + f + '"></label></div>' ) . appendTo ( k ) . find ( ".toggle" ) . bind ( "change" , function ( ) { e . find ( ".toggle" ) [ 0 ] . checked = this . checked , l ( ) } ) , a ( '<input class="spinner spinner' + f + '" />' ) . val ( h . value ) . appendTo ( k ) . spinner ( h ) . bind ( "change keyup" , function ( ) { e . find ( ".spinner" ) . val ( this . value ) , l ( ) } ) , h . compare && ( d . addCompare ( k , f , h ) , k . find ( c ) . bind ( "change" , function ( ) { e . find ( c ) . val ( a ( this ) . val ( ) ) , l ( ) } ) ) } ) , i . $table . bind ( "filterReset" , function ( ) { a . isArray ( h . compare ) && e . add ( k ) . find ( c ) . val ( h . compare [ h . selected || 0 ] ) ,
// turn off the toggle checkbox
h . addToggle && ( e . find ( ".toggle" ) [ 0 ] . checked = ! 1 ) , e . find ( ".spinner" ) . spinner ( "value" , h . value ) , setTimeout ( function ( ) { l ( ) } , 0 ) } ) , l ( ) , j } , / * * * * * * * * * * * * * * * * * * * * * * \
jQuery UI Slider
\ * * * * * * * * * * * * * * * * * * * * * * /
uiSlider : function ( e , f , g ) { var h = a . extend ( {
// filter formatter options
delayed : ! 0 , valueToHeader : ! 1 , exactMatch : ! 0 , cellText : "" , compare : "" , allText : "all" ,
// include ANY jQuery UI spinner options below
// except values, since this is a non-range setup
value : 0 , min : 0 , max : 100 , step : 1 , range : "min" } , g ) , i = e . closest ( "table" ) [ 0 ] . config ,
// Add a hidden input to hold the range values
j = a ( '<input class="filter" type="hidden">' ) . appendTo ( e ) . bind ( "change" + i . namespace + "filter" , function ( ) { l ( { value : this . value } ) } ) , k = [ ] ,
// this function updates the hidden input and adds the current values to the header cell text
l = function ( d , g ) {
// ui is not undefined on create
var j = "undefined" != typeof d ? b . formatFloat ( ( d . value + "" ) . replace ( /[><=]/g , "" ) ) || h . value : h . value , l = h . compare ? j : j === h . min ? h . allText : j , m = ( a . isArray ( h . compare ) ? e . find ( c ) . val ( ) || h . compare [ h . selected || 0 ] : h . compare ) || "" , n = m + l , o = d && "boolean" == typeof d . delayed ? d . delayed : i . $table [ 0 ] . hasInitialized ? h . delayed || "" : ! 0 ; h . valueToHeader ?
// add range indication to the header cell above!
e . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . find ( ".curvalue" ) . html ( " (" + n + ")" ) :
// add values to the handle data-value attribute so the css tooltip will work properly
e . find ( ".ui-slider-handle" ) . addClass ( "value-popup" ) . attr ( "data-value" , n ) ,
// update the hidden input;
// ****** ADD AN EQUAL SIGN TO THE BEGINNING! <- this makes the slide exactly match the number ******
// when the value is at the minimum, clear the hidden input so all rows will be seen
e . find ( ".filter" ) . val ( m ? m + j : j === h . min ? "" : ( h . exactMatch ? "=" : "" ) + j ) . trigger ( g ? "" : "search" , o ) . end ( ) . find ( ".slider" ) . slider ( "value" , j ) ,
// update sticky header cell
k . length && ( k . find ( c ) . val ( m ) . end ( ) . find ( ".slider" ) . slider ( "value" , j ) , h . valueToHeader ? k . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . find ( ".curvalue" ) . html ( " (" + n + ")" ) : k . find ( ".ui-slider-handle" ) . addClass ( "value-popup" ) . attr ( "data-value" , n ) ) } ;
// add span to header for value - only works if the line in the updateSlider() function is also un-commented out
// add callbacks; preserve added callbacks
// add a jQuery UI slider!
// update slider from hidden input, in case of saved filters
// add compare select
// on reset
// has sticky headers?
return e . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . addClass ( "filter-parsed" ) , h . valueToHeader && e . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . find ( ".tablesorter-header-inner" ) . append ( '<span class="curvalue" />' ) , h . oldcreate = h . create , h . oldslide = h . slide , h . create = function ( a , b ) { l ( ) , // ui is an empty object on create
"function" == typeof h . oldcreate && h . oldcreate ( a , b ) } , h . slide = function ( a , b ) { l ( b ) , "function" == typeof h . oldslide && h . oldslide ( a , b ) } , a ( '<div class="slider slider' + f + '"/>' ) . appendTo ( e ) . slider ( h ) , i . $table . bind ( "filterFomatterUpdate" , function ( ) { var a = d . updateCompare ( e , j , h ) [ 0 ] ; e . find ( ".slider" ) . slider ( "value" , a ) , l ( { value : a } , ! 1 ) , b . filter . formatterUpdated ( e , f ) } ) , h . compare && ( d . addCompare ( e , f , h ) , e . find ( c ) . bind ( "change" , function ( ) { l ( { value : e . find ( ".slider" ) . slider ( "value" ) } ) } ) ) , i . $table . bind ( "filterReset" , function ( ) { a . isArray ( h . compare ) && e . add ( k ) . find ( c ) . val ( h . compare [ h . selected || 0 ] ) , setTimeout ( function ( ) { l ( { value : h . value } ) } , 0 ) } ) , i . $table . bind ( "stickyHeadersInit" , function ( ) { k = i . widgetOptions . $sticky . find ( ".tablesorter-filter-row" ) . children ( ) . eq ( f ) . empty ( ) , a ( '<div class="slider slider' + f + '"/>' ) . val ( h . value ) . appendTo ( k ) . slider ( h ) . bind ( "change keyup" , function ( ) { e . find ( ".slider" ) . slider ( "value" , this . value ) , l ( ) } ) , h . compare && ( d . addCompare ( k , f , h ) , k . find ( c ) . bind ( "change" , function ( ) { e . find ( c ) . val ( a ( this ) . val ( ) ) , l ( ) } ) ) } ) , j } , / * * * * * * * * * * * * * * * * * * * * * * * * * \
jQuery UI Range Slider ( 2 handles )
\ * * * * * * * * * * * * * * * * * * * * * * * * * /
uiRange : function ( c , d , e ) { var f = a . extend ( {
// filter formatter options
delayed : ! 0 , valueToHeader : ! 1 ,
// include ANY jQuery UI spinner options below
// except value, since this one is range specific)
values : [ 0 , 100 ] , min : 0 , max : 100 , range : ! 0 } , e ) , g = c . closest ( "table" ) [ 0 ] . config ,
// Add a hidden input to hold the range values
h = a ( '<input class="filter" type="hidden">' ) . appendTo ( c ) . bind ( "change" + g . namespace + "filter" , function ( ) { j ( ) } ) , i = [ ] , j = function ( ) { var a = h . val ( ) , b = a . split ( " - " ) ; "" === a && ( b = [ f . min , f . max ] ) , b && b [ 1 ] && k ( { values : b , delay : ! 1 } , ! 0 ) } ,
// this function updates the hidden input and adds the current values to the header cell text
k = function ( a , b ) {
// ui.values are undefined for some reason on create
var e = a && a . values || f . values , h = e [ 0 ] + " - " + e [ 1 ] ,
// make range an empty string if entire range is covered so the filter row will hide (if set)
j = e [ 0 ] === f . min && e [ 1 ] === f . max ? "" : h , k = a && "boolean" == typeof a . delayed ? a . delayed : g . $table [ 0 ] . hasInitialized ? f . delayed || "" : ! 0 ; f . valueToHeader ?
// add range indication to the header cell above (if not using the css method)!
c . closest ( "thead" ) . find ( "th[data-column=" + d + "]" ) . find ( ".currange" ) . html ( " (" + h + ")" ) :
// add values to the handle data-value attribute so the css tooltip will work properly
c . find ( ".ui-slider-handle" ) . addClass ( "value-popup" ) . eq ( 0 ) . attr ( "data-value" , e [ 0 ] ) . end ( ) . eq ( 1 ) . attr ( "data-value" , e [ 1 ] ) ,
// update the hidden input
c . find ( ".filter" ) . val ( j ) . trigger ( b ? "" : "search" , k ) . end ( ) . find ( ".range" ) . slider ( "values" , e ) ,
// update sticky header cell
i . length && ( i . find ( ".range" ) . slider ( "values" , e ) , f . valueToHeader ? i . closest ( "thead" ) . find ( "th[data-column=" + d + "]" ) . find ( ".currange" ) . html ( " (" + h + ")" ) : i . find ( ".ui-slider-handle" ) . addClass ( "value-popup" ) . eq ( 0 ) . attr ( "data-value" , e [ 0 ] ) . end ( ) . eq ( 1 ) . attr ( "data-value" , e [ 1 ] ) ) } ;
// return the hidden input so the filter widget has a reference to it
// add span to header for value - only works if the line in the updateUiRange() function is also un-commented out
// add callbacks; preserve added callbacks
// add a jQuery UI range slider!
// update slider from hidden input, in case of saved filters
// on reset
// has sticky headers?
return c . closest ( "thead" ) . find ( "th[data-column=" + d + "]" ) . addClass ( "filter-parsed" ) , f . valueToHeader && c . closest ( "thead" ) . find ( "th[data-column=" + d + "]" ) . find ( ".tablesorter-header-inner" ) . append ( '<span class="currange"/>' ) , f . oldcreate = f . create , f . oldslide = f . slide , f . create = function ( a , b ) { k ( ) , // ui is an empty object on create
"function" == typeof f . oldcreate && f . oldcreate ( a , b ) } , f . slide = function ( a , b ) { k ( b ) , "function" == typeof f . oldslide && f . oldslide ( a , b ) } , a ( '<div class="range range' + d + '"/>' ) . appendTo ( c ) . slider ( f ) , g . $table . bind ( "filterFomatterUpdate" , function ( ) { j ( ) , b . filter . formatterUpdated ( c , d ) } ) , g . $table . bind ( "filterReset" , function ( ) { c . find ( ".range" ) . slider ( "values" , f . values ) , setTimeout ( function ( ) { k ( ) } , 0 ) } ) , g . $table . bind ( "stickyHeadersInit" , function ( ) { i = g . widgetOptions . $sticky . find ( ".tablesorter-filter-row" ) . children ( ) . eq ( d ) . empty ( ) , a ( '<div class="range range' + d + '"/>' ) . val ( f . value ) . appendTo ( i ) . slider ( f ) . bind ( "change keyup" , function ( ) { c . find ( ".range" ) . val ( this . value ) , k ( ) } ) } ) , h } , / * * * * * * * * * * * * * * * * * * * * * * * * * \
jQuery UI Datepicker compare ( 1 input )
\ * * * * * * * * * * * * * * * * * * * * * * * * * /
uiDateCompare : function ( e , f , g ) { var h , i , j = a . extend ( {
// filter formatter options
cellText : "" , compare : "" , endOfDay : ! 0 ,
// include ANY jQuery UI spinner options below
defaultDate : "" , changeMonth : ! 0 , changeYear : ! 0 , numberOfMonths : 1 } , g ) , k = e . closest ( "table" ) [ 0 ] . config ,
// make sure we're using parsed dates in the search
l = e . closest ( "thead" ) . find ( "th[data-column=" + f + "]" ) . addClass ( "filter-parsed" ) ,
// Add a hidden input to hold the range values
m = a ( '<input class="dateCompare" type="hidden">' ) . appendTo ( e ) . bind ( "change" + k . namespace + "filter" , function ( ) { var a = this . value ; a && j . onClose ( a ) } ) , n = [ ] ,
// this function updates the hidden input
o = function ( b ) { var d , f , g = h . datepicker ( "getDate" ) || "" , i = ( a . isArray ( j . compare ) ? e . find ( c ) . val ( ) || j . compare [ j . selected || 0 ] : j . compare ) || "" , l = k . $table [ 0 ] . hasInitialized ? j . delayed || "" : ! 0 ; h . datepicker ( "setDate" , ( "" === g ? "" : g ) || null ) , "" === g && ( b = ! 1 ) , d = h . datepicker ( "getDate" ) , f = d ? ( j . endOfDay && /<=/ . test ( i ) ? d . setHours ( 23 , 59 , 59 ) : d . getTime ( ) ) || "" : "" , d && j . endOfDay && "=" === i && ( i = "" , f += " - " + d . setHours ( 23 , 59 , 59 ) , b = ! 1 ) , e . find ( ".dateCompare" ) . val ( i + f ) . trigger ( b ? "" : "search" , l ) . end ( ) , n . length && n . find ( ".dateCompare" ) . val ( i + f ) . end ( ) . find ( c ) . val ( i ) } ;
// return the hidden input so the filter widget has a reference to it
// Add date range picker
// add callbacks; preserve added callbacks
// on reset
// update date compare from hidden input, in case of saved filters
// add compare select
// has sticky headers?
return i = '<input type="text" class="date date' + f + '" placeholder="' + ( l . data ( "placeholder" ) || l . attr ( "data-placeholder" ) || k . widgetOptions . filter _placeholder . search || "" ) + '" />' , h = a ( i ) . appendTo ( e ) , j . oldonClose = j . onClose , j . onClose = function ( a , b ) { o ( ) , "function" == typeof j . oldonClose && j . oldonClose ( a , b ) } , h . datepicker ( j ) , k . $table . bind ( "filterReset" , function ( ) { a . isArray ( j . compare ) && e . add ( n ) . find ( c ) . val ( j . compare [ j . selected || 0 ] ) , e . add ( n ) . find ( ".date" ) . val ( j . defaultDate ) . datepicker ( "setDate" , j . defaultDate || null ) , setTimeout ( function ( ) { o ( ) } , 0 ) } ) , k . $table . bind ( "filterFomatterUpdate" , function ( ) { var a , g = m . val ( ) ; /\s+-\s+/ . test ( g ) ? ( e . find ( c ) . val ( "=" ) , a = g . split ( /\s+-\s+/ ) [ 0 ] , h . datepicker ( "setDate" , a || null ) ) : ( a = d . updateCompare ( e , m , j ) [ 1 ] . toString ( ) || "" , a = "" !== a ? /\d{5}/g . test ( a ) ? new Date ( Number ( a ) ) : a || "" : "" ) , e . add ( n ) . find ( ".date" ) . datepicker ( "setDate" , a || null ) , setTimeout ( function ( ) { o ( ! 0 ) , b . filter . formatterUpdated ( e , f ) } , 0 ) } ) , j . compare && ( d . addCompare ( e , f , j ) , e . find ( c ) . bind ( "change" , function ( ) { o ( ) } ) ) , k . $table . bind ( "stickyHeadersInit" , function ( ) { n = k . widgetOptions . $sticky . find ( ".tablesorter-filter-row" ) . children ( ) . eq ( f ) . empty ( ) , n . append ( i ) . find ( ".date" ) . datepicker ( j ) , j . compare && ( d . addCompare ( n , f , j ) , n . find ( c ) . bind ( "change" , function ( ) { e . find ( c ) . val ( a ( this ) . val ( ) ) , o ( ) } ) ) } ) , m . val ( j . defaultDate ? j . defaultDate : "" ) } , / * * * * * * * * * * * * * * * * * * * * * * * * * \
jQuery UI Datepicker ( 2 inputs )
\ * * * * * * * * * * * * * * * * * * * * * * * * * /
uiDatepicker : function ( c , d , e ) { var f , g , h = a . extend ( {
// filter formatter options
endOfDay : ! 0 , textFrom : "from" , textTo : "to" , from : "" , // defaultDate 'from' input
to : "" , // defaultDate 'to' input
// include ANY jQuery UI spinner options below
changeMonth : ! 0 , changeYear : ! 0 , numberOfMonths : 1 } , e ) , i = [ ] , j = c . closest ( "table" ) [ 0 ] . config , k = function ( a ) { return a instanceof Date && isFinite ( a ) } ,
// Add a hidden input to hold the range values
l = a ( '<input class="dateRange" type="hidden">' ) . appendTo ( c ) . bind ( "change" + j . namespace + "filter" , function ( ) { var a = this . value ; a . match ( " - " ) ? ( a = a . split ( " - " ) , c . find ( ".dateTo" ) . val ( a [ 1 ] ) , g ( a [ 0 ] ) ) : a . match ( ">=" ) ? g ( a . replace ( ">=" , "" ) ) : a . match ( "<=" ) && g ( a . replace ( "<=" , "" ) ) } ) ,
// make sure we're using parsed dates in the search
m = c . closest ( "thead" ) . find ( "th[data-column=" + d + "]" ) . addClass ( "filter-parsed" ) ;
// return the hidden input so the filter widget has a reference to it
// Add date range picker
// add callbacks; preserve added callbacks
// set to date +7 days from today (if not defined)
// update date compare from hidden input, in case of saved filters
// has sticky headers?
// on reset
return f = "<label>" + h . textFrom + '</label><input type="text" class="dateFrom" placeholder="' + ( m . data ( "placeholderFrom" ) || m . attr ( "data-placeholder-from" ) || j . widgetOptions . filter _placeholder . from || "" ) + '" /><label>' + h . textTo + '</label><input type="text" class="dateTo" placeholder="' + ( m . data ( "placeholderTo" ) || m . attr ( "data-placeholder-to" ) || j . widgetOptions . filter _placeholder . to || "" ) + '" />' , a ( f ) . appendTo ( c ) , h . oldonClose = h . onClose , g = h . onClose = function ( a , b ) { var d , e = c . find ( ".dateFrom" ) . datepicker ( "getDate" ) , f = c . find ( ".dateTo" ) . datepicker ( "getDate" ) ; e = k ( e ) ? e . getTime ( ) : "" , f = k ( f ) ? ( h . endOfDay ? f . setHours ( 23 , 59 , 59 ) : f . getTime ( ) ) || "" : "" , d = e ? f ? e + " - " + f : ">=" + e : f ? "<=" + f : "" , c . add ( i ) . find ( ".dateRange" ) . val ( d ) . trigger ( "search" ) , e = e ? new Date ( e ) : "" , f = f ? new Date ( f ) : "" , /<=/ . test ( d ) ? c . add ( i ) . find ( ".dateFrom" ) . datepicker ( "option" , "maxDate" , f || null ) . end ( ) . find ( ".dateTo" ) . datepicker ( "option" , "minDate" , null ) . datepicker ( "setDate" , f || null ) : />=/ . test ( d ) ? c . add ( i ) . find ( ".dateFrom" ) . datepicker ( "option" , "maxDate" , null ) . datepicker ( "setDate" , e || null ) . end ( ) . find ( ".dateTo" ) . datepicker ( "option" , "minDate" , e || null ) : c . add ( i ) . find ( ".dateFrom" ) . datepicker ( "option" , "maxDate" , null ) . datepicker ( "setDate" , e || null ) . end ( ) . find ( ".dateTo" ) . datepicker ( "option" , "minDate" , null ) . datepicker ( "setDate" , f || null ) , "function" == typeof h . oldonClose && h . oldonClose ( a , b ) } , h . defaultDate = h . from || "" , c . find ( ".dateFrom" ) . datepicker ( h ) , h . defaultDate = h . to || "+7d" , c . find ( ".dateTo" ) . datepicker ( h ) , j . $table . bind ( "filterFomatterUpdate" , function ( ) { var a = l . val ( ) || "" , e = "" , f = "" ; /\s+-\s+/ . test ( a ) ? ( a = a . split ( /\s+-\s+/ ) || [ ] , e = a [ 0 ] || "" , f = a [ 1 ] || "" ) : />=/ . test ( a ) ? e = a . replace ( />=/ , "" ) || "" : /<=/ . test ( a ) && ( f = a . replace ( /<=/ , "" ) || "" ) , e = "" !== e ? /\d{5}/g . test ( e ) ? new Date ( Number ( e ) ) : e || "" : "" , f = "" !== f ? /\d{5}/g . test ( f ) ? new Date ( Number ( f ) ) : f || "" : "" , c . add ( i ) . find ( ".dateFrom" ) . datepicker ( "setDate" , e || null ) , c . add ( i ) . find ( ".dateTo" ) . datepicker ( "setDate" , f || null ) , setTimeout ( function ( ) { g ( ) , b . filter . formatterUpdated ( c , d ) } , 0 ) } ) , j . $table . bind ( "stickyHeadersInit" , function ( ) { i = j . widgetOptions . $sticky . find ( ".tablesorter-filter-row" ) . children ( ) . eq ( d ) . empty ( ) , i . append ( f ) , h . defaultDate = h . from || "" , i . find ( ".dateFrom" ) . datepicker ( h ) , h . defaultDate = h . to || "+7d" , i . find ( ".dateTo" ) . datepicker ( h ) } ) , c . closest ( "table" ) . bind ( "filterReset" , function ( ) { c . add ( i ) . find ( ".dateFrom" ) . val ( "" ) . datepicker ( "setDate" , h . from || null ) , c . add ( i ) . find ( ".dateTo" ) . val ( "" ) . datepicker ( "setDate" , h . to || null ) , setTimeout ( function ( ) { g ( ) } , 0 ) } ) , l . val ( h . from ? h . to ? h . from + " - " + h . to : ">=" + h . from : h . to ? "<=" + h . to : "" ) } } ) } ( jQuery ) ;