update datetimepicker and correct its position on change viewMode

This commit is contained in:
vitalets 2013-06-13 11:40:19 +04:00
parent d28fe2a5f4
commit 69ddc142bb
3 changed files with 272 additions and 198 deletions
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){