scriptbox
Version:
Script box is a full VAS application
642 lines • 34.7 kB
JavaScript
/**
* version 2.1.11
* @license
* =========================================================
* bootstrap-datetimepicker.js
* http://www.eyecon.ro/bootstrap-datepicker
* =========================================================
* Copyright 2012 Stefan Petre
*
* Contributions:
* - updated for Bootstrap v3 by Jonathan Peterson (@Eonasdan) and (almost)
* completely rewritten to use Momentjs
* - based on tarruda's bootstrap-datepicker
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =========================================================
*/
(function ($) {
if (typeof moment === "undefined") {
alert("momentjs is requried");
throw new Error("momentjs is requried")
}
var dpgId = 0, pMoment = moment, DateTimePicker = function (element, options) {
var defaults = {pickDate: true, pickTime: true, startDate: new pMoment({y: 1970}), endDate: (new pMoment).add(50, "y"), collapse: true, language: "en", defaultDate: "", disabledDates: [], icons: {}, useStrict: false}, icons = {time: "glyphicon glyphicon-time", date: "glyphicon glyphicon-calendar", up: "glyphicon glyphicon-chevron-up", down: "glyphicon glyphicon-chevron-down"}, picker = this, init = function () {
var icon = false, i, dDate, longDateFormat;
picker.options = $.extend({}, defaults, options);
picker.options.icons = $.extend({}, icons, picker.options.icons);
if (!(picker.options.pickTime || picker.options.pickDate))throw new Error("Must choose at least one picker");
picker.id = dpgId++;
pMoment.lang(picker.options.language);
picker.date = pMoment();
picker.element = $(element);
picker.unset = false;
picker.isInput = picker.element.is("input");
picker.component = false;
if (picker.element.hasClass("input-group")) {
if (picker.element.find(".datepickerbutton").size() == 0) {
picker.component = picker.element.find(".input-group-addon")
} else {
picker.component = picker.element.find(".datepickerbutton")
}
}
picker.format = picker.options.format;
longDateFormat = pMoment()._lang._longDateFormat;
if (!picker.format) {
if (picker.isInput)picker.format = picker.element.data("format"); else picker.format = picker.element.find("input").data("format");
if (!picker.format) {
picker.format = picker.options.pickDate ? longDateFormat.L : "";
if (picker.options.pickDate && picker.options.pickTime)picker.format += " ";
picker.format += picker.options.pickTime ? longDateFormat.LT : ""
}
}
picker.use24hours = picker.format.toLowerCase().indexOf("a") < 1;
if (picker.component)icon = picker.component.find("span");
if (picker.options.pickTime) {
if (icon)icon.addClass(picker.options.icons.time)
}
if (picker.options.pickDate) {
if (icon) {
icon.removeClass(picker.options.icons.time);
icon.addClass(picker.options.icons.date)
}
}
picker.widget = $(getTemplate(picker.options.pickDate, picker.options.pickTime, picker.options.collapse)).appendTo("body");
picker.minViewMode = picker.options.minViewMode || picker.element.data("date-minviewmode") || 0;
if (typeof picker.minViewMode === "string") {
switch (picker.minViewMode) {
case"months":
picker.minViewMode = 1;
break;
case"years":
picker.minViewMode = 2;
break;
default:
picker.minViewMode = 0;
break
}
}
picker.viewMode = picker.options.viewMode || picker.element.data("date-viewmode") || 0;
if (typeof picker.viewMode === "string") {
switch (picker.viewMode) {
case"months":
picker.viewMode = 1;
break;
case"years":
picker.viewMode = 2;
break;
default:
picker.viewMode = 0;
break
}
}
for (i = 0; i < picker.options.disabledDates.length; i++) {
dDate = picker.options.disabledDates[i];
dDate = pMoment(dDate);
if (!dDate.isValid())dDate = pMoment(picker.options.startDate).subtract(1, "day");
picker.options.disabledDates[i] = dDate.format("L")
}
picker.startViewMode = picker.viewMode;
picker.setStartDate(picker.options.startDate || picker.element.data("date-startdate"));
picker.setEndDate(picker.options.endDate || picker.element.data("date-enddate"));
fillDow();
fillMonths();
fillHours();
fillMinutes();
update();
showMode();
attachDatePickerEvents();
if (picker.options.defaultDate !== "")picker.setValue(picker.options.defaultDate)
}, place = function () {
var position = "absolute", offset = picker.component ? picker.component.offset() : picker.element.offset(), $window = $(window);
picker.width = picker.component ? picker.component.outerWidth() : picker.element.outerWidth();
offset.top = offset.top + picker.element.outerHeight();
if (picker.options.width !== undefined) {
picker.widget.width(picker.options.width)
}
if (picker.options.orientation === "left") {
picker.widget.addClass("left-oriented");
offset.left = offset.left - picker.widget.width() + 20
}
if (isInFixed()) {
position = "fixed";
offset.top -= $window.scrollTop();
offset.left -= $window.scrollLeft()
}
if ($window.width() < offset.left + picker.widget.outerWidth()) {
offset.right = $window.width() - offset.left - picker.width;
offset.left = "auto";
picker.widget.addClass("pull-right")
} else {
offset.right = "auto";
picker.widget.removeClass("pull-right")
}
picker.widget.css({position: position, top: offset.top, left: offset.left, right: offset.right})
}, notifyChange = function (oldDate) {
picker.element.trigger({type: "change.dp", date: picker.getDate(), oldDate: oldDate})
}, notifyError = function (date) {
picker.element.trigger({type: "error.dp", date: date})
}, update = function (newDate) {
pMoment.lang(picker.options.language);
var dateStr = newDate;
if (!dateStr) {
if (picker.isInput) {
dateStr = picker.element.val()
} else {
dateStr = picker.element.find("input").val()
}
if (dateStr)picker.date = pMoment(dateStr, picker.format, picker.options.useStrict);
if (!picker.date)picker.date = pMoment()
}
picker.viewDate = pMoment(picker.date).startOf("month");
fillDate();
fillTime()
}, fillDow = function () {
pMoment.lang(picker.options.language);
var html = $("<tr>"), weekdaysMin = pMoment.weekdaysMin(), i;
if (pMoment()._lang._week.dow == 0) {
for (i = 0; i < 7; i++) {
html.append('<th class="dow">' + weekdaysMin[i] + "</th>")
}
} else {
for (i = 1; i < 8; i++) {
if (i == 7) {
html.append('<th class="dow">' + weekdaysMin[0] + "</th>")
} else {
html.append('<th class="dow">' + weekdaysMin[i] + "</th>")
}
}
}
picker.widget.find(".datepicker-days thead").append(html)
}, fillMonths = function () {
pMoment.lang(picker.options.language);
var html = "", i = 0, monthsShort = pMoment.monthsShort();
while (i < 12) {
html += '<span class="month">' + monthsShort[i++] + "</span>"
}
picker.widget.find(".datepicker-months td").append(html)
}, fillDate = function () {
pMoment.lang(picker.options.language);
var year = picker.viewDate.year(), month = picker.viewDate.month(), startYear = picker.options.startDate.year(), startMonth = picker.options.startDate.month(), endYear = picker.options.endDate.year(), endMonth = picker.options.endDate.month(), prevMonth, nextMonth, html = [], row, clsName, i, days, yearCont, currentYear, months = pMoment.months();
picker.widget.find(".datepicker-days").find(".disabled").removeClass("disabled");
picker.widget.find(".datepicker-months").find(".disabled").removeClass("disabled");
picker.widget.find(".datepicker-years").find(".disabled").removeClass("disabled");
picker.widget.find(".datepicker-days th:eq(1)").text(months[month] + " " + year);
prevMonth = pMoment(picker.viewDate).subtract("months", 1);
days = prevMonth.daysInMonth();
prevMonth.date(days).startOf("week");
if (year == startYear && month <= startMonth || year < startYear) {
picker.widget.find(".datepicker-days th:eq(0)").addClass("disabled")
}
if (year == endYear && month >= endMonth || year > endYear) {
picker.widget.find(".datepicker-days th:eq(2)").addClass("disabled")
}
nextMonth = pMoment(prevMonth).add(42, "d");
while (prevMonth.isBefore(nextMonth)) {
if (prevMonth.weekday() === pMoment().startOf("week").weekday()) {
row = $("<tr>");
html.push(row)
}
clsName = "";
if (prevMonth.year() < year || prevMonth.year() == year && prevMonth.month() < month) {
clsName += " old"
} else if (prevMonth.year() > year || prevMonth.year() == year && prevMonth.month() > month) {
clsName += " new"
}
if (prevMonth.isSame(pMoment({y: picker.date.year(), M: picker.date.month(), d: picker.date.date()}))) {
clsName += " active"
}
if (pMoment(prevMonth).add(1, "d") <= picker.options.startDate || prevMonth > picker.options.endDate || isInDisableDates(prevMonth)) {
clsName += " disabled"
}
row.append('<td class="day' + clsName + '">' + prevMonth.date() + "</td>");
prevMonth.add(1, "d")
}
picker.widget.find(".datepicker-days tbody").empty().append(html);
currentYear = pMoment().year(), months = picker.widget.find(".datepicker-months").find("th:eq(1)").text(year).end().find("span").removeClass("active");
if (currentYear === year) {
months.eq(pMoment().month()).addClass("active")
}
if (currentYear - 1 < startYear) {
picker.widget.find(".datepicker-months th:eq(0)").addClass("disabled")
}
if (currentYear + 1 > endYear) {
picker.widget.find(".datepicker-months th:eq(2)").addClass("disabled")
}
for (i = 0; i < 12; i++) {
if (year == startYear && startMonth > i || year < startYear) {
$(months[i]).addClass("disabled")
} else if (year == endYear && endMonth < i || year > endYear) {
$(months[i]).addClass("disabled")
}
}
html = "";
year = parseInt(year / 10, 10) * 10;
yearCont = picker.widget.find(".datepicker-years").find("th:eq(1)").text(year + "-" + (year + 9)).end().find("td");
picker.widget.find(".datepicker-years").find("th").removeClass("disabled");
if (startYear > year) {
picker.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled")
}
if (endYear < year + 9) {
picker.widget.find(".datepicker-years").find("th:eq(2)").addClass("disabled")
}
year -= 1;
for (i = -1; i < 11; i++) {
html += '<span class="year' + (i === -1 || i === 10 ? " old" : "") + (currentYear === year ? " active" : "") + (year < startYear || year > endYear ? " disabled" : "") + '">' + year + "</span>";
year += 1
}
yearCont.html(html)
}, fillHours = function () {
pMoment.lang(picker.options.language);
var table = picker.widget.find(".timepicker .timepicker-hours table"), html = "", current, i, j;
table.parent().hide();
if (picker.use24hours) {
current = 0;
for (i = 0; i < 6; i += 1) {
html += "<tr>";
for (j = 0; j < 4; j += 1) {
html += '<td class="hour">' + padLeft(current.toString()) + "</td>";
current++
}
html += "</tr>"
}
} else {
current = 1;
for (i = 0; i < 3; i += 1) {
html += "<tr>";
for (j = 0; j < 4; j += 1) {
html += '<td class="hour">' + padLeft(current.toString()) + "</td>";
current++
}
html += "</tr>"
}
}
table.html(html)
}, fillMinutes = function () {
var table = picker.widget.find(".timepicker .timepicker-minutes table"), html = "", current = 0, i, j;
table.parent().hide();
for (i = 0; i < 5; i++) {
html += "<tr>";
for (j = 0; j < 4; j += 1) {
html += '<td class="minute">' + padLeft(current.toString()) + "</td>";
current += 3
}
html += "</tr>"
}
table.html(html)
}, fillTime = function () {
if (!picker.date)return;
var timeComponents = picker.widget.find(".timepicker span[data-time-component]"), hour = picker.date.hours(), period = "AM";
if (!picker.use24hours) {
if (hour >= 12)period = "PM";
if (hour === 0)hour = 12; else if (hour != 12)hour = hour % 12;
picker.widget.find(".timepicker [data-action=togglePeriod]").text(period)
}
timeComponents.filter("[data-time-component=hours]").text(padLeft(hour));
timeComponents.filter("[data-time-component=minutes]").text(padLeft(picker.date.minutes()))
}, click = function (e) {
e.stopPropagation();
e.preventDefault();
picker.unset = false;
var target = $(e.target).closest("span, td, th"), month, year, step, day, oldDate = picker.date;
if (target.length === 1) {
if (!target.is(".disabled")) {
switch (target[0].nodeName.toLowerCase()) {
case"th":
switch (target[0].className) {
case"switch":
showMode(1);
break;
case"prev":
case"next":
step = dpGlobal.modes[picker.viewMode].navStep;
if (target[0].className === "prev")step = step * -1;
picker.viewDate.add(step, dpGlobal.modes[picker.viewMode].navFnc);
fillDate();
break
}
break;
case"span":
if (target.is(".month")) {
month = target.parent().find("span").index(target);
picker.viewDate.month(month)
} else {
year = parseInt(target.text(), 10) || 0;
picker.viewDate.year(year)
}
if (picker.viewMode !== 0) {
picker.date = pMoment({y: picker.viewDate.year(), M: picker.viewDate.month(), d: picker.viewDate.date(), h: picker.date.hours(), m: picker.date.minutes()});
notifyChange(oldDate)
}
showMode(-1);
fillDate();
break;
case"td":
if (target.is(".day")) {
day = parseInt(target.text(), 10) || 1;
month = picker.viewDate.month();
year = picker.viewDate.year();
if (target.is(".old")) {
if (month === 0) {
month = 11;
year -= 1
} else {
month -= 1
}
} else if (target.is(".new")) {
if (month == 11) {
month = 0;
year += 1
} else {
month += 1
}
}
picker.date = pMoment({y: year, M: month, d: day, h: picker.date.hours(), m: picker.date.minutes()});
picker.viewDate = pMoment({y: year, M: month, d: Math.min(28, day)});
fillDate();
set();
notifyChange(oldDate)
}
break
}
}
}
}, actions = {incrementHours: function () {
checkDate("add", "hours")
}, incrementMinutes: function () {
checkDate("add", "minutes")
}, decrementHours: function () {
checkDate("subtract", "hours")
}, decrementMinutes: function () {
checkDate("subtract", "minutes")
}, togglePeriod: function () {
var hour = picker.date.hours();
if (hour >= 12)hour -= 12; else hour += 12;
picker.date.hours(hour)
}, showPicker: function () {
picker.widget.find(".timepicker > div:not(.timepicker-picker)").hide();
picker.widget.find(".timepicker .timepicker-picker").show()
}, showHours: function () {
picker.widget.find(".timepicker .timepicker-picker").hide();
picker.widget.find(".timepicker .timepicker-hours").show()
}, showMinutes: function () {
picker.widget.find(".timepicker .timepicker-picker").hide();
picker.widget.find(".timepicker .timepicker-minutes").show()
}, selectHour: function (e) {
picker.date.hours(parseInt($(e.target).text(), 10));
actions.showPicker.call(picker)
}, selectMinute: function (e) {
picker.date.minutes(parseInt($(e.target).text(), 10));
actions.showPicker.call(picker)
}}, doAction = function (e) {
var action = $(e.currentTarget).data("action"), rv = actions[action].apply(picker, arguments), oldDate = picker.date;
stopEvent(e);
if (!picker.date)picker.date = pMoment({y: 1970});
set();
fillTime();
notifyChange(oldDate);
return rv
}, stopEvent = function (e) {
e.stopPropagation();
e.preventDefault()
}, change = function (e) {
pMoment.lang(picker.options.language);
var input = $(e.target), oldDate = picker.date, d = pMoment(input.val(), picker.format, picker.options.useStrict);
if (d.isValid()) {
update();
picker.setValue(d);
notifyChange(oldDate);
set()
} else {
picker.viewDate = oldDate;
notifyChange(oldDate);
notifyError(d);
picker.unset = true;
input.val("")
}
}, showMode = function (dir) {
if (dir) {
picker.viewMode = Math.max(picker.minViewMode, Math.min(2, picker.viewMode + dir))
}
picker.widget.find(".datepicker > div").hide().filter(".datepicker-" + dpGlobal.modes[picker.viewMode].clsName).show()
}, attachDatePickerEvents = function () {
var $this, $parent, expanded, closed, collapseData;
picker.widget.on("click", ".datepicker *", $.proxy(click, this));
picker.widget.on("click", "[data-action]", $.proxy(doAction, this));
picker.widget.on("mousedown", $.proxy(stopEvent, this));
if (picker.options.pickDate && picker.options.pickTime) {
picker.widget.on("click.togglePicker", ".accordion-toggle", function (e) {
e.stopPropagation();
$this = $(this);
$parent = $this.closest("ul");
expanded = $parent.find(".in");
closed = $parent.find(".collapse:not(.in)");
if (expanded && expanded.length) {
collapseData = expanded.data("collapse");
if (collapseData && collapseData.transitioning)return;
expanded.collapse("hide");
closed.collapse("show");
$this.find("span").toggleClass(picker.options.icons.time + " " + picker.options.icons.date);
picker.element.find(".input-group-addon span").toggleClass(picker.options.icons.time + " " + picker.options.icons.date)
}
})
}
if (picker.isInput) {
picker.element.on({focus: $.proxy(picker.show, this), change: $.proxy(change, this), blur: $.proxy(picker.hide, this)})
} else {
picker.element.on({change: $.proxy(change, this)}, "input");
if (picker.component) {
picker.component.on("click", $.proxy(picker.show, this))
} else {
picker.element.on("click", $.proxy(picker.show, this))
}
}
}, attachDatePickerGlobalEvents = function () {
$(window).on("resize.datetimepicker" + picker.id, $.proxy(place, this));
if (!picker.isInput) {
$(document).on("mousedown.datetimepicker" + picker.id, $.proxy(picker.hide, this))
}
}, detachDatePickerEvents = function () {
picker.widget.off("click", ".datepicker *", picker.click);
picker.widget.off("click", "[data-action]");
picker.widget.off("mousedown", picker.stopEvent);
if (picker.options.pickDate && picker.options.pickTime) {
picker.widget.off("click.togglePicker")
}
if (picker.isInput) {
picker.element.off({focus: picker.show, change: picker.change})
} else {
picker.element.off({change: picker.change}, "input");
if (picker.component) {
picker.component.off("click", picker.show)
} else {
picker.element.off("click", picker.show)
}
}
}, detachDatePickerGlobalEvents = function () {
$(window).off("resize.datetimepicker" + picker.id);
if (!picker.isInput) {
$(document).off("mousedown.datetimepicker" + picker.id)
}
}, isInFixed = function () {
if (picker.element) {
var parents = picker.element.parents(), inFixed = false, i;
for (i = 0; i < parents.length; i++) {
if ($(parents[i]).css("position") == "fixed") {
inFixed = true;
break
}
}
return inFixed
} else {
return false
}
}, set = function () {
pMoment.lang(picker.options.language);
var formatted = "", input;
if (!picker.unset)formatted = pMoment(picker.date).format(picker.format);
if (!picker.isInput) {
if (picker.component) {
input = picker.element.find("input");
input.val(formatted)
}
picker.element.data("date", formatted)
} else {
picker.element.val(formatted)
}
if (!picker.options.pickTime)picker.hide()
}, checkDate = function (direction, unit) {
pMoment.lang(picker.options.language);
var newDate;
if (direction == "add") {
newDate = pMoment(picker.date);
if (newDate.hours() == 23)newDate.add(1, unit);
newDate.add(1, unit)
} else {
newDate = pMoment(picker.date).subtract(1, unit)
}
if (newDate.isAfter(picker.options.endDate) || newDate.subtract(1, unit).isBefore(picker.options.startDate) || isInDisableDates(newDate)) {
notifyError(newDate.format(picker.format));
return
}
if (direction == "add") {
picker.date.add(1, unit)
} else {
picker.date.subtract(1, unit)
}
}, isInDisableDates = function (date) {
pMoment.lang(picker.options.language);
var disabled = picker.options.disabledDates, i;
for (i in disabled) {
if (disabled[i] == pMoment(date).format("L")) {
return true
}
}
return false
}, padLeft = function (string) {
string = string.toString();
if (string.length >= 2)return string; else return"0" + string
}, getTemplate = function (pickDate, pickTime, collapse) {
if (pickDate && pickTime) {
return'<div class="bootstrap-datetimepicker-widget dropdown-menu" style="z-index:9999 !important;">' + '<ul class="list-unstyled">' + "<li" + (collapse ? ' class="collapse in"' : "") + ">" + '<div class="datepicker">' + dpGlobal.template + "</div>" + "</li>" + '<li class="picker-switch accordion-toggle"><a class="btn" style="width:100%"><span class="' + picker.options.icons.time + '"></span></a></li>' + "<li" + (collapse ? ' class="collapse"' : "") + ">" + '<div class="timepicker">' + tpGlobal.getTemplate() + "</div>" + "</li>" + "</ul>" + "</div>"
} else if (pickTime) {
return'<div class="bootstrap-datetimepicker-widget dropdown-menu">' + '<div class="timepicker">' + tpGlobal.getTemplate() + "</div>" + "</div>"
} else {
return'<div class="bootstrap-datetimepicker-widget dropdown-menu">' + '<div class="datepicker">' + dpGlobal.template + "</div>" + "</div>"
}
}, dpGlobal = {modes: [
{clsName: "days", navFnc: "month", navStep: 1},
{clsName: "months", navFnc: "year", navStep: 1},
{clsName: "years", navFnc: "year", navStep: 10}
], headTemplate: "<thead>" + "<tr>" + '<th class="prev">‹</th><th colspan="5" class="switch"></th><th class="next">›</th>' + "</tr>" + "</thead>", contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>'}, tpGlobal = {hourTemplate: '<span data-action="showHours" data-time-component="hours" class="timepicker-hour"></span>', minuteTemplate: '<span data-action="showMinutes" data-time-component="minutes" class="timepicker-minute"></span>'};
dpGlobal.template = '<div class="datepicker-days">' + '<table class="table-condensed">' + dpGlobal.headTemplate + "<tbody></tbody></table>" + "</div>" + '<div class="datepicker-months">' + '<table class="table-condensed">' + dpGlobal.headTemplate + dpGlobal.contTemplate + "</table>" + "</div>" + '<div class="datepicker-years">' + '<table class="table-condensed">' + dpGlobal.headTemplate + dpGlobal.contTemplate + "</table>" + "</div>";
tpGlobal.getTemplate = function () {
return'<div class="timepicker-picker">' + '<table class="table-condensed">' + "<tr>" + '<td><a href="#" class="btn" data-action="incrementHours"><span class="' + picker.options.icons.up + '"></span></a></td>' + '<td class="separator"></td>' + '<td><a href="#" class="btn" data-action="incrementMinutes"><span class="' + picker.options.icons.up + '"></span></a></td>' + (!picker.use24hours ? '<td class="separator"></td>' : "") + "</tr>" + "<tr>" + "<td>" + tpGlobal.hourTemplate + "</td> " + '<td class="separator">:</td>' + "<td>" + tpGlobal.minuteTemplate + "</td> " + (!picker.use24hours ? '<td class="separator"></td>' + '<td><button type="button" class="btn btn-primary" data-action="togglePeriod"></button></td>' : "") + "</tr>" + "<tr>" + '<td><a href="#" class="btn" data-action="decrementHours"><span class="' + picker.options.icons.down + '"></span></a></td>' + '<td class="separator"></td>' + '<td><a href="#" class="btn" data-action="decrementMinutes"><span class="' + picker.options.icons.down + '"></span></a></td>' + (!picker.use24hours ? '<td class="separator"></td>' : "") + "</tr>" + "</table>" + "</div>" + '<div class="timepicker-hours" data-action="selectHour">' + '<table class="table-condensed"></table>' + "</div>" + '<div class="timepicker-minutes" data-action="selectMinute">' + '<table class="table-condensed"></table>' + "</div>"
};
picker.destroy = function () {
detachDatePickerEvents();
detachDatePickerGlobalEvents();
picker.widget.remove();
picker.element.removeData("DateTimePicker");
if (picker.component)picker.component.removeData("DateTimePicker")
};
picker.show = function (e) {
picker.widget.show();
picker.height = picker.component ? picker.component.outerHeight() : picker.element.outerHeight();
place();
picker.element.trigger({type: "show.dp", date: picker.date});
attachDatePickerGlobalEvents();
if (e) {
stopEvent(e)
}
}, picker.disable = function () {
picker.element.find("input").prop("disabled", true);
detachDatePickerEvents()
}, picker.enable = function () {
picker.element.find("input").prop("disabled", false);
attachDatePickerEvents()
}, picker.hide = function () {
var collapse = picker.widget.find(".collapse"), i, collapseData;
for (i = 0; i < collapse.length; i++) {
collapseData = collapse.eq(i).data("collapse");
if (collapseData && collapseData.transitioning)return
}
picker.widget.hide();
picker.viewMode = picker.startViewMode;
showMode();
picker.element.trigger({type: "hide.dp", date: picker.date});
detachDatePickerGlobalEvents()
}, picker.setValue = function (newDate) {
pMoment.lang(picker.options.language);
if (!newDate) {
picker.unset = true
} else {
picker.unset = false
}
if (!pMoment.isMoment(newDate))newDate = pMoment(newDate);
if (newDate.isValid()) {
picker.date = newDate;
set();
picker.viewDate = pMoment({y: picker.date.year(), M: picker.date.month()});
fillDate();
fillTime()
} else {
notifyError(newDate)
}
}, picker.getDate = function () {
if (picker.unset)return null;
return picker.date
}, picker.setDate = function (date) {
if (!date)picker.setValue(null); else picker.setValue(date)
}, picker.setEndDate = function (date) {
picker.options.endDate = pMoment(date);
if (!picker.options.endDate.isValid()) {
picker.options.endDate = pMoment().add(50, "y")
}
if (picker.viewDate)update()
}, picker.setStartDate = function (date) {
picker.options.startDate = pMoment(date);
if (!picker.options.startDate.isValid()) {
picker.options.startDate = pMoment({y: 1970})
}
if (picker.viewDate)update()
};
init()
};
$.fn.datetimepicker = function (options) {
return this.each(function () {
var $this = $(this), data = $this.data("DateTimePicker");
if (!data)$this.data("DateTimePicker", new DateTimePicker(this, options))
})
}
})(jQuery);