update datetimepicker and correct its position on change viewMode
This commit is contained in:
parent
d28fe2a5f4
commit
69ddc142bb
src/inputs/datetime
@ -32,7 +32,7 @@
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
.datetimepicker-dropdown:before {
|
||||
[class*=" datetimepicker-dropdown"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
@ -40,40 +40,64 @@
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datetimepicker-dropdown:after {
|
||||
[class*=" datetimepicker-dropdown"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datetimepicker-dropdown-left:before {
|
||||
[class*=" datetimepicker-dropdown-top"]:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #ccc;
|
||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
||||
position: absolute;
|
||||
border-top: 7px solid #ccc;
|
||||
border-top-color: rgba(0, 0, 0, 0.2);
|
||||
border-bottom: 0;
|
||||
}
|
||||
[class*=" datetimepicker-dropdown-top"]:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-top: 6px solid #ffffff;
|
||||
border-bottom: 0;
|
||||
}
|
||||
.datetimepicker-dropdown-bottom-right:before {
|
||||
top: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
.datetimepicker-dropdown-left:after {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
border-left: 6px solid transparent;
|
||||
border-right: 6px solid transparent;
|
||||
border-bottom: 6px solid #ffffff;
|
||||
position: absolute;
|
||||
.datetimepicker-dropdown-bottom-right:after {
|
||||
top: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
.datetimepicker-dropdown-bottom-left:before {
|
||||
top: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datetimepicker-dropdown-bottom-left:after {
|
||||
top: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datetimepicker-dropdown-top-right:before {
|
||||
bottom: -7px;
|
||||
right: 6px;
|
||||
}
|
||||
.datetimepicker-dropdown-top-right:after {
|
||||
bottom: -6px;
|
||||
right: 7px;
|
||||
}
|
||||
.datetimepicker-dropdown-top-left:before {
|
||||
bottom: -7px;
|
||||
left: 6px;
|
||||
}
|
||||
.datetimepicker-dropdown-top-left:after {
|
||||
bottom: -6px;
|
||||
left: 7px;
|
||||
}
|
||||
.datetimepicker > div {
|
||||
display: none;
|
||||
}
|
||||
|
@ -53,10 +53,17 @@
|
||||
this.linkFormat = DPGlobal.parseFormat(options.linkFormat || this.element.data('link-format') || DPGlobal.getDefaultFormat(this.formatType, 'link'), this.formatType);
|
||||
this.minuteStep = options.minuteStep || this.element.data('minute-step') || 5;
|
||||
this.pickerPosition = options.pickerPosition || this.element.data('picker-position') || 'bottom-right';
|
||||
this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;
|
||||
this.initialDate = options.initialDate || new Date();
|
||||
this.showMeridian = options.showMeridian || this.element.data('show-meridian') || false;
|
||||
this.initialDate = options.initialDate || new Date();
|
||||
|
||||
this._attachEvents();
|
||||
|
||||
this.formatViewType = "datetime";
|
||||
if ('formatViewType' in options) {
|
||||
this.formatViewType = options.formatViewType;
|
||||
} else if ('formatViewType' in this.element.data()) {
|
||||
this.formatViewType = this.element.data('formatViewType');
|
||||
}
|
||||
|
||||
this.minView = 0;
|
||||
if ('minView' in options) {
|
||||
@ -83,13 +90,13 @@
|
||||
this.startViewMode = DPGlobal.convertViewMode(this.startViewMode);
|
||||
this.viewMode = this.startViewMode;
|
||||
|
||||
this.viewSelect = this.minView;
|
||||
if ('viewSelect' in options) {
|
||||
this.viewSelect = options.viewSelect;
|
||||
} else if ('viewSelect' in this.element.data()) {
|
||||
this.viewSelect = this.element.data('view-select');
|
||||
}
|
||||
this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);
|
||||
this.viewSelect = this.minView;
|
||||
if ('viewSelect' in options) {
|
||||
this.viewSelect = options.viewSelect;
|
||||
} else if ('viewSelect' in this.element.data()) {
|
||||
this.viewSelect = this.element.data('view-select');
|
||||
}
|
||||
this.viewSelect = DPGlobal.convertViewMode(this.viewSelect);
|
||||
|
||||
this.forceParse = true;
|
||||
if ('forceParse' in options) {
|
||||
@ -108,11 +115,7 @@
|
||||
if (this.isInline) {
|
||||
this.picker.addClass('datetimepicker-inline');
|
||||
} else {
|
||||
if (this.component && this.pickerPosition == 'bottom-left') {
|
||||
this.picker.addClass('datetimepicker-dropdown-left dropdown-menu');
|
||||
} else {
|
||||
this.picker.addClass('datetimepicker-dropdown dropdown-menu');
|
||||
}
|
||||
this.picker.addClass('datetimepicker-dropdown-' + this.pickerPosition + ' dropdown-menu');
|
||||
}
|
||||
if (this.isRTL){
|
||||
this.picker.addClass('datetimepicker-rtl');
|
||||
@ -301,15 +304,28 @@
|
||||
}
|
||||
},
|
||||
|
||||
setFormat: function(format) {
|
||||
this.format = DPGlobal.parseFormat(format, this.formatType);
|
||||
var element;
|
||||
if (this.isInput) {
|
||||
element = this.element;
|
||||
} else if (this.component){
|
||||
element = this.element.find('input');
|
||||
}
|
||||
if (element && element.val()) {
|
||||
this.setValue();
|
||||
}
|
||||
},
|
||||
|
||||
setValue: function() {
|
||||
var formatted = this.getFormattedDate();
|
||||
if (!this.isInput) {
|
||||
if (this.component){
|
||||
this.element.find('input').prop('value', formatted);
|
||||
this.element.find('input').val(formatted);
|
||||
}
|
||||
this.element.data('date', formatted);
|
||||
} else {
|
||||
this.element.prop('value', formatted);
|
||||
this.element.val(formatted);
|
||||
}
|
||||
if (this.linkField) {
|
||||
$('#' + this.linkField).val(this.getFormattedDate(this.linkFormat));
|
||||
@ -354,21 +370,26 @@
|
||||
place: function(){
|
||||
if(this.isInline) return;
|
||||
var zIndex = parseInt(this.element.parents().filter(function() {
|
||||
return $(this).css('z-index') != 'auto';
|
||||
}).first().css('z-index'))+10;
|
||||
var offset, left;
|
||||
return $(this).css('z-index') != 'auto';
|
||||
}).first().css('z-index'))+10;
|
||||
var offset, top, left;
|
||||
if (this.component) {
|
||||
offset = this.component.offset();
|
||||
left = offset.left;
|
||||
if (this.pickerPosition == 'bottom-left') {
|
||||
if (this.pickerPosition == 'bottom-left' || this.pickerPosition == 'top-left') {
|
||||
left += this.component.outerWidth() - this.picker.outerWidth();
|
||||
}
|
||||
} else {
|
||||
offset = this.element.offset();
|
||||
left = offset.left;
|
||||
}
|
||||
if (this.pickerPosition == 'top-left' || this.pickerPosition == 'top-right') {
|
||||
top = offset.top - this.picker.outerHeight();
|
||||
} else {
|
||||
top = offset.top + this.height;
|
||||
}
|
||||
this.picker.css({
|
||||
top: offset.top + this.height,
|
||||
top: top,
|
||||
left: left,
|
||||
zIndex: zIndex
|
||||
});
|
||||
@ -380,7 +401,7 @@
|
||||
date = arguments[0];
|
||||
fromArgs = true;
|
||||
} else {
|
||||
date = this.isInput ? this.element.prop('value') : this.element.data('date') || this.element.find('input').prop('value') || this.initialDate;
|
||||
date = this.element.data('date') || (this.isInput ? this.element.val() : this.element.find('input').val()) || this.initialDate;
|
||||
}
|
||||
|
||||
if (!date) {
|
||||
@ -439,11 +460,22 @@
|
||||
today = new Date();
|
||||
this.picker.find('.datetimepicker-days thead th:eq(1)')
|
||||
.text(dates[this.language].months[month]+' '+year);
|
||||
this.picker.find('.datetimepicker-hours thead th:eq(1)')
|
||||
.text(dayMonth+' '+dates[this.language].months[month]+' '+year);
|
||||
this.picker.find('.datetimepicker-minutes thead th:eq(1)')
|
||||
.text(dayMonth+' '+dates[this.language].months[month]+' '+year);
|
||||
this.picker.find('tfoot th.today')
|
||||
if (this.formatViewType == "time") {
|
||||
var hourConverted = hours % 12 ? hours % 12 : 12;
|
||||
var hoursDisplay = (hourConverted < 10 ? '0' : '') + hourConverted;
|
||||
var minutesDisplay = (minutes < 10 ? '0' : '') + minutes;
|
||||
var meridianDisplay = dates[this.language].meridiem[hours < 12 ? 0 : 1];
|
||||
this.picker.find('.datetimepicker-hours thead th:eq(1)')
|
||||
.text(hoursDisplay + ':' + minutesDisplay + ' ' + meridianDisplay.toUpperCase());
|
||||
this.picker.find('.datetimepicker-minutes thead th:eq(1)')
|
||||
.text(hoursDisplay + ':' + minutesDisplay + ' ' + meridianDisplay.toUpperCase());
|
||||
} else {
|
||||
this.picker.find('.datetimepicker-hours thead th:eq(1)')
|
||||
.text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
|
||||
this.picker.find('.datetimepicker-minutes thead th:eq(1)')
|
||||
.text(dayMonth + ' ' + dates[this.language].months[month] + ' ' + year);
|
||||
}
|
||||
this.picker.find('tfoot th.today')
|
||||
.text(dates[this.language].today)
|
||||
.toggle(this.todayBtn !== false);
|
||||
this.updateNavArrows();
|
||||
@ -451,9 +483,9 @@
|
||||
/*var prevMonth = UTCDate(year, month, 0,0,0,0,0);
|
||||
prevMonth.setUTCDate(prevMonth.getDate() - (prevMonth.getUTCDay() - this.weekStart + 7)%7);*/
|
||||
var prevMonth = UTCDate(year, month-1, 28,0,0,0,0),
|
||||
day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
|
||||
prevMonth.setUTCDate(day);
|
||||
prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7)%7);
|
||||
day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());
|
||||
prevMonth.setUTCDate(day);
|
||||
prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.weekStart + 7)%7);
|
||||
var nextMonth = new Date(prevMonth);
|
||||
nextMonth.setUTCDate(nextMonth.getUTCDate() + 42);
|
||||
nextMonth = nextMonth.valueOf();
|
||||
@ -492,7 +524,7 @@
|
||||
this.picker.find('.datetimepicker-days tbody').empty().append(html.join(''));
|
||||
|
||||
html = [];
|
||||
var txt = '', meridian = '', meridianOld = '';
|
||||
var txt = '', meridian = '', meridianOld = '';
|
||||
for (var i=0;i<24;i++) {
|
||||
var actual = UTCDate(year, month, dayMonth, i);
|
||||
clsName = '';
|
||||
@ -502,29 +534,29 @@
|
||||
} else if (hours == i) {
|
||||
clsName += ' active';
|
||||
}
|
||||
if (this.showMeridian && dates[this.language].meridiem.length == 2) {
|
||||
meridian = (i<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]);
|
||||
if (meridian != meridianOld) {
|
||||
if (meridianOld != '') {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
html.push('<fieldset class="hour"><legend>'+meridian.toUpperCase()+'</legend>');
|
||||
}
|
||||
meridianOld = meridian;
|
||||
txt = (i%12?i%12:12);
|
||||
html.push('<span class="hour'+clsName+' hour_'+(i<12?'am':'pm')+'">'+txt+'</span>');
|
||||
if (i == 23) {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
} else {
|
||||
txt = i+':00';
|
||||
html.push('<span class="hour'+clsName+'">'+txt+'</span>');
|
||||
}
|
||||
if (this.showMeridian && dates[this.language].meridiem.length == 2) {
|
||||
meridian = (i<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]);
|
||||
if (meridian != meridianOld) {
|
||||
if (meridianOld != '') {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
html.push('<fieldset class="hour"><legend>'+meridian.toUpperCase()+'</legend>');
|
||||
}
|
||||
meridianOld = meridian;
|
||||
txt = (i%12?i%12:12);
|
||||
html.push('<span class="hour'+clsName+' hour_'+(i<12?'am':'pm')+'">'+txt+'</span>');
|
||||
if (i == 23) {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
} else {
|
||||
txt = i+':00';
|
||||
html.push('<span class="hour'+clsName+'">'+txt+'</span>');
|
||||
}
|
||||
}
|
||||
this.picker.find('.datetimepicker-hours td').html(html.join(''));
|
||||
|
||||
html = [];
|
||||
txt = '', meridian = '', meridianOld = '';
|
||||
txt = '', meridian = '', meridianOld = '';
|
||||
for(var i=0;i<60;i+=this.minuteStep) {
|
||||
var actual = UTCDate(year, month, dayMonth, hours, i, 0);
|
||||
clsName = '';
|
||||
@ -533,26 +565,26 @@
|
||||
} else if (Math.floor(minutes/this.minuteStep) == Math.floor(i/this.minuteStep)) {
|
||||
clsName += ' active';
|
||||
}
|
||||
if (this.showMeridian && dates[this.language].meridiem.length == 2) {
|
||||
meridian = (hours<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]);
|
||||
if (meridian != meridianOld) {
|
||||
if (meridianOld != '') {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
html.push('<fieldset class="minute"><legend>'+meridian.toUpperCase()+'</legend>');
|
||||
}
|
||||
meridianOld = meridian;
|
||||
txt = (hours%12?hours%12:12);
|
||||
//html.push('<span class="minute'+clsName+' minute_'+(hours<12?'am':'pm')+'">'+txt+'</span>');
|
||||
html.push('<span class="minute'+clsName+'">'+txt+':'+(i<10?'0'+i:i)+'</span>');
|
||||
if (i == 59) {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
} else {
|
||||
txt = i+':00';
|
||||
//html.push('<span class="hour'+clsName+'">'+txt+'</span>');
|
||||
html.push('<span class="minute'+clsName+'">'+hours+':'+(i<10?'0'+i:i)+'</span>');
|
||||
}
|
||||
if (this.showMeridian && dates[this.language].meridiem.length == 2) {
|
||||
meridian = (hours<12?dates[this.language].meridiem[0]:dates[this.language].meridiem[1]);
|
||||
if (meridian != meridianOld) {
|
||||
if (meridianOld != '') {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
html.push('<fieldset class="minute"><legend>'+meridian.toUpperCase()+'</legend>');
|
||||
}
|
||||
meridianOld = meridian;
|
||||
txt = (hours%12?hours%12:12);
|
||||
//html.push('<span class="minute'+clsName+' minute_'+(hours<12?'am':'pm')+'">'+txt+'</span>');
|
||||
html.push('<span class="minute'+clsName+'">'+txt+':'+(i<10?'0'+i:i)+'</span>');
|
||||
if (i == 59) {
|
||||
html.push('</fieldset>');
|
||||
}
|
||||
} else {
|
||||
txt = i+':00';
|
||||
//html.push('<span class="hour'+clsName+'">'+txt+'</span>');
|
||||
html.push('<span class="minute'+clsName+'">'+hours+':'+(i<10?'0'+i:i)+'</span>');
|
||||
}
|
||||
}
|
||||
this.picker.find('.datetimepicker-minutes td').html(html.join(''));
|
||||
|
||||
@ -588,6 +620,7 @@
|
||||
year += 1;
|
||||
}
|
||||
yearCont.html(html);
|
||||
this.place();
|
||||
},
|
||||
|
||||
updateNavArrows: function() {
|
||||
@ -607,9 +640,9 @@
|
||||
this.picker.find('.prev').css({visibility: 'visible'});
|
||||
}
|
||||
if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
|
||||
&& month >= this.endDate.getUTCMonth()
|
||||
&& day >= this.endDate.getUTCDate()
|
||||
&& hour >= this.endDate.getUTCHours()) {
|
||||
&& month >= this.endDate.getUTCMonth()
|
||||
&& day >= this.endDate.getUTCDate()
|
||||
&& hour >= this.endDate.getUTCHours()) {
|
||||
this.picker.find('.next').css({visibility: 'hidden'});
|
||||
} else {
|
||||
this.picker.find('.next').css({visibility: 'visible'});
|
||||
@ -624,8 +657,8 @@
|
||||
this.picker.find('.prev').css({visibility: 'visible'});
|
||||
}
|
||||
if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
|
||||
&& month >= this.endDate.getUTCMonth()
|
||||
&& day >= this.endDate.getUTCDate()) {
|
||||
&& month >= this.endDate.getUTCMonth()
|
||||
&& day >= this.endDate.getUTCDate()) {
|
||||
this.picker.find('.next').css({visibility: 'hidden'});
|
||||
} else {
|
||||
this.picker.find('.next').css({visibility: 'visible'});
|
||||
@ -639,7 +672,7 @@
|
||||
this.picker.find('.prev').css({visibility: 'visible'});
|
||||
}
|
||||
if (this.endDate !== Infinity && year >= this.endDate.getUTCFullYear()
|
||||
&& month >= this.endDate.getUTCMonth()) {
|
||||
&& month >= this.endDate.getUTCMonth()) {
|
||||
this.picker.find('.next').css({visibility: 'hidden'});
|
||||
} else {
|
||||
this.picker.find('.next').css({visibility: 'visible'});
|
||||
@ -717,25 +750,25 @@
|
||||
break;
|
||||
case 'span':
|
||||
if (!target.is('.disabled')) {
|
||||
var year = this.viewDate.getUTCFullYear(),
|
||||
month = this.viewDate.getUTCMonth(),
|
||||
day = this.viewDate.getUTCDate(),
|
||||
hours = this.viewDate.getUTCHours(),
|
||||
minutes = this.viewDate.getUTCMinutes(),
|
||||
seconds = this.viewDate.getUTCSeconds();
|
||||
var year = this.viewDate.getUTCFullYear(),
|
||||
month = this.viewDate.getUTCMonth(),
|
||||
day = this.viewDate.getUTCDate(),
|
||||
hours = this.viewDate.getUTCHours(),
|
||||
minutes = this.viewDate.getUTCMinutes(),
|
||||
seconds = this.viewDate.getUTCSeconds();
|
||||
|
||||
if (target.is('.month')) {
|
||||
this.viewDate.setUTCDate(1);
|
||||
month = target.parent().find('span').index(target);
|
||||
day = this.viewDate.getUTCDate();
|
||||
day = this.viewDate.getUTCDate();
|
||||
this.viewDate.setUTCMonth(month);
|
||||
this.element.trigger({
|
||||
type: 'changeMonth',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 3) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
if (this.viewSelect >= 3) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
} else if (target.is('.year')) {
|
||||
this.viewDate.setUTCDate(1);
|
||||
year = parseInt(target.text(), 10) || 0;
|
||||
@ -744,36 +777,36 @@
|
||||
type: 'changeYear',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 4) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
if (this.viewSelect >= 4) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
} else if (target.is('.hour')){
|
||||
hours = parseInt(target.text(), 10) || 0;
|
||||
if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {
|
||||
if (hours == 12 && target.hasClass('hour_am')) {
|
||||
hours = 0;
|
||||
} else if (hours != 12 && target.hasClass('hour_pm')) {
|
||||
hours += 12;
|
||||
}
|
||||
}
|
||||
this.viewDate.setUTCHours(hours);
|
||||
if (target.hasClass('hour_am') || target.hasClass('hour_pm')) {
|
||||
if (hours == 12 && target.hasClass('hour_am')) {
|
||||
hours = 0;
|
||||
} else if (hours != 12 && target.hasClass('hour_pm')) {
|
||||
hours += 12;
|
||||
}
|
||||
}
|
||||
this.viewDate.setUTCHours(hours);
|
||||
this.element.trigger({
|
||||
type: 'changeHour',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 1) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
if (this.viewSelect >= 1) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
} else if (target.is('.minute')){
|
||||
minutes = parseInt(target.text().substr(target.text().indexOf(':')+1), 10) || 0;
|
||||
this.viewDate.setUTCMinutes(minutes);
|
||||
this.viewDate.setUTCMinutes(minutes);
|
||||
this.element.trigger({
|
||||
type: 'changeMinute',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 0) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
if (this.viewSelect >= 0) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
}
|
||||
if (this.viewMode != 0) {
|
||||
var oldViewMode = this.viewMode;
|
||||
@ -813,16 +846,16 @@
|
||||
month += 1;
|
||||
}
|
||||
}
|
||||
this.viewDate.setUTCDate(day);
|
||||
this.viewDate.setUTCMonth(month);
|
||||
this.viewDate.setUTCFullYear(year);
|
||||
this.element.trigger({
|
||||
type: 'changeDay',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 2) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
this.viewDate.setUTCDate(day);
|
||||
this.viewDate.setUTCMonth(month);
|
||||
this.viewDate.setUTCFullYear(year);
|
||||
this.element.trigger({
|
||||
type: 'changeDay',
|
||||
date: this.viewDate
|
||||
});
|
||||
if (this.viewSelect >= 2) {
|
||||
this._setDate(UTCDate(year, month, day, hours, minutes, seconds, 0));
|
||||
}
|
||||
}
|
||||
var oldViewMode = this.viewMode;
|
||||
this.showMode(-1);
|
||||
@ -841,10 +874,6 @@
|
||||
if (!which || which == 'view')
|
||||
this.viewDate = date;
|
||||
this.fill();
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date
|
||||
});
|
||||
this.setValue();
|
||||
var element;
|
||||
if (this.isInput) {
|
||||
@ -858,6 +887,10 @@
|
||||
//this.hide();
|
||||
}
|
||||
}
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date
|
||||
});
|
||||
},
|
||||
|
||||
moveMinute: function(date, dir){
|
||||
@ -950,28 +983,28 @@
|
||||
case 39: // right
|
||||
if (!this.keyboardNavigation) break;
|
||||
dir = e.keyCode == 37 ? -1 : 1;
|
||||
viewMode = this.viewMode;
|
||||
if (e.ctrlKey) {
|
||||
viewMode += 2;
|
||||
} else if (e.shiftKey) {
|
||||
viewMode += 1;
|
||||
}
|
||||
if (viewMode == 4) {
|
||||
viewMode = this.viewMode;
|
||||
if (e.ctrlKey) {
|
||||
viewMode += 2;
|
||||
} else if (e.shiftKey) {
|
||||
viewMode += 1;
|
||||
}
|
||||
if (viewMode == 4) {
|
||||
newDate = this.moveYear(this.date, dir);
|
||||
newViewDate = this.moveYear(this.viewDate, dir);
|
||||
} else if (viewMode == 3) {
|
||||
} else if (viewMode == 3) {
|
||||
newDate = this.moveMonth(this.date, dir);
|
||||
newViewDate = this.moveMonth(this.viewDate, dir);
|
||||
} else if (viewMode == 2) {
|
||||
} else if (viewMode == 2) {
|
||||
newDate = this.moveDate(this.date, dir);
|
||||
newViewDate = this.moveDate(this.viewDate, dir);
|
||||
} else if (viewMode == 1) {
|
||||
} else if (viewMode == 1) {
|
||||
newDate = this.moveHour(this.date, dir);
|
||||
newViewDate = this.moveHour(this.viewDate, dir);
|
||||
} else if (viewMode == 0) {
|
||||
} else if (viewMode == 0) {
|
||||
newDate = this.moveMinute(this.date, dir);
|
||||
newViewDate = this.moveMinute(this.viewDate, dir);
|
||||
}
|
||||
}
|
||||
if (this.dateWithinRange(newDate)){
|
||||
this.date = newDate;
|
||||
this.viewDate = newViewDate;
|
||||
@ -985,33 +1018,33 @@
|
||||
case 40: // down
|
||||
if (!this.keyboardNavigation) break;
|
||||
dir = e.keyCode == 38 ? -1 : 1;
|
||||
viewMode = this.viewMode;
|
||||
if (e.ctrlKey) {
|
||||
viewMode += 2;
|
||||
} else if (e.shiftKey) {
|
||||
viewMode += 1;
|
||||
}
|
||||
if (viewMode == 4) {
|
||||
viewMode = this.viewMode;
|
||||
if (e.ctrlKey) {
|
||||
viewMode += 2;
|
||||
} else if (e.shiftKey) {
|
||||
viewMode += 1;
|
||||
}
|
||||
if (viewMode == 4) {
|
||||
newDate = this.moveYear(this.date, dir);
|
||||
newViewDate = this.moveYear(this.viewDate, dir);
|
||||
} else if (viewMode == 3) {
|
||||
} else if (viewMode == 3) {
|
||||
newDate = this.moveMonth(this.date, dir);
|
||||
newViewDate = this.moveMonth(this.viewDate, dir);
|
||||
} else if (viewMode == 2) {
|
||||
} else if (viewMode == 2) {
|
||||
newDate = this.moveDate(this.date, dir * 7);
|
||||
newViewDate = this.moveDate(this.viewDate, dir * 7);
|
||||
} else if (viewMode == 1) {
|
||||
if (this.showMeridian) {
|
||||
newDate = this.moveHour(this.date, dir * 6);
|
||||
newViewDate = this.moveHour(this.viewDate, dir * 6);
|
||||
} else {
|
||||
newDate = this.moveHour(this.date, dir * 4);
|
||||
newViewDate = this.moveHour(this.viewDate, dir * 4);
|
||||
}
|
||||
} else if (viewMode == 0) {
|
||||
} else if (viewMode == 1) {
|
||||
if (this.showMeridian) {
|
||||
newDate = this.moveHour(this.date, dir * 6);
|
||||
newViewDate = this.moveHour(this.viewDate, dir * 6);
|
||||
} else {
|
||||
newDate = this.moveHour(this.date, dir * 4);
|
||||
newViewDate = this.moveHour(this.viewDate, dir * 4);
|
||||
}
|
||||
} else if (viewMode == 0) {
|
||||
newDate = this.moveMinute(this.date, dir * 4);
|
||||
newViewDate = this.moveMinute(this.viewDate, dir * 4);
|
||||
}
|
||||
}
|
||||
if (this.dateWithinRange(newDate)){
|
||||
this.date = newDate;
|
||||
this.viewDate = newViewDate;
|
||||
@ -1022,19 +1055,19 @@
|
||||
}
|
||||
break;
|
||||
case 13: // enter
|
||||
if (this.viewMode != 0) {
|
||||
var oldViewMode = this.viewMode;
|
||||
this.showMode(-1);
|
||||
this.fill();
|
||||
if (oldViewMode == this.viewMode && this.autoclose) {
|
||||
this.hide();
|
||||
}
|
||||
} else {
|
||||
this.fill();
|
||||
if (this.autoclose) {
|
||||
this.hide();
|
||||
}
|
||||
}
|
||||
if (this.viewMode != 0) {
|
||||
var oldViewMode = this.viewMode;
|
||||
this.showMode(-1);
|
||||
this.fill();
|
||||
if (oldViewMode == this.viewMode && this.autoclose) {
|
||||
this.hide();
|
||||
}
|
||||
} else {
|
||||
this.fill();
|
||||
if (this.autoclose) {
|
||||
this.hide();
|
||||
}
|
||||
}
|
||||
e.preventDefault();
|
||||
break;
|
||||
case 9: // tab
|
||||
@ -1042,10 +1075,6 @@
|
||||
break;
|
||||
}
|
||||
if (dateChanged){
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date
|
||||
});
|
||||
var element;
|
||||
if (this.isInput) {
|
||||
element = this.element;
|
||||
@ -1055,6 +1084,10 @@
|
||||
if (element) {
|
||||
element.change();
|
||||
}
|
||||
this.element.trigger({
|
||||
type: 'changeDate',
|
||||
date: this.date
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
@ -1062,17 +1095,24 @@
|
||||
if (dir) {
|
||||
var newViewMode = Math.max(0, Math.min(DPGlobal.modes.length - 1, this.viewMode + dir));
|
||||
if (newViewMode >= this.minView && newViewMode <= this.maxView) {
|
||||
this.element.trigger({
|
||||
type: 'changeMode',
|
||||
date: this.viewDate,
|
||||
oldViewMode: this.viewMode,
|
||||
newViewMode: newViewMode
|
||||
});
|
||||
|
||||
this.viewMode = newViewMode;
|
||||
}
|
||||
}
|
||||
/*
|
||||
vitalets: fixing bug of very special conditions:
|
||||
jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.
|
||||
Method show() does not set display css correctly and datetimepicker is not shown.
|
||||
Changed to .css('display', 'block') solve the problem.
|
||||
See https://github.com/vitalets/x-editable/issues/37
|
||||
vitalets: fixing bug of very special conditions:
|
||||
jquery 1.7.1 + webkit + show inline datetimepicker in bootstrap popover.
|
||||
Method show() does not set display css correctly and datetimepicker is not shown.
|
||||
Changed to .css('display', 'block') solve the problem.
|
||||
See https://github.com/vitalets/x-editable/issues/37
|
||||
|
||||
In jquery 1.7.2+ everything works fine.
|
||||
In jquery 1.7.2+ everything works fine.
|
||||
*/
|
||||
//this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).show();
|
||||
this.picker.find('>div').hide().filter('.datetimepicker-'+DPGlobal.modes[this.viewMode].clsName).css('display', 'block');
|
||||
@ -1187,7 +1227,7 @@
|
||||
parseDate: function(date, format, language, type) {
|
||||
if (date instanceof Date) {
|
||||
var dateUTC = new Date(date.valueOf() - date.getTimezoneOffset() * 60000);
|
||||
dateUTC.setMilliseconds(0);
|
||||
dateUTC.setMilliseconds(0);
|
||||
return dateUTC;
|
||||
}
|
||||
if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(date)) {
|
||||
@ -1254,7 +1294,7 @@
|
||||
val, filtered, part;
|
||||
setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];
|
||||
setters_map['dd'] = setters_map['d'];
|
||||
setters_map['P'] = setters_map['p'];
|
||||
setters_map['P'] = setters_map['p'];
|
||||
date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
||||
if (parts.length == format.parts.length) {
|
||||
for (var i=0, cnt = format.parts.length; i < cnt; i++) {
|
||||
@ -1278,10 +1318,10 @@
|
||||
});
|
||||
val = $.inArray(filtered[0], dates[language].monthsShort) + 1;
|
||||
break;
|
||||
case 'p':
|
||||
case 'P':
|
||||
val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);
|
||||
break;
|
||||
case 'p':
|
||||
case 'P':
|
||||
val = $.inArray(parts[i].toLowerCase(), dates[language].meridiem);
|
||||
break;
|
||||
}
|
||||
}
|
||||
parsed[part] = val;
|
||||
@ -1320,9 +1360,9 @@
|
||||
// second
|
||||
s: date.getUTCSeconds()
|
||||
};
|
||||
val.H = (val.h%12==0? 12 : val.h%12);
|
||||
val.HH = (val.H < 10 ? '0' : '') + val.H;
|
||||
val.P = val.p.toUpperCase();
|
||||
val.H = (val.h%12==0? 12 : val.h%12);
|
||||
val.HH = (val.H < 10 ? '0' : '') + val.H;
|
||||
val.P = val.p.toUpperCase();
|
||||
val.hh = (val.h < 10 ? '0' : '') + val.h;
|
||||
val.ii = (val.i < 10 ? '0' : '') + val.i;
|
||||
val.ss = (val.s < 10 ? '0' : '') + val.s;
|
||||
|
@ -67,6 +67,16 @@ $(function(){
|
||||
render: function () {
|
||||
this.$input.datetimepicker(this.options.datetimepicker);
|
||||
|
||||
//adjust container position when viewMode changes
|
||||
//see https://github.com/smalot/bootstrap-datetimepicker/pull/80
|
||||
this.$input.on('changeMode', function(e) {
|
||||
var f = $(this).closest('form').parent();
|
||||
//timeout here, otherwise container changes position before form has new size
|
||||
setTimeout(function(){
|
||||
f.triggerHandler('resize');
|
||||
}, 0);
|
||||
});
|
||||
|
||||
//"clear" link
|
||||
if(this.options.clear) {
|
||||
this.$clear = $('<a href="#"></a>').html(this.options.clear).click($.proxy(function(e){
|
||||
|
Loading…
x
Reference in New Issue
Block a user