You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
776 lines
60 KiB
776 lines
60 KiB
/*! version : 4.17.42
|
|
=========================================================
|
|
bootstrap-datetimejs
|
|
https://github.com/Eonasdan/bootstrap-datetimepicker
|
|
Copyright (c) 2015 Jonathan Peterson
|
|
=========================================================
|
|
*/
|
|
/*
|
|
The MIT License (MIT)
|
|
|
|
Copyright (c) 2015 Jonathan Peterson
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
*/
|
|
/*global define:false */
|
|
/*global exports:false */
|
|
/*global require:false */
|
|
/*global jQuery:false */
|
|
/*global moment:false */
|
|
!function (a) {
|
|
"use strict";
|
|
if ("function" == typeof define && define.amd)
|
|
// AMD is used - Register as an anonymous module.
|
|
define(["jquery", "moment"], a); else if ("object" == typeof exports)a(require("jquery"), require("moment")); else {
|
|
// Neither AMD nor CommonJS used. Use global variables.
|
|
if ("undefined" == typeof jQuery)throw"bootstrap-datetimepicker requires jQuery to be loaded first";
|
|
if ("undefined" == typeof moment)throw"bootstrap-datetimepicker requires Moment.js to be loaded first";
|
|
a(jQuery, moment)
|
|
}
|
|
}(function (a, b) {
|
|
"use strict";
|
|
if (!b)throw new Error("bootstrap-datetimepicker requires Moment.js to be loaded first");
|
|
var c = function (c, d) {
|
|
var e, f, g, h, i, j, k, l = {}, m = !0, n = !1, o = !1, p = 0, q = [
|
|
{clsName: "days", navFnc: "M", navStep: 1},
|
|
{clsName: "months", navFnc: "y", navStep: 1},
|
|
{clsName: "years", navFnc: "y", navStep: 10},
|
|
{clsName: "decades", navFnc: "y", navStep: 100}
|
|
], r = ["days", "months", "years", "decades"], s = ["top", "bottom", "auto"], t = ["left", "right", "auto"], u = ["default", "top", "bottom"], v = {up: 38, 38: "up", down: 40, 40: "down", left: 37, 37: "left", right: 39, 39: "right", tab: 9, 9: "tab", escape: 27, 27: "escape", enter: 13, 13: "enter", pageUp: 33, 33: "pageUp", pageDown: 34, 34: "pageDown", shift: 16, 16: "shift", control: 17, 17: "control", space: 32, 32: "space", t: 84, 84: "t", "delete": 46, 46: "delete"}, w = {}, /********************************************************************************
|
|
*
|
|
* Private functions
|
|
*
|
|
********************************************************************************/
|
|
x = function () {
|
|
return void 0 !== b.tz && void 0 !== d.timeZone && null !== d.timeZone && "" !== d.timeZone
|
|
}, y = function (a) {
|
|
var c;
|
|
return c = void 0 === a || null === a ? b() : x() ? b.tz(a, j, d.useStrict, d.timeZone) : b(a, j, d.useStrict), x() && c.tz(d.timeZone), c
|
|
}, z = function (a) {
|
|
if ("string" != typeof a || a.length > 1)throw new TypeError("isEnabled expects a single character string parameter");
|
|
switch (a) {
|
|
case"y":
|
|
return-1 !== i.indexOf("Y");
|
|
case"M":
|
|
return-1 !== i.indexOf("M");
|
|
case"d":
|
|
return-1 !== i.toLowerCase().indexOf("d");
|
|
case"h":
|
|
case"H":
|
|
return-1 !== i.toLowerCase().indexOf("h");
|
|
case"m":
|
|
return-1 !== i.indexOf("m");
|
|
case"s":
|
|
return-1 !== i.indexOf("s");
|
|
default:
|
|
return!1
|
|
}
|
|
}, A = function () {
|
|
return z("h") || z("m") || z("s")
|
|
}, B = function () {
|
|
return z("y") || z("M") || z("d")
|
|
}, C = function () {
|
|
var b = a("<thead>").append(a("<tr>").append(a("<th>").addClass("prev").attr("data-action", "previous").append(a("<span>").addClass(d.icons.previous))).append(a("<th>").addClass("picker-switch").attr("data-action", "pickerSwitch").attr("colspan", d.calendarWeeks ? "6" : "5")).append(a("<th>").addClass("next").attr("data-action", "next").append(a("<span>").addClass(d.icons.next)))), c = a("<tbody>").append(a("<tr>").append(a("<td>").attr("colspan", d.calendarWeeks ? "8" : "7")));
|
|
return[a("<div>").addClass("datepicker-days").append(a("<table>").addClass("table-condensed").append(b).append(a("<tbody>"))), a("<div>").addClass("datepicker-months").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())), a("<div>").addClass("datepicker-years").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone())), a("<div>").addClass("datepicker-decades").append(a("<table>").addClass("table-condensed").append(b.clone()).append(c.clone()))]
|
|
}, D = function () {
|
|
var b = a("<tr>"), c = a("<tr>"), e = a("<tr>");
|
|
return z("h") && (b.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.incrementHour}).addClass("btn").attr("data-action", "incrementHours").append(a("<span>").addClass(d.icons.up)))), c.append(a("<td>").append(a("<span>").addClass("timepicker-hour").attr({"data-time-component": "hours", title: d.tooltips.pickHour}).attr("data-action", "showHours"))), e.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.decrementHour}).addClass("btn").attr("data-action", "decrementHours").append(a("<span>").addClass(d.icons.down))))), z("m") && (z("h") && (b.append(a("<td>").addClass("separator")), c.append(a("<td>").addClass("separator").html(":")), e.append(a("<td>").addClass("separator"))), b.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.incrementMinute}).addClass("btn").attr("data-action", "incrementMinutes").append(a("<span>").addClass(d.icons.up)))), c.append(a("<td>").append(a("<span>").addClass("timepicker-minute").attr({"data-time-component": "minutes", title: d.tooltips.pickMinute}).attr("data-action", "showMinutes"))), e.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.decrementMinute}).addClass("btn").attr("data-action", "decrementMinutes").append(a("<span>").addClass(d.icons.down))))), z("s") && (z("m") && (b.append(a("<td>").addClass("separator")), c.append(a("<td>").addClass("separator").html(":")), e.append(a("<td>").addClass("separator"))), b.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.incrementSecond}).addClass("btn").attr("data-action", "incrementSeconds").append(a("<span>").addClass(d.icons.up)))), c.append(a("<td>").append(a("<span>").addClass("timepicker-second").attr({"data-time-component": "seconds", title: d.tooltips.pickSecond}).attr("data-action", "showSeconds"))), e.append(a("<td>").append(a("<a>").attr({href: "#", tabindex: "-1", title: d.tooltips.decrementSecond}).addClass("btn").attr("data-action", "decrementSeconds").append(a("<span>").addClass(d.icons.down))))), h || (b.append(a("<td>").addClass("separator")), c.append(a("<td>").append(a("<button>").addClass("btn btn-primary").attr({"data-action": "togglePeriod", tabindex: "-1", title: d.tooltips.togglePeriod}))), e.append(a("<td>").addClass("separator"))), a("<div>").addClass("timepicker-picker").append(a("<table>").addClass("table-condensed").append([b, c, e]))
|
|
}, E = function () {
|
|
var b = a("<div>").addClass("timepicker-hours").append(a("<table>").addClass("table-condensed")), c = a("<div>").addClass("timepicker-minutes").append(a("<table>").addClass("table-condensed")), d = a("<div>").addClass("timepicker-seconds").append(a("<table>").addClass("table-condensed")), e = [D()];
|
|
return z("h") && e.push(b), z("m") && e.push(c), z("s") && e.push(d), e
|
|
}, F = function () {
|
|
var b = [];
|
|
return d.showTodayButton && b.push(a("<td>").append(a("<a>").attr({"data-action": "today", title: d.tooltips.today}).append(a("<span>").addClass(d.icons.today)))), !d.sideBySide && B() && A() && b.push(a("<td>").append(a("<a>").attr({"data-action": "togglePicker", title: d.tooltips.selectTime}).append(a("<span>").addClass(d.icons.time)))), d.showClear && b.push(a("<td>").append(a("<a>").attr({"data-action": "clear", title: d.tooltips.clear}).append(a("<span>").addClass(d.icons.clear)))), d.showClose && b.push(a("<td>").append(a("<a>").attr({"data-action": "close", title: d.tooltips.close}).append(a("<span>").addClass(d.icons.close)))), a("<table>").addClass("table-condensed").append(a("<tbody>").append(a("<tr>").append(b)))
|
|
}, G = function () {
|
|
var b = a("<div>").addClass("bootstrap-datetimepicker-widget dropdown-menu"), c = a("<div>").addClass("datepicker").append(C()), e = a("<div>").addClass("timepicker").append(E()), f = a("<ul>").addClass("list-unstyled"), g = a("<li>").addClass("picker-switch" + (d.collapse ? " accordion-toggle" : "")).append(F());
|
|
return d.inline && b.removeClass("dropdown-menu"), h && b.addClass("usetwentyfour"), z("s") && !h && b.addClass("wider"), d.sideBySide && B() && A() ? (b.addClass("timepicker-sbs"), "top" === d.toolbarPlacement && b.append(g), b.append(a("<div>").addClass("row").append(c.addClass("col-md-6")).append(e.addClass("col-md-6"))), "bottom" === d.toolbarPlacement && b.append(g), b) : ("top" === d.toolbarPlacement && f.append(g), B() && f.append(a("<li>").addClass(d.collapse && A() ? "collapse in" : "").append(c)), "default" === d.toolbarPlacement && f.append(g), A() && f.append(a("<li>").addClass(d.collapse && B() ? "collapse" : "").append(e)), "bottom" === d.toolbarPlacement && f.append(g), b.append(f))
|
|
}, H = function () {
|
|
var b, e = {};
|
|
return b = c.is("input") || d.inline ? c.data() : c.find("input").data(), b.dateOptions && b.dateOptions instanceof Object && (e = a.extend(!0, e, b.dateOptions)), a.each(d, function (a) {
|
|
var c = "date" + a.charAt(0).toUpperCase() + a.slice(1);
|
|
void 0 !== b[c] && (e[a] = b[c])
|
|
}), e
|
|
}, I = function () {
|
|
var b, e = (n || c).position(), f = (n || c).offset(), g = d.widgetPositioning.vertical, h = d.widgetPositioning.horizontal;
|
|
if (d.widgetParent)b = d.widgetParent.append(o); else if (c.is("input"))b = c.after(o).parent(); else {
|
|
if (d.inline)return void(b = c.append(o));
|
|
b = c, c.children().first().after(o)
|
|
}
|
|
if (
|
|
// Top and bottom logic
|
|
"auto" === g && (g = f.top + 1.5 * o.height() >= a(window).height() + a(window).scrollTop() && o.height() + c.outerHeight() < f.top ? "top" : "bottom"),
|
|
// Left and right logic
|
|
"auto" === h && (h = b.width() < f.left + o.outerWidth() / 2 && f.left + o.outerWidth() > a(window).width() ? "right" : "left"), "top" === g ? o.addClass("top").removeClass("bottom") : o.addClass("bottom").removeClass("top"), "right" === h ? o.addClass("pull-right") : o.removeClass("pull-right"),
|
|
// find the first parent element that has a relative css positioning
|
|
"relative" !== b.css("position") && (b = b.parents().filter(function () {
|
|
return"relative" === a(this).css("position")
|
|
}).first()), 0 === b.length)throw new Error("datetimepicker component should be placed within a relative positioned container");
|
|
o.css({top: "top" === g ? "auto" : e.top + c.outerHeight(), bottom: "top" === g ? b.outerHeight() - (b === c ? 0 : e.top) : "auto", left: "left" === h ? b === c ? 0 : e.left : "auto", right: "left" === h ? "auto" : b.outerWidth() - c.outerWidth() - (b === c ? 0 : e.left)})
|
|
}, J = function (a) {
|
|
"dp.change" === a.type && (a.date && a.date.isSame(a.oldDate) || !a.date && !a.oldDate) || c.trigger(a)
|
|
}, K = function (a) {
|
|
"y" === a && (a = "YYYY"), J({type: "dp.update", change: a, viewDate: f.clone()})
|
|
}, L = function (a) {
|
|
o && (a && (k = Math.max(p, Math.min(3, k + a))), o.find(".datepicker > div").hide().filter(".datepicker-" + q[k].clsName).show())
|
|
}, M = function () {
|
|
var b = a("<tr>"), c = f.clone().startOf("w").startOf("d");
|
|
for (d.calendarWeeks === !0 && b.append(a("<th>").addClass("cw").text("#")); c.isBefore(f.clone().endOf("w"));)b.append(a("<th>").addClass("dow").text(c.format("dd"))), c.add(1, "d");
|
|
o.find(".datepicker-days thead").append(b)
|
|
}, N = function (a) {
|
|
return d.disabledDates[a.format("YYYY-MM-DD")] === !0
|
|
}, O = function (a) {
|
|
return d.enabledDates[a.format("YYYY-MM-DD")] === !0
|
|
}, P = function (a) {
|
|
return d.disabledHours[a.format("H")] === !0
|
|
}, Q = function (a) {
|
|
return d.enabledHours[a.format("H")] === !0
|
|
}, R = function (b, c) {
|
|
if (!b.isValid())return!1;
|
|
if (d.disabledDates && "d" === c && N(b))return!1;
|
|
if (d.enabledDates && "d" === c && !O(b))return!1;
|
|
if (d.minDate && b.isBefore(d.minDate, c))return!1;
|
|
if (d.maxDate && b.isAfter(d.maxDate, c))return!1;
|
|
if (d.daysOfWeekDisabled && "d" === c && -1 !== d.daysOfWeekDisabled.indexOf(b.day()))return!1;
|
|
if (d.disabledHours && ("h" === c || "m" === c || "s" === c) && P(b))return!1;
|
|
if (d.enabledHours && ("h" === c || "m" === c || "s" === c) && !Q(b))return!1;
|
|
if (d.disabledTimeIntervals && ("h" === c || "m" === c || "s" === c)) {
|
|
var e = !1;
|
|
if (a.each(d.disabledTimeIntervals, function () {
|
|
return b.isBetween(this[0], this[1]) ? (e = !0, !1) : void 0
|
|
}), e)return!1
|
|
}
|
|
return!0
|
|
}, S = function () {
|
|
for (var b = [], c = f.clone().startOf("y").startOf("d"); c.isSame(f, "y");)b.push(a("<span>").attr("data-action", "selectMonth").addClass("month").text(c.format("MMM"))), c.add(1, "M");
|
|
o.find(".datepicker-months td").empty().append(b)
|
|
}, T = function () {
|
|
var b = o.find(".datepicker-months"), c = b.find("th"), g = b.find("tbody").find("span");
|
|
c.eq(0).find("span").attr("title", d.tooltips.prevYear), c.eq(1).attr("title", d.tooltips.selectYear), c.eq(2).find("span").attr("title", d.tooltips.nextYear), b.find(".disabled").removeClass("disabled"), R(f.clone().subtract(1, "y"), "y") || c.eq(0).addClass("disabled"), c.eq(1).text(f.year()), R(f.clone().add(1, "y"), "y") || c.eq(2).addClass("disabled"), g.removeClass("active"), e.isSame(f, "y") && !m && g.eq(e.month()).addClass("active"), g.each(function (b) {
|
|
R(f.clone().month(b), "M") || a(this).addClass("disabled")
|
|
})
|
|
}, U = function () {
|
|
var a = o.find(".datepicker-years"), b = a.find("th"), c = f.clone().subtract(5, "y"), g = f.clone().add(6, "y"), h = "";
|
|
for (b.eq(0).find("span").attr("title", d.tooltips.prevDecade), b.eq(1).attr("title", d.tooltips.selectDecade), b.eq(2).find("span").attr("title", d.tooltips.nextDecade), a.find(".disabled").removeClass("disabled"), d.minDate && d.minDate.isAfter(c, "y") && b.eq(0).addClass("disabled"), b.eq(1).text(c.year() + "-" + g.year()), d.maxDate && d.maxDate.isBefore(g, "y") && b.eq(2).addClass("disabled"); !c.isAfter(g, "y");)h += '<span data-action="selectYear" class="year' + (c.isSame(e, "y") && !m ? " active" : "") + (R(c, "y") ? "" : " disabled") + '">' + c.year() + "</span>", c.add(1, "y");
|
|
a.find("td").html(h)
|
|
}, V = function () {
|
|
var a, c = o.find(".datepicker-decades"), g = c.find("th"), h = b({y: f.year() - f.year() % 100 - 1}), i = h.clone().add(100, "y"), j = h.clone(), k = !1, l = !1, m = "";
|
|
for (g.eq(0).find("span").attr("title", d.tooltips.prevCentury), g.eq(2).find("span").attr("title", d.tooltips.nextCentury), c.find(".disabled").removeClass("disabled"), (h.isSame(b({y: 1900})) || d.minDate && d.minDate.isAfter(h, "y")) && g.eq(0).addClass("disabled"), g.eq(1).text(h.year() + "-" + i.year()), (h.isSame(b({y: 2e3})) || d.maxDate && d.maxDate.isBefore(i, "y")) && g.eq(2).addClass("disabled"); !h.isAfter(i, "y");)a = h.year() + 12, k = d.minDate && d.minDate.isAfter(h, "y") && d.minDate.year() <= a, l = d.maxDate && d.maxDate.isAfter(h, "y") && d.maxDate.year() <= a, m += '<span data-action="selectDecade" class="decade' + (e.isAfter(h) && e.year() <= a ? " active" : "") + (R(h, "y") || k || l ? "" : " disabled") + '" data-selection="' + (h.year() + 6) + '">' + (h.year() + 1) + " - " + (h.year() + 12) + "</span>", h.add(12, "y");
|
|
m += "<span></span><span></span><span></span>", c.find("td").html(m), g.eq(1).text(j.year() + 1 + "-" + h.year())
|
|
}, W = function () {
|
|
var b, c, g, h, i = o.find(".datepicker-days"), j = i.find("th"), k = [];
|
|
if (B()) {
|
|
for (j.eq(0).find("span").attr("title", d.tooltips.prevMonth), j.eq(1).attr("title", d.tooltips.selectMonth), j.eq(2).find("span").attr("title", d.tooltips.nextMonth), i.find(".disabled").removeClass("disabled"), j.eq(1).text(f.format(d.dayViewHeaderFormat)), R(f.clone().subtract(1, "M"), "M") || j.eq(0).addClass("disabled"), R(f.clone().add(1, "M"), "M") || j.eq(2).addClass("disabled"), b = f.clone().startOf("M").startOf("w").startOf("d"), h = 0; 42 > h; h++)//always display 42 days (should show 6 weeks)
|
|
0 === b.weekday() && (c = a("<tr>"), d.calendarWeeks && c.append('<td class="cw">' + b.week() + "</td>"), k.push(c)), g = "", b.isBefore(f, "M") && (g += " old"), b.isAfter(f, "M") && (g += " new"), b.isSame(e, "d") && !m && (g += " active"), R(b, "d") || (g += " disabled"), b.isSame(y(), "d") && (g += " today"), 0 !== b.day() && 6 !== b.day() || (g += " weekend"), c.append('<td data-action="selectDay" data-day="' + b.format("L") + '" class="day' + g + '">' + b.date() + "</td>"), b.add(1, "d");
|
|
i.find("tbody").empty().append(k), T(), U(), V()
|
|
}
|
|
}, X = function () {
|
|
var b = o.find(".timepicker-hours table"), c = f.clone().startOf("d"), d = [], e = a("<tr>");
|
|
for (f.hour() > 11 && !h && c.hour(12); c.isSame(f, "d") && (h || f.hour() < 12 && c.hour() < 12 || f.hour() > 11);)c.hour() % 4 === 0 && (e = a("<tr>"), d.push(e)), e.append('<td data-action="selectHour" class="hour' + (R(c, "h") ? "" : " disabled") + '">' + c.format(h ? "HH" : "hh") + "</td>"), c.add(1, "h");
|
|
b.empty().append(d)
|
|
}, Y = function () {
|
|
for (var b = o.find(".timepicker-minutes table"), c = f.clone().startOf("h"), e = [], g = a("<tr>"), h = 1 === d.stepping ? 5 : d.stepping; f.isSame(c, "h");)c.minute() % (4 * h) === 0 && (g = a("<tr>"), e.push(g)), g.append('<td data-action="selectMinute" class="minute' + (R(c, "m") ? "" : " disabled") + '">' + c.format("mm") + "</td>"), c.add(h, "m");
|
|
b.empty().append(e)
|
|
}, Z = function () {
|
|
for (var b = o.find(".timepicker-seconds table"), c = f.clone().startOf("m"), d = [], e = a("<tr>"); f.isSame(c, "m");)c.second() % 20 === 0 && (e = a("<tr>"), d.push(e)), e.append('<td data-action="selectSecond" class="second' + (R(c, "s") ? "" : " disabled") + '">' + c.format("ss") + "</td>"), c.add(5, "s");
|
|
b.empty().append(d)
|
|
}, $ = function () {
|
|
var a, b, c = o.find(".timepicker span[data-time-component]");
|
|
h || (a = o.find(".timepicker [data-action=togglePeriod]"), b = e.clone().add(e.hours() >= 12 ? -12 : 12, "h"), a.text(e.format("A")), R(b, "h") ? a.removeClass("disabled") : a.addClass("disabled")), c.filter("[data-time-component=hours]").text(e.format(h ? "HH" : "hh")), c.filter("[data-time-component=minutes]").text(e.format("mm")), c.filter("[data-time-component=seconds]").text(e.format("ss")), X(), Y(), Z()
|
|
}, _ = function () {
|
|
o && (W(), $())
|
|
}, aa = function (a) {
|
|
var b = m ? null : e;
|
|
// case of calling setValue(null or false)
|
|
// case of calling setValue(null or false)
|
|
//viewDate = date.clone(); // TODO this doesn't work right on first use
|
|
return a ? (a = a.clone().locale(d.locale), x() && a.tz(d.timeZone), 1 !== d.stepping && a.minutes(Math.round(a.minutes() / d.stepping) * d.stepping).seconds(0), void(R(a) ? (e = a, g.val(e.format(i)), c.data("date", e.format(i)), m = !1, _(), J({type: "dp.change", date: e.clone(), oldDate: b})) : (d.keepInvalid ? J({type: "dp.change", date: a, oldDate: b}) : g.val(m ? "" : e.format(i)), J({type: "dp.error", date: a, oldDate: b})))) : (m = !0, g.val(""), c.data("date", ""), J({type: "dp.change", date: !1, oldDate: b}), void _())
|
|
}, /**
|
|
* Hides the widget. Possibly will emit dp.hide
|
|
*/
|
|
ba = function () {
|
|
var b = !1;
|
|
// Ignore event if in the middle of a picker transition
|
|
return o ? (o.find(".collapse").each(function () {
|
|
var c = a(this).data("collapse");
|
|
return c && c.transitioning ? (b = !0, !1) : !0
|
|
}), b ? l : (n && n.hasClass("btn") && n.toggleClass("active"), o.hide(), a(window).off("resize", I), o.off("click", "[data-action]"), o.off("mousedown", !1), o.remove(), o = !1, J({type: "dp.hide", date: e.clone()}), g.blur(), k = 0, f = e.clone(), l)) : l
|
|
}, ca = function () {
|
|
aa(null)
|
|
}, da = function (a) {
|
|
//inputDate.locale(options.locale);
|
|
return void 0 === d.parseInputDate ? b.isMoment(a) || (a = y(a)) : a = d.parseInputDate(a), a
|
|
}, /********************************************************************************
|
|
*
|
|
* Widget UI interaction functions
|
|
*
|
|
********************************************************************************/
|
|
ea = {next: function () {
|
|
var a = q[k].navFnc;
|
|
f.add(q[k].navStep, a), W(), K(a)
|
|
}, previous: function () {
|
|
var a = q[k].navFnc;
|
|
f.subtract(q[k].navStep, a), W(), K(a)
|
|
}, pickerSwitch: function () {
|
|
L(1)
|
|
}, selectMonth: function (b) {
|
|
var c = a(b.target).closest("tbody").find("span").index(a(b.target));
|
|
f.month(c), k === p ? (aa(e.clone().year(f.year()).month(f.month())), d.inline || ba()) : (L(-1), W()), K("M")
|
|
}, selectYear: function (b) {
|
|
var c = parseInt(a(b.target).text(), 10) || 0;
|
|
f.year(c), k === p ? (aa(e.clone().year(f.year())), d.inline || ba()) : (L(-1), W()), K("YYYY")
|
|
}, selectDecade: function (b) {
|
|
var c = parseInt(a(b.target).data("selection"), 10) || 0;
|
|
f.year(c), k === p ? (aa(e.clone().year(f.year())), d.inline || ba()) : (L(-1), W()), K("YYYY")
|
|
}, selectDay: function (b) {
|
|
var c = f.clone();
|
|
a(b.target).is(".old") && c.subtract(1, "M"), a(b.target).is(".new") && c.add(1, "M"), aa(c.date(parseInt(a(b.target).text(), 10))), A() || d.keepOpen || d.inline || ba()
|
|
}, incrementHours: function () {
|
|
var a = e.clone().add(1, "h");
|
|
R(a, "h") && aa(a)
|
|
}, incrementMinutes: function () {
|
|
var a = e.clone().add(d.stepping, "m");
|
|
R(a, "m") && aa(a)
|
|
}, incrementSeconds: function () {
|
|
var a = e.clone().add(1, "s");
|
|
R(a, "s") && aa(a)
|
|
}, decrementHours: function () {
|
|
var a = e.clone().subtract(1, "h");
|
|
R(a, "h") && aa(a)
|
|
}, decrementMinutes: function () {
|
|
var a = e.clone().subtract(d.stepping, "m");
|
|
R(a, "m") && aa(a)
|
|
}, decrementSeconds: function () {
|
|
var a = e.clone().subtract(1, "s");
|
|
R(a, "s") && aa(a)
|
|
}, togglePeriod: function () {
|
|
aa(e.clone().add(e.hours() >= 12 ? -12 : 12, "h"))
|
|
}, togglePicker: function (b) {
|
|
var c, e = a(b.target), f = e.closest("ul"), g = f.find(".in"), h = f.find(".collapse:not(.in)");
|
|
if (g && g.length) {
|
|
if (c = g.data("collapse"), c && c.transitioning)return;
|
|
g.collapse ? (// if collapse plugin is available through bootstrap.js then use it
|
|
g.collapse("hide"), h.collapse("show")) : (// otherwise just toggle in class on the two views
|
|
g.removeClass("in"), h.addClass("in")), e.is("span") ? e.toggleClass(d.icons.time + " " + d.icons.date) : e.find("span").toggleClass(d.icons.time + " " + d.icons.date)
|
|
}
|
|
}, showPicker: function () {
|
|
o.find(".timepicker > div:not(.timepicker-picker)").hide(), o.find(".timepicker .timepicker-picker").show()
|
|
}, showHours: function () {
|
|
o.find(".timepicker .timepicker-picker").hide(), o.find(".timepicker .timepicker-hours").show()
|
|
}, showMinutes: function () {
|
|
o.find(".timepicker .timepicker-picker").hide(), o.find(".timepicker .timepicker-minutes").show()
|
|
}, showSeconds: function () {
|
|
o.find(".timepicker .timepicker-picker").hide(), o.find(".timepicker .timepicker-seconds").show()
|
|
}, selectHour: function (b) {
|
|
var c = parseInt(a(b.target).text(), 10);
|
|
h || (e.hours() >= 12 ? 12 !== c && (c += 12) : 12 === c && (c = 0)), aa(e.clone().hours(c)), ea.showPicker.call(l)
|
|
}, selectMinute: function (b) {
|
|
aa(e.clone().minutes(parseInt(a(b.target).text(), 10))), ea.showPicker.call(l)
|
|
}, selectSecond: function (b) {
|
|
aa(e.clone().seconds(parseInt(a(b.target).text(), 10))), ea.showPicker.call(l)
|
|
}, clear: ca, today: function () {
|
|
var a = y();
|
|
R(a, "d") && aa(a)
|
|
}, close: ba}, fa = function (b) {
|
|
return a(b.currentTarget).is(".disabled") ? !1 : (ea[a(b.currentTarget).data("action")].apply(l, arguments), !1)
|
|
}, /**
|
|
* Shows the widget. Possibly will emit dp.show and dp.change
|
|
*/
|
|
ga = function () {
|
|
var b, c = {year: function (a) {
|
|
return a.month(0).date(1).hours(0).seconds(0).minutes(0)
|
|
}, month: function (a) {
|
|
return a.date(1).hours(0).seconds(0).minutes(0)
|
|
}, day: function (a) {
|
|
return a.hours(0).seconds(0).minutes(0)
|
|
}, hour: function (a) {
|
|
return a.seconds(0).minutes(0)
|
|
}, minute: function (a) {
|
|
return a.seconds(0)
|
|
}};// this handles clicks on the widget
|
|
return g.prop("disabled") || !d.ignoreReadonly && g.prop("readonly") || o ? l : (void 0 !== g.val() && 0 !== g.val().trim().length ? aa(da(g.val().trim())) : m && d.useCurrent && (d.inline || g.is("input") && 0 === g.val().trim().length) && (b = y(), "string" == typeof d.useCurrent && (b = c[d.useCurrent](b)), aa(b)), o = G(), M(), S(), o.find(".timepicker-hours").hide(), o.find(".timepicker-minutes").hide(), o.find(".timepicker-seconds").hide(), _(), L(), a(window).on("resize", I), o.on("click", "[data-action]", fa), o.on("mousedown", !1), n && n.hasClass("btn") && n.toggleClass("active"), I(), o.show(), d.focusOnShow && !g.is(":focus") && g.focus(), J({type: "dp.show"}), l)
|
|
}, /**
|
|
* Shows or hides the widget
|
|
*/
|
|
ha = function () {
|
|
return o ? ba() : ga()
|
|
}, ia = function (a) {
|
|
var b, c, e, f, g = null, h = [], i = {}, j = a.which, k = "p";
|
|
w[j] = k;
|
|
for (b in w)w.hasOwnProperty(b) && w[b] === k && (h.push(b), parseInt(b, 10) !== j && (i[b] = !0));
|
|
for (b in d.keyBinds)if (d.keyBinds.hasOwnProperty(b) && "function" == typeof d.keyBinds[b] && (e = b.split(" "), e.length === h.length && v[j] === e[e.length - 1])) {
|
|
for (f = !0, c = e.length - 2; c >= 0; c--)if (!(v[e[c]]in i)) {
|
|
f = !1;
|
|
break
|
|
}
|
|
if (f) {
|
|
g = d.keyBinds[b];
|
|
break
|
|
}
|
|
}
|
|
g && (g.call(l, o), a.stopPropagation(), a.preventDefault())
|
|
}, ja = function (a) {
|
|
w[a.which] = "r", a.stopPropagation(), a.preventDefault()
|
|
}, ka = function (b) {
|
|
var c = a(b.target).val().trim(), d = c ? da(c) : null;
|
|
return aa(d), b.stopImmediatePropagation(), !1
|
|
}, la = function () {
|
|
g.on({change: ka, blur: d.debug ? "" : ba, keydown: ia, keyup: ja, focus: d.allowInputToggle ? ga : ""}), c.is("input") ? g.on({focus: ga}) : n && (n.on("click", ha), n.on("mousedown", !1))
|
|
}, ma = function () {
|
|
g.off({change: ka, blur: blur, keydown: ia, keyup: ja, focus: d.allowInputToggle ? ba : ""}), c.is("input") ? g.off({focus: ga}) : n && (n.off("click", ha), n.off("mousedown", !1))
|
|
}, na = function (b) {
|
|
// Store given enabledDates and disabledDates as keys.
|
|
// This way we can check their existence in O(1) time instead of looping through whole array.
|
|
// (for example: options.enabledDates['2014-02-27'] === true)
|
|
var c = {};
|
|
return a.each(b, function () {
|
|
var a = da(this);
|
|
a.isValid() && (c[a.format("YYYY-MM-DD")] = !0)
|
|
}), Object.keys(c).length ? c : !1
|
|
}, oa = function (b) {
|
|
// Store given enabledHours and disabledHours as keys.
|
|
// This way we can check their existence in O(1) time instead of looping through whole array.
|
|
// (for example: options.enabledHours['2014-02-27'] === true)
|
|
var c = {};
|
|
return a.each(b, function () {
|
|
c[this] = !0
|
|
}), Object.keys(c).length ? c : !1
|
|
}, pa = function () {
|
|
var a = d.format || "L LT";
|
|
i = a.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (a) {
|
|
var b = e.localeData().longDateFormat(a) || a;
|
|
return b.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (a) {//temp fix for #740
|
|
return e.localeData().longDateFormat(a) || a
|
|
})
|
|
}), j = d.extraFormats ? d.extraFormats.slice() : [], j.indexOf(a) < 0 && j.indexOf(i) < 0 && j.push(i), h = i.toLowerCase().indexOf("a") < 1 && i.replace(/\[.*?\]/g, "").indexOf("h") < 1, z("y") && (p = 2), z("M") && (p = 1), z("d") && (p = 0), k = Math.max(p, k), m || aa(e)
|
|
};
|
|
// initializing element and component attributes
|
|
if (/********************************************************************************
|
|
*
|
|
* Public API functions
|
|
* =====================
|
|
*
|
|
* Important: Do not expose direct references to private objects or the options
|
|
* object to the outer world. Always return a clone when returning values or make
|
|
* a clone when setting a private variable.
|
|
*
|
|
********************************************************************************/
|
|
l.destroy = function () {
|
|
///<summary>Destroys the widget and removes all attached event listeners</summary>
|
|
ba(), ma(), c.removeData("DateTimePicker"), c.removeData("date")
|
|
}, l.toggle = ha, l.show = ga, l.hide = ba, l.disable = function () {
|
|
///<summary>Disables the input element, the component is attached to, by adding a disabled="true" attribute to it.
|
|
///If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>
|
|
return ba(), n && n.hasClass("btn") && n.addClass("disabled"), g.prop("disabled", !0), l
|
|
}, l.enable = function () {
|
|
///<summary>Enables the input element, the component is attached to, by removing disabled attribute from it.</summary>
|
|
return n && n.hasClass("btn") && n.removeClass("disabled"), g.prop("disabled", !1), l
|
|
}, l.ignoreReadonly = function (a) {
|
|
if (0 === arguments.length)return d.ignoreReadonly;
|
|
if ("boolean" != typeof a)throw new TypeError("ignoreReadonly () expects a boolean parameter");
|
|
return d.ignoreReadonly = a, l
|
|
}, l.options = function (b) {
|
|
if (0 === arguments.length)return a.extend(!0, {}, d);
|
|
if (!(b instanceof Object))throw new TypeError("options() options parameter should be an object");
|
|
return a.extend(!0, d, b), a.each(d, function (a, b) {
|
|
if (void 0 === l[a])throw new TypeError("option " + a + " is not recognized!");
|
|
l[a](b)
|
|
}), l
|
|
}, l.date = function (a) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.date">
|
|
///<summary>Returns the component's model current date, a moment object or null if not set.</summary>
|
|
///<returns type="Moment">date.clone()</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
|
|
///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, Date, moment, null parameter.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return m ? null : e.clone();
|
|
if (!(null === a || "string" == typeof a || b.isMoment(a) || a instanceof Date))throw new TypeError("date() parameter must be one of [null, string, moment or Date]");
|
|
return aa(null === a ? null : da(a)), l
|
|
}, l.format = function (a) {
|
|
///<summary>test su</summary>
|
|
///<param name="newFormat">info about para</param>
|
|
///<returns type="string|boolean">returns foo</returns>
|
|
if (0 === arguments.length)return d.format;
|
|
if ("string" != typeof a && ("boolean" != typeof a || a !== !1))throw new TypeError("format() expects a string or boolean:false parameter " + a);
|
|
return d.format = a, i && pa(), l
|
|
}, l.timeZone = function (a) {
|
|
if (0 === arguments.length)return d.timeZone;
|
|
if ("string" != typeof a)throw new TypeError("newZone() expects a string parameter");
|
|
return d.timeZone = a, l
|
|
}, l.dayViewHeaderFormat = function (a) {
|
|
if (0 === arguments.length)return d.dayViewHeaderFormat;
|
|
if ("string" != typeof a)throw new TypeError("dayViewHeaderFormat() expects a string parameter");
|
|
return d.dayViewHeaderFormat = a, l
|
|
}, l.extraFormats = function (a) {
|
|
if (0 === arguments.length)return d.extraFormats;
|
|
if (a !== !1 && !(a instanceof Array))throw new TypeError("extraFormats() expects an array or false parameter");
|
|
return d.extraFormats = a, j && pa(), l
|
|
}, l.disabledDates = function (b) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.disabledDates">
|
|
///<summary>Returns an array with the currently set disabled dates on the component.</summary>
|
|
///<returns type="array">options.disabledDates</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
///options.enabledDates if such exist.</summary>
|
|
///<param name="dates" locid="$.fn.datetimepicker.disabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.disabledDates ? a.extend({}, d.disabledDates) : d.disabledDates;
|
|
if (!b)return d.disabledDates = !1, _(), l;
|
|
if (!(b instanceof Array))throw new TypeError("disabledDates() expects an array parameter");
|
|
return d.disabledDates = na(b), d.enabledDates = !1, _(), l
|
|
}, l.enabledDates = function (b) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.enabledDates">
|
|
///<summary>Returns an array with the currently set enabled dates on the component.</summary>
|
|
///<returns type="array">options.enabledDates</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledDates if such exist.</summary>
|
|
///<param name="dates" locid="$.fn.datetimepicker.enabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.enabledDates ? a.extend({}, d.enabledDates) : d.enabledDates;
|
|
if (!b)return d.enabledDates = !1, _(), l;
|
|
if (!(b instanceof Array))throw new TypeError("enabledDates() expects an array parameter");
|
|
return d.enabledDates = na(b), d.disabledDates = !1, _(), l
|
|
}, l.daysOfWeekDisabled = function (a) {
|
|
if (0 === arguments.length)return d.daysOfWeekDisabled.splice(0);
|
|
if ("boolean" == typeof a && !a)return d.daysOfWeekDisabled = !1, _(), l;
|
|
if (!(a instanceof Array))throw new TypeError("daysOfWeekDisabled() expects an array parameter");
|
|
if (d.daysOfWeekDisabled = a.reduce(function (a, b) {
|
|
return b = parseInt(b, 10), b > 6 || 0 > b || isNaN(b) ? a : (-1 === a.indexOf(b) && a.push(b), a)
|
|
}, []).sort(), d.useCurrent && !d.keepInvalid) {
|
|
for (var b = 0; !R(e, "d");) {
|
|
if (e.add(1, "d"), 7 === b)throw"Tried 7 times to find a valid date";
|
|
b++
|
|
}
|
|
aa(e)
|
|
}
|
|
return _(), l
|
|
}, l.maxDate = function (a) {
|
|
if (0 === arguments.length)return d.maxDate ? d.maxDate.clone() : d.maxDate;
|
|
if ("boolean" == typeof a && a === !1)return d.maxDate = !1, _(), l;
|
|
"string" == typeof a && ("now" !== a && "moment" !== a || (a = y()));
|
|
var b = da(a);
|
|
if (!b.isValid())throw new TypeError("maxDate() Could not parse date parameter: " + a);
|
|
if (d.minDate && b.isBefore(d.minDate))throw new TypeError("maxDate() date parameter is before options.minDate: " + b.format(i));
|
|
return d.maxDate = b, d.useCurrent && !d.keepInvalid && e.isAfter(a) && aa(d.maxDate), f.isAfter(b) && (f = b.clone().subtract(d.stepping, "m")), _(), l
|
|
}, l.minDate = function (a) {
|
|
if (0 === arguments.length)return d.minDate ? d.minDate.clone() : d.minDate;
|
|
if ("boolean" == typeof a && a === !1)return d.minDate = !1, _(), l;
|
|
"string" == typeof a && ("now" !== a && "moment" !== a || (a = y()));
|
|
var b = da(a);
|
|
if (!b.isValid())throw new TypeError("minDate() Could not parse date parameter: " + a);
|
|
if (d.maxDate && b.isAfter(d.maxDate))throw new TypeError("minDate() date parameter is after options.maxDate: " + b.format(i));
|
|
return d.minDate = b, d.useCurrent && !d.keepInvalid && e.isBefore(a) && aa(d.minDate), f.isBefore(b) && (f = b.clone().add(d.stepping, "m")), _(), l
|
|
}, l.defaultDate = function (a) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.defaultDate">
|
|
///<summary>Returns a moment with the options.defaultDate option configuration or false if not set</summary>
|
|
///<returns type="Moment">date.clone()</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate parameter is cleared.</summary>
|
|
///<param name="defaultDate" locid="$.fn.datetimepicker.defaultDate_p:defaultDate">Takes a string, Date, moment, boolean:false</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.defaultDate ? d.defaultDate.clone() : d.defaultDate;
|
|
if (!a)return d.defaultDate = !1, l;
|
|
"string" == typeof a && (a = "now" === a || "moment" === a ? y() : y(a));
|
|
var b = da(a);
|
|
if (!b.isValid())throw new TypeError("defaultDate() Could not parse date parameter: " + a);
|
|
if (!R(b))throw new TypeError("defaultDate() date passed is invalid according to component setup validations");
|
|
return d.defaultDate = b, (d.defaultDate && d.inline || "" === g.val().trim()) && aa(d.defaultDate), l
|
|
}, l.locale = function (a) {
|
|
if (0 === arguments.length)return d.locale;
|
|
if (!b.localeData(a))throw new TypeError("locale() locale " + a + " is not loaded from moment locales!");
|
|
return d.locale = a, e.locale(d.locale), f.locale(d.locale), i && pa(), o && (ba(), ga()), l
|
|
}, l.stepping = function (a) {
|
|
return 0 === arguments.length ? d.stepping : (a = parseInt(a, 10), (isNaN(a) || 1 > a) && (a = 1), d.stepping = a, l)
|
|
}, l.useCurrent = function (a) {
|
|
var b = ["year", "month", "day", "hour", "minute"];
|
|
if (0 === arguments.length)return d.useCurrent;
|
|
if ("boolean" != typeof a && "string" != typeof a)throw new TypeError("useCurrent() expects a boolean or string parameter");
|
|
if ("string" == typeof a && -1 === b.indexOf(a.toLowerCase()))throw new TypeError("useCurrent() expects a string parameter of " + b.join(", "));
|
|
return d.useCurrent = a, l
|
|
}, l.collapse = function (a) {
|
|
if (0 === arguments.length)return d.collapse;
|
|
if ("boolean" != typeof a)throw new TypeError("collapse() expects a boolean parameter");
|
|
return d.collapse === a ? l : (d.collapse = a, o && (ba(), ga()), l)
|
|
}, l.icons = function (b) {
|
|
if (0 === arguments.length)return a.extend({}, d.icons);
|
|
if (!(b instanceof Object))throw new TypeError("icons() expects parameter to be an Object");
|
|
return a.extend(d.icons, b), o && (ba(), ga()), l
|
|
}, l.tooltips = function (b) {
|
|
if (0 === arguments.length)return a.extend({}, d.tooltips);
|
|
if (!(b instanceof Object))throw new TypeError("tooltips() expects parameter to be an Object");
|
|
return a.extend(d.tooltips, b), o && (ba(), ga()), l
|
|
}, l.useStrict = function (a) {
|
|
if (0 === arguments.length)return d.useStrict;
|
|
if ("boolean" != typeof a)throw new TypeError("useStrict() expects a boolean parameter");
|
|
return d.useStrict = a, l
|
|
}, l.sideBySide = function (a) {
|
|
if (0 === arguments.length)return d.sideBySide;
|
|
if ("boolean" != typeof a)throw new TypeError("sideBySide() expects a boolean parameter");
|
|
return d.sideBySide = a, o && (ba(), ga()), l
|
|
}, l.viewMode = function (a) {
|
|
if (0 === arguments.length)return d.viewMode;
|
|
if ("string" != typeof a)throw new TypeError("viewMode() expects a string parameter");
|
|
if (-1 === r.indexOf(a))throw new TypeError("viewMode() parameter must be one of (" + r.join(", ") + ") value");
|
|
return d.viewMode = a, k = Math.max(r.indexOf(a), p), L(), l
|
|
}, l.toolbarPlacement = function (a) {
|
|
if (0 === arguments.length)return d.toolbarPlacement;
|
|
if ("string" != typeof a)throw new TypeError("toolbarPlacement() expects a string parameter");
|
|
if (-1 === u.indexOf(a))throw new TypeError("toolbarPlacement() parameter must be one of (" + u.join(", ") + ") value");
|
|
return d.toolbarPlacement = a, o && (ba(), ga()), l
|
|
}, l.widgetPositioning = function (b) {
|
|
if (0 === arguments.length)return a.extend({}, d.widgetPositioning);
|
|
if ("[object Object]" !== {}.toString.call(b))throw new TypeError("widgetPositioning() expects an object variable");
|
|
if (b.horizontal) {
|
|
if ("string" != typeof b.horizontal)throw new TypeError("widgetPositioning() horizontal variable must be a string");
|
|
if (b.horizontal = b.horizontal.toLowerCase(), -1 === t.indexOf(b.horizontal))throw new TypeError("widgetPositioning() expects horizontal parameter to be one of (" + t.join(", ") + ")");
|
|
d.widgetPositioning.horizontal = b.horizontal
|
|
}
|
|
if (b.vertical) {
|
|
if ("string" != typeof b.vertical)throw new TypeError("widgetPositioning() vertical variable must be a string");
|
|
if (b.vertical = b.vertical.toLowerCase(), -1 === s.indexOf(b.vertical))throw new TypeError("widgetPositioning() expects vertical parameter to be one of (" + s.join(", ") + ")");
|
|
d.widgetPositioning.vertical = b.vertical
|
|
}
|
|
return _(), l
|
|
}, l.calendarWeeks = function (a) {
|
|
if (0 === arguments.length)return d.calendarWeeks;
|
|
if ("boolean" != typeof a)throw new TypeError("calendarWeeks() expects parameter to be a boolean value");
|
|
return d.calendarWeeks = a, _(), l
|
|
}, l.showTodayButton = function (a) {
|
|
if (0 === arguments.length)return d.showTodayButton;
|
|
if ("boolean" != typeof a)throw new TypeError("showTodayButton() expects a boolean parameter");
|
|
return d.showTodayButton = a, o && (ba(), ga()), l
|
|
}, l.showClear = function (a) {
|
|
if (0 === arguments.length)return d.showClear;
|
|
if ("boolean" != typeof a)throw new TypeError("showClear() expects a boolean parameter");
|
|
return d.showClear = a, o && (ba(), ga()), l
|
|
}, l.widgetParent = function (b) {
|
|
if (0 === arguments.length)return d.widgetParent;
|
|
if ("string" == typeof b && (b = a(b)), null !== b && "string" != typeof b && !(b instanceof a))throw new TypeError("widgetParent() expects a string or a jQuery object parameter");
|
|
return d.widgetParent = b, o && (ba(), ga()), l
|
|
}, l.keepOpen = function (a) {
|
|
if (0 === arguments.length)return d.keepOpen;
|
|
if ("boolean" != typeof a)throw new TypeError("keepOpen() expects a boolean parameter");
|
|
return d.keepOpen = a, l
|
|
}, l.focusOnShow = function (a) {
|
|
if (0 === arguments.length)return d.focusOnShow;
|
|
if ("boolean" != typeof a)throw new TypeError("focusOnShow() expects a boolean parameter");
|
|
return d.focusOnShow = a, l
|
|
}, l.inline = function (a) {
|
|
if (0 === arguments.length)return d.inline;
|
|
if ("boolean" != typeof a)throw new TypeError("inline() expects a boolean parameter");
|
|
return d.inline = a, l
|
|
}, l.clear = function () {
|
|
return ca(), l
|
|
}, l.keyBinds = function (a) {
|
|
return 0 === arguments.length ? d.keyBinds : (d.keyBinds = a, l)
|
|
}, l.getMoment = function (a) {
|
|
return y(a)
|
|
}, l.debug = function (a) {
|
|
if ("boolean" != typeof a)throw new TypeError("debug() expects a boolean parameter");
|
|
return d.debug = a, l
|
|
}, l.allowInputToggle = function (a) {
|
|
if (0 === arguments.length)return d.allowInputToggle;
|
|
if ("boolean" != typeof a)throw new TypeError("allowInputToggle() expects a boolean parameter");
|
|
return d.allowInputToggle = a, l
|
|
}, l.showClose = function (a) {
|
|
if (0 === arguments.length)return d.showClose;
|
|
if ("boolean" != typeof a)throw new TypeError("showClose() expects a boolean parameter");
|
|
return d.showClose = a, l
|
|
}, l.keepInvalid = function (a) {
|
|
if (0 === arguments.length)return d.keepInvalid;
|
|
if ("boolean" != typeof a)throw new TypeError("keepInvalid() expects a boolean parameter");
|
|
return d.keepInvalid = a, l
|
|
}, l.datepickerInput = function (a) {
|
|
if (0 === arguments.length)return d.datepickerInput;
|
|
if ("string" != typeof a)throw new TypeError("datepickerInput() expects a string parameter");
|
|
return d.datepickerInput = a, l
|
|
}, l.parseInputDate = function (a) {
|
|
if (0 === arguments.length)return d.parseInputDate;
|
|
if ("function" != typeof a)throw new TypeError("parseInputDate() sholud be as function");
|
|
return d.parseInputDate = a, l
|
|
}, l.disabledTimeIntervals = function (b) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.disabledTimeIntervals">
|
|
///<summary>Returns an array with the currently set disabled dates on the component.</summary>
|
|
///<returns type="array">options.disabledTimeIntervals</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
///options.enabledDates if such exist.</summary>
|
|
///<param name="dates" locid="$.fn.datetimepicker.disabledTimeIntervals_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.disabledTimeIntervals ? a.extend({}, d.disabledTimeIntervals) : d.disabledTimeIntervals;
|
|
if (!b)return d.disabledTimeIntervals = !1, _(), l;
|
|
if (!(b instanceof Array))throw new TypeError("disabledTimeIntervals() expects an array parameter");
|
|
return d.disabledTimeIntervals = b, _(), l
|
|
}, l.disabledHours = function (b) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.disabledHours">
|
|
///<summary>Returns an array with the currently set disabled hours on the component.</summary>
|
|
///<returns type="array">options.disabledHours</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
|
|
///options.enabledHours if such exist.</summary>
|
|
///<param name="hours" locid="$.fn.datetimepicker.disabledHours_p:hours">Takes an [ int ] of values and disallows the user to select only from those hours.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.disabledHours ? a.extend({}, d.disabledHours) : d.disabledHours;
|
|
if (!b)return d.disabledHours = !1, _(), l;
|
|
if (!(b instanceof Array))throw new TypeError("disabledHours() expects an array parameter");
|
|
if (d.disabledHours = oa(b), d.enabledHours = !1, d.useCurrent && !d.keepInvalid) {
|
|
for (var c = 0; !R(e, "h");) {
|
|
if (e.add(1, "h"), 24 === c)throw"Tried 24 times to find a valid date";
|
|
c++
|
|
}
|
|
aa(e)
|
|
}
|
|
return _(), l
|
|
}, l.enabledHours = function (b) {
|
|
///<signature helpKeyword="$.fn.datetimepicker.enabledHours">
|
|
///<summary>Returns an array with the currently set enabled hours on the component.</summary>
|
|
///<returns type="array">options.enabledHours</returns>
|
|
///</signature>
|
|
///<signature>
|
|
///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledHours if such exist.</summary>
|
|
///<param name="hours" locid="$.fn.datetimepicker.enabledHours_p:hours">Takes an [ int ] of values and allows the user to select only from those hours.</param>
|
|
///</signature>
|
|
if (0 === arguments.length)return d.enabledHours ? a.extend({}, d.enabledHours) : d.enabledHours;
|
|
if (!b)return d.enabledHours = !1, _(), l;
|
|
if (!(b instanceof Array))throw new TypeError("enabledHours() expects an array parameter");
|
|
if (d.enabledHours = oa(b), d.disabledHours = !1, d.useCurrent && !d.keepInvalid) {
|
|
for (var c = 0; !R(e, "h");) {
|
|
if (e.add(1, "h"), 24 === c)throw"Tried 24 times to find a valid date";
|
|
c++
|
|
}
|
|
aa(e)
|
|
}
|
|
return _(), l
|
|
}, /**
|
|
* Returns the component's model current viewDate, a moment object or null if not set. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.
|
|
* @param {Takes string, viewDate, moment, null parameter.} newDate
|
|
* @returns {viewDate.clone()}
|
|
*/
|
|
l.viewDate = function (a) {
|
|
if (0 === arguments.length)return f.clone();
|
|
if (!a)return f = e.clone(), l;
|
|
if (!("string" == typeof a || b.isMoment(a) || a instanceof Date))throw new TypeError("viewDate() parameter must be one of [string, moment or Date]");
|
|
return f = da(a), K(), l
|
|
}, c.is("input"))g = c; else if (g = c.find(d.datepickerInput), 0 === g.length)g = c.find("input"); else if (!g.is("input"))throw new Error('CSS class "' + d.datepickerInput + '" cannot be applied to non input element');
|
|
if (c.hasClass("input-group") && (
|
|
// in case there is more then one 'input-group-addon' Issue #48
|
|
n = 0 === c.find(".datepickerbutton").length ? c.find(".input-group-addon") : c.find(".datepickerbutton")), !d.inline && !g.is("input"))throw new Error("Could not initialize DateTimePicker without an input element");
|
|
// Set defaults for date here now instead of in var declaration
|
|
return e = y(), f = e.clone(), a.extend(!0, d, H()), l.options(d), pa(), la(), g.prop("disabled") && l.disable(), g.is("input") && 0 !== g.val().trim().length ? aa(da(g.val().trim())) : d.defaultDate && void 0 === g.attr("placeholder") && aa(d.defaultDate), d.inline && ga(), l
|
|
};
|
|
/********************************************************************************
|
|
*
|
|
* jQuery plugin constructor and defaults object
|
|
*
|
|
********************************************************************************/
|
|
/**
|
|
* See (http://jquery.com/).
|
|
* @name jQuery
|
|
* @class
|
|
* See the jQuery Library (http://jquery.com/) for full details. This just
|
|
* documents the function and classes that are added to jQuery by this plug-in.
|
|
*/
|
|
/**
|
|
* See (http://jquery.com/)
|
|
* @name fn
|
|
* @class
|
|
* See the jQuery Library (http://jquery.com/) for full details. This just
|
|
* documents the function and classes that are added to jQuery by this plug-in.
|
|
* @memberOf jQuery
|
|
*/
|
|
/**
|
|
* Show comments
|
|
* @class datetimepicker
|
|
* @memberOf jQuery.fn
|
|
*/
|
|
a.fn.datetimepicker = function (b) {
|
|
b = b || {};
|
|
var d, e = Array.prototype.slice.call(arguments, 1), f = !0, g = ["destroy", "hide", "show", "toggle"];
|
|
if ("object" == typeof b)return this.each(function () {
|
|
var d = a(this);
|
|
d.data("DateTimePicker") || (b = a.extend(!0, {}, a.fn.datetimepicker.defaults, b), d.data("DateTimePicker", c(d, b)))
|
|
});
|
|
if ("string" == typeof b)return this.each(function () {
|
|
var c = a(this), g = c.data("DateTimePicker");
|
|
if (!g)throw new Error('bootstrap-datetimepicker("' + b + '") method was called on an element that is not using DateTimePicker');
|
|
d = g[b].apply(g, e), f = d === g
|
|
}), f || a.inArray(b, g) > -1 ? this : d;
|
|
throw new TypeError("Invalid arguments for DateTimePicker: " + b)
|
|
}, a.fn.datetimepicker.defaults = {timeZone: "", format: !1, dayViewHeaderFormat: "MMMM YYYY", extraFormats: !1, stepping: 1, minDate: !1, maxDate: !1, useCurrent: !0, collapse: !0, locale: b.locale(), defaultDate: !1, disabledDates: !1, enabledDates: !1, icons: {time: "glyphicon glyphicon-time", date: "glyphicon glyphicon-calendar", up: "glyphicon glyphicon-chevron-up", down: "glyphicon glyphicon-chevron-down", previous: "glyphicon glyphicon-chevron-left", next: "glyphicon glyphicon-chevron-right", today: "glyphicon glyphicon-screenshot", clear: "glyphicon glyphicon-trash", close: "glyphicon glyphicon-remove"}, tooltips: {today: "Go to today", clear: "Clear selection", close: "Close the picker", selectMonth: "Select Month", prevMonth: "Previous Month", nextMonth: "Next Month", selectYear: "Select Year", prevYear: "Previous Year", nextYear: "Next Year", selectDecade: "Select Decade", prevDecade: "Previous Decade", nextDecade: "Next Decade", prevCentury: "Previous Century", nextCentury: "Next Century", pickHour: "Pick Hour", incrementHour: "Increment Hour", decrementHour: "Decrement Hour", pickMinute: "Pick Minute", incrementMinute: "Increment Minute", decrementMinute: "Decrement Minute", pickSecond: "Pick Second", incrementSecond: "Increment Second", decrementSecond: "Decrement Second", togglePeriod: "Toggle Period", selectTime: "Select Time"}, useStrict: !1, sideBySide: !1, daysOfWeekDisabled: !1, calendarWeeks: !1, viewMode: "days", toolbarPlacement: "default", showTodayButton: !1, showClear: !1, showClose: !1, widgetPositioning: {horizontal: "auto", vertical: "auto"}, widgetParent: null, ignoreReadonly: !1, keepOpen: !1, focusOnShow: !0, inline: !1, keepInvalid: !1, datepickerInput: ".datepickerinput", keyBinds: {up: function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") ? this.date(b.clone().subtract(7, "d")) : this.date(b.clone().add(this.stepping(), "m"))
|
|
}
|
|
}, down: function (a) {
|
|
if (!a)return void this.show();
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") ? this.date(b.clone().add(7, "d")) : this.date(b.clone().subtract(this.stepping(), "m"))
|
|
}, "control up": function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") ? this.date(b.clone().subtract(1, "y")) : this.date(b.clone().add(1, "h"))
|
|
}
|
|
}, "control down": function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") ? this.date(b.clone().add(1, "y")) : this.date(b.clone().subtract(1, "h"))
|
|
}
|
|
}, left: function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") && this.date(b.clone().subtract(1, "d"))
|
|
}
|
|
}, right: function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") && this.date(b.clone().add(1, "d"))
|
|
}
|
|
}, pageUp: function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") && this.date(b.clone().subtract(1, "M"))
|
|
}
|
|
}, pageDown: function (a) {
|
|
if (a) {
|
|
var b = this.date() || this.getMoment();
|
|
a.find(".datepicker").is(":visible") && this.date(b.clone().add(1, "M"))
|
|
}
|
|
}, enter: function () {
|
|
this.hide()
|
|
}, escape: function () {
|
|
this.hide()
|
|
},
|
|
//tab: function (widget) { //this break the flow of the form. disabling for now
|
|
// var toggle = widget.find('.picker-switch a[data-action="togglePicker"]');
|
|
// if(toggle.length > 0) toggle.click();
|
|
//},
|
|
"control space": function (a) {
|
|
a.find(".timepicker").is(":visible") && a.find('.btn[data-action="togglePeriod"]').click()
|
|
}, t: function () {
|
|
this.date(this.getMoment())
|
|
}, "delete": function () {
|
|
this.clear()
|
|
}}, debug: !1, allowInputToggle: !1, disabledTimeIntervals: !1, disabledHours: !1, enabledHours: !1, viewDate: !1}, "undefined" != typeof module && (module.exports = a.fn.datetimepicker)
|
|
});
|