Filterformatter datepickers now work with non-U.S. formats. Fixes #587

This commit is contained in:
Mottie 2014-04-22 20:45:52 -05:00
parent f75398c799
commit 38b204107c

View File

@ -512,12 +512,12 @@ tsff = ts.filterFormatter = {
t, $shcell = [], t, $shcell = [],
// this function updates the hidden input // this function updates the hidden input
date1Compare = function(v, notrigger) { date1Compare = function(notrigger) {
var date, query, var date, query,
getdate = v || $date.datepicker('getDate') || '', getdate = $date.datepicker('getDate') || '',
compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '', compare = ($.isArray(o.compare) ? $cell.find(compareSelect).val() || o.compare[ o.selected || 0] : o.compare) || '',
searchType = c.$table[0].hasInitialized ? o.delayed || '': true; searchType = c.$table[0].hasInitialized ? o.delayed || '': true;
$date.datepicker('setDate', getdate === '' ? o.defaultDate || '' : getdate); $date.datepicker('setDate', getdate === '' ? '' : getdate);
if (getdate === '') { notrigger = false; } if (getdate === '') { notrigger = false; }
date = $date.datepicker('getDate'); date = $date.datepicker('getDate');
query = date ? ( o.endOfDay && /<=/.test(compare) ? date.setHours(23, 59, 59) : date.getTime() ) || '' : ''; query = date ? ( o.endOfDay && /<=/.test(compare) ? date.setHours(23, 59, 59) : date.getTime() ) || '' : '';
@ -557,7 +557,7 @@ tsff = ts.filterFormatter = {
if ($.isArray(o.compare)) { if ($.isArray(o.compare)) {
$cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] ); $cell.add($shcell).find(compareSelect).val( o.compare[ o.selected || 0 ] );
} }
$cell.add($shcell).find('.date').val(o.defaultDate).datepicker('setDate', ''); $cell.add($shcell).find('.date').val(o.defaultDate).datepicker('setDate', o.defaultDate);
setTimeout(function(){ setTimeout(function(){
date1Compare(); date1Compare();
}, 0); }, 0);
@ -569,15 +569,17 @@ tsff = ts.filterFormatter = {
if (/\s+-\s+/.test(v)) { if (/\s+-\s+/.test(v)) {
// date range found; assume an exact match on one day // date range found; assume an exact match on one day
$cell.find(compareSelect).val('='); $cell.find(compareSelect).val('=');
num = new Date ( Number( v.split(/\s+-\s+/)[0] ) ); num = v.split(/\s+-\s+/)[0];
$date.datepicker( 'setDate', num ); $date.datepicker( 'setDate', num );
} else { } else {
num = (tsff.updateCompare($cell, $input, o)[1]).toString() || ''; num = (tsff.updateCompare($cell, $input, o)[1]).toString() || '';
// differeniate 1388556000000 from 1/1/2014 using \d{5} regex // differeniate 1388556000000 from 1/1/2014 using \d{5} regex
num = num !== '' ? new Date( /\d{5}/g.test(num) ? Number(num) : num ) || '' : ''; num = num !== '' ? /\d{5}/g.test(num) ? Number(num) : num || '' : '';
} }
$cell.add($shcell).find('.date').datepicker( 'setDate', num ); $cell.add($shcell).find('.date').datepicker( 'setDate', num );
date1Compare(num, true); setTimeout(function(){
date1Compare(true);
}, 0);
}); });
if (o.compare) { if (o.compare) {
@ -667,17 +669,16 @@ tsff = ts.filterFormatter = {
var range, var range,
from = $cell.find('.dateFrom').datepicker('getDate'), from = $cell.find('.dateFrom').datepicker('getDate'),
to = $cell.find('.dateTo').datepicker('getDate'); to = $cell.find('.dateTo').datepicker('getDate');
from = validDate(from) ? from.getTime() : ''; from = validDate(from) ? from.getTime() : '';
to = validDate(to) ? ( o.endOfDay ? to.setHours(23, 59, 59) : to.getTime() ) || '' : ''; to = validDate(to) ? ( o.endOfDay ? to.setHours(23, 59, 59) : to.getTime() ) || '' : '';
range = from ? ( to ? from + ' - ' + to : '>=' + from ) : (to ? '<=' + to : ''); range = from ? ( to ? from + ' - ' + to : '>=' + from ) : (to ? '<=' + to : '');
$cell.add( $shcell ) $cell.add( $shcell )
.find('.dateRange').val(range) .find('.dateRange').val(range)
.trigger('search'); .trigger('search');
// date picker needs date objects // date picker needs date objects
from = from ? new Date(from) : ''; from = from ? new Date(from) : '';
to = to ? new Date(to) : ''; to = to ? new Date(to) : '';
if (/<=/.test(range)) { if (/<=/.test(range)) {
$cell.add( $shcell ) $cell.add( $shcell )
.find('.dateFrom').datepicker('option', 'maxDate', to ).end() .find('.dateFrom').datepicker('option', 'maxDate', to ).end()
@ -708,18 +709,21 @@ tsff = ts.filterFormatter = {
// date range // date range
if (/\s+-\s+/.test(val)){ if (/\s+-\s+/.test(val)){
val = val.split(/\s+-\s+/) || []; val = val.split(/\s+-\s+/) || [];
from = new Date(Number( val[0] )) || ''; from = val[0] || '';
to = new Date(Number( val[1] )) || ''; to = val[1] || '';
} else if (/>=/.test(val)) { } else if (/>=/.test(val)) {
// greater than date (to date empty) // greater than date (to date empty)
from = new Date(Number( val.replace(/>=/, '') )) || ''; from = val.replace(/>=/, '') || '';
} else if (/<=/.test(val)) { } else if (/<=/.test(val)) {
// less than date (from date empty) // less than date (from date empty)
to = new Date(Number( val.replace(/<=/, '') )) || ''; to = val.replace(/<=/, '') || '';
} }
$cell.add($shcell).find('.dateFrom').datepicker('setDate', from); $cell.add($shcell).find('.dateFrom').datepicker('setDate', from);
$cell.add($shcell).find('.dateTo').datepicker('setDate', to); $cell.add($shcell).find('.dateTo').datepicker('setDate', to);
// give datepicker time to process
setTimeout(function(){
closeDate(); closeDate();
}, 0);
}); });
// has sticky headers? // has sticky headers?
@ -740,6 +744,9 @@ tsff = ts.filterFormatter = {
$cell.closest('table').bind('filterReset', function(){ $cell.closest('table').bind('filterReset', function(){
$cell.add($shcell).find('.dateFrom').val('').datepicker('setDate', o.from ); $cell.add($shcell).find('.dateFrom').val('').datepicker('setDate', o.from );
$cell.add($shcell).find('.dateTo').val('').datepicker('setDate', o.to ); $cell.add($shcell).find('.dateTo').val('').datepicker('setDate', o.to );
setTimeout(function(){
closeDate();
}, 0);
}); });
// return the hidden input so the filter widget has a reference to it // return the hidden input so the filter widget has a reference to it