mirror of
https://github.com/frappe/air-datepicker.git
synced 2026-01-14 11:01:22 +08:00
begin timepicker
This commit is contained in:
parent
aec5745c70
commit
50f04cdb1b
85
dist/css/datepicker.css
vendored
85
dist/css/datepicker.css
vendored
@ -18,26 +18,6 @@
|
|||||||
background: none;
|
background: none;
|
||||||
border: none; }
|
border: none; }
|
||||||
|
|
||||||
.datepicker--cell-day.-other-month-, .datepicker--cell-year.-other-decade- {
|
|
||||||
color: #dedede; }
|
|
||||||
.datepicker--cell-day.-other-month-:hover, .datepicker--cell-year.-other-decade-:hover {
|
|
||||||
color: #c5c5c5; }
|
|
||||||
.-disabled-.-focus-.datepicker--cell-day.-other-month-, .-disabled-.-focus-.datepicker--cell-year.-other-decade- {
|
|
||||||
color: #dedede; }
|
|
||||||
.-selected-.datepicker--cell-day.-other-month-, .-selected-.datepicker--cell-year.-other-decade- {
|
|
||||||
color: #fff;
|
|
||||||
background: #a2ddf6; }
|
|
||||||
.-selected-.-focus-.datepicker--cell-day.-other-month-, .-selected-.-focus-.datepicker--cell-year.-other-decade- {
|
|
||||||
background: #8ad5f4; }
|
|
||||||
.-in-range-.datepicker--cell-day.-other-month-, .-in-range-.datepicker--cell-year.-other-decade- {
|
|
||||||
background-color: rgba(92, 196, 239, 0.1);
|
|
||||||
color: #cccccc; }
|
|
||||||
.-in-range-.-focus-.datepicker--cell-day.-other-month-, .-in-range-.-focus-.datepicker--cell-year.-other-decade- {
|
|
||||||
background-color: rgba(92, 196, 239, 0.2); }
|
|
||||||
.datepicker--cell-day.-other-month-:empty, .datepicker--cell-year.-other-decade-:empty {
|
|
||||||
background: none;
|
|
||||||
border: none; }
|
|
||||||
|
|
||||||
/* -------------------------------------------------
|
/* -------------------------------------------------
|
||||||
Datepicker cells
|
Datepicker cells
|
||||||
------------------------------------------------- */
|
------------------------------------------------- */
|
||||||
@ -387,3 +367,68 @@
|
|||||||
.datepicker--button:hover {
|
.datepicker--button:hover {
|
||||||
color: #4a4a4a;
|
color: #4a4a4a;
|
||||||
background: #f0f0f0; }
|
background: #f0f0f0; }
|
||||||
|
|
||||||
|
.datepicker--cell-day.-other-month-, .datepicker--cell-year.-other-decade- {
|
||||||
|
color: #dedede; }
|
||||||
|
.datepicker--cell-day.-other-month-:hover, .datepicker--cell-year.-other-decade-:hover {
|
||||||
|
color: #c5c5c5; }
|
||||||
|
.-disabled-.-focus-.datepicker--cell-day.-other-month-, .-disabled-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
color: #dedede; }
|
||||||
|
.-selected-.datepicker--cell-day.-other-month-, .-selected-.datepicker--cell-year.-other-decade- {
|
||||||
|
color: #fff;
|
||||||
|
background: #a2ddf6; }
|
||||||
|
.-selected-.-focus-.datepicker--cell-day.-other-month-, .-selected-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
background: #8ad5f4; }
|
||||||
|
.-in-range-.datepicker--cell-day.-other-month-, .-in-range-.datepicker--cell-year.-other-decade- {
|
||||||
|
background-color: rgba(92, 196, 239, 0.1);
|
||||||
|
color: #cccccc; }
|
||||||
|
.-in-range-.-focus-.datepicker--cell-day.-other-month-, .-in-range-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
background-color: rgba(92, 196, 239, 0.2); }
|
||||||
|
.datepicker--cell-day.-other-month-:empty, .datepicker--cell-year.-other-decade-:empty {
|
||||||
|
background: none;
|
||||||
|
border: none; }
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
Timepicker
|
||||||
|
------------------------------------------------- */
|
||||||
|
.datepicker--time {
|
||||||
|
padding: 4px; }
|
||||||
|
|
||||||
|
.datepicker--time-label {
|
||||||
|
display: block;
|
||||||
|
font-size: 12px; }
|
||||||
|
|
||||||
|
.datepicker--time-row {
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 11px; }
|
||||||
|
.datepicker--time-row input[type='range'] {
|
||||||
|
-webkit-flex: 1;
|
||||||
|
-ms-flex: 1;
|
||||||
|
flex: 1; }
|
||||||
|
.datepicker--time-row span {
|
||||||
|
padding: 0 12px; }
|
||||||
|
|
||||||
|
.datepicker--cell-day.-other-month-, .datepicker--cell-year.-other-decade- {
|
||||||
|
color: #dedede; }
|
||||||
|
.datepicker--cell-day.-other-month-:hover, .datepicker--cell-year.-other-decade-:hover {
|
||||||
|
color: #c5c5c5; }
|
||||||
|
.-disabled-.-focus-.datepicker--cell-day.-other-month-, .-disabled-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
color: #dedede; }
|
||||||
|
.-selected-.datepicker--cell-day.-other-month-, .-selected-.datepicker--cell-year.-other-decade- {
|
||||||
|
color: #fff;
|
||||||
|
background: #a2ddf6; }
|
||||||
|
.-selected-.-focus-.datepicker--cell-day.-other-month-, .-selected-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
background: #8ad5f4; }
|
||||||
|
.-in-range-.datepicker--cell-day.-other-month-, .-in-range-.datepicker--cell-year.-other-decade- {
|
||||||
|
background-color: rgba(92, 196, 239, 0.1);
|
||||||
|
color: #cccccc; }
|
||||||
|
.-in-range-.-focus-.datepicker--cell-day.-other-month-, .-in-range-.-focus-.datepicker--cell-year.-other-decade- {
|
||||||
|
background-color: rgba(92, 196, 239, 0.2); }
|
||||||
|
.datepicker--cell-day.-other-month-:empty, .datepicker--cell-year.-other-decade-:empty {
|
||||||
|
background: none;
|
||||||
|
border: none; }
|
||||||
|
|||||||
2
dist/css/datepicker.min.css
vendored
2
dist/css/datepicker.min.css
vendored
File diff suppressed because one or more lines are too long
109
dist/js/datepicker.js
vendored
109
dist/js/datepicker.js
vendored
@ -62,6 +62,10 @@ var Datepicker;
|
|||||||
years: 'yyyy1 - yyyy2'
|
years: 'yyyy1 - yyyy2'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// timepicker
|
||||||
|
timepicker: false,
|
||||||
|
timeFormat: 'hh:ii',
|
||||||
|
|
||||||
// events
|
// events
|
||||||
onSelect: '',
|
onSelect: '',
|
||||||
onChangeMonth: '',
|
onChangeMonth: '',
|
||||||
@ -160,6 +164,11 @@ var Datepicker;
|
|||||||
this.nav = new Datepicker.Navigation(this, this.opts);
|
this.nav = new Datepicker.Navigation(this, this.opts);
|
||||||
this.view = this.currentView;
|
this.view = this.currentView;
|
||||||
|
|
||||||
|
if (this.opts.timepicker) {
|
||||||
|
this.timepicker = new Datepicker.Timepicker(this, this.opts);
|
||||||
|
this._bindTimepickerEvents();
|
||||||
|
}
|
||||||
|
|
||||||
this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));
|
this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));
|
||||||
this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));
|
this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));
|
||||||
|
|
||||||
@ -184,6 +193,10 @@ var Datepicker;
|
|||||||
this.$el.on('hotKey.adp', this._onHotKey.bind(this));
|
this.$el.on('hotKey.adp', this._onHotKey.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_bindTimepickerEvents: function () {
|
||||||
|
this.$el.on('timeChange.adp', this._onTimeChange.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
isWeekend: function (day) {
|
isWeekend: function (day) {
|
||||||
return this.opts.weekends.indexOf(day) !== -1;
|
return this.opts.weekends.indexOf(day) !== -1;
|
||||||
},
|
},
|
||||||
@ -325,6 +338,14 @@ var Datepicker;
|
|||||||
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
|
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
|
||||||
case /M/.test(result):
|
case /M/.test(result):
|
||||||
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
|
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
|
||||||
|
case /ii/.test(result):
|
||||||
|
result = result.replace(/\bii\b/, d.fullMinutes);
|
||||||
|
case /i/.test(result):
|
||||||
|
result = result.replace(/\bi(?!>)\b/, d.minutes);
|
||||||
|
case /hh/.test(result):
|
||||||
|
result = result.replace(/\bhh\b/, d.fullHours);
|
||||||
|
case /h/.test(result):
|
||||||
|
result = result.replace(/\bh\b/, d.hours);
|
||||||
case /yyyy/.test(result):
|
case /yyyy/.test(result):
|
||||||
result = result.replace(/\byyyy\b/, d.year);
|
result = result.replace(/\byyyy\b/, d.year);
|
||||||
case /yyyy1/.test(result):
|
case /yyyy1/.test(result):
|
||||||
@ -348,6 +369,11 @@ var Datepicker;
|
|||||||
|
|
||||||
if (!(date instanceof Date)) return;
|
if (!(date instanceof Date)) return;
|
||||||
|
|
||||||
|
if (this.timepicker) {
|
||||||
|
date.setHours(this.timepicker.hours);
|
||||||
|
date.setMinutes(this.timepicker.minutes);
|
||||||
|
}
|
||||||
|
|
||||||
if (_this.view == 'days') {
|
if (_this.view == 'days') {
|
||||||
if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {
|
if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {
|
||||||
newDate = new Date(date.getFullYear(), date.getMonth(), 1);
|
newDate = new Date(date.getFullYear(), date.getMonth(), 1);
|
||||||
@ -1021,6 +1047,19 @@ var Datepicker;
|
|||||||
this.silent = false;
|
this.silent = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onTimeChange: function (e, h, m) {
|
||||||
|
var date = new Date();
|
||||||
|
|
||||||
|
if (this.selectedDates.length) {
|
||||||
|
date = this.selectedDates[this.selectedDates.length - 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
date.setHours(h);
|
||||||
|
date.setMinutes(m);
|
||||||
|
|
||||||
|
this.selectDate(date);
|
||||||
|
},
|
||||||
|
|
||||||
set focused(val) {
|
set focused(val) {
|
||||||
if (!val && this.focused) {
|
if (!val && this.focused) {
|
||||||
var $cell = this._getCell(this.focused);
|
var $cell = this._getCell(this.focused);
|
||||||
@ -1136,7 +1175,11 @@ var Datepicker;
|
|||||||
fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based
|
fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based
|
||||||
date: date.getDate(),
|
date: date.getDate(),
|
||||||
fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
|
fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
|
||||||
day: date.getDay()
|
day: date.getDay(),
|
||||||
|
hours: date.getHours(),
|
||||||
|
fullHours: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() ,
|
||||||
|
minutes: date.getMinutes(),
|
||||||
|
fullMinutes: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1661,3 +1704,67 @@ var Datepicker;
|
|||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
(function (window, $, datepicker) {
|
||||||
|
var template = '<div class="datepicker--time">' +
|
||||||
|
' <label class="datepicker--time-label">#{hourLabel}</label>' +
|
||||||
|
'<div class="datepicker--time-row">' +
|
||||||
|
' <input type="range" name="hours" value="#{hourValue}" min="#{hourMin}" max="#{hourMax}" step="#{hourStep}"/>' +
|
||||||
|
'</div>' +
|
||||||
|
' <label class="datepicker--time-label">#{minLabel}</label>' +
|
||||||
|
'<div class="datepicker--time-row">' +
|
||||||
|
' <input type="range" name="minutes" value="#{minValue}" min="#{minMin}" max="#{minMax}" step="#{minStep}"/>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
|
datepicker.Timepicker = function (inst, opts) {
|
||||||
|
this.d = inst;
|
||||||
|
this.opts = opts;
|
||||||
|
|
||||||
|
var date = this.d.parsedDate;
|
||||||
|
this.minutes = date.minutes;
|
||||||
|
this.hours = date.hours;
|
||||||
|
|
||||||
|
this.init();
|
||||||
|
};
|
||||||
|
|
||||||
|
datepicker.Timepicker.prototype = {
|
||||||
|
init: function () {
|
||||||
|
this._buildHTML();
|
||||||
|
|
||||||
|
this.$ranges.on('input', this._onChangeRange.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
_buildHTML: function () {
|
||||||
|
var date = this.d.parsedDate,
|
||||||
|
data = {
|
||||||
|
hourMin: '00',
|
||||||
|
hourMax: '23',
|
||||||
|
hourStep: '1',
|
||||||
|
hourValue: date.hours,
|
||||||
|
hourLabel: 'Часы',
|
||||||
|
minMin: '00',
|
||||||
|
minMax: '59',
|
||||||
|
minStep: '1',
|
||||||
|
minValue: date.minutes,
|
||||||
|
minLabel: 'Минуты'
|
||||||
|
},
|
||||||
|
_template = datepicker.template(template, data);
|
||||||
|
|
||||||
|
this.$timepicker = $(_template).appendTo(this.d.$datepicker);
|
||||||
|
this.$ranges = $('[type="range"]', this.$timepicker);
|
||||||
|
},
|
||||||
|
|
||||||
|
_render: function () {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_onChangeRange: function (e) {
|
||||||
|
var $target = $(e.target),
|
||||||
|
value = $target.val(),
|
||||||
|
name = $target.attr('name');
|
||||||
|
|
||||||
|
this[name] = value;
|
||||||
|
this.d._trigger('timeChange', [this.hours, this.minutes])
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(window, jQuery, Datepicker);
|
||||||
|
|||||||
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
@ -62,6 +62,10 @@ var Datepicker;
|
|||||||
years: 'yyyy1 - yyyy2'
|
years: 'yyyy1 - yyyy2'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// timepicker
|
||||||
|
timepicker: false,
|
||||||
|
timeFormat: 'hh:ii',
|
||||||
|
|
||||||
// events
|
// events
|
||||||
onSelect: '',
|
onSelect: '',
|
||||||
onChangeMonth: '',
|
onChangeMonth: '',
|
||||||
@ -160,6 +164,11 @@ var Datepicker;
|
|||||||
this.nav = new Datepicker.Navigation(this, this.opts);
|
this.nav = new Datepicker.Navigation(this, this.opts);
|
||||||
this.view = this.currentView;
|
this.view = this.currentView;
|
||||||
|
|
||||||
|
if (this.opts.timepicker) {
|
||||||
|
this.timepicker = new Datepicker.Timepicker(this, this.opts);
|
||||||
|
this._bindTimepickerEvents();
|
||||||
|
}
|
||||||
|
|
||||||
this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));
|
this.$datepicker.on('mouseenter', '.datepicker--cell', this._onMouseEnterCell.bind(this));
|
||||||
this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));
|
this.$datepicker.on('mouseleave', '.datepicker--cell', this._onMouseLeaveCell.bind(this));
|
||||||
|
|
||||||
@ -184,6 +193,10 @@ var Datepicker;
|
|||||||
this.$el.on('hotKey.adp', this._onHotKey.bind(this));
|
this.$el.on('hotKey.adp', this._onHotKey.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_bindTimepickerEvents: function () {
|
||||||
|
this.$el.on('timeChange.adp', this._onTimeChange.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
isWeekend: function (day) {
|
isWeekend: function (day) {
|
||||||
return this.opts.weekends.indexOf(day) !== -1;
|
return this.opts.weekends.indexOf(day) !== -1;
|
||||||
},
|
},
|
||||||
@ -325,6 +338,14 @@ var Datepicker;
|
|||||||
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
|
result = result.replace(/\bMM\b/, this.loc.months[d.month]);
|
||||||
case /M/.test(result):
|
case /M/.test(result):
|
||||||
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
|
result = result.replace(/\bM\b/, locale.monthsShort[d.month]);
|
||||||
|
case /ii/.test(result):
|
||||||
|
result = result.replace(/\bii\b/, d.fullMinutes);
|
||||||
|
case /i/.test(result):
|
||||||
|
result = result.replace(/\bi(?!>)\b/, d.minutes);
|
||||||
|
case /hh/.test(result):
|
||||||
|
result = result.replace(/\bhh\b/, d.fullHours);
|
||||||
|
case /h/.test(result):
|
||||||
|
result = result.replace(/\bh\b/, d.hours);
|
||||||
case /yyyy/.test(result):
|
case /yyyy/.test(result):
|
||||||
result = result.replace(/\byyyy\b/, d.year);
|
result = result.replace(/\byyyy\b/, d.year);
|
||||||
case /yyyy1/.test(result):
|
case /yyyy1/.test(result):
|
||||||
@ -348,6 +369,11 @@ var Datepicker;
|
|||||||
|
|
||||||
if (!(date instanceof Date)) return;
|
if (!(date instanceof Date)) return;
|
||||||
|
|
||||||
|
if (this.timepicker) {
|
||||||
|
date.setHours(this.timepicker.hours);
|
||||||
|
date.setMinutes(this.timepicker.minutes);
|
||||||
|
}
|
||||||
|
|
||||||
if (_this.view == 'days') {
|
if (_this.view == 'days') {
|
||||||
if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {
|
if (date.getMonth() != d.month && opts.moveToOtherMonthsOnSelect) {
|
||||||
newDate = new Date(date.getFullYear(), date.getMonth(), 1);
|
newDate = new Date(date.getFullYear(), date.getMonth(), 1);
|
||||||
@ -1021,6 +1047,19 @@ var Datepicker;
|
|||||||
this.silent = false;
|
this.silent = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onTimeChange: function (e, h, m) {
|
||||||
|
var date = new Date();
|
||||||
|
|
||||||
|
if (this.selectedDates.length) {
|
||||||
|
date = this.selectedDates[this.selectedDates.length - 1]
|
||||||
|
}
|
||||||
|
|
||||||
|
date.setHours(h);
|
||||||
|
date.setMinutes(m);
|
||||||
|
|
||||||
|
this.selectDate(date);
|
||||||
|
},
|
||||||
|
|
||||||
set focused(val) {
|
set focused(val) {
|
||||||
if (!val && this.focused) {
|
if (!val && this.focused) {
|
||||||
var $cell = this._getCell(this.focused);
|
var $cell = this._getCell(this.focused);
|
||||||
@ -1136,7 +1175,11 @@ var Datepicker;
|
|||||||
fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based
|
fullMonth: (date.getMonth() + 1) < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1, // One based
|
||||||
date: date.getDate(),
|
date: date.getDate(),
|
||||||
fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
|
fullDate: date.getDate() < 10 ? '0' + date.getDate() : date.getDate(),
|
||||||
day: date.getDay()
|
day: date.getDay(),
|
||||||
|
hours: date.getHours(),
|
||||||
|
fullHours: date.getHours() < 10 ? '0' + date.getHours() : date.getHours() ,
|
||||||
|
minutes: date.getMinutes(),
|
||||||
|
fullMinutes: date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
63
src/js/timepicker.js
Normal file
63
src/js/timepicker.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
(function (window, $, datepicker) {
|
||||||
|
var template = '<div class="datepicker--time">' +
|
||||||
|
' <label class="datepicker--time-label">#{hourLabel}</label>' +
|
||||||
|
'<div class="datepicker--time-row">' +
|
||||||
|
' <input type="range" name="hours" value="#{hourValue}" min="#{hourMin}" max="#{hourMax}" step="#{hourStep}"/>' +
|
||||||
|
'</div>' +
|
||||||
|
' <label class="datepicker--time-label">#{minLabel}</label>' +
|
||||||
|
'<div class="datepicker--time-row">' +
|
||||||
|
' <input type="range" name="minutes" value="#{minValue}" min="#{minMin}" max="#{minMax}" step="#{minStep}"/>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
|
datepicker.Timepicker = function (inst, opts) {
|
||||||
|
this.d = inst;
|
||||||
|
this.opts = opts;
|
||||||
|
|
||||||
|
var date = this.d.parsedDate;
|
||||||
|
this.minutes = date.minutes;
|
||||||
|
this.hours = date.hours;
|
||||||
|
|
||||||
|
this.init();
|
||||||
|
};
|
||||||
|
|
||||||
|
datepicker.Timepicker.prototype = {
|
||||||
|
init: function () {
|
||||||
|
this._buildHTML();
|
||||||
|
|
||||||
|
this.$ranges.on('input', this._onChangeRange.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
|
_buildHTML: function () {
|
||||||
|
var date = this.d.parsedDate,
|
||||||
|
data = {
|
||||||
|
hourMin: '00',
|
||||||
|
hourMax: '23',
|
||||||
|
hourStep: '1',
|
||||||
|
hourValue: date.hours,
|
||||||
|
hourLabel: 'Часы',
|
||||||
|
minMin: '00',
|
||||||
|
minMax: '59',
|
||||||
|
minStep: '1',
|
||||||
|
minValue: date.minutes,
|
||||||
|
minLabel: 'Минуты'
|
||||||
|
},
|
||||||
|
_template = datepicker.template(template, data);
|
||||||
|
|
||||||
|
this.$timepicker = $(_template).appendTo(this.d.$datepicker);
|
||||||
|
this.$ranges = $('[type="range"]', this.$timepicker);
|
||||||
|
},
|
||||||
|
|
||||||
|
_render: function () {
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_onChangeRange: function (e) {
|
||||||
|
var $target = $(e.target),
|
||||||
|
value = $target.val(),
|
||||||
|
name = $target.attr('name');
|
||||||
|
|
||||||
|
this[name] = value;
|
||||||
|
this.d._trigger('timeChange', [this.hours, this.minutes])
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})(window, jQuery, Datepicker);
|
||||||
28
src/sass/timepicker.scss
Normal file
28
src/sass/timepicker.scss
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
@import "datepicker-config";
|
||||||
|
|
||||||
|
/* -------------------------------------------------
|
||||||
|
Timepicker
|
||||||
|
------------------------------------------------- */
|
||||||
|
|
||||||
|
.datepicker--time {
|
||||||
|
padding: $datepickerPadding;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datepicker--time-label {
|
||||||
|
display: block;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.datepicker--time-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 11px;
|
||||||
|
|
||||||
|
input[type='range'] {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -9,7 +9,8 @@ module.exports = function () {
|
|||||||
var stream = gulp.src([
|
var stream = gulp.src([
|
||||||
'src/js/datepicker.js',
|
'src/js/datepicker.js',
|
||||||
'src/js/body.js',
|
'src/js/body.js',
|
||||||
'src/js/navigation.js'
|
'src/js/navigation.js',
|
||||||
|
'src/js/timepicker.js'
|
||||||
])
|
])
|
||||||
.pipe(concat('datepicker.js'));
|
.pipe(concat('datepicker.js'));
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user