diff --git a/src/inputs/datetime/bootstrap-datetimepicker/css/datetimepicker.css b/src/inputs/datetime/bootstrap-datetimepicker/css/datetimepicker.css index 73eeb25..18bd8be 100644 --- a/src/inputs/datetime/bootstrap-datetimepicker/css/datetimepicker.css +++ b/src/inputs/datetime/bootstrap-datetimepicker/css/datetimepicker.css @@ -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; } diff --git a/src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js b/src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js index 8e8b83d..bad0260 100644 --- a/src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js +++ b/src/inputs/datetime/bootstrap-datetimepicker/js/bootstrap-datetimepicker.js @@ -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; diff --git a/src/inputs/datetime/datetime.js b/src/inputs/datetime/datetime.js index 808dadc..991ba50 100644 --- a/src/inputs/datetime/datetime.js +++ b/src/inputs/datetime/datetime.js @@ -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){