1453 lines
66 KiB
JavaScript
1453 lines
66 KiB
JavaScript
!function (c) {
|
|
function f() {
|
|
return new Date(Date.UTC.apply(Date, arguments))
|
|
}
|
|
|
|
function a() {
|
|
var g = new Date();
|
|
return f(g.getUTCFullYear(), g.getUTCMonth(), g.getUTCDate(), g.getUTCHours(), g.getUTCMinutes(), g.getUTCSeconds(), 0)
|
|
}
|
|
|
|
var e = function (i, h) {
|
|
var k = this;
|
|
this.element = c(i);
|
|
this.container = h.container || "body";
|
|
this.language = h.language || this.element.data("date-language") || "en";
|
|
this.language = this.language in d ? this.language : "en";
|
|
this.isRTL = d[this.language].rtl || false;
|
|
this.formatType = h.formatType || this.element.data("format-type") || "standard";
|
|
this.format = b.parseFormat(h.format || this.element.data("date-format") || d[this.language].format || b.getDefaultFormat(this.formatType, "input"), this.formatType);
|
|
this.isInline = false;
|
|
this.isVisible = false;
|
|
this.isInput = this.element.is("input");
|
|
this.fontAwesome = h.fontAwesome || this.element.data("font-awesome") || false;
|
|
this.bootcssVer = h.bootcssVer || (this.isInput ? (this.element.is(".form-control") ? 3 : 2) : (this.bootcssVer = this.element.is(".input-group") ? 3 : 2));
|
|
this.component = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-th, .input-group-addon .glyphicon-time, .input-group-addon .glyphicon-calendar .fa-calendar .fa-clock-o").parent() : this.element.find(".add-on .icon-th, .add-on .icon-time, .add-on .icon-calendar .fa-calendar .fa-clock-o").parent()) : false;
|
|
this.componentReset = this.element.is(".date") ? (this.bootcssVer == 3 ? this.element.find(".input-group-addon .glyphicon-remove .fa-times").parent() : this.element.find(".add-on .icon-remove .fa-times").parent()) : false;
|
|
this.hasInput = this.component && this.element.find("input").length;
|
|
if (this.component && this.component.length === 0) {
|
|
this.component = false
|
|
}
|
|
this.linkField = h.linkField || this.element.data("link-field") || false;
|
|
this.linkFormat = b.parseFormat(h.linkFormat || this.element.data("link-format") || b.getDefaultFormat(this.formatType, "link"), this.formatType);
|
|
this.minuteStep = h.minuteStep || this.element.data("minute-step") || 5;
|
|
this.pickerPosition = h.pickerPosition || this.element.data("picker-position") || "bottom-right";
|
|
this.showMeridian = h.showMeridian || this.element.data("show-meridian") || false;
|
|
this.initialDate = h.initialDate || new Date();
|
|
this.icons = {
|
|
leftArrow: this.fontAwesome ? "fa-arrow-left" : (this.bootcssVer === 3 ? "glyphicon-arrow-left" : "icon-arrow-left"),
|
|
rightArrow: this.fontAwesome ? "fa-arrow-right" : (this.bootcssVer === 3 ? "glyphicon-arrow-right" : "icon-arrow-right")
|
|
};
|
|
this.icontype = this.fontAwesome ? "fa" : "glyphicon";
|
|
this._attachEvents();
|
|
this.formatViewType = "datetime";
|
|
if ("formatViewType" in h) {
|
|
this.formatViewType = h.formatViewType
|
|
} else {
|
|
if ("formatViewType" in this.element.data()) {
|
|
this.formatViewType = this.element.data("formatViewType")
|
|
}
|
|
}
|
|
this.minView = 0;
|
|
if ("minView" in h) {
|
|
this.minView = h.minView
|
|
} else {
|
|
if ("minView" in this.element.data()) {
|
|
this.minView = this.element.data("min-view")
|
|
}
|
|
}
|
|
this.minView = b.convertViewMode(this.minView);
|
|
this.maxView = b.modes.length - 1;
|
|
if ("maxView" in h) {
|
|
this.maxView = h.maxView
|
|
} else {
|
|
if ("maxView" in this.element.data()) {
|
|
this.maxView = this.element.data("max-view")
|
|
}
|
|
}
|
|
this.maxView = b.convertViewMode(this.maxView);
|
|
this.wheelViewModeNavigation = false;
|
|
if ("wheelViewModeNavigation" in h) {
|
|
this.wheelViewModeNavigation = h.wheelViewModeNavigation
|
|
} else {
|
|
if ("wheelViewModeNavigation" in this.element.data()) {
|
|
this.wheelViewModeNavigation = this.element.data("view-mode-wheel-navigation")
|
|
}
|
|
}
|
|
this.wheelViewModeNavigationInverseDirection = false;
|
|
if ("wheelViewModeNavigationInverseDirection" in h) {
|
|
this.wheelViewModeNavigationInverseDirection = h.wheelViewModeNavigationInverseDirection
|
|
} else {
|
|
if ("wheelViewModeNavigationInverseDirection" in this.element.data()) {
|
|
this.wheelViewModeNavigationInverseDirection = this.element.data("view-mode-wheel-navigation-inverse-dir")
|
|
}
|
|
}
|
|
this.wheelViewModeNavigationDelay = 100;
|
|
if ("wheelViewModeNavigationDelay" in h) {
|
|
this.wheelViewModeNavigationDelay = h.wheelViewModeNavigationDelay
|
|
} else {
|
|
if ("wheelViewModeNavigationDelay" in this.element.data()) {
|
|
this.wheelViewModeNavigationDelay = this.element.data("view-mode-wheel-navigation-delay")
|
|
}
|
|
}
|
|
this.startViewMode = 2;
|
|
if ("startView" in h) {
|
|
this.startViewMode = h.startView
|
|
} else {
|
|
if ("startView" in this.element.data()) {
|
|
this.startViewMode = this.element.data("start-view")
|
|
}
|
|
}
|
|
this.startViewMode = b.convertViewMode(this.startViewMode);
|
|
this.viewMode = this.startViewMode;
|
|
this.viewSelect = this.minView;
|
|
if ("viewSelect" in h) {
|
|
this.viewSelect = h.viewSelect
|
|
} else {
|
|
if ("viewSelect" in this.element.data()) {
|
|
this.viewSelect = this.element.data("view-select")
|
|
}
|
|
}
|
|
this.viewSelect = b.convertViewMode(this.viewSelect);
|
|
this.forceParse = true;
|
|
if ("forceParse" in h) {
|
|
this.forceParse = h.forceParse
|
|
} else {
|
|
if ("dateForceParse" in this.element.data()) {
|
|
this.forceParse = this.element.data("date-force-parse")
|
|
}
|
|
}
|
|
var j = this.bootcssVer === 3 ? b.templateV3 : b.template;
|
|
while (j.indexOf("{iconType}") !== -1) {
|
|
j = j.replace("{iconType}", this.icontype)
|
|
}
|
|
while (j.indexOf("{leftArrow}") !== -1) {
|
|
j = j.replace("{leftArrow}", this.icons.leftArrow)
|
|
}
|
|
while (j.indexOf("{rightArrow}") !== -1) {
|
|
j = j.replace("{rightArrow}", this.icons.rightArrow)
|
|
}
|
|
this.picker = c(j).appendTo(this.isInline ? this.element : this.container).on({
|
|
click: c.proxy(this.click, this),
|
|
mousedown: c.proxy(this.mousedown, this)
|
|
});
|
|
if (this.wheelViewModeNavigation) {
|
|
if (c.fn.mousewheel) {
|
|
this.picker.on({mousewheel: c.proxy(this.mousewheel, this)})
|
|
} else {
|
|
console.log("Mouse Wheel event is not supported. Please include the jQuery Mouse Wheel plugin before enabling this option")
|
|
}
|
|
}
|
|
if (this.isInline) {
|
|
this.picker.addClass("datetimepicker-inline")
|
|
} else {
|
|
this.picker.addClass("datetimepicker-dropdown-" + this.pickerPosition + " dropdown-menu")
|
|
}
|
|
if (this.isRTL) {
|
|
this.picker.addClass("datetimepicker-rtl");
|
|
var g = this.bootcssVer === 3 ? ".prev span, .next span" : ".prev i, .next i";
|
|
this.picker.find(g).toggleClass(this.icons.leftArrow + " " + this.icons.rightArrow)
|
|
}
|
|
c(document).on("mousedown", function (l) {
|
|
if (c(l.target).closest(".datetimepicker").length === 0) {
|
|
k.hide()
|
|
}
|
|
});
|
|
this.autoclose = false;
|
|
if ("autoclose" in h) {
|
|
this.autoclose = h.autoclose
|
|
} else {
|
|
if ("dateAutoclose" in this.element.data()) {
|
|
this.autoclose = this.element.data("date-autoclose")
|
|
}
|
|
}
|
|
this.keyboardNavigation = true;
|
|
if ("keyboardNavigation" in h) {
|
|
this.keyboardNavigation = h.keyboardNavigation
|
|
} else {
|
|
if ("dateKeyboardNavigation" in this.element.data()) {
|
|
this.keyboardNavigation = this.element.data("date-keyboard-navigation")
|
|
}
|
|
}
|
|
this.todayBtn = (h.todayBtn || this.element.data("date-today-btn") || false);
|
|
this.todayHighlight = (h.todayHighlight || this.element.data("date-today-highlight") || false);
|
|
this.weekStart = ((h.weekStart || this.element.data("date-weekstart") || d[this.language].weekStart || 0) % 7);
|
|
this.weekEnd = ((this.weekStart + 6) % 7);
|
|
this.startDate = -Infinity;
|
|
this.endDate = Infinity;
|
|
this.daysOfWeekDisabled = [];
|
|
this.setStartDate(h.startDate || this.element.data("date-startdate"));
|
|
this.setEndDate(h.endDate || this.element.data("date-enddate"));
|
|
this.setDaysOfWeekDisabled(h.daysOfWeekDisabled || this.element.data("date-days-of-week-disabled"));
|
|
this.setMinutesDisabled(h.minutesDisabled || this.element.data("date-minute-disabled"));
|
|
this.setHoursDisabled(h.hoursDisabled || this.element.data("date-hour-disabled"));
|
|
this.fillDow();
|
|
this.fillMonths();
|
|
this.update();
|
|
this.showMode();
|
|
if (this.isInline) {
|
|
this.show()
|
|
}
|
|
};
|
|
e.prototype = {
|
|
constructor: e, _events: [], _attachEvents: function () {
|
|
this._detachEvents();
|
|
if (this.isInput) {
|
|
this._events = [[this.element, {
|
|
focus: c.proxy(this.show, this),
|
|
keyup: c.proxy(this.update, this),
|
|
keydown: c.proxy(this.keydown, this)
|
|
}]]
|
|
} else {
|
|
if (this.component && this.hasInput) {
|
|
this._events = [[this.element.find("input"), {
|
|
focus: c.proxy(this.show, this),
|
|
keyup: c.proxy(this.update, this),
|
|
keydown: c.proxy(this.keydown, this)
|
|
}], [this.component, {click: c.proxy(this.show, this)}]];
|
|
if (this.componentReset) {
|
|
this._events.push([this.componentReset, {click: c.proxy(this.reset, this)}])
|
|
}
|
|
} else {
|
|
if (this.element.is("div")) {
|
|
this.isInline = true
|
|
} else {
|
|
this._events = [[this.element, {click: c.proxy(this.show, this)}]]
|
|
}
|
|
}
|
|
}
|
|
for (var g = 0, h, j; g < this._events.length; g++) {
|
|
h = this._events[g][0];
|
|
j = this._events[g][1];
|
|
h.on(j)
|
|
}
|
|
}, _detachEvents: function () {
|
|
for (var g = 0, h, j; g < this._events.length; g++) {
|
|
h = this._events[g][0];
|
|
j = this._events[g][1];
|
|
h.off(j)
|
|
}
|
|
this._events = []
|
|
}, show: function (g) {
|
|
this.picker.show();
|
|
this.height = this.component ? this.component.outerHeight() : this.element.outerHeight();
|
|
if (this.forceParse) {
|
|
this.update()
|
|
}
|
|
this.place();
|
|
c(window).on("resize", c.proxy(this.place, this));
|
|
if (g) {
|
|
g.stopPropagation();
|
|
g.preventDefault()
|
|
}
|
|
this.isVisible = true;
|
|
this.element.trigger({type: "show", date: this.date})
|
|
}, hide: function (g) {
|
|
if (!this.isVisible) {
|
|
return
|
|
}
|
|
if (this.isInline) {
|
|
return
|
|
}
|
|
this.picker.hide();
|
|
c(window).off("resize", this.place);
|
|
this.viewMode = this.startViewMode;
|
|
this.showMode();
|
|
if (!this.isInput) {
|
|
c(document).off("mousedown", this.hide)
|
|
}
|
|
if (this.forceParse && (this.isInput && this.element.val() || this.hasInput && this.element.find("input").val())) {
|
|
this.setValue()
|
|
}
|
|
this.isVisible = false;
|
|
this.element.trigger({type: "hide", date: this.date})
|
|
}, remove: function () {
|
|
this._detachEvents();
|
|
this.picker.remove();
|
|
delete this.picker;
|
|
delete this.element.data().datetimepicker
|
|
}, getDate: function () {
|
|
var g = this.getUTCDate();
|
|
return new Date(g.getTime() + (g.getTimezoneOffset() * 60000))
|
|
}, getUTCDate: function () {
|
|
return this.date
|
|
}, setDate: function (g) {
|
|
this.setUTCDate(new Date(g.getTime() - (g.getTimezoneOffset() * 60000)))
|
|
}, setUTCDate: function (g) {
|
|
if (g >= this.startDate && g <= this.endDate) {
|
|
this.date = g;
|
|
this.setValue();
|
|
this.viewDate = this.date;
|
|
this.fill()
|
|
} else {
|
|
this.element.trigger({type: "outOfRange", date: g, startDate: this.startDate, endDate: this.endDate})
|
|
}
|
|
}, setFormat: function (h) {
|
|
this.format = b.parseFormat(h, this.formatType);
|
|
var g;
|
|
if (this.isInput) {
|
|
g = this.element
|
|
} else {
|
|
if (this.component) {
|
|
g = this.element.find("input")
|
|
}
|
|
}
|
|
if (g && g.val()) {
|
|
this.setValue()
|
|
}
|
|
}, setValue: function () {
|
|
var g = this.getFormattedDate();
|
|
if (!this.isInput) {
|
|
if (this.component) {
|
|
this.element.find("input").val(g)
|
|
}
|
|
this.element.data("date", g)
|
|
} else {
|
|
this.element.val(g)
|
|
}
|
|
if (this.linkField) {
|
|
c("#" + this.linkField).val(this.getFormattedDate(this.linkFormat))
|
|
}
|
|
}, getFormattedDate: function (g) {
|
|
if (g == undefined) {
|
|
g = this.format
|
|
}
|
|
return b.formatDate(this.date, g, this.language, this.formatType)
|
|
}, setStartDate: function (g) {
|
|
this.startDate = g || -Infinity;
|
|
if (this.startDate !== -Infinity) {
|
|
this.startDate = b.parseDate(this.startDate, this.format, this.language, this.formatType)
|
|
}
|
|
this.update();
|
|
this.updateNavArrows()
|
|
}, setEndDate: function (g) {
|
|
this.endDate = g || Infinity;
|
|
if (this.endDate !== Infinity) {
|
|
this.endDate = b.parseDate(this.endDate, this.format, this.language, this.formatType)
|
|
}
|
|
this.update();
|
|
this.updateNavArrows()
|
|
}, setDaysOfWeekDisabled: function (g) {
|
|
this.daysOfWeekDisabled = g || [];
|
|
if (!c.isArray(this.daysOfWeekDisabled)) {
|
|
this.daysOfWeekDisabled = this.daysOfWeekDisabled.split(/,\s*/)
|
|
}
|
|
this.daysOfWeekDisabled = c.map(this.daysOfWeekDisabled, function (h) {
|
|
return parseInt(h, 10)
|
|
});
|
|
this.update();
|
|
this.updateNavArrows()
|
|
}, setMinutesDisabled: function (g) {
|
|
this.minutesDisabled = g || [];
|
|
if (!c.isArray(this.minutesDisabled)) {
|
|
this.minutesDisabled = this.minutesDisabled.split(/,\s*/)
|
|
}
|
|
this.minutesDisabled = c.map(this.minutesDisabled, function (h) {
|
|
return parseInt(h, 10)
|
|
});
|
|
this.update();
|
|
this.updateNavArrows()
|
|
}, setHoursDisabled: function (g) {
|
|
this.hoursDisabled = g || [];
|
|
if (!c.isArray(this.hoursDisabled)) {
|
|
this.hoursDisabled = this.hoursDisabled.split(/,\s*/)
|
|
}
|
|
this.hoursDisabled = c.map(this.hoursDisabled, function (h) {
|
|
return parseInt(h, 10)
|
|
});
|
|
this.update();
|
|
this.updateNavArrows()
|
|
}, place: function () {
|
|
if (this.isInline) {
|
|
return
|
|
}
|
|
var g = 0;
|
|
c("div").each(function () {
|
|
var m = parseInt(c(this).css("zIndex"), 10);
|
|
if (m > g) {
|
|
g = m
|
|
}
|
|
});
|
|
var l = g + 10;
|
|
var k, j, i, h;
|
|
if (this.container instanceof c) {
|
|
h = this.container.offset()
|
|
} else {
|
|
h = c(this.container).offset()
|
|
}
|
|
if (this.component) {
|
|
k = this.component.offset();
|
|
i = k.left;
|
|
if (this.pickerPosition == "bottom-left" || this.pickerPosition == "top-left") {
|
|
i += this.component.outerWidth() - this.picker.outerWidth()
|
|
}
|
|
} else {
|
|
k = this.element.offset();
|
|
i = k.left
|
|
}
|
|
if (i + 220 > document.body.clientWidth) {
|
|
i = document.body.clientWidth - 220
|
|
}
|
|
if (this.pickerPosition == "top-left" || this.pickerPosition == "top-right") {
|
|
j = k.top - this.picker.outerHeight()
|
|
} else {
|
|
j = k.top + this.height
|
|
}
|
|
j = j - h.top;
|
|
i = i - h.left;
|
|
this.picker.css({top: j, left: i, zIndex: l})
|
|
}, update: function () {
|
|
var g, h = false;
|
|
if (arguments && arguments.length && (typeof arguments[0] === "string" || arguments[0] instanceof Date)) {
|
|
g = arguments[0];
|
|
h = true
|
|
} else {
|
|
g = (this.isInput ? this.element.val() : this.element.find("input").val()) || this.element.data("date") || this.initialDate;
|
|
if (typeof g == "string" || g instanceof String) {
|
|
g = g.replace(/^\s+|\s+$/g, "")
|
|
}
|
|
}
|
|
if (!g) {
|
|
g = new Date();
|
|
h = false
|
|
}
|
|
this.date = b.parseDate(g, this.format, this.language, this.formatType);
|
|
if (h) {
|
|
this.setValue()
|
|
}
|
|
if (this.date < this.startDate) {
|
|
this.viewDate = new Date(this.startDate)
|
|
} else {
|
|
if (this.date > this.endDate) {
|
|
this.viewDate = new Date(this.endDate)
|
|
} else {
|
|
this.viewDate = new Date(this.date)
|
|
}
|
|
}
|
|
this.fill()
|
|
}, fillDow: function () {
|
|
var g = this.weekStart, h = "<tr>";
|
|
while (g < this.weekStart + 7) {
|
|
h += '<th class="dow">' + d[this.language].daysMin[(g++) % 7] + "</th>"
|
|
}
|
|
h += "</tr>";
|
|
this.picker.find(".datetimepicker-days thead").append(h)
|
|
}, fillMonths: function () {
|
|
var h = "", g = 0;
|
|
while (g < 12) {
|
|
h += '<span class="month">' + d[this.language].monthsShort[g++] + "</span>"
|
|
}
|
|
this.picker.find(".datetimepicker-months td").html(h)
|
|
}, fill: function () {
|
|
if (this.date == null || this.viewDate == null) {
|
|
return
|
|
}
|
|
var G = new Date(this.viewDate), s = G.getUTCFullYear(), H = G.getUTCMonth(), l = G.getUTCDate(), B = G.getUTCHours(), w = G.getUTCMinutes(), x = this.startDate !== -Infinity ? this.startDate.getUTCFullYear() : -Infinity, C = this.startDate !== -Infinity ? this.startDate.getUTCMonth() + 1 : -Infinity, n = this.endDate !== Infinity ? this.endDate.getUTCFullYear() : Infinity, y = this.endDate !== Infinity ? this.endDate.getUTCMonth() + 1 : Infinity, p = (new f(this.date.getUTCFullYear(), this.date.getUTCMonth(), this.date.getUTCDate())).valueOf(), F = new Date();
|
|
this.picker.find(".datetimepicker-days thead th:eq(1)").text(d[this.language].months[H] + " " + s);
|
|
if (this.formatViewType == "time") {
|
|
var D = B % 12 ? B % 12 : 12;
|
|
var j = (D < 10 ? "0" : "") + D;
|
|
var o = (w < 10 ? "0" : "") + w;
|
|
var J = d[this.language].meridiem[B < 12 ? 0 : 1];
|
|
this.picker.find(".datetimepicker-hours thead th:eq(1)").text(j + ":" + o + " " + (J ? J.toUpperCase() : ""));
|
|
this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(j + ":" + o + " " + (J ? J.toUpperCase() : ""))
|
|
} else {
|
|
this.picker.find(".datetimepicker-hours thead th:eq(1)").text(l + " " + d[this.language].months[H] + " " + s);
|
|
this.picker.find(".datetimepicker-minutes thead th:eq(1)").text(l + " " + d[this.language].months[H] + " " + s)
|
|
}
|
|
this.picker.find("tfoot th.today").text(d[this.language].today).toggle(this.todayBtn !== false);
|
|
this.updateNavArrows();
|
|
this.fillMonths();
|
|
var K = f(s, H - 1, 28, 0, 0, 0, 0), A = b.getDaysInMonth(K.getUTCFullYear(), K.getUTCMonth());
|
|
K.setUTCDate(A);
|
|
K.setUTCDate(A - (K.getUTCDay() - this.weekStart + 7) % 7);
|
|
var g = new Date(K);
|
|
g.setUTCDate(g.getUTCDate() + 42);
|
|
g = g.valueOf();
|
|
var q = [];
|
|
var t;
|
|
while (K.valueOf() < g) {
|
|
if (K.getUTCDay() == this.weekStart) {
|
|
q.push("<tr>")
|
|
}
|
|
t = "";
|
|
if (K.getUTCFullYear() < s || (K.getUTCFullYear() == s && K.getUTCMonth() < H)) {
|
|
t += " old"
|
|
} else {
|
|
if (K.getUTCFullYear() > s || (K.getUTCFullYear() == s && K.getUTCMonth() > H)) {
|
|
t += " new"
|
|
}
|
|
}
|
|
if (this.todayHighlight && K.getUTCFullYear() == F.getFullYear() && K.getUTCMonth() == F.getMonth() && K.getUTCDate() == F.getDate()) {
|
|
t += " today"
|
|
}
|
|
if (K.valueOf() == p) {
|
|
t += " active"
|
|
}
|
|
if ((K.valueOf() + 86400000) <= this.startDate || K.valueOf() > this.endDate || c.inArray(K.getUTCDay(), this.daysOfWeekDisabled) !== -1) {
|
|
t += " disabled"
|
|
}
|
|
q.push('<td class="day' + t + '">' + K.getUTCDate() + "</td>");
|
|
if (K.getUTCDay() == this.weekEnd) {
|
|
q.push("</tr>")
|
|
}
|
|
K.setUTCDate(K.getUTCDate() + 1)
|
|
}
|
|
this.picker.find(".datetimepicker-days tbody").empty().append(q.join(""));
|
|
q = [];
|
|
var u = "", E = "", r = "";
|
|
var h = this.hoursDisabled || [];
|
|
for (var z = 0; z < 24; z++) {
|
|
if (h.indexOf(z) !== -1) {
|
|
continue
|
|
}
|
|
var v = f(s, H, l, z);
|
|
t = "";
|
|
if ((v.valueOf() + 3600000) <= this.startDate || v.valueOf() > this.endDate) {
|
|
t += " disabled"
|
|
} else {
|
|
if (B == z) {
|
|
t += " active"
|
|
}
|
|
}
|
|
if (this.showMeridian && d[this.language].meridiem.length == 2) {
|
|
E = (z < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1]);
|
|
if (E != r) {
|
|
if (r != "") {
|
|
q.push("</fieldset>")
|
|
}
|
|
q.push('<fieldset class="hour"><legend>' + E.toUpperCase() + "</legend>")
|
|
}
|
|
r = E;
|
|
u = (z % 12 ? z % 12 : 12);
|
|
q.push('<span class="hour' + t + " hour_" + (z < 12 ? "am" : "pm") + '">' + u + "</span>");
|
|
if (z == 23) {
|
|
q.push("</fieldset>")
|
|
}
|
|
} else {
|
|
u = z + ":00";
|
|
q.push('<span class="hour' + t + '">' + u + "</span>")
|
|
}
|
|
}
|
|
this.picker.find(".datetimepicker-hours td").html(q.join(""));
|
|
q = [];
|
|
u = "", E = "", r = "";
|
|
var k = this.minutesDisabled || [];
|
|
for (var z = 0; z < 60; z += this.minuteStep) {
|
|
if (k.indexOf(z) !== -1) {
|
|
continue
|
|
}
|
|
var v = f(s, H, l, B, z, 0);
|
|
t = "";
|
|
if (v.valueOf() < this.startDate || v.valueOf() > this.endDate) {
|
|
t += " disabled"
|
|
} else {
|
|
if (Math.floor(w / this.minuteStep) == Math.floor(z / this.minuteStep)) {
|
|
t += " active"
|
|
}
|
|
}
|
|
if (this.showMeridian && d[this.language].meridiem.length == 2) {
|
|
E = (B < 12 ? d[this.language].meridiem[0] : d[this.language].meridiem[1]);
|
|
if (E != r) {
|
|
if (r != "") {
|
|
q.push("</fieldset>")
|
|
}
|
|
q.push('<fieldset class="minute"><legend>' + E.toUpperCase() + "</legend>")
|
|
}
|
|
r = E;
|
|
u = (B % 12 ? B % 12 : 12);
|
|
q.push('<span class="minute' + t + '">' + u + ":" + (z < 10 ? "0" + z : z) + "</span>");
|
|
if (z == 59) {
|
|
q.push("</fieldset>")
|
|
}
|
|
} else {
|
|
u = z + ":00";
|
|
q.push('<span class="minute' + t + '">' + B + ":" + (z < 10 ? "0" + z : z) + "</span>")
|
|
}
|
|
}
|
|
this.picker.find(".datetimepicker-minutes td").html(q.join(""));
|
|
var L = this.date.getUTCFullYear();
|
|
var m = this.picker.find(".datetimepicker-months").find("th:eq(1)").text(s).end().find("span").removeClass("active");
|
|
if (L == s) {
|
|
m.eq(this.date.getUTCMonth() + 2).addClass("active")
|
|
}
|
|
if (s < x || s > n) {
|
|
m.addClass("disabled")
|
|
}
|
|
if (s == x) {
|
|
m.slice(0, C + 1).addClass("disabled")
|
|
}
|
|
if (s == n) {
|
|
m.slice(y).addClass("disabled")
|
|
}
|
|
q = "";
|
|
s = parseInt(s / 10, 10) * 10;
|
|
var I = this.picker.find(".datetimepicker-years").find("th:eq(1)").text(s + "-" + (s + 9)).end().find("td");
|
|
s -= 1;
|
|
for (var z = -1; z < 11; z++) {
|
|
q += '<span class="year' + (z == -1 || z == 10 ? " old" : "") + (L == s ? " active" : "") + (s < x || s > n ? " disabled" : "") + '">' + s + "</span>";
|
|
s += 1
|
|
}
|
|
I.html(q);
|
|
this.place()
|
|
}, updateNavArrows: function () {
|
|
var k = new Date(this.viewDate), i = k.getUTCFullYear(), j = k.getUTCMonth(), h = k.getUTCDate(), g = k.getUTCHours();
|
|
switch (this.viewMode) {
|
|
case 0:
|
|
if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth() && h <= this.startDate.getUTCDate() && g <= this.startDate.getUTCHours()) {
|
|
this.picker.find(".prev").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".prev").css({visibility: "visible"})
|
|
}
|
|
if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth() && h >= this.endDate.getUTCDate() && g >= this.endDate.getUTCHours()) {
|
|
this.picker.find(".next").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".next").css({visibility: "visible"})
|
|
}
|
|
break;
|
|
case 1:
|
|
if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth() && h <= this.startDate.getUTCDate()) {
|
|
this.picker.find(".prev").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".prev").css({visibility: "visible"})
|
|
}
|
|
if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth() && h >= this.endDate.getUTCDate()) {
|
|
this.picker.find(".next").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".next").css({visibility: "visible"})
|
|
}
|
|
break;
|
|
case 2:
|
|
if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear() && j <= this.startDate.getUTCMonth()) {
|
|
this.picker.find(".prev").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".prev").css({visibility: "visible"})
|
|
}
|
|
if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear() && j >= this.endDate.getUTCMonth()) {
|
|
this.picker.find(".next").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".next").css({visibility: "visible"})
|
|
}
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
if (this.startDate !== -Infinity && i <= this.startDate.getUTCFullYear()) {
|
|
this.picker.find(".prev").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".prev").css({visibility: "visible"})
|
|
}
|
|
if (this.endDate !== Infinity && i >= this.endDate.getUTCFullYear()) {
|
|
this.picker.find(".next").css({visibility: "hidden"})
|
|
} else {
|
|
this.picker.find(".next").css({visibility: "visible"})
|
|
}
|
|
break
|
|
}
|
|
}, mousewheel: function (h) {
|
|
h.preventDefault();
|
|
h.stopPropagation();
|
|
if (this.wheelPause) {
|
|
return
|
|
}
|
|
this.wheelPause = true;
|
|
var g = h.originalEvent;
|
|
var j = g.wheelDelta;
|
|
var i = j > 0 ? 1 : (j === 0) ? 0 : -1;
|
|
if (this.wheelViewModeNavigationInverseDirection) {
|
|
i = -i
|
|
}
|
|
this.showMode(i);
|
|
setTimeout(c.proxy(function () {
|
|
this.wheelPause = false
|
|
}, this), this.wheelViewModeNavigationDelay)
|
|
}, click: function (k) {
|
|
k.stopPropagation();
|
|
k.preventDefault();
|
|
var l = c(k.target).closest("span, td, th, legend");
|
|
if (l.is("." + this.icontype)) {
|
|
l = c(l).parent().closest("span, td, th, legend")
|
|
}
|
|
if (l.length == 1) {
|
|
if (l.is(".disabled")) {
|
|
this.element.trigger({
|
|
type: "outOfRange",
|
|
date: this.viewDate,
|
|
startDate: this.startDate,
|
|
endDate: this.endDate
|
|
});
|
|
return
|
|
}
|
|
switch (l[0].nodeName.toLowerCase()) {
|
|
case"th":
|
|
switch (l[0].className) {
|
|
case"switch":
|
|
this.showMode(1);
|
|
break;
|
|
case"prev":
|
|
case"next":
|
|
var g = b.modes[this.viewMode].navStep * (l[0].className == "prev" ? -1 : 1);
|
|
switch (this.viewMode) {
|
|
case 0:
|
|
this.viewDate = this.moveHour(this.viewDate, g);
|
|
break;
|
|
case 1:
|
|
this.viewDate = this.moveDate(this.viewDate, g);
|
|
break;
|
|
case 2:
|
|
this.viewDate = this.moveMonth(this.viewDate, g);
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
this.viewDate = this.moveYear(this.viewDate, g);
|
|
break
|
|
}
|
|
this.fill();
|
|
this.element.trigger({
|
|
type: l[0].className + ":" + this.convertViewModeText(this.viewMode),
|
|
date: this.viewDate,
|
|
startDate: this.startDate,
|
|
endDate: this.endDate
|
|
});
|
|
break;
|
|
case"today":
|
|
var h = new Date();
|
|
h = f(h.getFullYear(), h.getMonth(), h.getDate(), h.getHours(), h.getMinutes(), h.getSeconds(), 0);
|
|
if (h < this.startDate) {
|
|
h = this.startDate
|
|
} else {
|
|
if (h > this.endDate) {
|
|
h = this.endDate
|
|
}
|
|
}
|
|
this.viewMode = this.startViewMode;
|
|
this.showMode(0);
|
|
this._setDate(h);
|
|
this.fill();
|
|
if (this.autoclose) {
|
|
this.hide()
|
|
}
|
|
break
|
|
}
|
|
break;
|
|
case"span":
|
|
if (!l.is(".disabled")) {
|
|
var n = this.viewDate.getUTCFullYear(), m = this.viewDate.getUTCMonth(), o = this.viewDate.getUTCDate(), p = this.viewDate.getUTCHours(), i = this.viewDate.getUTCMinutes(), q = this.viewDate.getUTCSeconds();
|
|
if (l.is(".month")) {
|
|
this.viewDate.setUTCDate(1);
|
|
m = l.parent().find("span").index(l);
|
|
o = this.viewDate.getUTCDate();
|
|
this.viewDate.setUTCMonth(m);
|
|
this.element.trigger({type: "changeMonth", date: this.viewDate});
|
|
if (this.viewSelect >= 3) {
|
|
this._setDate(f(n, m, o, p, i, q, 0))
|
|
}
|
|
} else {
|
|
if (l.is(".year")) {
|
|
this.viewDate.setUTCDate(1);
|
|
n = parseInt(l.text(), 10) || 0;
|
|
this.viewDate.setUTCFullYear(n);
|
|
this.element.trigger({type: "changeYear", date: this.viewDate});
|
|
if (this.viewSelect >= 4) {
|
|
this._setDate(f(n, m, o, p, i, q, 0))
|
|
}
|
|
} else {
|
|
if (l.is(".hour")) {
|
|
p = parseInt(l.text(), 10) || 0;
|
|
if (l.hasClass("hour_am") || l.hasClass("hour_pm")) {
|
|
if (p == 12 && l.hasClass("hour_am")) {
|
|
p = 0
|
|
} else {
|
|
if (p != 12 && l.hasClass("hour_pm")) {
|
|
p += 12
|
|
}
|
|
}
|
|
}
|
|
this.viewDate.setUTCHours(p);
|
|
this.element.trigger({type: "changeHour", date: this.viewDate});
|
|
if (this.viewSelect >= 1) {
|
|
this._setDate(f(n, m, o, p, i, q, 0))
|
|
}
|
|
} else {
|
|
if (l.is(".minute")) {
|
|
i = parseInt(l.text().substr(l.text().indexOf(":") + 1), 10) || 0;
|
|
this.viewDate.setUTCMinutes(i);
|
|
this.element.trigger({type: "changeMinute", date: this.viewDate});
|
|
if (this.viewSelect >= 0) {
|
|
this._setDate(f(n, m, o, p, i, q, 0))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.viewMode != 0) {
|
|
var j = this.viewMode;
|
|
this.showMode(-1);
|
|
this.fill();
|
|
if (j == this.viewMode && this.autoclose) {
|
|
this.hide()
|
|
}
|
|
} else {
|
|
this.fill();
|
|
if (this.autoclose) {
|
|
this.hide()
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case"td":
|
|
if (l.is(".day") && !l.is(".disabled")) {
|
|
var o = parseInt(l.text(), 10) || 1;
|
|
var n = this.viewDate.getUTCFullYear(), m = this.viewDate.getUTCMonth(), p = this.viewDate.getUTCHours(), i = this.viewDate.getUTCMinutes(), q = this.viewDate.getUTCSeconds();
|
|
if (l.is(".old")) {
|
|
if (m === 0) {
|
|
m = 11;
|
|
n -= 1
|
|
} else {
|
|
m -= 1
|
|
}
|
|
} else {
|
|
if (l.is(".new")) {
|
|
if (m == 11) {
|
|
m = 0;
|
|
n += 1
|
|
} else {
|
|
m += 1
|
|
}
|
|
}
|
|
}
|
|
this.viewDate.setUTCFullYear(n);
|
|
this.viewDate.setUTCMonth(m, o);
|
|
this.element.trigger({type: "changeDay", date: this.viewDate});
|
|
if (this.viewSelect >= 2) {
|
|
this._setDate(f(n, m, o, p, i, q, 0))
|
|
}
|
|
}
|
|
var j = this.viewMode;
|
|
this.showMode(-1);
|
|
this.fill();
|
|
if (j == this.viewMode && this.autoclose) {
|
|
this.hide()
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}, _setDate: function (g, i) {
|
|
if (!i || i == "date") {
|
|
this.date = g
|
|
}
|
|
if (!i || i == "view") {
|
|
this.viewDate = g
|
|
}
|
|
this.fill();
|
|
this.setValue();
|
|
var h;
|
|
if (this.isInput) {
|
|
h = this.element
|
|
} else {
|
|
if (this.component) {
|
|
h = this.element.find("input")
|
|
}
|
|
}
|
|
if (h) {
|
|
h.change();
|
|
if (this.autoclose && (!i || i == "date")) {
|
|
}
|
|
}
|
|
this.element.trigger({type: "changeDate", date: this.date})
|
|
}, moveMinute: function (h, g) {
|
|
if (!g) {
|
|
return h
|
|
}
|
|
var i = new Date(h.valueOf());
|
|
i.setUTCMinutes(i.getUTCMinutes() + (g * this.minuteStep));
|
|
return i
|
|
}, moveHour: function (h, g) {
|
|
if (!g) {
|
|
return h
|
|
}
|
|
var i = new Date(h.valueOf());
|
|
i.setUTCHours(i.getUTCHours() + g);
|
|
return i
|
|
}, moveDate: function (h, g) {
|
|
if (!g) {
|
|
return h
|
|
}
|
|
var i = new Date(h.valueOf());
|
|
i.setUTCDate(i.getUTCDate() + g);
|
|
return i
|
|
}, moveMonth: function (g, h) {
|
|
if (!h) {
|
|
return g
|
|
}
|
|
var l = new Date(g.valueOf()), p = l.getUTCDate(), m = l.getUTCMonth(), k = Math.abs(h), o, n;
|
|
h = h > 0 ? 1 : -1;
|
|
if (k == 1) {
|
|
n = h == -1 ? function () {
|
|
return l.getUTCMonth() == m
|
|
} : function () {
|
|
return l.getUTCMonth() != o
|
|
};
|
|
o = m + h;
|
|
l.setUTCMonth(o);
|
|
if (o < 0 || o > 11) {
|
|
o = (o + 12) % 12
|
|
}
|
|
} else {
|
|
for (var j = 0; j < k; j++) {
|
|
l = this.moveMonth(l, h)
|
|
}
|
|
o = l.getUTCMonth();
|
|
l.setUTCDate(p);
|
|
n = function () {
|
|
return o != l.getUTCMonth()
|
|
}
|
|
}
|
|
while (n()) {
|
|
l.setUTCDate(--p);
|
|
l.setUTCMonth(o)
|
|
}
|
|
return l
|
|
}, moveYear: function (h, g) {
|
|
return this.moveMonth(h, g * 12)
|
|
}, dateWithinRange: function (g) {
|
|
return g >= this.startDate && g <= this.endDate
|
|
}, keydown: function (k) {
|
|
if (this.picker.is(":not(:visible)")) {
|
|
if (k.keyCode == 27) {
|
|
this.show()
|
|
}
|
|
return
|
|
}
|
|
var m = false, h, n, l, o, g;
|
|
switch (k.keyCode) {
|
|
case 27:
|
|
this.hide();
|
|
k.preventDefault();
|
|
break;
|
|
case 37:
|
|
case 39:
|
|
if (!this.keyboardNavigation) {
|
|
break
|
|
}
|
|
h = k.keyCode == 37 ? -1 : 1;
|
|
viewMode = this.viewMode;
|
|
if (k.ctrlKey) {
|
|
viewMode += 2
|
|
} else {
|
|
if (k.shiftKey) {
|
|
viewMode += 1
|
|
}
|
|
}
|
|
if (viewMode == 4) {
|
|
o = this.moveYear(this.date, h);
|
|
g = this.moveYear(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 3) {
|
|
o = this.moveMonth(this.date, h);
|
|
g = this.moveMonth(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 2) {
|
|
o = this.moveDate(this.date, h);
|
|
g = this.moveDate(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 1) {
|
|
o = this.moveHour(this.date, h);
|
|
g = this.moveHour(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 0) {
|
|
o = this.moveMinute(this.date, h);
|
|
g = this.moveMinute(this.viewDate, h)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.dateWithinRange(o)) {
|
|
this.date = o;
|
|
this.viewDate = g;
|
|
this.setValue();
|
|
this.update();
|
|
k.preventDefault();
|
|
m = true
|
|
}
|
|
break;
|
|
case 38:
|
|
case 40:
|
|
if (!this.keyboardNavigation) {
|
|
break
|
|
}
|
|
h = k.keyCode == 38 ? -1 : 1;
|
|
viewMode = this.viewMode;
|
|
if (k.ctrlKey) {
|
|
viewMode += 2
|
|
} else {
|
|
if (k.shiftKey) {
|
|
viewMode += 1
|
|
}
|
|
}
|
|
if (viewMode == 4) {
|
|
o = this.moveYear(this.date, h);
|
|
g = this.moveYear(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 3) {
|
|
o = this.moveMonth(this.date, h);
|
|
g = this.moveMonth(this.viewDate, h)
|
|
} else {
|
|
if (viewMode == 2) {
|
|
o = this.moveDate(this.date, h * 7);
|
|
g = this.moveDate(this.viewDate, h * 7)
|
|
} else {
|
|
if (viewMode == 1) {
|
|
if (this.showMeridian) {
|
|
o = this.moveHour(this.date, h * 6);
|
|
g = this.moveHour(this.viewDate, h * 6)
|
|
} else {
|
|
o = this.moveHour(this.date, h * 4);
|
|
g = this.moveHour(this.viewDate, h * 4)
|
|
}
|
|
} else {
|
|
if (viewMode == 0) {
|
|
o = this.moveMinute(this.date, h * 4);
|
|
g = this.moveMinute(this.viewDate, h * 4)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (this.dateWithinRange(o)) {
|
|
this.date = o;
|
|
this.viewDate = g;
|
|
this.setValue();
|
|
this.update();
|
|
k.preventDefault();
|
|
m = true
|
|
}
|
|
break;
|
|
case 13:
|
|
if (this.viewMode != 0) {
|
|
var j = this.viewMode;
|
|
this.showMode(-1);
|
|
this.fill();
|
|
if (j == this.viewMode && this.autoclose) {
|
|
this.hide()
|
|
}
|
|
} else {
|
|
this.fill();
|
|
if (this.autoclose) {
|
|
this.hide()
|
|
}
|
|
}
|
|
k.preventDefault();
|
|
break;
|
|
case 9:
|
|
this.hide();
|
|
break
|
|
}
|
|
if (m) {
|
|
var i;
|
|
if (this.isInput) {
|
|
i = this.element
|
|
} else {
|
|
if (this.component) {
|
|
i = this.element.find("input")
|
|
}
|
|
}
|
|
if (i) {
|
|
i.change()
|
|
}
|
|
this.element.trigger({type: "changeDate", date: this.date})
|
|
}
|
|
}, showMode: function (g) {
|
|
if (g) {
|
|
var h = Math.max(0, Math.min(b.modes.length - 1, this.viewMode + g));
|
|
if (h >= this.minView && h <= this.maxView) {
|
|
this.element.trigger({
|
|
type: "changeMode",
|
|
date: this.viewDate,
|
|
oldViewMode: this.viewMode,
|
|
newViewMode: h
|
|
});
|
|
this.viewMode = h
|
|
}
|
|
}
|
|
this.picker.find(">div").hide().filter(".datetimepicker-" + b.modes[this.viewMode].clsName).css("display", "block");
|
|
this.updateNavArrows()
|
|
}, reset: function (g) {
|
|
this._setDate(null, "date")
|
|
}, convertViewModeText: function (g) {
|
|
switch (g) {
|
|
case 4:
|
|
return "decade";
|
|
case 3:
|
|
return "year";
|
|
case 2:
|
|
return "month";
|
|
case 1:
|
|
return "day";
|
|
case 0:
|
|
return "hour"
|
|
}
|
|
}
|
|
};
|
|
c.fn.datetimepicker = function (i) {
|
|
var g = Array.apply(null, arguments);
|
|
g.shift();
|
|
var h;
|
|
this.each(function () {
|
|
var l = c(this), k = l.data("datetimepicker"), j = typeof i == "object" && i;
|
|
if (!k) {
|
|
l.data("datetimepicker", (k = new e(this, c.extend({}, c.fn.datetimepicker.defaults, j))))
|
|
}
|
|
if (typeof i == "string" && typeof k[i] == "function") {
|
|
h = k[i].apply(k, g);
|
|
if (h !== undefined) {
|
|
return false
|
|
}
|
|
}
|
|
});
|
|
if (h !== undefined) {
|
|
return h
|
|
} else {
|
|
return this
|
|
}
|
|
};
|
|
c.fn.datetimepicker.defaults = {};
|
|
c.fn.datetimepicker.Constructor = e;
|
|
var d = c.fn.datetimepicker.dates = {
|
|
en: {
|
|
/* days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
|
|
daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
|
|
daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"],
|
|
months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
|
|
monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
|
|
meridiem: ["am", "pm"],
|
|
suffix: ["st", "nd", "rd", "th"],
|
|
today: "Today"*/
|
|
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六","星期日"],
|
|
daysShort: ["日", "一", "二", "三", "四", "五", "六","日"],
|
|
daysMin: ["日", "一", "二", "三", "四", "五", "六","日"],
|
|
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月","十二月"],
|
|
monthsShort: ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"],
|
|
meridiem: ["上午", "下午"],
|
|
//suffix: ["st", "nd", "rd", "th"],
|
|
today: "今天"
|
|
}
|
|
};
|
|
var b = {
|
|
modes: [{clsName: "minutes", navFnc: "Hours", navStep: 1}, {
|
|
clsName: "hours",
|
|
navFnc: "Date",
|
|
navStep: 1
|
|
}, {clsName: "days", navFnc: "Month", navStep: 1}, {
|
|
clsName: "months",
|
|
navFnc: "FullYear",
|
|
navStep: 1
|
|
}, {clsName: "years", navFnc: "FullYear", navStep: 10}],
|
|
isLeapYear: function (g) {
|
|
return (((g % 4 === 0) && (g % 100 !== 0)) || (g % 400 === 0))
|
|
},
|
|
getDaysInMonth: function (g, h) {
|
|
return [31, (b.isLeapYear(g) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][h]
|
|
},
|
|
getDefaultFormat: function (g, h) {
|
|
if (g == "standard") {
|
|
if (h == "input") {
|
|
return "yyyy-mm-dd hh:ii"
|
|
} else {
|
|
return "yyyy-mm-dd hh:ii:ss"
|
|
}
|
|
} else {
|
|
if (g == "php") {
|
|
if (h == "input") {
|
|
return "Y-m-d H:i"
|
|
} else {
|
|
return "Y-m-d H:i:s"
|
|
}
|
|
} else {
|
|
throw new Error("Invalid format type.")
|
|
}
|
|
}
|
|
},
|
|
validParts: function (g) {
|
|
if (g == "standard") {
|
|
return /hh?|HH?|p|P|ii?|ss?|dd?|DD?|mm?|MM?|yy(?:yy)?/g
|
|
} else {
|
|
if (g == "php") {
|
|
return /[dDjlNwzFmMnStyYaABgGhHis]/g
|
|
} else {
|
|
throw new Error("Invalid format type.")
|
|
}
|
|
}
|
|
},
|
|
nonpunctuation: /[^ -\/:-@\[-`{-~\t\n\rTZ]+/g,
|
|
parseFormat: function (j, h) {
|
|
var g = j.replace(this.validParts(h), "\0").split("\0"), i = j.match(this.validParts(h));
|
|
if (!g || !g.length || !i || i.length == 0) {
|
|
throw new Error("Invalid date format.")
|
|
}
|
|
return {separators: g, parts: i}
|
|
},
|
|
parseDate: function (l, u, o, r) {
|
|
if (l instanceof Date) {
|
|
var w = new Date(l.valueOf() - l.getTimezoneOffset() * 60000);
|
|
w.setMilliseconds(0);
|
|
return w
|
|
}
|
|
if (/^\d{4}\-\d{1,2}\-\d{1,2}$/.test(l)) {
|
|
u = this.parseFormat("yyyy-mm-dd", r)
|
|
}
|
|
if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}$/.test(l)) {
|
|
u = this.parseFormat("yyyy-mm-dd hh:ii", r)
|
|
}
|
|
if (/^\d{4}\-\d{1,2}\-\d{1,2}[T ]\d{1,2}\:\d{1,2}\:\d{1,2}[Z]{0,1}$/.test(l)) {
|
|
u = this.parseFormat("yyyy-mm-dd hh:ii:ss", r)
|
|
}
|
|
if (/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(l)) {
|
|
var x = /([-+]\d+)([dmwy])/, m = l.match(/([-+]\d+)([dmwy])/g), g, k;
|
|
l = new Date();
|
|
for (var n = 0; n < m.length; n++) {
|
|
g = x.exec(m[n]);
|
|
k = parseInt(g[1]);
|
|
switch (g[2]) {
|
|
case"d":
|
|
l.setUTCDate(l.getUTCDate() + k);
|
|
break;
|
|
case"m":
|
|
l = e.prototype.moveMonth.call(e.prototype, l, k);
|
|
break;
|
|
case"w":
|
|
l.setUTCDate(l.getUTCDate() + k * 7);
|
|
break;
|
|
case"y":
|
|
l = e.prototype.moveYear.call(e.prototype, l, k);
|
|
break
|
|
}
|
|
}
|
|
return f(l.getUTCFullYear(), l.getUTCMonth(), l.getUTCDate(), l.getUTCHours(), l.getUTCMinutes(), l.getUTCSeconds(), 0)
|
|
}
|
|
var m = l && l.match(this.nonpunctuation) || [], l = new Date(0, 0, 0, 0, 0, 0, 0), q = {}, t = ["hh", "h", "ii", "i", "ss", "s", "yyyy", "yy", "M", "MM", "m", "mm", "D", "DD", "d", "dd", "H", "HH", "p", "P"], v = {
|
|
hh: function (s, i) {
|
|
return s.setUTCHours(i)
|
|
}, h: function (s, i) {
|
|
return s.setUTCHours(i)
|
|
}, HH: function (s, i) {
|
|
return s.setUTCHours(i == 12 ? 0 : i)
|
|
}, H: function (s, i) {
|
|
return s.setUTCHours(i == 12 ? 0 : i)
|
|
}, ii: function (s, i) {
|
|
return s.setUTCMinutes(i)
|
|
}, i: function (s, i) {
|
|
return s.setUTCMinutes(i)
|
|
}, ss: function (s, i) {
|
|
return s.setUTCSeconds(i)
|
|
}, s: function (s, i) {
|
|
return s.setUTCSeconds(i)
|
|
}, yyyy: function (s, i) {
|
|
return s.setUTCFullYear(i)
|
|
}, yy: function (s, i) {
|
|
return s.setUTCFullYear(2000 + i)
|
|
}, m: function (s, i) {
|
|
i -= 1;
|
|
while (i < 0) {
|
|
i += 12
|
|
}
|
|
i %= 12;
|
|
s.setUTCMonth(i);
|
|
while (s.getUTCMonth() != i) {
|
|
if (isNaN(s.getUTCMonth())) {
|
|
return s
|
|
} else {
|
|
s.setUTCDate(s.getUTCDate() - 1)
|
|
}
|
|
}
|
|
return s
|
|
}, d: function (s, i) {
|
|
return s.setUTCDate(i)
|
|
}, p: function (s, i) {
|
|
return s.setUTCHours(i == 1 ? s.getUTCHours() + 12 : s.getUTCHours())
|
|
}
|
|
}, j, p, g;
|
|
v.M = v.MM = v.mm = v.m;
|
|
v.dd = v.d;
|
|
v.P = v.p;
|
|
l = f(l.getFullYear(), l.getMonth(), l.getDate(), l.getHours(), l.getMinutes(), l.getSeconds());
|
|
if (m.length == u.parts.length) {
|
|
for (var n = 0, h = u.parts.length; n < h; n++) {
|
|
j = parseInt(m[n], 10);
|
|
g = u.parts[n];
|
|
if (isNaN(j)) {
|
|
switch (g) {
|
|
case"MM":
|
|
p = c(d[o].months).filter(function () {
|
|
var i = this.slice(0, m[n].length), s = m[n].slice(0, i.length);
|
|
return i == s
|
|
});
|
|
j = c.inArray(p[0], d[o].months) + 1;
|
|
break;
|
|
case"M":
|
|
p = c(d[o].monthsShort).filter(function () {
|
|
var i = this.slice(0, m[n].length), s = m[n].slice(0, i.length);
|
|
return i.toLowerCase() == s.toLowerCase()
|
|
});
|
|
j = c.inArray(p[0], d[o].monthsShort) + 1;
|
|
break;
|
|
case"p":
|
|
case"P":
|
|
j = c.inArray(m[n].toLowerCase(), d[o].meridiem);
|
|
break
|
|
}
|
|
}
|
|
q[g] = j
|
|
}
|
|
for (var n = 0, y; n < t.length; n++) {
|
|
y = t[n];
|
|
if (y in q && !isNaN(q[y])) {
|
|
v[y](l, q[y])
|
|
}
|
|
}
|
|
}
|
|
return l
|
|
},
|
|
formatDate: function (g, m, o, k) {
|
|
if (g == null) {
|
|
return ""
|
|
}
|
|
var n;
|
|
if (k == "standard") {
|
|
n = {
|
|
yy: g.getUTCFullYear().toString().substring(2),
|
|
yyyy: g.getUTCFullYear(),
|
|
m: g.getUTCMonth() + 1,
|
|
M: d[o].monthsShort[g.getUTCMonth()],
|
|
MM: d[o].months[g.getUTCMonth()],
|
|
d: g.getUTCDate(),
|
|
D: d[o].daysShort[g.getUTCDay()],
|
|
DD: d[o].days[g.getUTCDay()],
|
|
p: (d[o].meridiem.length == 2 ? d[o].meridiem[g.getUTCHours() < 12 ? 0 : 1] : ""),
|
|
h: g.getUTCHours(),
|
|
i: g.getUTCMinutes(),
|
|
s: g.getUTCSeconds()
|
|
};
|
|
if (d[o].meridiem.length == 2) {
|
|
n.H = (n.h % 12 == 0 ? 12 : n.h % 12)
|
|
} else {
|
|
n.H = n.h
|
|
}
|
|
n.HH = (n.H < 10 ? "0" : "") + n.H;
|
|
n.P = n.p.toUpperCase();
|
|
n.hh = (n.h < 10 ? "0" : "") + n.h;
|
|
n.ii = (n.i < 10 ? "0" : "") + n.i;
|
|
n.ss = (n.s < 10 ? "0" : "") + n.s;
|
|
n.dd = (n.d < 10 ? "0" : "") + n.d;
|
|
n.mm = (n.m < 10 ? "0" : "") + n.m
|
|
} else {
|
|
if (k == "php") {
|
|
n = {
|
|
y: g.getUTCFullYear().toString().substring(2),
|
|
Y: g.getUTCFullYear(),
|
|
F: d[o].months[g.getUTCMonth()],
|
|
M: d[o].monthsShort[g.getUTCMonth()],
|
|
n: g.getUTCMonth() + 1,
|
|
t: b.getDaysInMonth(g.getUTCFullYear(), g.getUTCMonth()),
|
|
j: g.getUTCDate(),
|
|
l: d[o].days[g.getUTCDay()],
|
|
D: d[o].daysShort[g.getUTCDay()],
|
|
w: g.getUTCDay(),
|
|
N: (g.getUTCDay() == 0 ? 7 : g.getUTCDay()),
|
|
S: (g.getUTCDate() % 10 <= d[o].suffix.length ? d[o].suffix[g.getUTCDate() % 10 - 1] : ""),
|
|
a: (d[o].meridiem.length == 2 ? d[o].meridiem[g.getUTCHours() < 12 ? 0 : 1] : ""),
|
|
g: (g.getUTCHours() % 12 == 0 ? 12 : g.getUTCHours() % 12),
|
|
G: g.getUTCHours(),
|
|
i: g.getUTCMinutes(),
|
|
s: g.getUTCSeconds()
|
|
};
|
|
n.m = (n.n < 10 ? "0" : "") + n.n;
|
|
n.d = (n.j < 10 ? "0" : "") + n.j;
|
|
n.A = n.a.toString().toUpperCase();
|
|
n.h = (n.g < 10 ? "0" : "") + n.g;
|
|
n.H = (n.G < 10 ? "0" : "") + n.G;
|
|
n.i = (n.i < 10 ? "0" : "") + n.i;
|
|
n.s = (n.s < 10 ? "0" : "") + n.s
|
|
} else {
|
|
throw new Error("Invalid format type.")
|
|
}
|
|
}
|
|
var g = [], l = c.extend([], m.separators);
|
|
for (var j = 0, h = m.parts.length; j < h; j++) {
|
|
if (l.length) {
|
|
g.push(l.shift())
|
|
}
|
|
g.push(n[m.parts[j]])
|
|
}
|
|
if (l.length) {
|
|
g.push(l.shift())
|
|
}
|
|
return g.join("")
|
|
},
|
|
convertViewMode: function (g) {
|
|
switch (g) {
|
|
case 4:
|
|
case"decade":
|
|
g = 4;
|
|
break;
|
|
case 3:
|
|
case"year":
|
|
g = 3;
|
|
break;
|
|
case 2:
|
|
case"month":
|
|
g = 2;
|
|
break;
|
|
case 1:
|
|
case"day":
|
|
g = 1;
|
|
break;
|
|
case 0:
|
|
case"hour":
|
|
g = 0;
|
|
break
|
|
}
|
|
return g
|
|
},
|
|
headTemplate: '<thead><tr><th class="prev"><i class="{leftArrow}"/></th><th colspan="5" class="switch"></th><th class="next"><i class="{rightArrow}"/></th></tr></thead>',
|
|
headTemplateV3: '<thead><tr><th class="prev"><span class="{iconType} {leftArrow}"></span> </th><th colspan="5" class="switch"></th><th class="next"><span class="{iconType} {rightArrow}"></span> </th></tr></thead>',
|
|
contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>',
|
|
footTemplate: '<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'
|
|
};
|
|
b.template = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + b.headTemplate + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + b.headTemplate + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + b.headTemplate + "<tbody></tbody>" + b.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + b.headTemplate + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + b.headTemplate + b.contTemplate + b.footTemplate + "</table></div></div>";
|
|
b.templateV3 = '<div class="datetimepicker"><div class="datetimepicker-minutes"><table class=" table-condensed">' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-hours"><table class=" table-condensed">' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-days"><table class=" table-condensed">' + b.headTemplateV3 + "<tbody></tbody>" + b.footTemplate + '</table></div><div class="datetimepicker-months"><table class="table-condensed">' + b.headTemplateV3 + b.contTemplate + b.footTemplate + '</table></div><div class="datetimepicker-years"><table class="table-condensed">' + b.headTemplateV3 + b.contTemplate + b.footTemplate + "</table></div></div>";
|
|
c.fn.datetimepicker.DPGlobal = b;
|
|
c.fn.datetimepicker.noConflict = function () {
|
|
c.fn.datetimepicker = old;
|
|
return this
|
|
};
|
|
c(document).on("focus.datetimepicker.data-api click.datetimepicker.data-api", '[data-provide="datetimepicker"]', function (h) {
|
|
var g = c(this);
|
|
if (g.data("datetimepicker")) {
|
|
return
|
|
}
|
|
h.preventDefault();
|
|
g.datetimepicker("show")
|
|
});
|
|
c(function () {
|
|
c('[data-provide="datetimepicker-inline"]').datetimepicker()
|
|
})
|
|
}(window.jQuery);
|
|
|
|
/**
|
|
* Simplified Chinese translation for bootstrap-datetimepicker
|
|
* Yuan Cheung <advanimal@gmail.com>
|
|
*/
|
|
;(function ($) {
|
|
$.fn.datetimepicker.dates['zh-CN'] = {
|
|
days: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"],
|
|
daysShort: ["周日", "周一", "周二", "周三", "周四", "周五", "周六", "周日"],
|
|
daysMin: ["日", "一", "二", "三", "四", "五", "六", "日"],
|
|
months: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
|
|
monthsShort: ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"],
|
|
today: "今日",
|
|
suffix: [],
|
|
meridiem: ["上午", "下午"]
|
|
};
|
|
}(window.jQuery));
|