itflow/js/date_filter.js

108 lines
3.0 KiB
JavaScript

(function ($, window) {
"use strict";
$(function () {
var $input = $('#dateFilter');
if (!$input.length) return; // nothing to initialize
var $canned = $('#canned_date');
var $dtf = $('#dtf');
var $dtt = $('#dtt');
// Default to "All Time" if nothing provided
var hasValues =
($dtf.val() && $dtt.val()) ||
($canned.val() && $canned.val() !== '');
if (!hasValues) {
$canned.val('alltime');
$dtf.val('1970-01-01');
$dtt.val('2099-12-31');
}
var initialStart = moment($dtf.val(), "YYYY-MM-DD");
var initialEnd = moment($dtt.val(), "YYYY-MM-DD");
function setDisplay(start, end, label) {
// Special display for All Time
if (
label === 'All Time' ||
(start.format('YYYY-MM-DD') === '1970-01-01' &&
end.format('YYYY-MM-DD') === '2099-12-31')
) {
$input.val('All Time');
} else {
$input.val(start.format('YYYY-MM-DD') + " — " + end.format('YYYY-MM-DD'));
}
}
var cannedMap = {
"Today": "today",
"Yesterday": "yesterday",
"This Week": "thisweek",
"Last Week": "lastweek",
"This Month": "thismonth",
"Last Month": "lastmonth",
"This Year": "thisyear",
"Last Year": "lastyear",
"All Time": "alltime"
};
$input.daterangepicker({
startDate: initialStart,
endDate: initialEnd,
autoUpdateInput: true,
opens: 'left',
locale: {
format: 'YYYY-MM-DD',
firstDay: 1
},
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'day'), moment().subtract(1, 'day')],
'This Week': [moment().startOf('isoWeek'), moment()],
'Last Week': [
moment().subtract(1, 'week').startOf('isoWeek'),
moment().subtract(1, 'week').endOf('isoWeek')
],
'This Month': [moment().startOf('month'), moment()],
'Last Month': [
moment().subtract(1, 'month').startOf('month'),
moment().subtract(1, 'month').endOf('month')
],
'This Year': [moment().startOf('year'), moment()],
'Last Year': [
moment().subtract(1, 'year').startOf('year'),
moment().subtract(1, 'year').endOf('year')
],
'All Time': [
moment('1970-01-01', 'YYYY-MM-DD'),
moment('2099-12-31', 'YYYY-MM-DD')
]
}
}, setDisplay);
// Show initial label
setDisplay(initialStart, initialEnd);
$input.on('apply.daterangepicker', function (ev, picker) {
var label = picker.chosenLabel || '';
var canned = cannedMap[label];
if (canned) {
$canned.val(canned);
$dtf.val('');
$dtt.val('');
} else {
$canned.val('custom');
$dtf.val(picker.startDate.format('YYYY-MM-DD'));
$dtt.val(picker.endDate.format('YYYY-MM-DD'));
}
setDisplay(picker.startDate, picker.endDate, label);
// Auto-submit form
this.form.submit();
});
});
})(jQuery, window);