mirror of
https://github.com/frappe/air-datepicker.git
synced 2026-01-14 11:01:22 +08:00
add handling min/max date
This commit is contained in:
parent
895e621397
commit
dffa4429a7
94
dist/js/datepicker.js
vendored
94
dist/js/datepicker.js
vendored
@ -381,6 +381,9 @@ var Datepicker;
|
||||
|
||||
if (!(date instanceof Date)) return;
|
||||
|
||||
_this._trigger('selectDate', date);
|
||||
|
||||
//TODO стоит убрать в timepicker.js
|
||||
if (this.timepicker) {
|
||||
date.setHours(this.timepicker.hours);
|
||||
date.setMinutes(this.timepicker.minutes);
|
||||
@ -1779,26 +1782,61 @@ var Datepicker;
|
||||
datepicker.Timepicker.prototype = {
|
||||
init: function () {
|
||||
var input = 'input';
|
||||
this._setValidTimes(this.d.date);
|
||||
this._setInitialTime(this.d.date);
|
||||
this._buildHTML();
|
||||
|
||||
if (navigator.userAgent.match(/trident/gi)) {
|
||||
input = 'change';
|
||||
}
|
||||
|
||||
this.d.$el.on('selectDate', this._onSelectDate.bind(this));
|
||||
this.$ranges.on(input, this._onChangeRange.bind(this));
|
||||
},
|
||||
|
||||
_setValidTimes: function (date) {
|
||||
var _date = datepicker.getParsedDate(date),
|
||||
maxHours = 23;
|
||||
_setInitialTime: function (date, parse) {
|
||||
var _date = datepicker.getParsedDate(date);
|
||||
|
||||
this._handleDate(date);
|
||||
this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;
|
||||
this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;
|
||||
},
|
||||
|
||||
_setMinTimeFromDate: function (date) {
|
||||
this.minHours = date.getHours();
|
||||
this.minMinutes = date.getMinutes();
|
||||
},
|
||||
|
||||
_setMaxTimeFromDate: function (date) {
|
||||
this.maxHours = date.getHours();
|
||||
this.maxMinutes = date.getMinutes();
|
||||
},
|
||||
|
||||
_setDefaultMinMaxTime: function () {
|
||||
var maxHours = 23;
|
||||
|
||||
this.minHours = this.opts.minHours;
|
||||
this.minMinutes = this.opts.minMinutes;
|
||||
this.maxHours = this.opts.maxHours > maxHours ? maxHours : this.opts.maxHours;
|
||||
this.maxMinutes = this.opts.maxMinutes > 59 ? 59 : this.opts.maxMinutes;
|
||||
this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;
|
||||
this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;
|
||||
},
|
||||
|
||||
/**
|
||||
* Looks for min/max hours/minutes and if current values
|
||||
* are out of range sets valid values.
|
||||
* @private
|
||||
*/
|
||||
_validateHoursMinutes: function () {
|
||||
if (this.hours < this.minHours) {
|
||||
this.hours = this.minHours;
|
||||
} else if (this.hours > this.maxHours) {
|
||||
this.hours = this.maxHours;
|
||||
}
|
||||
|
||||
if (this.minutes < this.minMinutes) {
|
||||
this.minutes = this.minMinutes;
|
||||
} else if (this.minutes > this.maxMinutes) {
|
||||
this.minutes = this.maxMinutes;
|
||||
}
|
||||
},
|
||||
|
||||
_buildHTML: function () {
|
||||
@ -1817,7 +1855,8 @@ var Datepicker;
|
||||
|
||||
this.$timepicker = $(_template).appendTo(this.d.$datepicker);
|
||||
this.$ranges = $('[type="range"]', this.$timepicker);
|
||||
this.$currentInputs = $('input[type="text"]', this.$timepicker);
|
||||
this.$hours = $('[name="hours"]', this.$timepicker);
|
||||
this.$minutes = $('[name="minutes"]', this.$timepicker);
|
||||
this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);
|
||||
this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);
|
||||
},
|
||||
@ -1826,26 +1865,57 @@ var Datepicker;
|
||||
|
||||
},
|
||||
|
||||
_updateTime: function () {
|
||||
var h = this.hours < 10 ? '0'+this.hours : this.hours,
|
||||
_updateCurrentTime: function () {
|
||||
var h = this.hours < 10 ? '0' + this.hours : this.hours,
|
||||
m = this.minutes < 10 ? '0' + this.minutes : this.minutes;
|
||||
|
||||
this.$hoursText.html(h);
|
||||
this.$minutesText.html(m)
|
||||
},
|
||||
|
||||
_updateRanges: function () {
|
||||
this.$hours.attr({
|
||||
min: this.minHours,
|
||||
max: this.maxHours,
|
||||
value: this.hours
|
||||
}).change();
|
||||
|
||||
this.$minutes.attr({
|
||||
min: this.minMinutes,
|
||||
max: this.maxMinutes,
|
||||
value: this.minutes
|
||||
}).change();
|
||||
},
|
||||
|
||||
_handleDate: function (date) {
|
||||
if (datepicker.isSame(date, this.d.opts.minDate)) {
|
||||
this._setMinTimeFromDate(this.d.opts.minDate);
|
||||
} else if (datepicker.isSame(date, this.d.opts.maxDate)) {
|
||||
this._setMaxTimeFromDate(this.d.opts.maxDate);
|
||||
} else {
|
||||
this._setDefaultMinMaxTime();
|
||||
}
|
||||
|
||||
this._validateHoursMinutes();
|
||||
},
|
||||
|
||||
|
||||
// Events
|
||||
// -------------------------------------------------
|
||||
|
||||
_onChangeRange: function (e) {
|
||||
var $target = $(e.target),
|
||||
value = $target.val(),
|
||||
name = $target.attr('name');
|
||||
|
||||
this[name] = value;
|
||||
this._updateTime();
|
||||
this[name] = $target.val();
|
||||
this._updateCurrentTime();
|
||||
this.d._trigger('timeChange', [this.hours, this.minutes])
|
||||
},
|
||||
|
||||
_onSelectDate: function (e, data) {
|
||||
this._handleDate(data);
|
||||
this._updateRanges();
|
||||
this._updateCurrentTime();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
2
dist/js/datepicker.min.js
vendored
2
dist/js/datepicker.min.js
vendored
File diff suppressed because one or more lines are too long
@ -381,6 +381,9 @@ var Datepicker;
|
||||
|
||||
if (!(date instanceof Date)) return;
|
||||
|
||||
_this._trigger('selectDate', date);
|
||||
|
||||
//TODO стоит убрать в timepicker.js
|
||||
if (this.timepicker) {
|
||||
date.setHours(this.timepicker.hours);
|
||||
date.setMinutes(this.timepicker.minutes);
|
||||
|
||||
@ -34,26 +34,61 @@
|
||||
datepicker.Timepicker.prototype = {
|
||||
init: function () {
|
||||
var input = 'input';
|
||||
this._setValidTimes(this.d.date);
|
||||
this._setInitialTime(this.d.date);
|
||||
this._buildHTML();
|
||||
|
||||
if (navigator.userAgent.match(/trident/gi)) {
|
||||
input = 'change';
|
||||
}
|
||||
|
||||
this.d.$el.on('selectDate', this._onSelectDate.bind(this));
|
||||
this.$ranges.on(input, this._onChangeRange.bind(this));
|
||||
},
|
||||
|
||||
_setValidTimes: function (date) {
|
||||
var _date = datepicker.getParsedDate(date),
|
||||
maxHours = 23;
|
||||
_setInitialTime: function (date, parse) {
|
||||
var _date = datepicker.getParsedDate(date);
|
||||
|
||||
this._handleDate(date);
|
||||
this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;
|
||||
this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;
|
||||
},
|
||||
|
||||
_setMinTimeFromDate: function (date) {
|
||||
this.minHours = date.getHours();
|
||||
this.minMinutes = date.getMinutes();
|
||||
},
|
||||
|
||||
_setMaxTimeFromDate: function (date) {
|
||||
this.maxHours = date.getHours();
|
||||
this.maxMinutes = date.getMinutes();
|
||||
},
|
||||
|
||||
_setDefaultMinMaxTime: function () {
|
||||
var maxHours = 23;
|
||||
|
||||
this.minHours = this.opts.minHours;
|
||||
this.minMinutes = this.opts.minMinutes;
|
||||
this.maxHours = this.opts.maxHours > maxHours ? maxHours : this.opts.maxHours;
|
||||
this.maxMinutes = this.opts.maxMinutes > 59 ? 59 : this.opts.maxMinutes;
|
||||
this.hours = _date.hours < this.minHours ? this.minHours : _date.hours;
|
||||
this.minutes = _date.minutes < this.minMinutes ? this.minMinutes : _date.minutes;
|
||||
},
|
||||
|
||||
/**
|
||||
* Looks for min/max hours/minutes and if current values
|
||||
* are out of range sets valid values.
|
||||
* @private
|
||||
*/
|
||||
_validateHoursMinutes: function () {
|
||||
if (this.hours < this.minHours) {
|
||||
this.hours = this.minHours;
|
||||
} else if (this.hours > this.maxHours) {
|
||||
this.hours = this.maxHours;
|
||||
}
|
||||
|
||||
if (this.minutes < this.minMinutes) {
|
||||
this.minutes = this.minMinutes;
|
||||
} else if (this.minutes > this.maxMinutes) {
|
||||
this.minutes = this.maxMinutes;
|
||||
}
|
||||
},
|
||||
|
||||
_buildHTML: function () {
|
||||
@ -72,7 +107,8 @@
|
||||
|
||||
this.$timepicker = $(_template).appendTo(this.d.$datepicker);
|
||||
this.$ranges = $('[type="range"]', this.$timepicker);
|
||||
this.$currentInputs = $('input[type="text"]', this.$timepicker);
|
||||
this.$hours = $('[name="hours"]', this.$timepicker);
|
||||
this.$minutes = $('[name="minutes"]', this.$timepicker);
|
||||
this.$hoursText = $('.datepicker--time-current-hours', this.$timepicker);
|
||||
this.$minutesText = $('.datepicker--time-current-minutes', this.$timepicker);
|
||||
},
|
||||
@ -81,26 +117,57 @@
|
||||
|
||||
},
|
||||
|
||||
_updateTime: function () {
|
||||
var h = this.hours < 10 ? '0'+this.hours : this.hours,
|
||||
_updateCurrentTime: function () {
|
||||
var h = this.hours < 10 ? '0' + this.hours : this.hours,
|
||||
m = this.minutes < 10 ? '0' + this.minutes : this.minutes;
|
||||
|
||||
this.$hoursText.html(h);
|
||||
this.$minutesText.html(m)
|
||||
},
|
||||
|
||||
_updateRanges: function () {
|
||||
this.$hours.attr({
|
||||
min: this.minHours,
|
||||
max: this.maxHours,
|
||||
value: this.hours
|
||||
}).change();
|
||||
|
||||
this.$minutes.attr({
|
||||
min: this.minMinutes,
|
||||
max: this.maxMinutes,
|
||||
value: this.minutes
|
||||
}).change();
|
||||
},
|
||||
|
||||
_handleDate: function (date) {
|
||||
if (datepicker.isSame(date, this.d.opts.minDate)) {
|
||||
this._setMinTimeFromDate(this.d.opts.minDate);
|
||||
} else if (datepicker.isSame(date, this.d.opts.maxDate)) {
|
||||
this._setMaxTimeFromDate(this.d.opts.maxDate);
|
||||
} else {
|
||||
this._setDefaultMinMaxTime();
|
||||
}
|
||||
|
||||
this._validateHoursMinutes();
|
||||
},
|
||||
|
||||
|
||||
// Events
|
||||
// -------------------------------------------------
|
||||
|
||||
_onChangeRange: function (e) {
|
||||
var $target = $(e.target),
|
||||
value = $target.val(),
|
||||
name = $target.attr('name');
|
||||
|
||||
this[name] = value;
|
||||
this._updateTime();
|
||||
this[name] = $target.val();
|
||||
this._updateCurrentTime();
|
||||
this.d._trigger('timeChange', [this.hours, this.minutes])
|
||||
},
|
||||
|
||||
_onSelectDate: function (e, data) {
|
||||
this._handleDate(data);
|
||||
this._updateRanges();
|
||||
this._updateCurrentTime();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user