diff --git a/dev/js/Calendar.js b/dev/js/Calendar.js
index 7588f8d..e0a5031 100644
--- a/dev/js/Calendar.js
+++ b/dev/js/Calendar.js
@@ -42,23 +42,37 @@
this.orig_start_date = null;
this.orig_end_date = null;
this.orig_current_date = null;
+ this.orig_preset_label = null;
this.earliest_date = settings.earliest_date ? moment(settings.earliest_date)
: moment('1900-01-01', 'YYYY-MM-DD');
this.latest_date = settings.latest_date ? moment(settings.latest_date)
: moment('2900-12-31', 'YYYY-MM-DD');
- this.end_date = settings.end_date ? moment(settings.end_date)
- : (this.type == 'double' ? moment() : null);
- this.start_date = settings.start_date ? moment(settings.start_date)
- : (this.type == 'double' ? this.end_date.clone().subtract(1, 'month') : null);
this.current_date = settings.current_date ? moment(settings.current_date)
: (this.type == 'single' ? moment() : null);
+ this.preset_label = settings.preset_label ? settings.preset_label
+ : (this.type == 'single' ? 'Last 3 months' : null);
+ if(this.preset_label) {
+ var self = this;
+ var preset = settings.presets.find(function(obj) {
+ return obj.label === self.preset_label;
+ });
+ this.start_date = preset.start;
+ this.end_date = preset.end;
+ } else {
+ this.start_date = settings.start_date ? moment(settings.start_date)
+ : (this.type == 'double' ? this.end_date.clone().subtract(1, 'month') : null);
+ this.end_date = settings.end_date ? moment(settings.end_date)
+ : (this.type == 'double' ? moment() : null);
+ }
+ this.sticky_presets = settings.sticky_presets || false;
this.presets = settings.presets == false || this.type == 'single' ? false : true;
this.callback = settings.callback || this.calendarSetDates;
this.calendarHTML(this.type);
+ this.calendarSetDates();
$('.dr-presets', this.element).click(function() {
self.presetToggle();
@@ -68,6 +82,11 @@
var start = $('.dr-item-aside', this).data('start');
var end = $('.dr-item-aside', this).data('end');
+ self.preset_label = $(this).data('label');
+ if (self.preset_label == 'custom'){
+ self.calendarOpen($('.dr-date', this.element));
+ return;
+ }
self.start_date = self.calendarCheckDate(start);
self.end_date = self.calendarCheckDate(end);
@@ -215,6 +234,7 @@
this.orig_start_date = this.start_date;
this.orig_end_date = this.end_date;
this.orig_current_date = this.current_date;
+ this.orig_preset_label = this.preset_label;
this.presetIsOpen = true;
} else if (this.presetIsOpen) {
@@ -295,19 +315,32 @@
item.data('end', endISO);
item.html(string);
} else {
- ul_presets.append('
'+ d.label +
+ ul_presets.append(''+ d.label +
''+ string +''+
'');
}
});
-
+ ul_presets.append('Custom');
return ul_presets;
}
Calendar.prototype.calendarSetDates = function() {
+ // fill widgets with data
$('.dr-date-start', this.element).html(moment(this.start_date).format(this.format.input));
$('.dr-date-end', this.element).html(moment(this.end_date).format(this.format.input));
+ $('.dr-date-preset', this.element).html(this.preset_label);
+
+ // show one set (preset vs. custom days) and hide the other
+ if (this.sticky_presets) {
+ if (this.preset_label) {
+ $('.dr-date-start, .dr-dates-dash, .dr-date-end', this.element).hide();
+ $('.dr-date-preset', this.element).show();
+ } else {
+ $('.dr-date-start, .dr-dates-dash, .dr-date-end', this.element).show();
+ $('.dr-date-preset', this.element).hide();
+ }
+ }
if (!this.start_date && !this.end_date) {
var old_date = $('.dr-date', this.element).html();
@@ -324,7 +357,7 @@
Calendar.prototype.calendarSaveDates = function() {
if (this.type === 'double') {
- if (!moment(this.orig_end_date).isSame(this.end_date) || !moment(this.orig_start_date).isSame(this.start_date))
+ if (!moment(this.orig_end_date).isSame(this.end_date) || !moment(this.orig_start_date).isSame(this.start_date) || (this.sticky_presets && (this.orig_preset_label !== this.preset_label)))
return this.callback();
} else {
if (!this.required || !moment(this.orig_current_date).isSame(this.current_date))
@@ -371,6 +404,7 @@
Calendar.prototype.calendarCheckDates = function() {
var startTxt = $('.dr-date-start', this.element).html();
var endTxt = $('.dr-date-end', this.element).html();
+
var c = this.calendarCheckDate($(this.selected).html());
var s;
var e;
@@ -432,9 +466,13 @@
Calendar.prototype.calendarOpen = function(selected, switcher) {
var self = this;
var other;
- var cal_width = $('.dr-dates', this.element).innerWidth() - 8;
- this.selected = selected || this.selected;
+ if ($(selected).hasClass('dr-date-preset')) {
+ this.selected = $('.dr-date.dr-date-start', this.element).get(0);
+ this.preset_label = null;
+ } else {
+ this.selected = selected || this.selected;
+ }
if (this.presetIsOpen == true)
this.presetToggle();
@@ -445,6 +483,7 @@
this.orig_start_date = this.start_date;
this.orig_end_date = this.end_date;
this.orig_current_date = this.current_date;
+ this.orig_preset_label = this.preset_label;
}
this.calendarCheckDates();
@@ -584,11 +623,12 @@
});
}
+ var cal_width = $('.dr-dates', this.element).innerWidth() - 8;
$('.dr-calendar', this.element)
.css('width', cal_width)
.slideDown(200);
$('.dr-input', this.element).addClass('dr-active');
- $(selected).addClass('dr-active').focus();
+ $(this.selected).addClass('dr-active').focus();
this.element.addClass('dr-active');
this.calIsOpen = true;
@@ -690,6 +730,7 @@
''+ moment(this.start_date).format(this.format.input) +'
' +
'–' +
''+ moment(this.end_date).format(this.format.input) +'
' +
+ '' + '
' +
'' +
(this.presets ? '' +
@@ -781,6 +822,7 @@
if ($(cal.selected).hasClass('dr-date-start')) {
$('.dr-date-end', cal.element).trigger('click');
} else {
+ self.preset_label = null;
cal.calendarSaveDates();
cal.calendarClose('force');
}
diff --git a/dev/js/app.js b/dev/js/app.js
index 9d5f5d6..43fe07f 100644
--- a/dev/js/app.js
+++ b/dev/js/app.js
@@ -16,9 +16,10 @@ var dd = new Calendar({
end_date: moment(),
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});
@@ -31,9 +32,10 @@ new Calendar({
presets: false,
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});
@@ -58,8 +60,38 @@ new Calendar({
}],
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
+ }
+});
+
+new Calendar({
+ element: $('.four'),
+ sticky_presets: true,
+ earliest_date: '2000-01-01',
+ latest_date: moment(),
+ start_date: moment().subtract(29, 'days'),
+ end_date: moment(),
+ presets: [{
+ label: 'Last 30 days',
+ start: moment().subtract(29, 'days'),
+ end: moment()
+ },{
+ label: 'Last month',
+ start: moment().subtract(1, 'month').startOf('month'),
+ end: moment().subtract(1, 'month').endOf('month')
+ },{
+ label: 'Last year',
+ start: moment().subtract(1, 'year').startOf('year'),
+ end: moment().subtract(1, 'year').endOf('year')
+ }],
+ callback: function() {
+ var start = moment(this.start_date).format('ll'),
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
+
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});
diff --git a/public/index.html b/public/index.html
index 4eed98c..4b6e189 100644
--- a/public/index.html
+++ b/public/index.html
@@ -21,6 +21,8 @@
+
+
' +
(this.presets ? '' +
@@ -781,6 +822,7 @@
if ($(cal.selected).hasClass('dr-date-start')) {
$('.dr-date-end', cal.element).trigger('click');
} else {
+ self.preset_label = null;
cal.calendarSaveDates();
cal.calendarClose('force');
}
diff --git a/public/js/app.js b/public/js/app.js
index 9d5f5d6..43fe07f 100644
--- a/public/js/app.js
+++ b/public/js/app.js
@@ -16,9 +16,10 @@ var dd = new Calendar({
end_date: moment(),
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});
@@ -31,9 +32,10 @@ new Calendar({
presets: false,
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});
@@ -58,8 +60,38 @@ new Calendar({
}],
callback: function() {
var start = moment(this.start_date).format('ll'),
- end = moment(this.end_date).format('ll');
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
- console.debug('Start Date: '+ start +'\nEnd Date: '+ end);
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
+ }
+});
+
+new Calendar({
+ element: $('.four'),
+ sticky_presets: true,
+ earliest_date: '2000-01-01',
+ latest_date: moment(),
+ start_date: moment().subtract(29, 'days'),
+ end_date: moment(),
+ presets: [{
+ label: 'Last 30 days',
+ start: moment().subtract(29, 'days'),
+ end: moment()
+ },{
+ label: 'Last month',
+ start: moment().subtract(1, 'month').startOf('month'),
+ end: moment().subtract(1, 'month').endOf('month')
+ },{
+ label: 'Last year',
+ start: moment().subtract(1, 'year').startOf('year'),
+ end: moment().subtract(1, 'year').endOf('year')
+ }],
+ callback: function() {
+ var start = moment(this.start_date).format('ll'),
+ end = moment(this.end_date).format('ll'),
+ preset = this.preset_label;
+
+ console.debug('Start Date: ' + start + '\nEnd Date: ' + end + '\nPreset: ' + preset);
}
});