2015-02-13 03:10:38 +00:00
|
|
|
/*! Filter widget formatter jQuery UI functions *//* updated 7/17/2014 (v2.17.5)
|
2014-11-03 23:45:53 +00:00
|
|
|
* requires: tableSorter (FORK) 2.15+ and jQuery 1.4.3+
|
2013-02-17 19:23:36 +00:00
|
|
|
*
|
2013-05-24 22:42:15 +00:00
|
|
|
* uiSpinner (jQuery UI spinner)
|
|
|
|
* uiSlider (jQuery UI slider)
|
|
|
|
* uiRange (jQuery UI range slider)
|
2014-02-17 22:21:35 +00:00
|
|
|
* uiDateCompare (jQuery UI datepicker; 1 input)
|
2013-05-24 22:42:15 +00:00
|
|
|
* uiDatepicker (jQuery UI datepicker; 2 inputs, filter range)
|
2013-02-17 19:23:36 +00:00
|
|
|
*/
|
|
|
|
/*jshint browser:true, jquery:true, unused:false */
|
|
|
|
/*global jQuery: false */
|
|
|
|
;(function($){
|
|
|
|
"use strict";
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
var ts = $.tablesorter || {},
|
|
|
|
|
|
|
|
// compare option selector class name (jQuery selector)
|
|
|
|
compareSelect = '.compare-select',
|
|
|
|
|
2014-04-16 17:52:25 +00:00
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
tsff = ts.filterFormatter = {
|
|
|
|
|
|
|
|
addCompare: function($cell, indx, options){
|
|
|
|
if (options.compare && $.isArray(options.compare) && options.compare.length > 1) {
|
|
|
|
var opt = '',
|
|
|
|
compareSelectClass = [ compareSelect.slice(1), ' ' + compareSelect.slice(1), '' ],
|
|
|
|
txt = options.cellText ? '<label class="' + compareSelectClass.join('-label') + indx + '">' + options.cellText + '</label>' : '';
|
|
|
|
$.each(options.compare, function(i, c){
|
|
|
|
opt += '<option ' + (options.selected === i ? 'selected' : '') + '>' + c + '</option>';
|
|
|
|
});
|
|
|
|
$cell
|
|
|
|
.wrapInner('<div class="' + compareSelectClass.join('-wrapper') + indx + '" />')
|
|
|
|
.prepend( txt + '<select class="' + compareSelectClass.join('') + indx + '" />' )
|
|
|
|
.find('select')
|
|
|
|
.append(opt);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
updateCompare : function($cell, $input, o) {
|
|
|
|
var val = $input.val() || '',
|
|
|
|
num = val.replace(/\s*?[><=]\s*?/g, ''),
|
|
|
|
compare = val.match(/[><=]/g) || '';
|
|
|
|
if (o.compare) {
|
|
|
|
if ($.isArray(o.compare)){
|
|
|
|
compare = (compare || []).join('') || o.compare[o.selected || 0];
|
|
|
|
}
|
|
|
|
$cell.find(compareSelect).val( compare );
|
|
|
|
}
|
|
|
|
return [ val, num ];
|
|
|
|
},
|
2013-02-17 19:23:36 +00:00
|
|
|
|
|
|
|
/**********************\
|
|
|
|
jQuery UI Spinner
|
|
|
|
\**********************/
|
2013-05-27 13:38:55 +00:00
|
|
|
uiSpinner: function($cell, indx, spinnerDef) {
|
2013-02-17 19:23:36 +00:00
|
|
|
var o = $.extend({
|
2014-02-17 22:21:35 +00:00
|
|
|
// filter formatter options
|
2013-05-23 20:32:19 +00:00
|
|
|
delayed : true,
|
|
|
|
addToggle : true,
|
|
|
|
exactMatch : true,
|
2014-02-17 22:21:35 +00:00
|
|
|
value : 1,
|
|
|
|
cellText : '',
|
|
|
|
compare : '',
|
|
|
|
// include ANY jQuery UI spinner options below
|
|
|
|
min : 0,
|
|
|
|
max : 100,
|
|
|
|
step : 1,
|
|
|
|
disabled : false
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
}, spinnerDef ),
|
2014-03-13 01:24:29 +00:00
|
|
|
c = $cell.closest('table')[0].config,
|
2013-02-17 19:23:36 +00:00
|
|
|
// Add a hidden input to hold the range values
|
2013-06-05 00:58:15 +00:00
|
|
|
$input = $('<input class="filter" type="hidden">')
|
|
|
|
.appendTo($cell)
|
2014-03-09 22:09:23 +00:00
|
|
|
// hidden filter update namespace trigger by filter widget
|
|
|
|
.bind('change' + c.namespace + 'filter', function(){
|
2013-06-05 00:58:15 +00:00
|
|
|
updateSpinner({ value: this.value, delayed: false });
|
|
|
|
}),
|
2013-05-30 15:54:40 +00:00
|
|
|
$shcell = [],
|
2013-02-17 19:23:36 +00:00
|
|
|
|
|
|
|
// this function updates the hidden input and adds the current values to the header cell text
|
2014-02-17 22:21:35 +00:00
|
|
|
updateSpinner = function(ui, notrigger) {
|
2013-05-30 15:54:40 +00:00
|
|
|
var chkd = true, state,
|
2013-02-17 19:23:36 +00:00
|
|
|
// ui is not undefined on create
|
2014-02-17 22:21:35 +00:00
|
|
|
v = ui && ui.value && ts.formatFloat((ui.value + '').replace(/[><=]/g,'')) ||
|
|
|
|
$cell.find('.spinner').val() || o.value,
|
|
|
|
compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
|
2014-04-18 16:35:53 +00:00
|
|
|
searchType = ui && typeof ui.delayed === 'boolean' ? ui.delayed : c.$table[0].hasInitialized ? o.delayed || '' : true;
|
2013-02-17 19:23:36 +00:00
|
|
|
if (o.addToggle) {
|
|
|
|
chkd = $cell.find('.toggle').is(':checked');
|
|
|
|
}
|
2013-05-30 15:54:40 +00:00
|
|
|
state = o.disabled || !chkd ? 'disable' : 'enable';
|
2013-02-17 19:23:36 +00:00
|
|
|
$cell.find('.filter')
|
2013-05-13 23:18:57 +00:00
|
|
|
// add equal to the beginning, so we filter exact numbers
|
2014-02-17 22:21:35 +00:00
|
|
|
.val( chkd ? (compare ? compare : o.exactMatch ? '=' : '') + v : '' )
|
|
|
|
.trigger( notrigger ? '' : 'search', searchType ).end()
|
2013-05-30 15:54:40 +00:00
|
|
|
.find('.spinner').spinner(state).val(v);
|
|
|
|
// update sticky header cell
|
|
|
|
if ($shcell.length) {
|
2014-02-17 22:21:35 +00:00
|
|
|
$shcell
|
|
|
|
.find('.spinner').spinner(state).val(v).end()
|
|
|
|
.find(compareSelect).val( compare );
|
2013-05-30 15:54:40 +00:00
|
|
|
if (o.addToggle) {
|
|
|
|
$shcell.find('.toggle')[0].checked = chkd;
|
|
|
|
}
|
|
|
|
}
|
2013-02-17 19:23:36 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// add callbacks; preserve added callbacks
|
|
|
|
o.oldcreate = o.create;
|
|
|
|
o.oldspin = o.spin;
|
|
|
|
o.create = function(event, ui) {
|
|
|
|
updateSpinner(); // ui is an empty object on create
|
|
|
|
if (typeof o.oldcreate === 'function') { o.oldcreate(event, ui); }
|
|
|
|
};
|
|
|
|
o.spin = function(event, ui) {
|
|
|
|
updateSpinner(ui);
|
|
|
|
if (typeof o.oldspin === 'function') { o.oldspin(event, ui); }
|
|
|
|
};
|
|
|
|
if (o.addToggle) {
|
2014-02-17 22:21:35 +00:00
|
|
|
$('<div class="button"><input id="uispinnerbutton' + indx + '" type="checkbox" class="toggle" />' +
|
|
|
|
'<label for="uispinnerbutton' + indx + '"></label></div>')
|
2013-02-17 19:23:36 +00:00
|
|
|
.appendTo($cell)
|
|
|
|
.find('.toggle')
|
|
|
|
.bind('change', function(){
|
|
|
|
updateSpinner();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// make sure we use parsed data
|
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').addClass('filter-parsed');
|
2013-05-30 15:54:40 +00:00
|
|
|
// add a jQuery UI spinner!
|
2013-05-09 04:36:06 +00:00
|
|
|
$('<input class="spinner spinner' + indx + '" />')
|
2013-02-17 19:23:36 +00:00
|
|
|
.val(o.value)
|
|
|
|
.appendTo($cell)
|
|
|
|
.spinner(o)
|
2013-11-09 20:30:58 +00:00
|
|
|
.bind('change keyup', function(){
|
2013-02-17 19:23:36 +00:00
|
|
|
updateSpinner();
|
|
|
|
});
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// update spinner from hidden input, in case of saved filters
|
|
|
|
c.$table.bind('filterFomatterUpdate', function(){
|
|
|
|
var val = tsff.updateCompare($cell, $input, o)[0];
|
|
|
|
$cell.find('.spinner').val( val );
|
|
|
|
updateSpinner({ value: val }, true);
|
2014-07-17 16:18:07 +00:00
|
|
|
ts.filter.formatterUpdated($cell, indx);
|
2014-02-17 22:21:35 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($cell, indx, o);
|
|
|
|
$cell.find(compareSelect).bind('change', function(){
|
|
|
|
updateSpinner();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// has sticky headers?
|
|
|
|
c.$table.bind('stickyHeadersInit', function(){
|
|
|
|
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
|
|
|
|
if (o.addToggle) {
|
2014-02-17 22:21:35 +00:00
|
|
|
$('<div class="button"><input id="stickyuispinnerbutton' + indx + '" type="checkbox" class="toggle" />' +
|
|
|
|
'<label for="stickyuispinnerbutton' + indx + '"></label></div>')
|
2013-05-30 15:54:40 +00:00
|
|
|
.appendTo($shcell)
|
|
|
|
.find('.toggle')
|
|
|
|
.bind('change', function(){
|
|
|
|
$cell.find('.toggle')[0].checked = this.checked;
|
|
|
|
updateSpinner();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
// add a jQuery UI spinner!
|
|
|
|
$('<input class="spinner spinner' + indx + '" />')
|
|
|
|
.val(o.value)
|
|
|
|
.appendTo($shcell)
|
|
|
|
.spinner(o)
|
2013-11-09 20:30:58 +00:00
|
|
|
.bind('change keyup', function(){
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.find('.spinner').val( this.value );
|
|
|
|
updateSpinner();
|
|
|
|
});
|
2014-02-17 22:21:35 +00:00
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($shcell, indx, o);
|
|
|
|
$shcell.find(compareSelect).bind('change', function(){
|
|
|
|
$cell.find(compareSelect).val( $(this).val() );
|
|
|
|
updateSpinner();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
});
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// on reset
|
2013-05-30 15:54:40 +00:00
|
|
|
c.$table.bind('filterReset', function(){
|
2014-02-17 22:21:35 +00:00
|
|
|
if ($.isArray(o.compare)) {
|
|
|
|
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
|
|
|
|
}
|
2013-02-17 19:23:36 +00:00
|
|
|
// turn off the toggle checkbox
|
2013-05-30 15:54:40 +00:00
|
|
|
if (o.addToggle) {
|
|
|
|
$cell.find('.toggle')[0].checked = false;
|
|
|
|
}
|
2014-02-17 22:21:35 +00:00
|
|
|
$cell.find('.spinner').spinner('value', o.value);
|
|
|
|
setTimeout(function(){
|
|
|
|
updateSpinner();
|
|
|
|
}, 0);
|
2013-02-17 19:23:36 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
updateSpinner();
|
|
|
|
return $input;
|
|
|
|
},
|
|
|
|
|
|
|
|
/**********************\
|
|
|
|
jQuery UI Slider
|
|
|
|
\**********************/
|
|
|
|
uiSlider: function($cell, indx, sliderDef) {
|
|
|
|
var o = $.extend({
|
2014-02-17 22:21:35 +00:00
|
|
|
// filter formatter options
|
2013-05-23 20:32:19 +00:00
|
|
|
delayed : true,
|
2013-02-17 19:23:36 +00:00
|
|
|
valueToHeader : false,
|
2013-05-23 20:32:19 +00:00
|
|
|
exactMatch : true,
|
2014-02-17 22:21:35 +00:00
|
|
|
cellText : '',
|
2013-05-23 20:32:19 +00:00
|
|
|
compare : '',
|
2014-02-17 22:21:35 +00:00
|
|
|
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"
|
2013-02-17 19:23:36 +00:00
|
|
|
}, sliderDef ),
|
2014-03-13 01:24:29 +00:00
|
|
|
c = $cell.closest('table')[0].config,
|
2013-02-17 19:23:36 +00:00
|
|
|
// Add a hidden input to hold the range values
|
2013-06-05 00:58:15 +00:00
|
|
|
$input = $('<input class="filter" type="hidden">')
|
|
|
|
.appendTo($cell)
|
2014-03-09 22:09:23 +00:00
|
|
|
// hidden filter update namespace trigger by filter widget
|
|
|
|
.bind('change' + c.namespace + 'filter', function(){
|
2013-06-05 00:58:15 +00:00
|
|
|
updateSlider({ value: this.value });
|
|
|
|
}),
|
2013-05-30 15:54:40 +00:00
|
|
|
$shcell = [],
|
2013-02-17 19:23:36 +00:00
|
|
|
|
|
|
|
// this function updates the hidden input and adds the current values to the header cell text
|
2014-02-17 22:21:35 +00:00
|
|
|
updateSlider = function(ui, notrigger) {
|
2013-02-17 19:23:36 +00:00
|
|
|
// ui is not undefined on create
|
2014-02-17 22:21:35 +00:00
|
|
|
var v = typeof ui !== "undefined" ? ts.formatFloat((ui.value + '').replace(/[><=]/g,'')) || o.value : o.value,
|
2013-05-30 15:54:40 +00:00
|
|
|
val = o.compare ? v : v === o.min ? o.allText : v,
|
2014-02-17 22:21:35 +00:00
|
|
|
compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
|
|
|
|
result = compare + val,
|
2014-04-18 16:35:53 +00:00
|
|
|
searchType = ui && typeof ui.delayed === 'boolean' ? ui.delayed : c.$table[0].hasInitialized ? o.delayed || '' : true;
|
2013-02-17 19:23:36 +00:00
|
|
|
if (o.valueToHeader) {
|
|
|
|
// add range indication to the header cell above!
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(' (' + result + ')');
|
2013-02-17 19:23:36 +00:00
|
|
|
} else {
|
|
|
|
// add values to the handle data-value attribute so the css tooltip will work properly
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.find('.ui-slider-handle').addClass('value-popup').attr('data-value', result);
|
2013-02-17 19:23:36 +00:00
|
|
|
}
|
|
|
|
// update the hidden input;
|
2013-05-13 23:18:57 +00:00
|
|
|
// ****** ADD AN EQUAL SIGN TO THE BEGINNING! <- this makes the slide exactly match the number ******
|
2013-02-17 19:23:36 +00:00
|
|
|
// when the value is at the minimum, clear the hidden input so all rows will be seen
|
2014-02-17 22:21:35 +00:00
|
|
|
|
2013-05-13 23:18:57 +00:00
|
|
|
$cell.find('.filter')
|
2014-02-17 22:21:35 +00:00
|
|
|
.val( ( compare ? compare + v : v === o.min ? '' : (o.exactMatch ? '=' : '') + v ) )
|
|
|
|
.trigger( notrigger ? '' : 'search', searchType ).end()
|
2013-05-30 15:54:40 +00:00
|
|
|
.find('.slider').slider('value', v);
|
|
|
|
|
|
|
|
// update sticky header cell
|
|
|
|
if ($shcell.length) {
|
2014-02-17 22:21:35 +00:00
|
|
|
$shcell
|
|
|
|
.find(compareSelect).val( compare ).end()
|
|
|
|
.find('.slider').slider('value', v);
|
2013-05-30 15:54:40 +00:00
|
|
|
if (o.valueToHeader) {
|
|
|
|
$shcell.closest('thead').find('th[data-column=' + indx + ']').find('.curvalue').html(' (' + result + ')');
|
|
|
|
} else {
|
|
|
|
$shcell.find('.ui-slider-handle').addClass('value-popup').attr('data-value', result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
};
|
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').addClass('filter-parsed');
|
|
|
|
|
|
|
|
// add span to header for value - only works if the line in the updateSlider() function is also un-commented out
|
|
|
|
if (o.valueToHeader) {
|
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').find('.tablesorter-header-inner').append('<span class="curvalue" />');
|
|
|
|
}
|
|
|
|
|
|
|
|
// add callbacks; preserve added callbacks
|
|
|
|
o.oldcreate = o.create;
|
|
|
|
o.oldslide = o.slide;
|
|
|
|
o.create = function(event, ui) {
|
|
|
|
updateSlider(); // ui is an empty object on create
|
|
|
|
if (typeof o.oldcreate === 'function') { o.oldcreate(event, ui); }
|
|
|
|
};
|
|
|
|
o.slide = function(event, ui) {
|
|
|
|
updateSlider(ui);
|
|
|
|
if (typeof o.oldslide === 'function') { o.oldslide(event, ui); }
|
|
|
|
};
|
|
|
|
// add a jQuery UI slider!
|
2013-05-09 04:36:06 +00:00
|
|
|
$('<div class="slider slider' + indx + '"/>')
|
2013-02-17 19:23:36 +00:00
|
|
|
.appendTo($cell)
|
|
|
|
.slider(o);
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// update slider from hidden input, in case of saved filters
|
|
|
|
c.$table.bind('filterFomatterUpdate', function(){
|
|
|
|
var val = tsff.updateCompare($cell, $input, o)[0];
|
|
|
|
$cell.find('.slider').slider('value', val );
|
|
|
|
updateSlider({ value: val }, false);
|
2014-07-17 16:18:07 +00:00
|
|
|
ts.filter.formatterUpdated($cell, indx);
|
2014-02-17 22:21:35 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($cell, indx, o);
|
|
|
|
$cell.find(compareSelect).bind('change', function(){
|
|
|
|
updateSlider({ value: $cell.find('.slider').slider('value') });
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// on reset
|
2013-05-30 15:54:40 +00:00
|
|
|
c.$table.bind('filterReset', function(){
|
2014-02-17 22:21:35 +00:00
|
|
|
if ($.isArray(o.compare)) {
|
|
|
|
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
|
|
|
|
}
|
|
|
|
setTimeout(function(){
|
|
|
|
updateSlider({ value: o.value });
|
|
|
|
}, 0);
|
2013-02-17 19:23:36 +00:00
|
|
|
});
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// has sticky headers?
|
|
|
|
c.$table.bind('stickyHeadersInit', function(){
|
|
|
|
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// add a jQuery UI slider!
|
|
|
|
$('<div class="slider slider' + indx + '"/>')
|
|
|
|
.val(o.value)
|
|
|
|
.appendTo($shcell)
|
|
|
|
.slider(o)
|
|
|
|
.bind('change keyup', function(){
|
|
|
|
$cell.find('.slider').slider('value', this.value );
|
|
|
|
updateSlider();
|
|
|
|
});
|
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($shcell, indx, o);
|
|
|
|
$shcell.find(compareSelect).bind('change', function(){
|
|
|
|
$cell.find(compareSelect).val( $(this).val() );
|
|
|
|
updateSlider();
|
|
|
|
});
|
|
|
|
}
|
2013-05-30 15:54:40 +00:00
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
return $input;
|
|
|
|
},
|
|
|
|
|
|
|
|
/*************************\
|
|
|
|
jQuery UI Range Slider (2 handles)
|
|
|
|
\*************************/
|
|
|
|
uiRange: function($cell, indx, rangeDef) {
|
|
|
|
var o = $.extend({
|
2014-02-17 22:21:35 +00:00
|
|
|
// filter formatter options
|
|
|
|
delayed : true,
|
|
|
|
valueToHeader : false,
|
|
|
|
// include ANY jQuery UI spinner options below
|
|
|
|
// except value, since this one is range specific)
|
2013-02-17 19:23:36 +00:00
|
|
|
values : [0, 100],
|
|
|
|
min : 0,
|
|
|
|
max : 100,
|
2014-02-17 22:21:35 +00:00
|
|
|
range : true
|
2013-02-17 19:23:36 +00:00
|
|
|
}, rangeDef ),
|
2014-03-13 01:24:29 +00:00
|
|
|
c = $cell.closest('table')[0].config,
|
2013-02-17 19:23:36 +00:00
|
|
|
// Add a hidden input to hold the range values
|
2013-06-05 00:58:15 +00:00
|
|
|
$input = $('<input class="filter" type="hidden">')
|
|
|
|
.appendTo($cell)
|
2014-03-09 22:09:23 +00:00
|
|
|
// hidden filter update namespace trigger by filter widget
|
|
|
|
.bind('change' + c.namespace + 'filter', function(){
|
2014-02-17 22:21:35 +00:00
|
|
|
getRange();
|
2013-06-05 00:58:15 +00:00
|
|
|
}),
|
2013-05-30 15:54:40 +00:00
|
|
|
$shcell = [],
|
2013-02-17 19:23:36 +00:00
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
getRange = function(){
|
|
|
|
var val = $input.val(),
|
|
|
|
v = val.split(' - ');
|
|
|
|
if (val === '') { v = [ o.min, o.max ]; }
|
|
|
|
if (v && v[1]) {
|
|
|
|
updateUiRange({ values: v, delay: false }, true);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// this function updates the hidden input and adds the current values to the header cell text
|
2014-02-17 22:21:35 +00:00
|
|
|
updateUiRange = function(ui, notrigger) {
|
2013-02-17 19:23:36 +00:00
|
|
|
// ui.values are undefined for some reason on create
|
2013-06-05 00:58:15 +00:00
|
|
|
var val = ui && ui.values || o.values,
|
2013-05-30 15:54:40 +00:00
|
|
|
result = val[0] + ' - ' + val[1],
|
2013-02-28 16:32:45 +00:00
|
|
|
// make range an empty string if entire range is covered so the filter row will hide (if set)
|
2014-02-17 22:21:35 +00:00
|
|
|
range = val[0] === o.min && val[1] === o.max ? '' : result,
|
2014-04-18 16:35:53 +00:00
|
|
|
searchType = ui && typeof ui.delayed === 'boolean' ? ui.delayed : c.$table[0].hasInitialized ? o.delayed || '': true;
|
2013-02-17 19:23:36 +00:00
|
|
|
if (o.valueToHeader) {
|
|
|
|
// add range indication to the header cell above (if not using the css method)!
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').find('.currange').html(' (' + result + ')');
|
2013-02-17 19:23:36 +00:00
|
|
|
} else {
|
|
|
|
// add values to the handle data-value attribute so the css tooltip will work properly
|
|
|
|
$cell.find('.ui-slider-handle')
|
|
|
|
.addClass('value-popup')
|
|
|
|
.eq(0).attr('data-value', val[0]).end() // adding value to data attribute
|
|
|
|
.eq(1).attr('data-value', val[1]); // value popup shown via css
|
|
|
|
}
|
|
|
|
// update the hidden input
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.find('.filter').val(range)
|
2014-02-17 22:21:35 +00:00
|
|
|
.trigger(notrigger ? '' : 'search', searchType).end()
|
2013-05-30 15:54:40 +00:00
|
|
|
.find('.range').slider('values', val);
|
|
|
|
// update sticky header cell
|
|
|
|
if ($shcell.length) {
|
|
|
|
$shcell.find('.range').slider('values', val);
|
|
|
|
if (o.valueToHeader) {
|
|
|
|
$shcell.closest('thead').find('th[data-column=' + indx + ']').find('.currange').html(' (' + result + ')');
|
|
|
|
} else {
|
|
|
|
$shcell.find('.ui-slider-handle')
|
|
|
|
.addClass('value-popup')
|
|
|
|
.eq(0).attr('data-value', val[0]).end() // adding value to data attribute
|
|
|
|
.eq(1).attr('data-value', val[1]); // value popup shown via css
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
};
|
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').addClass('filter-parsed');
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// add span to header for value - only works if the line in the updateUiRange() function is also un-commented out
|
2013-02-17 19:23:36 +00:00
|
|
|
if (o.valueToHeader) {
|
|
|
|
$cell.closest('thead').find('th[data-column=' + indx + ']').find('.tablesorter-header-inner').append('<span class="currange"/>');
|
|
|
|
}
|
|
|
|
|
|
|
|
// add callbacks; preserve added callbacks
|
|
|
|
o.oldcreate = o.create;
|
|
|
|
o.oldslide = o.slide;
|
|
|
|
// add a jQuery UI range slider!
|
|
|
|
o.create = function(event, ui) {
|
|
|
|
updateUiRange(); // ui is an empty object on create
|
|
|
|
if (typeof o.oldcreate === 'function') { o.oldcreate(event, ui); }
|
|
|
|
};
|
|
|
|
o.slide = function(event, ui) {
|
|
|
|
updateUiRange(ui);
|
|
|
|
if (typeof o.oldslide === 'function') { o.oldslide(event, ui); }
|
|
|
|
};
|
2013-05-30 15:54:40 +00:00
|
|
|
$('<div class="range range' + indx +'"/>')
|
2013-02-17 19:23:36 +00:00
|
|
|
.appendTo($cell)
|
|
|
|
.slider(o);
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// update slider from hidden input, in case of saved filters
|
|
|
|
c.$table.bind('filterFomatterUpdate', function(){
|
|
|
|
getRange();
|
2014-07-17 16:18:07 +00:00
|
|
|
ts.filter.formatterUpdated($cell, indx);
|
2014-02-17 22:21:35 +00:00
|
|
|
});
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// on reset
|
2013-05-30 15:54:40 +00:00
|
|
|
c.$table.bind('filterReset', function(){
|
|
|
|
$cell.find('.range').slider('values', o.values);
|
2014-02-17 22:21:35 +00:00
|
|
|
setTimeout(function(){
|
|
|
|
updateUiRange();
|
|
|
|
}, 0);
|
2013-02-17 19:23:36 +00:00
|
|
|
});
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// has sticky headers?
|
|
|
|
c.$table.bind('stickyHeadersInit', function(){
|
|
|
|
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
|
|
|
|
|
|
|
|
// add a jQuery UI slider!
|
|
|
|
$('<div class="range range' + indx + '"/>')
|
|
|
|
.val(o.value)
|
|
|
|
.appendTo($shcell)
|
|
|
|
.slider(o)
|
2013-11-09 20:30:58 +00:00
|
|
|
.bind('change keyup', function(){
|
2013-05-30 15:54:40 +00:00
|
|
|
$cell.find('.range').val( this.value );
|
|
|
|
updateUiRange();
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// return the hidden input so the filter widget has a reference to it
|
|
|
|
return $input;
|
|
|
|
},
|
|
|
|
|
2013-05-23 20:32:19 +00:00
|
|
|
/*************************\
|
2013-05-27 13:38:55 +00:00
|
|
|
jQuery UI Datepicker compare (1 input)
|
2013-05-23 20:32:19 +00:00
|
|
|
\*************************/
|
|
|
|
uiDateCompare: function($cell, indx, defDate) {
|
|
|
|
var o = $.extend({
|
2014-02-17 22:21:35 +00:00
|
|
|
// filter formatter options
|
2013-05-23 20:32:19 +00:00
|
|
|
cellText : '',
|
2014-02-17 22:21:35 +00:00
|
|
|
compare : '',
|
|
|
|
endOfDay : true,
|
|
|
|
// include ANY jQuery UI spinner options below
|
|
|
|
|
2014-03-01 14:13:30 +00:00
|
|
|
defaultDate : '',
|
2014-02-17 22:21:35 +00:00
|
|
|
|
2013-05-23 20:32:19 +00:00
|
|
|
changeMonth : true,
|
|
|
|
changeYear : true,
|
2014-02-17 22:21:35 +00:00
|
|
|
numberOfMonths : 1
|
2013-05-23 20:32:19 +00:00
|
|
|
}, defDate),
|
2014-02-17 22:21:35 +00:00
|
|
|
|
|
|
|
$date,
|
2014-03-13 01:24:29 +00:00
|
|
|
c = $cell.closest('table')[0].config,
|
2014-02-17 22:21:35 +00:00
|
|
|
// make sure we're using parsed dates in the search
|
|
|
|
$hdr = $cell.closest('thead').find('th[data-column=' + indx + ']').addClass('filter-parsed'),
|
2013-05-23 20:32:19 +00:00
|
|
|
// Add a hidden input to hold the range values
|
2013-06-05 00:58:15 +00:00
|
|
|
$input = $('<input class="dateCompare" type="hidden">')
|
|
|
|
.appendTo($cell)
|
2014-03-09 22:09:23 +00:00
|
|
|
// hidden filter update namespace trigger by filter widget
|
|
|
|
.bind('change' + c.namespace + 'filter', function(){
|
2013-06-05 00:58:15 +00:00
|
|
|
var v = this.value;
|
|
|
|
if (v) {
|
|
|
|
o.onClose(v);
|
|
|
|
}
|
|
|
|
}),
|
2014-02-19 19:27:23 +00:00
|
|
|
t, $shcell = [],
|
2013-06-21 15:48:50 +00:00
|
|
|
|
|
|
|
// this function updates the hidden input
|
2014-04-23 01:45:52 +00:00
|
|
|
date1Compare = function(notrigger) {
|
2014-02-17 22:21:35 +00:00
|
|
|
var date, query,
|
2014-04-23 01:45:52 +00:00
|
|
|
getdate = $date.datepicker('getDate') || '',
|
2014-02-17 22:21:35 +00:00
|
|
|
compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
|
2014-04-18 16:35:53 +00:00
|
|
|
searchType = c.$table[0].hasInitialized ? o.delayed || '': true;
|
2014-04-26 22:12:31 +00:00
|
|
|
$date.datepicker('setDate', (getdate === '' ? '' : getdate) || null);
|
2014-02-17 22:21:35 +00:00
|
|
|
if (getdate === '') { notrigger = false; }
|
|
|
|
date = $date.datepicker('getDate');
|
|
|
|
query = date ? ( o.endOfDay && /<=/.test(compare) ? date.setHours(23, 59, 59) : date.getTime() ) || '' : '';
|
|
|
|
if (date && o.endOfDay && compare === '=') {
|
|
|
|
compare = '';
|
|
|
|
query += ' - ' + date.setHours(23, 59, 59);
|
|
|
|
notrigger = false;
|
|
|
|
}
|
2013-06-21 15:48:50 +00:00
|
|
|
$cell.find('.dateCompare')
|
|
|
|
// add equal to the beginning, so we filter exact numbers
|
2014-02-17 22:21:35 +00:00
|
|
|
.val(compare + query)
|
|
|
|
.trigger( notrigger ? '' : 'search', searchType ).end();
|
2013-06-21 15:48:50 +00:00
|
|
|
// update sticky header cell
|
|
|
|
if ($shcell.length) {
|
2014-02-17 22:21:35 +00:00
|
|
|
$shcell
|
|
|
|
.find('.dateCompare').val(compare + query).end()
|
|
|
|
.find(compareSelect).val(compare);
|
2013-06-21 15:48:50 +00:00
|
|
|
}
|
|
|
|
};
|
2013-05-23 20:32:19 +00:00
|
|
|
|
|
|
|
// Add date range picker
|
2014-02-17 22:21:35 +00:00
|
|
|
t = '<input type="text" class="date date' + indx + '" placeholder="' +
|
2014-04-16 17:52:25 +00:00
|
|
|
($hdr.data('placeholder') || $hdr.attr('data-placeholder') || c.widgetOptions.filter_placeholder.search || '') + '" />';
|
2014-02-17 22:21:35 +00:00
|
|
|
$date = $(t).appendTo($cell);
|
2013-05-23 20:32:19 +00:00
|
|
|
|
|
|
|
// add callbacks; preserve added callbacks
|
|
|
|
o.oldonClose = o.onClose;
|
|
|
|
|
|
|
|
o.onClose = function( selectedDate, ui ) {
|
2014-02-17 22:21:35 +00:00
|
|
|
date1Compare();
|
2013-05-23 20:32:19 +00:00
|
|
|
if (typeof o.oldonClose === 'function') { o.oldonClose(selectedDate, ui); }
|
|
|
|
};
|
2014-02-17 22:21:35 +00:00
|
|
|
$date.datepicker(o);
|
2013-06-05 00:58:15 +00:00
|
|
|
|
2013-05-23 20:32:19 +00:00
|
|
|
// on reset
|
2013-05-30 15:54:40 +00:00
|
|
|
c.$table.bind('filterReset', function(){
|
2014-02-17 22:21:35 +00:00
|
|
|
if ($.isArray(o.compare)) {
|
|
|
|
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
|
2013-05-30 15:54:40 +00:00
|
|
|
}
|
2014-04-26 22:12:31 +00:00
|
|
|
$cell.add($shcell).find('.date').val(o.defaultDate).datepicker('setDate', o.defaultDate || null);
|
2014-02-17 22:21:35 +00:00
|
|
|
setTimeout(function(){
|
|
|
|
date1Compare();
|
|
|
|
}, 0);
|
2013-05-30 15:54:40 +00:00
|
|
|
});
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// update date compare from hidden input, in case of saved filters
|
|
|
|
c.$table.bind('filterFomatterUpdate', function(){
|
|
|
|
var num, v = $input.val();
|
|
|
|
if (/\s+-\s+/.test(v)) {
|
|
|
|
// date range found; assume an exact match on one day
|
|
|
|
$cell.find(compareSelect).val('=');
|
2014-04-23 01:45:52 +00:00
|
|
|
num = v.split(/\s+-\s+/)[0];
|
2014-04-26 22:12:31 +00:00
|
|
|
$date.datepicker( 'setDate', num || null );
|
2014-02-17 22:21:35 +00:00
|
|
|
} else {
|
|
|
|
num = (tsff.updateCompare($cell, $input, o)[1]).toString() || '';
|
|
|
|
// differeniate 1388556000000 from 1/1/2014 using \d{5} regex
|
2014-06-16 16:16:54 +00:00
|
|
|
num = num !== '' ? /\d{5}/g.test(num) ? new Date(Number(num)) : num || '' : '';
|
2014-02-17 22:21:35 +00:00
|
|
|
}
|
2014-04-26 22:12:31 +00:00
|
|
|
$cell.add($shcell).find('.date').datepicker( 'setDate', num || null );
|
2014-04-23 01:45:52 +00:00
|
|
|
setTimeout(function(){
|
|
|
|
date1Compare(true);
|
2014-07-17 16:18:07 +00:00
|
|
|
ts.filter.formatterUpdated($cell, indx);
|
2014-04-23 01:45:52 +00:00
|
|
|
}, 0);
|
2014-02-17 22:21:35 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($cell, indx, o);
|
|
|
|
$cell.find(compareSelect).bind('change', function(){
|
|
|
|
date1Compare();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// has sticky headers?
|
|
|
|
c.$table.bind('stickyHeadersInit', function(){
|
|
|
|
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
|
2013-06-21 15:48:50 +00:00
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// add a jQuery datepicker!
|
|
|
|
$shcell
|
|
|
|
.append(t)
|
|
|
|
.find('.date')
|
|
|
|
.datepicker(o);
|
2014-02-17 22:21:35 +00:00
|
|
|
|
|
|
|
if (o.compare) {
|
|
|
|
// add compare select
|
|
|
|
tsff.addCompare($shcell, indx, o);
|
|
|
|
$shcell.find(compareSelect).bind('change', function(){
|
|
|
|
$cell.find(compareSelect).val( $(this).val() );
|
|
|
|
date1Compare();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2013-05-23 20:32:19 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// return the hidden input so the filter widget has a reference to it
|
2013-06-05 00:58:15 +00:00
|
|
|
return $input.val( o.defaultDate ? o.defaultDate : '' );
|
2013-05-23 20:32:19 +00:00
|
|
|
},
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
/*************************\
|
|
|
|
jQuery UI Datepicker (2 inputs)
|
|
|
|
\*************************/
|
|
|
|
uiDatepicker: function($cell, indx, defDate) {
|
|
|
|
var o = $.extend({
|
2014-02-17 22:21:35 +00:00
|
|
|
// filter formatter options
|
|
|
|
endOfDay : true,
|
2013-05-23 20:32:19 +00:00
|
|
|
textFrom : 'from',
|
|
|
|
textTo : 'to',
|
2014-02-17 22:21:35 +00:00
|
|
|
from : '', // defaultDate "from" input
|
|
|
|
to : '', // defaultDate "to" input
|
|
|
|
// include ANY jQuery UI spinner options below
|
2013-05-23 20:32:19 +00:00
|
|
|
changeMonth : true,
|
|
|
|
changeYear : true,
|
|
|
|
numberOfMonths : 1
|
2013-02-17 19:23:36 +00:00
|
|
|
}, defDate),
|
2014-04-18 16:35:53 +00:00
|
|
|
t, closeDate, $shcell = [],
|
2014-03-13 01:24:29 +00:00
|
|
|
c = $cell.closest('table')[0].config,
|
2014-04-18 16:35:53 +00:00
|
|
|
validDate = function(d){
|
|
|
|
return d instanceof Date && isFinite(d);
|
|
|
|
},
|
2013-06-05 00:58:15 +00:00
|
|
|
// Add a hidden input to hold the range values
|
|
|
|
$input = $('<input class="dateRange" type="hidden">')
|
|
|
|
.appendTo($cell)
|
2014-03-09 22:09:23 +00:00
|
|
|
// hidden filter update namespace trigger by filter widget
|
|
|
|
.bind('change' + c.namespace + 'filter', function(){
|
2013-06-05 00:58:15 +00:00
|
|
|
var v = this.value;
|
|
|
|
if (v.match(' - ')) {
|
|
|
|
v = v.split(' - ');
|
|
|
|
$cell.find('.dateTo').val(v[1]);
|
2014-04-18 16:35:53 +00:00
|
|
|
closeDate(v[0]);
|
2013-06-05 00:58:15 +00:00
|
|
|
} else if (v.match('>=')) {
|
2014-04-18 16:35:53 +00:00
|
|
|
closeDate( v.replace('>=', '') );
|
2013-06-05 00:58:15 +00:00
|
|
|
} else if (v.match('<=')) {
|
2014-04-18 16:35:53 +00:00
|
|
|
closeDate( v.replace('<=', '') );
|
2013-06-05 00:58:15 +00:00
|
|
|
}
|
2014-04-16 05:36:13 +00:00
|
|
|
}),
|
2013-02-17 19:23:36 +00:00
|
|
|
|
|
|
|
// make sure we're using parsed dates in the search
|
2014-04-16 05:36:13 +00:00
|
|
|
$hdr = $cell.closest('thead').find('th[data-column=' + indx + ']').addClass('filter-parsed');
|
2013-02-17 19:23:36 +00:00
|
|
|
// Add date range picker
|
2014-04-16 17:52:25 +00:00
|
|
|
t = '<label>' + o.textFrom + '</label><input type="text" class="dateFrom" placeholder="' +
|
|
|
|
($hdr.data('placeholderFrom') || $hdr.attr('data-placeholder-from') || c.widgetOptions.filter_placeholder.from || '') + '" />' +
|
|
|
|
'<label>' + o.textTo + '</label><input type="text" class="dateTo" placeholder="' +
|
|
|
|
($hdr.data('placeholderTo') || $hdr.attr('data-placeholder-to') || c.widgetOptions.filter_placeholder.to || '') + '" />';
|
2013-05-30 15:54:40 +00:00
|
|
|
$(t).appendTo($cell);
|
2013-02-17 19:23:36 +00:00
|
|
|
|
|
|
|
// add callbacks; preserve added callbacks
|
|
|
|
o.oldonClose = o.onClose;
|
|
|
|
|
2014-04-18 16:35:53 +00:00
|
|
|
closeDate = o.onClose = function( selectedDate, ui ) {
|
2014-02-17 22:21:35 +00:00
|
|
|
var range,
|
2014-04-18 16:35:53 +00:00
|
|
|
from = $cell.find('.dateFrom').datepicker('getDate'),
|
|
|
|
to = $cell.find('.dateTo').datepicker('getDate');
|
|
|
|
from = validDate(from) ? from.getTime() : '';
|
|
|
|
to = validDate(to) ? ( o.endOfDay ? to.setHours(23, 59, 59) : to.getTime() ) || '' : '';
|
2014-02-17 22:21:35 +00:00
|
|
|
range = from ? ( to ? from + ' - ' + to : '>=' + from ) : (to ? '<=' + to : '');
|
2014-04-18 16:35:53 +00:00
|
|
|
$cell.add( $shcell )
|
2013-02-17 19:23:36 +00:00
|
|
|
.find('.dateRange').val(range)
|
2014-04-18 16:35:53 +00:00
|
|
|
.trigger('search');
|
|
|
|
// date picker needs date objects
|
|
|
|
from = from ? new Date(from) : '';
|
|
|
|
to = to ? new Date(to) : '';
|
2014-04-23 01:45:52 +00:00
|
|
|
|
2014-04-18 16:35:53 +00:00
|
|
|
if (/<=/.test(range)) {
|
|
|
|
$cell.add( $shcell )
|
2014-04-26 22:12:31 +00:00
|
|
|
.find('.dateFrom').datepicker('option', 'maxDate', to || null ).end()
|
|
|
|
.find('.dateTo').datepicker('option', 'minDate', null).datepicker('setDate', to || null);
|
2014-04-18 16:35:53 +00:00
|
|
|
} else if (/>=/.test(range)) {
|
|
|
|
$cell.add( $shcell )
|
2014-04-26 22:12:31 +00:00
|
|
|
.find('.dateFrom').datepicker('option', 'maxDate', null).datepicker('setDate', from || null).end()
|
|
|
|
.find('.dateTo').datepicker('option', 'minDate', from || null );
|
2014-04-18 16:35:53 +00:00
|
|
|
} else {
|
|
|
|
$cell.add( $shcell )
|
2014-04-26 22:12:31 +00:00
|
|
|
.find('.dateFrom').datepicker('option', 'maxDate', null).datepicker('setDate', from || null ).end()
|
|
|
|
.find('.dateTo').datepicker('option', 'minDate', null).datepicker('setDate', to || null);
|
2013-05-30 15:54:40 +00:00
|
|
|
}
|
2014-04-18 16:35:53 +00:00
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
if (typeof o.oldonClose === 'function') { o.oldonClose(selectedDate, ui); }
|
|
|
|
};
|
2013-05-30 15:54:40 +00:00
|
|
|
|
2014-04-18 16:35:53 +00:00
|
|
|
o.defaultDate = o.from || '';
|
2013-02-17 19:23:36 +00:00
|
|
|
$cell.find('.dateFrom').datepicker(o);
|
2013-05-23 20:32:19 +00:00
|
|
|
o.defaultDate = o.to || '+7d'; // set to date +7 days from today (if not defined)
|
2013-02-17 19:23:36 +00:00
|
|
|
$cell.find('.dateTo').datepicker(o);
|
|
|
|
|
2014-02-17 22:21:35 +00:00
|
|
|
// update date compare from hidden input, in case of saved filters
|
|
|
|
c.$table.bind('filterFomatterUpdate', function(){
|
|
|
|
var val = $input.val() || '',
|
|
|
|
from = '',
|
|
|
|
to = '';
|
|
|
|
// date range
|
|
|
|
if (/\s+-\s+/.test(val)){
|
2014-02-19 19:27:23 +00:00
|
|
|
val = val.split(/\s+-\s+/) || [];
|
2014-04-23 01:45:52 +00:00
|
|
|
from = val[0] || '';
|
|
|
|
to = val[1] || '';
|
2014-02-17 22:21:35 +00:00
|
|
|
} else if (/>=/.test(val)) {
|
|
|
|
// greater than date (to date empty)
|
2014-04-23 01:45:52 +00:00
|
|
|
from = val.replace(/>=/, '') || '';
|
2014-02-17 22:21:35 +00:00
|
|
|
} else if (/<=/.test(val)) {
|
|
|
|
// less than date (from date empty)
|
2014-04-23 01:45:52 +00:00
|
|
|
to = val.replace(/<=/, '') || '';
|
2014-02-17 22:21:35 +00:00
|
|
|
}
|
2014-06-16 16:16:54 +00:00
|
|
|
|
|
|
|
// differeniate 1388556000000 from 1/1/2014 using \d{5} regex
|
|
|
|
from = from !== '' ? /\d{5}/g.test(from) ? new Date(Number(from)) : from || '' : '';
|
|
|
|
to = to !== '' ? /\d{5}/g.test(to) ? new Date(Number(to)) : to || '' : '';
|
|
|
|
|
2014-04-26 22:12:31 +00:00
|
|
|
$cell.add($shcell).find('.dateFrom').datepicker('setDate', from || null);
|
|
|
|
$cell.add($shcell).find('.dateTo').datepicker('setDate', to || null);
|
2014-04-23 01:45:52 +00:00
|
|
|
// give datepicker time to process
|
|
|
|
setTimeout(function(){
|
|
|
|
closeDate();
|
2014-07-17 16:18:07 +00:00
|
|
|
ts.filter.formatterUpdated($cell, indx);
|
2014-04-23 01:45:52 +00:00
|
|
|
}, 0);
|
2014-02-17 22:21:35 +00:00
|
|
|
});
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// has sticky headers?
|
|
|
|
c.$table.bind('stickyHeadersInit', function(){
|
|
|
|
$shcell = c.widgetOptions.$sticky.find('.tablesorter-filter-row').children().eq(indx).empty();
|
2013-08-28 21:01:22 +00:00
|
|
|
$shcell.append(t);
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
// add a jQuery datepicker!
|
2014-04-18 16:35:53 +00:00
|
|
|
o.defaultDate = o.from || '';
|
|
|
|
$shcell.find('.dateFrom').datepicker(o);
|
|
|
|
|
|
|
|
o.defaultDate = o.to || '+7d';
|
2013-08-28 21:01:22 +00:00
|
|
|
$shcell.find('.dateTo').datepicker(o);
|
|
|
|
|
2013-05-30 15:54:40 +00:00
|
|
|
});
|
|
|
|
|
2013-02-17 19:23:36 +00:00
|
|
|
// on reset
|
|
|
|
$cell.closest('table').bind('filterReset', function(){
|
2014-04-26 22:12:31 +00:00
|
|
|
$cell.add($shcell).find('.dateFrom').val('').datepicker('setDate', o.from || null );
|
|
|
|
$cell.add($shcell).find('.dateTo').val('').datepicker('setDate', o.to || null );
|
2014-04-23 01:45:52 +00:00
|
|
|
setTimeout(function(){
|
|
|
|
closeDate();
|
|
|
|
}, 0);
|
2013-02-17 19:23:36 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
// return the hidden input so the filter widget has a reference to it
|
2013-08-28 21:01:22 +00:00
|
|
|
return $input.val( o.from ? ( o.to ? o.from + ' - ' + o.to : '>=' + o.from ) : (o.to ? '<=' + o.to : '') );
|
2013-02-17 19:23:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2013-06-10 15:30:10 +00:00
|
|
|
})(jQuery);
|