@icap-ethiopia/esm-ethiohri-app
Version:
A microfrontend ethiohri OpenMRS
2,959 lines • 103 kB
JavaScript
!(function ($) {
"use strict";
function Calendars() {
(this.regionalOptions = []),
(this.regionalOptions[""] = {
invalidCalendar: "Calendar {0} not found",
invalidDate: "Invalid {0} date",
invalidMonth: "Invalid {0} month",
invalidYear: "Invalid {0} year",
differentCalendars: "Cannot mix {0} and {1} dates",
}),
(this.local = this.regionalOptions[""]),
(this.calendars = {}),
(this._localCals = {});
}
function CDate(calendar, year, month, day) {
if (
((this._calendar = calendar),
(this._year = year),
(this._month = month),
(this._day = day),
0 === this._calendar._validateLevel &&
!this._calendar.isValid(this._year, this._month, this._day))
)
throw (
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
).replace(/\{0\}/, this._calendar.local.name);
}
function pad(value, length) {
return (
(value = "" + value), "000000".substring(0, length - value.length) + value
);
}
function BaseCalendar() {
this.shortYearCutoff = "+10";
}
function GregorianCalendar(language) {
this.local = this.regionalOptions[language] || this.regionalOptions[""];
}
$.extend(Calendars.prototype, {
instance: function (name, language) {
(name = (name || "gregorian").toLowerCase()), (language = language || "");
var cal = this._localCals[name + "-" + language];
if (
(!cal &&
this.calendars[name] &&
((cal = new this.calendars[name](language)),
(this._localCals[name + "-" + language] = cal)),
!cal)
)
throw (
this.local.invalidCalendar || this.regionalOptions[""].invalidCalendar
).replace(/\{0\}/, name);
return cal;
},
newDate: function (year, month, day, calendar, language) {
return (
(calendar =
("undefined" != typeof year && null !== year && year.year
? year.calendar()
: "string" == typeof calendar
? this.instance(calendar, language)
: calendar) || this.instance()),
calendar.newDate(year, month, day)
);
},
substituteDigits: function (digits) {
return function (value) {
return (value + "").replace(/[0-9]/g, function (digit) {
return digits[digit];
});
};
},
substituteChineseDigits: function (digits, powers) {
return function (value) {
for (var localNumber = "", power = 0; value > 0; ) {
var units = value % 10;
(localNumber =
(0 === units ? "" : digits[units] + powers[power]) + localNumber),
power++,
(value = Math.floor(value / 10));
}
return (
0 === localNumber.indexOf(digits[1] + powers[1]) &&
(localNumber = localNumber.substr(1)),
localNumber || digits[0]
);
};
},
}),
$.extend(CDate.prototype, {
newDate: function (year, month, day) {
return this._calendar.newDate(
"undefined" == typeof year || null === year ? this : year,
month,
day
);
},
year: function (year) {
return 0 === arguments.length ? this._year : this.set(year, "y");
},
month: function (month) {
return 0 === arguments.length ? this._month : this.set(month, "m");
},
day: function (day) {
return 0 === arguments.length ? this._day : this.set(day, "d");
},
date: function (year, month, day) {
if (!this._calendar.isValid(year, month, day))
throw (
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
).replace(/\{0\}/, this._calendar.local.name);
return (
(this._year = year), (this._month = month), (this._day = day), this
);
},
leapYear: function () {
return this._calendar.leapYear(this);
},
epoch: function () {
return this._calendar.epoch(this);
},
formatYear: function () {
return this._calendar.formatYear(this);
},
monthOfYear: function () {
return this._calendar.monthOfYear(this);
},
weekOfYear: function () {
return this._calendar.weekOfYear(this);
},
daysInYear: function () {
return this._calendar.daysInYear(this);
},
dayOfYear: function () {
return this._calendar.dayOfYear(this);
},
daysInMonth: function () {
return this._calendar.daysInMonth(this);
},
dayOfWeek: function () {
return this._calendar.dayOfWeek(this);
},
weekDay: function () {
return this._calendar.weekDay(this);
},
extraInfo: function () {
return this._calendar.extraInfo(this);
},
add: function (offset, period) {
return this._calendar.add(this, offset, period);
},
set: function (value, period) {
return this._calendar.set(this, value, period);
},
compareTo: function (date) {
if (this._calendar.name !== date._calendar.name)
throw (
$.calendars.local.differentCalendars ||
$.calendars.regionalOptions[""].differentCalendars
)
.replace(/\{0\}/, this._calendar.local.name)
.replace(/\{1\}/, date._calendar.local.name);
var c =
this._year !== date._year
? this._year - date._year
: this._month !== date._month
? this.monthOfYear() - date.monthOfYear()
: this._day - date._day;
return 0 === c ? 0 : c < 0 ? -1 : 1;
},
calendar: function () {
return this._calendar;
},
toJD: function () {
return this._calendar.toJD(this);
},
fromJD: function (jd) {
return this._calendar.fromJD(jd);
},
toJSDate: function () {
return this._calendar.toJSDate(this);
},
fromJSDate: function (jsd) {
return this._calendar.fromJSDate(jsd);
},
toString: function () {
return (
(this.year() < 0 ? "-" : "") +
pad(Math.abs(this.year()), 4) +
"-" +
pad(this.month(), 2) +
"-" +
pad(this.day(), 2)
);
},
}),
$.extend(BaseCalendar.prototype, {
_validateLevel: 0,
newDate: function (year, month, day) {
return "undefined" == typeof year || null === year
? this.today()
: (year.year &&
(this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
),
(day = year.day()),
(month = year.month()),
(year = year.year())),
new CDate(this, year, month, day));
},
today: function () {
return this.fromJSDate(new Date());
},
epoch: function (year) {
var date = this._validate(
year,
this.minMonth,
this.minDay,
$.calendars.local.invalidYear ||
$.calendars.regionalOptions[""].invalidYear
);
return date.year() < 0 ? this.local.epochs[0] : this.local.epochs[1];
},
formatYear: function (year) {
var date = this._validate(
year,
this.minMonth,
this.minDay,
$.calendars.local.invalidYear ||
$.calendars.regionalOptions[""].invalidYear
);
return (date.year() < 0 ? "-" : "") + pad(Math.abs(date.year()), 4);
},
monthsInYear: function (year) {
return (
this._validate(
year,
this.minMonth,
this.minDay,
$.calendars.local.invalidYear ||
$.calendars.regionalOptions[""].invalidYear
),
12
);
},
monthOfYear: function (year, month) {
var date = this._validate(
year,
month,
this.minDay,
$.calendars.local.invalidMonth ||
$.calendars.regionalOptions[""].invalidMonth
);
return (
((date.month() + this.monthsInYear(date) - this.firstMonth) %
this.monthsInYear(date)) +
this.minMonth
);
},
fromMonthOfYear: function (year, ord) {
var m =
((ord + this.firstMonth - 2 * this.minMonth) %
this.monthsInYear(year)) +
this.minMonth;
return (
this._validate(
year,
m,
this.minDay,
$.calendars.local.invalidMonth ||
$.calendars.regionalOptions[""].invalidMonth
),
m
);
},
daysInYear: function (year) {
var date = this._validate(
year,
this.minMonth,
this.minDay,
$.calendars.local.invalidYear ||
$.calendars.regionalOptions[""].invalidYear
);
return this.leapYear(date) ? 366 : 365;
},
dayOfYear: function (year, month, day) {
var date = this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
);
return (
date.toJD() -
this.newDate(
date.year(),
this.fromMonthOfYear(date.year(), this.minMonth),
this.minDay
).toJD() +
1
);
},
daysInWeek: function () {
return 7;
},
dayOfWeek: function (year, month, day) {
var date = this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
);
return (Math.floor(this.toJD(date)) + 2) % this.daysInWeek();
},
extraInfo: function (year, month, day) {
return (
this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
),
{}
);
},
add: function (date, offset, period) {
return (
this._validate(
date,
this.minMonth,
this.minDay,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
),
this._correctAdd(
date,
this._add(date, offset, period),
offset,
period
)
);
},
_add: function (date, offset, period) {
this._validateLevel++;
var d;
if ("d" === period || "w" === period) {
var jd =
date.toJD() + offset * ("w" === period ? this.daysInWeek() : 1);
return (
(d = date.calendar().fromJD(jd)),
this._validateLevel--,
[d.year(), d.month(), d.day()]
);
}
try {
var y = date.year() + ("y" === period ? offset : 0),
m = date.monthOfYear() + ("m" === period ? offset : 0);
d = date.day();
var resyncYearMonth = function (calendar) {
for (; m < calendar.minMonth; )
y--, (m += calendar.monthsInYear(y));
for (
var yearMonths = calendar.monthsInYear(y);
m > yearMonths - 1 + calendar.minMonth;
)
y++, (m -= yearMonths), (yearMonths = calendar.monthsInYear(y));
};
"y" === period
? (date.month() !== this.fromMonthOfYear(y, m) &&
(m = this.newDate(y, date.month(), this.minDay).monthOfYear()),
(m = Math.min(m, this.monthsInYear(y))),
(d = Math.min(
d,
this.daysInMonth(y, this.fromMonthOfYear(y, m))
)))
: "m" === period &&
(resyncYearMonth(this),
(d = Math.min(
d,
this.daysInMonth(y, this.fromMonthOfYear(y, m))
)));
var ymd = [y, this.fromMonthOfYear(y, m), d];
return this._validateLevel--, ymd;
} catch (e) {
throw (this._validateLevel--, e);
}
},
_correctAdd: function (date, ymd, offset, period) {
if (
!(
this.hasYearZero ||
("y" !== period && "m" !== period) ||
(0 !== ymd[0] && date.year() > 0 == ymd[0] > 0)
)
) {
var adj = {
y: [1, 1, "y"],
m: [1, this.monthsInYear(-1), "m"],
w: [this.daysInWeek(), this.daysInYear(-1), "d"],
d: [1, this.daysInYear(-1), "d"],
}[period],
dir = offset < 0 ? -1 : 1;
ymd = this._add(date, offset * adj[0] + dir * adj[1], adj[2]);
}
return date.date(ymd[0], ymd[1], ymd[2]);
},
set: function (date, value, period) {
this._validate(
date,
this.minMonth,
this.minDay,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
);
var y = "y" === period ? value : date.year(),
m = "m" === period ? value : date.month(),
d = "d" === period ? value : date.day();
return (
("y" !== period && "m" !== period) ||
(d = Math.min(d, this.daysInMonth(y, m))),
date.date(y, m, d)
);
},
isValid: function (year, month, day) {
this._validateLevel++;
var valid = this.hasYearZero || 0 !== year;
if (valid) {
var date = this.newDate(year, month, this.minDay);
valid =
month >= this.minMonth &&
month - this.minMonth < this.monthsInYear(date) &&
day >= this.minDay &&
day - this.minDay < this.daysInMonth(date);
}
return this._validateLevel--, valid;
},
toJSDate: function (year, month, day) {
var date = this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
);
return $.calendars.instance().fromJD(this.toJD(date)).toJSDate();
},
fromJSDate: function (jsd) {
return this.fromJD($.calendars.instance().fromJSDate(jsd).toJD());
},
_validate: function (year, month, day, error) {
if (year.year) {
if (0 === this._validateLevel && this.name !== year.calendar().name)
throw (
$.calendars.local.differentCalendars ||
$.calendars.regionalOptions[""].differentCalendars
)
.replace(/\{0\}/, this.local.name)
.replace(/\{1\}/, year.calendar().local.name);
return year;
}
try {
if (
(this._validateLevel++,
1 === this._validateLevel && !this.isValid(year, month, day))
)
throw error.replace(/\{0\}/, this.local.name);
var date = this.newDate(year, month, day);
return this._validateLevel--, date;
} catch (e) {
throw (this._validateLevel--, e);
}
},
}),
(GregorianCalendar.prototype = new BaseCalendar()),
$.extend(GregorianCalendar.prototype, {
name: "Gregorian",
jdEpoch: 1721425.5,
daysPerMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
hasYearZero: !1,
minMonth: 1,
firstMonth: 1,
minDay: 1,
regionalOptions: {
"": {
name: "Gregorian",
epochs: ["BCE", "CE"],
monthNames: [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
],
monthNamesShort: [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec",
],
dayNames: [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
],
dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
digits: null,
dateFormat: "mm/dd/yyyy",
firstDay: 0,
isRTL: !1,
},
},
leapYear: function (year) {
var date = this._validate(
year,
this.minMonth,
this.minDay,
$.calendars.local.invalidYear ||
$.calendars.regionalOptions[""].invalidYear
);
return (
(year = date.year() + (date.year() < 0 ? 1 : 0)),
year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)
);
},
weekOfYear: function (year, month, day) {
var checkDate = this.newDate(year, month, day);
return (
checkDate.add(4 - (checkDate.dayOfWeek() || 7), "d"),
Math.floor((checkDate.dayOfYear() - 1) / 7) + 1
);
},
daysInMonth: function (year, month) {
var date = this._validate(
year,
month,
this.minDay,
$.calendars.local.invalidMonth ||
$.calendars.regionalOptions[""].invalidMonth
);
return (
this.daysPerMonth[date.month() - 1] +
(2 === date.month() && this.leapYear(date.year()) ? 1 : 0)
);
},
weekDay: function (year, month, day) {
return (this.dayOfWeek(year, month, day) || 7) < 6;
},
toJD: function (year, month, day) {
var date = this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
);
(year = date.year()),
(month = date.month()),
(day = date.day()),
year < 0 && year++,
month < 3 && ((month += 12), year--);
var a = Math.floor(year / 100),
b = 2 - a + Math.floor(a / 4);
return (
Math.floor(365.25 * (year + 4716)) +
Math.floor(30.6001 * (month + 1)) +
day +
b -
1524.5
);
},
fromJD: function (jd) {
var z = Math.floor(jd + 0.5),
a = Math.floor((z - 1867216.25) / 36524.25);
a = z + 1 + a - Math.floor(a / 4);
var b = a + 1524,
c = Math.floor((b - 122.1) / 365.25),
d = Math.floor(365.25 * c),
e = Math.floor((b - d) / 30.6001),
day = b - d - Math.floor(30.6001 * e),
month = e - (e > 13.5 ? 13 : 1),
year = c - (month > 2.5 ? 4716 : 4715);
return year <= 0 && year--, this.newDate(year, month, day);
},
toJSDate: function (year, month, day) {
var date = this._validate(
year,
month,
day,
$.calendars.local.invalidDate ||
$.calendars.regionalOptions[""].invalidDate
),
jsd = new Date(date.year(), date.month() - 1, date.day());
return (
jsd.setHours(0),
jsd.setMinutes(0),
jsd.setSeconds(0),
jsd.setMilliseconds(0),
jsd.setHours(jsd.getHours() > 12 ? jsd.getHours() + 2 : 0),
jsd
);
},
fromJSDate: function (jsd) {
return this.newDate(
jsd.getFullYear(),
jsd.getMonth() + 1,
jsd.getDate()
);
},
}),
($.calendars = new Calendars()),
($.calendars.cdate = CDate),
($.calendars.baseCalendar = BaseCalendar),
($.calendars.calendars.gregorian = GregorianCalendar);
})(jQuery),
(function ($) {
"use strict";
$.extend($.calendars.regionalOptions[""], {
invalidArguments: "Invalid arguments",
invalidFormat: "Cannot format a date from another calendar",
missingNumberAt: "Missing number at position {0}",
unknownNameAt: "Unknown name at position {0}",
unexpectedLiteralAt: "Unexpected literal at position {0}",
unexpectedText: "Additional text found at end",
}),
($.calendars.local = $.calendars.regionalOptions[""]),
$.extend($.calendars.cdate.prototype, {
formatDate: function (format, settings) {
return (
"string" != typeof format && ((settings = format), (format = "")),
this._calendar.formatDate(format || "", this, settings)
);
},
}),
$.extend($.calendars.baseCalendar.prototype, {
UNIX_EPOCH: $.calendars.instance().newDate(1970, 1, 1).toJD(),
SECS_PER_DAY: 86400,
TICKS_EPOCH: $.calendars.instance().jdEpoch,
TICKS_PER_DAY: 864e9,
ATOM: "yyyy-mm-dd",
COOKIE: "D, dd M yyyy",
FULL: "DD, MM d, yyyy",
ISO_8601: "yyyy-mm-dd",
JULIAN: "J",
RFC_822: "D, d M yy",
RFC_850: "DD, dd-M-yy",
RFC_1036: "D, d M yy",
RFC_1123: "D, d M yyyy",
RFC_2822: "D, d M yyyy",
RSS: "D, d M yy",
TICKS: "!",
TIMESTAMP: "@",
W3C: "yyyy-mm-dd",
formatDate: function (format, date, settings) {
if (
("string" != typeof format &&
((settings = date), (date = format), (format = "")),
!date)
)
return "";
if (date.calendar() !== this)
throw (
$.calendars.local.invalidFormat ||
$.calendars.regionalOptions[""].invalidFormat
);
(format = format || this.local.dateFormat),
(settings = settings || {});
for (
var dayNamesShort =
settings.dayNamesShort || this.local.dayNamesShort,
dayNames = settings.dayNames || this.local.dayNames,
monthNamesShort =
settings.monthNamesShort || this.local.monthNamesShort,
monthNames = settings.monthNames || this.local.monthNames,
localNumbers = settings.localNumbers || this.local.localNumbers,
doubled = function (match, step) {
for (
var matches = 1;
iFormat + matches < format.length &&
format.charAt(iFormat + matches) === match;
)
matches++;
return (
(iFormat += matches - 1),
Math.floor(matches / (step || 1)) > 1
);
},
formatNumber = function (match, value, len, step) {
var num = "" + value;
if (doubled(match, step))
for (; num.length < len; ) num = "0" + num;
return num;
},
formatName = function (match, value, shortNames, longNames) {
return doubled(match) ? longNames[value] : shortNames[value];
},
localiseNumbers =
localNumbers && this.local.digits
? this.local.digits
: function (value) {
return value;
},
output = "",
literal = !1,
iFormat = 0;
iFormat < format.length;
iFormat++
)
if (literal)
"'" !== format.charAt(iFormat) || doubled("'")
? (output += format.charAt(iFormat))
: (literal = !1);
else
switch (format.charAt(iFormat)) {
case "d":
output += localiseNumbers(formatNumber("d", date.day(), 2));
break;
case "D":
output += formatName(
"D",
date.dayOfWeek(),
dayNamesShort,
dayNames
);
break;
case "o":
output += formatNumber("o", date.dayOfYear(), 3);
break;
case "w":
output += formatNumber("w", date.weekOfYear(), 2);
break;
case "m":
output += localiseNumbers(formatNumber("m", date.month(), 2));
break;
case "M":
output += formatName(
"M",
date.month() - this.minMonth,
monthNamesShort,
monthNames
);
break;
case "y":
output += localiseNumbers(
doubled("y", 2)
? date.year()
: (date.year() % 100 < 10 ? "0" : "") +
(date.year() % 100)
);
break;
case "Y":
doubled("Y", 2), (output += date.formatYear());
break;
case "J":
output += date.toJD();
break;
case "@":
output += (date.toJD() - this.UNIX_EPOCH) * this.SECS_PER_DAY;
break;
case "!":
output +=
(date.toJD() - this.TICKS_EPOCH) * this.TICKS_PER_DAY;
break;
case "'":
doubled("'") ? (output += "'") : (literal = !0);
break;
default:
output += format.charAt(iFormat);
}
return output;
},
parseDate: function (format, value, settings) {
if ("undefined" == typeof value || null === value)
throw (
$.calendars.local.invalidArguments ||
$.calendars.regionalOptions[""].invalidArguments
);
if (
((value = "object" == typeof value ? value.toString() : value + ""),
"" === value)
)
return null;
(format = format || this.local.dateFormat),
(settings = settings || {});
var shortYearCutoff =
settings.shortYearCutoff || this.shortYearCutoff;
shortYearCutoff =
"string" != typeof shortYearCutoff
? shortYearCutoff
: (this.today().year() % 100) + parseInt(shortYearCutoff, 10);
for (
var dayNamesShort =
settings.dayNamesShort || this.local.dayNamesShort,
dayNames = settings.dayNames || this.local.dayNames,
monthNamesShort =
settings.monthNamesShort || this.local.monthNamesShort,
monthNames = settings.monthNames || this.local.monthNames,
jd = -1,
year = -1,
month = -1,
day = -1,
doy = -1,
shortYear = !1,
literal = !1,
doubled = function (match, step) {
for (
var matches = 1;
iFormat + matches < format.length &&
format.charAt(iFormat + matches) === match;
)
matches++;
return (
(iFormat += matches - 1),
Math.floor(matches / (step || 1)) > 1
);
},
getNumber = function (match, step) {
var isDoubled = doubled(match, step),
size = [
2,
3,
isDoubled ? 4 : 2,
isDoubled ? 4 : 2,
10,
11,
20,
]["oyYJ@!".indexOf(match) + 1],
digits = new RegExp("^-?\\d{1," + size + "}"),
num = value.substring(iValue).match(digits);
if (!num)
throw (
$.calendars.local.missingNumberAt ||
$.calendars.regionalOptions[""].missingNumberAt
).replace(/\{0\}/, iValue);
return (iValue += num[0].length), parseInt(num[0], 10);
},
calendar = this,
getName = function (match, shortNames, longNames, step) {
for (
var names = doubled(match, step) ? longNames : shortNames,
i = 0;
i < names.length;
i++
)
if (
value.substr(iValue, names[i].length).toLowerCase() ===
names[i].toLowerCase()
)
return (iValue += names[i].length), i + calendar.minMonth;
throw (
$.calendars.local.unknownNameAt ||
$.calendars.regionalOptions[""].unknownNameAt
).replace(/\{0\}/, iValue);
},
checkLiteral = function () {
if (value.charAt(iValue) !== format.charAt(iFormat))
throw (
$.calendars.local.unexpectedLiteralAt ||
$.calendars.regionalOptions[""].unexpectedLiteralAt
).replace(/\{0\}/, iValue);
iValue++;
},
iValue = 0,
iFormat = 0;
iFormat < format.length;
iFormat++
)
if (literal)
"'" !== format.charAt(iFormat) || doubled("'")
? checkLiteral()
: (literal = !1);
else
switch (format.charAt(iFormat)) {
case "d":
day = getNumber("d");
break;
case "D":
getName("D", dayNamesShort, dayNames);
break;
case "o":
doy = getNumber("o");
break;
case "w":
getNumber("w");
break;
case "m":
month = getNumber("m");
break;
case "M":
month = getName("M", monthNamesShort, monthNames);
break;
case "y":
var iSave = iFormat;
(shortYear = !doubled("y", 2)),
(iFormat = iSave),
(year = getNumber("y", 2));
break;
case "Y":
year = getNumber("Y", 2);
break;
case "J":
(jd = getNumber("J") + 0.5),
"." === value.charAt(iValue) && (iValue++, getNumber("J"));
break;
case "@":
jd = getNumber("@") / this.SECS_PER_DAY + this.UNIX_EPOCH;
break;
case "!":
jd = getNumber("!") / this.TICKS_PER_DAY + this.TICKS_EPOCH;
break;
case "*":
iValue = value.length;
break;
case "'":
doubled("'") ? checkLiteral() : (literal = !0);
break;
default:
checkLiteral();
}
if (iValue < value.length)
throw (
$.calendars.local.unexpectedText ||
$.calendars.regionalOptions[""].unexpectedText
);
if (
(year === -1
? (year = this.today().year())
: year < 100 &&
shortYear &&
(year +=
shortYearCutoff === -1
? 1900
: this.today().year() -
(this.today().year() % 100) -
(year <= shortYearCutoff ? 0 : 100)),
doy > -1)
) {
(month = 1), (day = doy);
for (
var dim = this.daysInMonth(year, month);
day > dim;
dim = this.daysInMonth(year, month)
)
month++, (day -= dim);
}
return jd > -1 ? this.fromJD(jd) : this.newDate(year, month, day);
},
determineDate: function (
dateSpec,
defaultDate,
currentDate,
dateFormat,
settings
) {
currentDate &&
"object" != typeof currentDate &&
((settings = dateFormat),
(dateFormat = currentDate),
(currentDate = null)),
"string" != typeof dateFormat &&
((settings = dateFormat), (dateFormat = ""));
var calendar = this,
offsetString = function (offset) {
try {
return calendar.parseDate(dateFormat, offset, settings);
} catch (e) {}
offset = offset.toLowerCase();
for (
var date =
(offset.match(/^c/) && currentDate
? currentDate.newDate()
: null) || calendar.today(),
pattern = /([+-]?[0-9]+)\s*(d|w|m|y)?/g,
matches = pattern.exec(offset);
matches;
)
date.add(parseInt(matches[1], 10), matches[2] || "d"),
(matches = pattern.exec(offset));
return date;
};
return (
(defaultDate = defaultDate ? defaultDate.newDate() : null),
(dateSpec =
"undefined" == typeof dateSpec || null === dateSpec
? defaultDate
: "string" == typeof dateSpec
? offsetString(dateSpec)
: "number" == typeof dateSpec
? isNaN(dateSpec) || dateSpec === 1 / 0 || dateSpec === -(1 / 0)
? defaultDate
: calendar.today().add(dateSpec, "d")
: calendar.newDate(dateSpec))
);
},
});
})(jQuery),
(function ($) {
"use strict";
var pluginName = "calendarsPicker";
$.JQPlugin.createPlugin({
name: pluginName,
defaultRenderer: {
picker:
'<div class="calendars"><div class="calendars-nav">{link:prev}{link:today}{link:next}</div>{months}{popup:start}<div class="calendars-ctrl">{link:clear}{link:close}</div>{popup:end}<div class="calendars-clear-fix"></div></div>',
monthRow: '<div class="calendars-month-row">{months}</div>',
month:
'<div class="calendars-month"><div class="calendars-month-header">{monthHeader}</div><table><thead>{weekHeader}</thead><tbody>{weeks}</tbody></table></div>',
weekHeader: "<tr>{days}</tr>",
dayHeader: "<th>{day}</th>",
week: "<tr>{days}</tr>",
day: "<td>{day}</td>",
monthSelector: ".calendars-month",
daySelector: "td",
rtlClass: "calendars-rtl",
multiClass: "calendars-multi",
defaultClass: "",
selectedClass: "calendars-selected",
highlightedClass: "calendars-highlight",
todayClass: "calendars-today",
otherMonthClass: "calendars-other-month",
weekendClass: "calendars-weekend",
commandClass: "calendars-cmd",
commandButtonClass: "",
commandLinkClass: "",
disabledClass: "calendars-disabled",
},
commands: {
prev: {
text: "prevText",
status: "prevStatus",
keystroke: { keyCode: 33 },
enabled: function (inst) {
var minDate = inst.curMinDate();
return (
!minDate ||
inst.drawDate
.newDate()
.add(
1 - inst.options.monthsToStep - inst.options.monthsOffset,
"m"
)
.day(inst.options.calendar.minDay)
.add(-1, "d")
.compareTo(minDate) !== -1
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(-inst.options.monthsToStep - inst.options.monthsOffset, "m")
.day(inst.options.calendar.minDay);
},
action: function (inst) {
plugin.changeMonth(this, -inst.options.monthsToStep);
},
},
prevJump: {
text: "prevJumpText",
status: "prevJumpStatus",
keystroke: { keyCode: 33, ctrlKey: !0 },
enabled: function (inst) {
var minDate = inst.curMinDate();
return (
!minDate ||
inst.drawDate
.newDate()
.add(
1 - inst.options.monthsToJump - inst.options.monthsOffset,
"m"
)
.day(inst.options.calendar.minDay)
.add(-1, "d")
.compareTo(minDate) !== -1
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(-inst.options.monthsToJump - inst.options.monthsOffset, "m")
.day(inst.options.calendar.minDay);
},
action: function (inst) {
plugin.changeMonth(this, -inst.options.monthsToJump);
},
},
next: {
text: "nextText",
status: "nextStatus",
keystroke: { keyCode: 34 },
enabled: function (inst) {
var maxDate = inst.get("maxDate");
return (
!maxDate ||
1 !==
inst.drawDate
.newDate()
.add(
inst.options.monthsToStep - inst.options.monthsOffset,
"m"
)
.day(inst.options.calendar.minDay)
.compareTo(maxDate)
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(inst.options.monthsToStep - inst.options.monthsOffset, "m")
.day(inst.options.calendar.minDay);
},
action: function (inst) {
plugin.changeMonth(this, inst.options.monthsToStep);
},
},
nextJump: {
text: "nextJumpText",
status: "nextJumpStatus",
keystroke: { keyCode: 34, ctrlKey: !0 },
enabled: function (inst) {
var maxDate = inst.get("maxDate");
return (
!maxDate ||
1 !==
inst.drawDate
.newDate()
.add(
inst.options.monthsToJump - inst.options.monthsOffset,
"m"
)
.day(inst.options.calendar.minDay)
.compareTo(maxDate)
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(inst.options.monthsToJump - inst.options.monthsOffset, "m")
.day(inst.options.calendar.minDay);
},
action: function (inst) {
plugin.changeMonth(this, inst.options.monthsToJump);
},
},
current: {
text: "currentText",
status: "currentStatus",
keystroke: { keyCode: 36, ctrlKey: !0 },
enabled: function (inst) {
var minDate = inst.curMinDate(),
maxDate = inst.get("maxDate"),
curDate = inst.selectedDates[0] || inst.options.calendar.today();
return !(
(minDate && curDate.compareTo(minDate) === -1) ||
(maxDate && 1 === curDate.compareTo(maxDate))
);
},
date: function (inst) {
return inst.selectedDates[0] || inst.options.calendar.today();
},
action: function (inst) {
var curDate =
inst.selectedDates[0] || inst.options.calendar.today();
plugin.showMonth(this, curDate.year(), curDate.month());
},
},
today: {
text: "todayText",
status: "todayStatus",
keystroke: { keyCode: 36, ctrlKey: !0 },
enabled: function (inst) {
var minDate = inst.curMinDate(),
maxDate = inst.get("maxDate");
return !(
(minDate &&
inst.options.calendar.today().compareTo(minDate) === -1) ||
(maxDate &&
1 === inst.options.calendar.today().compareTo(maxDate))
);
},
date: function (inst) {
return inst.options.calendar.today();
},
action: function () {
plugin.showMonth(this);
},
},
clear: {
text: "clearText",
status: "clearStatus",
keystroke: { keyCode: 35, ctrlKey: !0 },
enabled: function () {
return !0;
},
date: function () {
return null;
},
action: function () {
plugin.clear(this);
},
},
close: {
text: "closeText",
status: "closeStatus",
keystroke: { keyCode: 27 },
enabled: function () {
return !0;
},
date: function () {
return null;
},
action: function () {
plugin.hide(this);
},
},
prevWeek: {
text: "prevWeekText",
status: "prevWeekStatus",
keystroke: { keyCode: 38, ctrlKey: !0 },
enabled: function (inst) {
var minDate = inst.curMinDate();
return (
!minDate ||
inst.drawDate
.newDate()
.add(-inst.options.calendar.daysInWeek(), "d")
.compareTo(minDate) !== -1
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(-inst.options.calendar.daysInWeek(), "d");
},
action: function (inst) {
plugin.changeDay(this, -inst.options.calendar.daysInWeek());
},
},
prevDay: {
text: "prevDayText",
status: "prevDayStatus",
keystroke: { keyCode: 37, ctrlKey: !0 },
enabled: function (inst) {
var minDate = inst.curMinDate();
return (
!minDate ||
inst.drawDate.newDate().add(-1, "d").compareTo(minDate) !== -1
);
},
date: function (inst) {
return inst.drawDate.newDate().add(-1, "d");
},
action: function () {
plugin.changeDay(this, -1);
},
},
nextDay: {
text: "nextDayText",
status: "nextDayStatus",
keystroke: { keyCode: 39, ctrlKey: !0 },
enabled: function (inst) {
var maxDate = inst.get("maxDate");
return (
!maxDate ||
1 !== inst.drawDate.newDate().add(1, "d").compareTo(maxDate)
);
},
date: function (inst) {
return inst.drawDate.newDate().add(1, "d");
},
action: function () {
plugin.changeDay(this, 1);
},
},
nextWeek: {
text: "nextWeekText",
status: "nextWeekStatus",
keystroke: { keyCode: 40, ctrlKey: !0 },
enabled: function (inst) {
var maxDate = inst.get("maxDate");
return (
!maxDate ||
1 !==
inst.drawDate
.newDate()
.add(inst.options.calendar.daysInWeek(), "d")
.compareTo(maxDate)
);
},
date: function (inst) {
return inst.drawDate
.newDate()
.add(inst.options.calendar.daysInWeek(), "d");
},
action: function (inst) {
plugin.changeDay(this, inst.options.calendar.daysInWeek());
},
},
},
defaultOptions: {
calendar: $.calendars.instance(),
pickerClass: "",
showOnFocus: !0,
showTrigger: null,
showAnim: "show",
showOptions: {},
showSpeed: "normal",
popupContainer: null,
alignment: "bottom",
fixedWeeks: !1,
firstDay: null,
calculateWeek: null,
localNumbers: !1,
monthsToShow: 1,
monthsOffset: 0,
monthsToStep: 1,
monthsToJump: 12,
useMouseWheel: !0,
changeMonth: !0,
yearRange: "c-10:c+10",
showOtherMonths: !1,
selectOtherMonths: !1,
defaultDate: null,
selectDefaultDate: !1,
minDate: null,
maxDate: null,
dateFormat: null,
autoSize: !1,
rangeSelect: !1,
rangeSeparator: " - ",
multiSelect: 0,
multiSeparator: ",",
onDate: null,
onShow: null,
onChangeMonthYear: null,
onSelect: null,
onClose: null,
altField: null,
altFormat: null,
constrainInput: !0,
commandsAsDateFormat: !1,
commands: {},
holidays: null,
},
regionalOptions: {
"": {
renderer: {},
prevText: "<",
prevStatus: "Show the previous month",
prevJumpText: "<<",
prevJumpStatus: "Show the previous year",
nextText: ">",
nextStatus: "Show the next month",
nextJumpText: ">>",
nextJumpStatus: "Show the next year",
currentText: "Current",
currentStatus: "Show the current month",
todayText: "Today",
todayStatus: "Show current month",
clearText: "Clear",
clearStatus: "Clear all the dates",
closeText: "Close",
closeStatus: "Close the datepicker",
yearStatus: "Change the year",
earlierText: "  ▲",
laterText: "  ▼",
monthStatus: "Change the month",
weekText: "Wk",
weekStatus: "Week of the year",
dayStatus: "Select DD, M d, yyyy",
defaultStatus: "Select a date",
isRTL: !1,
},
},
_disabled: [],
_popupClass: "calendars-popup",
_triggerClass: "calendars-trigger",
_disableClass: "calendars-disable",
_monthYearClass: "calendars-month-year",
_curMonthClass: "calendars-month-",
_anyYearClass: "calendars-any-year",
_curDoWClass: "calendars-dow-",
_init: function () {
(this.defaultOptions.commands = this.commands),
(this.regionalOptions[""].renderer = this.defaultRenderer),
this._super();
},
_instSettings: function (elem, options) {
return {
selectedDates: [],
drawDate: null,
pickingRange: !1,
inline:
$.inArray(elem[0].nodeName.toLowerCase(), ["div", "span"]) > -1,
get: function (name) {
return $.inArray(name, ["defaultDate", "minDate", "maxDate"]) > -1
? this.options.calendar.determineDate(
this.options[name],
null,
this.selectedDates[0],
this.get("dateFormat"),
this.getConfig()
)
: "dateFormat" === name
? this.options.dateFormat ||
this.options.calendar.local.dateFormat
: this.options[name];
},
curMinDate: function () {
return this.pickingRange
? this.selectedDates[0]
: this.get("minDate");
},
getConfig: function () {
return {
dayNamesShort: this.options.dayNamesShort,
dayNames: this.options.dayNames,
monthNamesShort: this.options.monthNamesShort,
monthNames: this.options.monthNames,
calculateWeek: this.options.calculateWeek,
shortYearCutoff: this.options.shortYearCutoff,
};
},
};
},
_postAttach: function (elem, inst) {
inst.inline
? ((inst.drawDate = plugin._checkMinMax(
(
inst.selectedDates[0] ||
inst.get("defaultDate") ||
inst.options.calendar.today()
).newDate(),
inst
)),
(inst.prevDate = inst.drawDate.newDate()),
this._update(elem[0]),
$.fn.mousewheel && elem.mousewheel(this._doMouseWheel))
: (this._attachments(elem, inst),
elem
.on("keydown." + inst.name, this._keyDown)
.on("keypress." + inst.name, this._keyPress)
.on("keyup." + inst.name, this._keyUp),
elem.attr("disabled") && this.disable(elem[0]));
},
_optionsChanged: function (elem, inst, options) {
if (options.calendar && options.calendar !== inst.options.calendar) {
var discardDate = function (name) {
return "object" == typeof inst.options[name]
? null
: inst.options[name];
};
(options = $.extend(
{
defaultDate: discardDate("defaultDate"),
minDate: discardDate("minDate"),
maxDate: discardDate("maxDate"),
},
options
)),
(inst.selectedDates = []),
(inst.drawDate = null);
}
var dates = inst.selectedDates;
$.extend(inst.options, options),
this.setDate(elem[0], dates, null, !1, !0),
(inst.pickingRange = !1);
var calendar = inst.options.calendar,
defaultDate = inst.get("defaultDate");
(inst.drawDate = this._checkMinMax(
(defaultDate ? defaultDate : inst.drawDate) ||
defaultDate ||
calendar.today(),
inst
).newDate()),
inst.inline || this._attachments(elem, inst),
(inst.inline || inst.div) && this._update(elem[0]);
},
_attachments: function (elem, inst) {
elem.off("focus." + inst.name),
inst.options.showOnFocus && elem.on("focus." + inst.name, this.show),
inst.trigger && inst.trigger.remove();
var trigger = inst.options.showTrigger;
(inst.trigger = trigger
? $(trigger)
.clone()
.removeAttr("id")
.addClass(this._triggerClass)
[inst.options.isRTL ? "insertBefore" : "insertAfter"](elem)
.click(function () {
plugin.isDisabled(elem[0]) ||
plugin[plugin.curInst === inst ? "hide" : "show"](elem[0]);
})
: $([])),
this._autoSize(elem, inst);
var dates = this._extractDates(inst, elem.val());
dates && this.setDate(elem[0], dates, null, !0);
var defaultDate = inst.get("defaultDate");
inst.options.selectDefaultDate &&
defaultDate &&
0 === inst.selectedDates.length &&
this.setDate(
elem[0],
(defaultDate || inst.options.calendar.today()).newDate()
);
},
_autoSize: function (elem, inst) {
if (inst.options.autoSize && !inst.inline) {
var calendar = inst.options.calendar,
date = calendar.newDate(2009, 10, 20),
dateFormat = inst.get("dateFormat");
if (dateFormat.match(/[DM]/)) {
var findMax = function (names) {
for (var max = 0, maxI = 0, i = 0; i < names.length; i++)
names[i].length > max && ((max = names[i].length), (maxI = i));
return maxI;
};
date.month(
findMax(
calendar.local[
dateFormat.match(/MM/) ? "monthNames" : "monthNamesShort"
]
) + 1
),
date.day(
findMax(
calendar.local[
dateFormat.match(/DD/) ? "dayNames" : "dayNamesShort"
]
) +
20 -
date.dayOfWeek()
);
}
inst.elem.attr(
"size",
date.formatDate(dateFormat, {
localNumbers: inst.options.localnumbers,
}).length
);
}
},
_preDestroy: function (elem, inst) {
inst.trigger && inst.trigger.remove(),
elem.empty().off("." + inst.name),
inst.inline && $.fn.mousewheel && elem.unmousewheel(),
!inst.inline && inst.options.autoSize && elem.removeAttr("size");
},
multipleEvents: function (fns) {
var funcs = arguments;
return function () {
for (var i = 0; i < funcs.length; i++)
funcs[i].apply(this, arguments);
};
},
enable: function (elem) {
if (((elem = $(elem)), elem.hasClass(this._getMarker()))) {
var inst = this._getInst(elem);
inst.inline
? elem
.children("." + this._disableClass)
.remove()
.end()
.find("button,select")
.prop("disabled", !1)
.end()
.find("a")
.attr("href", "#")
: (elem.prop("disabled", !1),
inst.trigger
.filter("button." + this._triggerClass)
.prop("disabled", !1)
.end()
.filter("img." + this._triggerClass)
.css({
opacity: "1.0",
cursor: "",
})),
(this._disabled = $.map(this._disabled, function (value) {
return value === elem[0] ? null : value;
}));
}
},
disable: function (elem) {
if (((elem = $(elem)), elem.hasClass(this._getMarker()))) {
var inst = this._getInst(elem);
if (inst.inline) {
var inline = elem.children(":last"),
offset = inline.offset(),
relOffset = { left: 0, top: 0 };
inline.parents().each(function () {
if ("relative" === $(this).css("position"))
return (relOffset = $(this).offset()), !1;
});
var zIndex = elem.css("zIndex");
(zIndex = ("auto" === zIndex ? 0 : parseInt(zIndex, 10)) + 1),
elem
.prepend(
'<div class="' +
this._disableClass +
'" style="width: ' +
inline.outerWidth() +
"px; height: " +
inline.outerHeight() +
"px; left: " +
(offset.left - relOffset.left) +
"px; top: " +
(offset.top - relOffset.top) +
"px; z-index: " +
zIndex +
'"></div>'
)
.find("button,select")
.prop("disabled", !0)
.end()
.find("a")
.removeAttr("href");
} else
elem.prop("disabled", !0),
inst.trigger
.filter("button." + this._triggerClass)
.prop("disabled", !0)
.end()
.filter("img." + this._triggerClass)
.css({ opacity: "0.5", cursor: "default" });
(this._disabled = $.map(this._disabled, function (value) {
return value === elem[0] ? null : value;
})),
this._disabled.push(elem[0]);
}
},
isDisabled: function (elem) {
return elem && $.inArray(elem, this._disabled) > -1;
},
show: function (elem) {
elem = $(elem.target || elem);
var inst = plugin._getInst(elem);
if (
plugin.curInst !== inst &&
(plugin.curInst && plugin.hide(plugin.curInst, !0),
!$.isEmptyObject(inst))
) {
(inst.lastVal = null),
(inst.selectedDates = plugin._extractDates(inst, elem.val())),
(inst.pickingRange = !1),
(inst.drawDate = plugin._checkMinMax(
(
inst.selectedDates[0] ||
inst.get("defaultDate") ||
inst.options.calendar.today()
).newDate(),
inst
)),
(inst.prevDate = inst.drawDate.newDate()),
(plugin.curInst = inst),
plugin._update(elem[0], !0);
var offset = plugin._checkOffset(inst);
inst.div.css({ left: offset.left, top: offset.top });
var showAnim = inst.options.showAnim,
showSpeed = inst.options.showSpeed;
if (
((showSpeed =
"normal" === showSpeed &&
$.ui &&
parseInt($.ui.version.substring(2)) >= 8
? "_default"
: showSpeed),
$.effects &&
($.effects[showAnim] ||
($.effects.effect && $.effects.effect[showAnim])))
) {
var data = inst.div.data();
for (var key in data)
key.match(/^ec\.storage\./) &&
(data[key] = inst._mainDiv.css(
key.replace(/ec\.storage\./, "")
));
inst.div
.data(data)
.show(showAnim, inst.options.showOptions, showSpeed);
} else inst.div[showAnim || "show"](showAnim ? showSpeed : 0);
}
},
_extractDates: function (inst, datesText) {
if (datesText !== inst.lastVal) {
(inst.lastVal = datesText),
(datesText = datesText.split(
inst.options.multiSelect
? inst.options.multiSeparator
: inst.options.rangeSelect
? inst.options.rangeSeparator
: "\0"
));
for (var dates = [], i = 0; i < datesText.length; i++)
try {
var date = inst.options.calendar.parseDate(
inst.get("dateFormat"),
datesText[i]
);
if (date) {
for (var found = !1, j = 0; j < dates.length; j++)
if (0 === dates[j].compareTo(date)) {
found = !0;
break;
}
found || dates.push(date);
}
} catch (e) {}
return (
dates.splice(
inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1),
dates.length
),
inst.options.rangeSelect &&
1 === dates.length &&
(dates[1] = dates[0]),
dates
);
}
},
_update: function (elem, hidden) {
elem = $(elem.target || elem);
var inst = plugin._getInst(elem);
if (!$.isEmptyObject(inst))
if (
((inst.inline || plugin.curInst === inst) &&
(!$.isFunction(inst.options.onChangeMonthYear) ||
(inst.prevDate &&
inst.prevDate.year() === inst.drawDate.year() &&
inst.prevDate.month() === inst.drawDate.month()) ||
inst.options.onChangeMonthYear.apply(elem[0], [
inst.drawDate.year(),
inst.drawDate.month(),
])),
inst.inline)
) {
var index = $("a, :input", elem).index($(":focus", elem));
elem.html(this._generateContent(elem[0], inst));
var focus = elem.find("a, :input");
focus.eq(Math.max(Math.min(index, focus.length - 1), 0)).focus();
} else
plugin.curInst === inst &&
(inst.div ||
((inst.div = $("<div></div>")
.addClass(this._popupClass)
.css({
display: hidden ? "none" : "static",
position: "absolute",
left: elem.offset().left,
top: elem.offset().top + elem.outerHeight(),
})
.appendTo($(inst.options.popupContainer || "body"))),
$.fn.mousewheel && inst.div.mousewheel(this._doMouseWheel)),
inst.div.html(this._generateContent(elem[0], inst)),
elem.focus());
},
_updateInput: function (elem, keyUp) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst)) {
for (
var value = "",
altValue = "",
sep = inst.options.multiSelect
? inst.options.multiSeparator
: inst.options.rangeSeparator,
calendar = inst.options.calendar,
dateFormat = inst.get("dateFormat"),
altFormat = inst.options.altFormat || dateFormat,
settings = { localNumbers: inst.options.localNumbers },
i = 0;
i < inst.selectedDates.length;
i++
)
(value += keyUp
? ""
: (i > 0 ? sep : "") +
calendar.formatDate(
dateFormat,
inst.selectedDates[i],
settings
)),
(altValue +=
(i > 0 ? sep : "") +
calendar.formatDate(
altFormat,
inst.selectedDates[i],
settings
));
inst.inline || keyUp || $(elem).val(value),
$(inst.options.altField).val(altValue),
!$.isFunction(inst.options.onSelect) ||
keyUp ||
inst.inSelect ||
((inst.inSelect = !0),
inst.options.onSelect.apply(elem, [inst.selectedDates]),
(inst.inSelect = !1)),
$(elem).change();
}
},
_getBorders: function (elem) {
var convert = function (value) {
return { thin: 1, medium: 3, thick: 5 }[value] || value;
};
return [
parseFloat(convert(elem.css("border-left-width"))),
parseFloat(convert(elem.css("border-top-width"))),
];
},
_checkOffset: function (inst) {
var base =
inst.elem.is(":hidden") && inst.trigger ? inst.trigger : inst.elem,
offset = base.offset(),
browserWidth = $(window).width(),
browserHeight = $(window).height();
if (0 === browserWidth) return offset;
var isFixed = !1;
$(inst.elem)
.parents()
.each(function () {
return (
(isFixed = isFixed || "fixed" === $(this).css("position")),
!isFixed
);
});
var scrollX =
document.documentElement.scrollLeft || document.body.scrollLeft,
scrollY =
document.documentElement.scrollTop || document.body.scrollTop,
above = offset.top - (isFixed ? scrollY : 0) - inst.div.outerHeight(),
below = offset.top - (isFixed ? scrollY : 0) + base.outerHeight(),
alignL = offset.left - (isFixed ? scrollX : 0),
alignR =
offset.left -
(isFixed ? scrollX : 0) +
base.outerWidth() -
inst.div.outerWidth(),
tooWide =
offset.left - scrollX + inst.div.outerWidth() > browserWidth,
tooHigh =
offset.top -
scrollY +
inst.elem.outerHeight() +
inst.div.outerHeight() >
browserHeight;
inst.div.css("position", isFixed ? "fixed" : "absolute");
var alignment = inst.options.alignment;
return (
(offset =
"topLeft" === alignment
? { left: alignL, top: above }
: "topRight" === alignment
? { left: alignR, top: above }
: "bottomLeft" === alignment
? { left: alignL, top: below }
: "bottomRight" === alignment
? { left: alignR, top: below }
: "top" === alignment
? {
left: inst.options.isRTL || tooWide ? alignR : alignL,
top: above,
}
: {
left: inst.options.isRTL || tooWide ? alignR : alignL,
top: tooHigh ? above : below,
}),
(offset.left = Math.max(isFixed ? 0 : scrollX, offset.left)),
(offset.top = Math.max(isFixed ? 0 : scrollY, offset.top)),
offset
);
},
_checkExternalClick: function (event) {
if (plugin.curInst) {
var elem = $(event.target);
0 !==
elem.closest("." + plugin._popupClass + ",." + plugin._triggerClass)
.length ||
elem.hasClass(plugin._getMarker()) ||
plugin.hide(plugin.curInst);
}
},
hide: function (elem, immediate) {
if (elem) {
var inst = this._getInst(elem);
if (
($.isEmptyObject(inst) && (inst = elem),
inst && inst === plugin.curInst)
) {
var showAnim = immediate ? "" : inst.options.showAnim,
showSpeed = inst.options.showSpeed;
showSpeed =
"normal" === showSpeed &&
$.ui &&
parseInt($.ui.version.substring(2)) >= 8
? "_default"
: showSpeed;
var postProcess = function () {
inst.div &&
(inst.div.remove(),
(inst.div = null),
(plugin.curInst = null),
$.isFunction(inst.options.onClose) &&
inst.options.onClose.apply(elem, [inst.selectedDates]));
};
if (
(inst.div.stop(),
$.effects &&
($.effects[showAnim] ||
($.effects.effect && $.effects.effect[showAnim])))
)
inst.div.hide(
showAnim,
inst.options.showOptions,
showSpeed,
postProcess
);
else {
var hideAnim =
"slideDown" === showAnim
? "slideUp"
: "fadeIn" === showAnim
? "fadeOut"
: "hide";
inst.div[hideAnim](showAnim ? showSpeed : "", postProcess);
}
showAnim || postProcess();
}
}
},
_keyDown: function (event) {
var command,
elem = (event.data && event.data.elem) || event.target,
inst = plugin._getInst(elem),
handled = !1;
if (inst.inline || inst.div)
if (9 === event.keyCode) plugin.hide(elem);
else if (13 === event.keyCode)
plugin.selectDate(
elem,
$("a." + inst.options.renderer.highlightedClass, inst.div)[0]
),
(handled = !0);
else {
var commands = inst.options.commands;
for (var name in commands)
if (
inst.options.commands.hasOwnProperty(name) &&
((command = commands[name]),
command.keystroke.keyCode === event.keyCode &&
!!command.keystroke.ctrlKey ==
!(!event.ctrlKey && !event.metaKey) &&
!!command.keystroke.altKey === event.altKey &&
!!command.keystroke.shiftKey === event.shiftKey)
) {
plugin.performAction(elem, name), (handled = !0);
break;
}
}
else
(command = inst.options.commands.current),
command.keystroke.keyCode === event.keyCode &&
!!command.keystroke.ctrlKey ==
!(!event.ctrlKey && !event.metaKey) &&
!!command.keystroke.altKey === event.altKey &&
!!command.keystroke.shiftKey === event.shiftKey &&
(plugin.show(elem), (handled = !0));
return (
(inst.ctrlKey =
(event.keyCode < 48 && 32 !== event.keyCode) ||
event.ctrlKey ||
event.metaKey),
handled && (event.preventDefault(), event.stopPropagation()),
!handled
);
},
_keyPress: function (event) {
var inst = plugin._getInst(
(event.data && event.data.elem) || event.target
);
if (!$.isEmptyObject(inst) && inst.options.constrainInput) {
var ch = String.fromCharCode(event.keyCode || event.charCode),
allowedChars = plugin._allowedChars(inst);
return (
event.metaKey ||
inst.ctrlKey ||
ch < " " ||
!allowedChars ||
allowedChars.indexOf(ch) > -1
);
}
return !0;
},
_allowedChars: function (inst) {
for (
var allowedChars = inst.options.multiSelect
? inst.options.multiSeparator
: inst.options.rangeSelect
? inst.options.rangeSeparator
: "",
literal = !1,
hasNum = !1,
dateFormat = inst.get("dateFormat"),
i = 0;
i < dateFormat.length;
i++
) {
var ch = dateFormat.charAt(i);
if (literal)
"'" === ch && "'" !== dateFormat.charAt(i + 1)
? (literal = !1)
: (allowedChars += ch);
else
switch (ch) {
case "d":
case "m":
case "o":
case "w":
(allowedChars += hasNum ? "" : "0123456789"), (hasNum = !0);
break;
case "y":
case "@":
case "!":
(allowedChars += (hasNum ? "" : "0123456789") + "-"),
(hasNum = !0);
break;
case "J":
(allowedChars += (hasNum ? "" : "0123456789") + "-."),
(hasNum = !0);
break;
case "D":
case "M":
case "Y":
return null;
case "'":
"'" === dateFormat.charAt(i + 1)
? (allowedChars += "'")
: (literal = !0);
break;
default:
allowedChars += ch;
}
}
return allowedChars;
},
_keyUp: function (event) {
var elem = (event.data && event.data.elem) || event.target,
inst = plugin._getInst(elem);
if (
!$.isEmptyObject(inst) &&
!inst.ctrlKey &&
inst.lastVal !== inst.elem.val()
)
try {
var dates = plugin._extractDates(inst, inst.elem.val());
dates.length > 0 && plugin.setDate(elem, dates, null, !0);
} catch (e) {}
return !0;
},
_doMouseWheel: function (event, delta) {
var elem =
(plugin.curInst && plugin.curInst.elem[0]) ||
$(event.target).closest("." + plugin._getMarker())[0];
if (!plugin.isDisabled(elem)) {
var inst = plugin._getInst(elem);
inst.options.useMouseWheel &&
((delta = delta < 0 ? -1 : 1),
plugin.changeMonth(
elem,
-inst.options[event.ctrlKey ? "monthsToJump" : "monthsToStep"] *
delta
)),
event.preventDefault();
}
},
clear: function (elem) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst)) {
(inst.selectedDates = []), this.hide(elem);
var defaultDate = inst.get("defaultDate");
inst.options.selectDefaultDate && defaultDate
? this.setDate(
elem,
(defaultDate || inst.options.calendar.today()).newDate()
)
: this._updateInput(elem);
}
},
getDate: function (elem) {
var inst = this._getInst(elem);
return $.isEmptyObject(inst) ? [] : inst.selectedDates;
},
setDate: function (elem, dates, endDate, keyUp, setOpt) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst)) {
$.isArray(dates) ||
((dates = [dates]), endDate && dates.push(endDate));
var minDate = inst.get("minDate"),
maxDate = inst.get("maxDate"),
curDate = inst.selectedDates[0];
inst.selectedDates = [];
for (var i = 0; i < dates.length; i++) {
var date = inst.options.calendar.determineDate(
dates[i],
null,
curDate,
inst.get("dateFormat"),
inst.getConfig()
);
if (
date &&
!(
(minDate && date.compareTo(minDate) === -1) ||
(maxDate && 1 === date.compareTo(maxDate))
)
) {
for (var found = !1, j = 0; j < inst.selectedDates.length; j++)
if (0 === inst.selectedDates[j].compareTo(date)) {
found = !0;
break;
}
found || inst.selectedDates.push(date);
}
}
if (
(inst.selectedDates.splice(
inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1),
inst.selectedDates.length
),
inst.options.rangeSelect)
) {
switch (inst.selectedDates.length) {
case 1:
inst.selectedDates[1] = inst.selectedDates[0];
break;
case 2:
inst.selectedDates[1] =
1 === inst.selectedDates[0].compareTo(inst.selectedDates[1])
? inst.selectedDates[0]
: inst.selectedDates[1];
}
inst.pickingRange = !1;
}
(inst.prevDate = inst.drawDate ? inst.drawDate.newDate() : null),
(inst.drawDate = this._checkMinMax(
(
inst.selectedDates[0] ||
inst.get("defaultDate") ||
inst.options.calendar.today()
).newDate(),
inst
)),
setOpt || (this._update(elem), this._updateInput(elem, keyUp));
}
},
isSelectable: function (elem, date) {
var inst = this._getInst(elem);
return (
!$.isEmptyObject(inst) &&
((date = inst.options.calendar.determineDate(
date,
inst.selectedDates[0] || inst.options.calendar.today(),
null,
inst.options.dateFormat,
inst.getConfig()
)),
this._isSelectable(
elem,
date,
inst.options.onDate,
inst.get("minDate"),
inst.get("maxDate")
))
);
},
_isSelectable: function (elem, date, onDate, minDate, maxDate) {
var dateInfo =
"boolean" == typeof onDate
? { selectable: onDate }
: $.isFunction(onDate)
? onDate.apply(elem, [date, !0])
: {};
return (
dateInfo.selectable !== !1 &&
(!minDate || date.toJD() >= minDate.toJD()) &&
(!maxDate || date.toJD() <= maxDate.toJD())
);
},
performAction: function (elem, action) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {
var commands = inst.options.commands;
commands[action] &&
commands[action].enabled.apply(elem, [inst]) &&
commands[action].action.apply(elem, [inst]);
}
},
showMonth: function (elem, year, month, day) {
var inst = this._getInst(elem);
if (
!$.isEmptyObject(inst) &&
(("undefined" != typeof day && null !== day) ||
inst.drawDate.year() !== year ||
inst.drawDate.month() !== month)
) {
inst.prevDate = inst.drawDate.newDate();
var calendar = inst.options.calendar,
show = this._checkMinMax(
"undefined" != typeof year && null !== year
? calendar.newDate(year, month, 1)
: calendar.today(),
inst
);
inst.drawDate.date(
show.year(),
show.month(),
"undefined" != typeof day && null !== day
? day
: Math.min(
inst.drawDate.day(),
calendar.daysInMonth(show.year(), show.month())
)
),
this._update(elem);
}
},
changeMonth: function (elem, offset) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst)) {
var date = inst.drawDate.newDate().add(offset, "m");
this.showMonth(elem, date.year(), date.month());
}
},
changeDay: function (elem, offset) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst)) {
var date = inst.drawDate.newDate().add(offset, "d");
this.showMonth(elem, date.year(), date.month(), date.day());
}
},
_checkMinMax: function (date, inst) {
var minDate = inst.get("minDate"),
maxDate = inst.get("maxDate");
return (
(date =
minDate && date.compareTo(minDate) === -1
? minDate.newDate()
: date),
(date =
maxDate && 1 === date.compareTo(maxDate) ? maxDate.newDate() : date)
);
},
retrieveDate: function (elem, target) {
var inst = this._getInst(elem);
return $.isEmptyObject(inst)
? null
: inst.options.calendar.fromJD(
parseFloat(target.className.replace(/^.*jd(\d+\.5).*$/, "$1"))
);
},
selectDate: function (elem, target) {
var inst = this._getInst(elem);
if (!$.isEmptyObject(inst) && !this.isDisabled(elem)) {
var date = this.retrieveDate(elem, target);
if (inst.options.multiSelect) {
for (var found = !1, i = 0; i < inst.selectedDates.length; i++)
if (0 === date.compareTo(inst.selectedDates[i])) {
inst.selectedDates.splice(i, 1), (found = !0);
break;
}
!found &&
inst.selectedDates.length < inst.options.multiSelect &&
inst.selectedDates.push(date);
} else
inst.options.rangeSelect
? (inst.pickingRange
? (inst.selectedDates[1] = date)
: (inst.selectedDates = [date, date]),
(inst.pickingRange = !inst.pickingRange))
: (inst.selectedDates = [date]);
(inst.prevDate = inst.drawDate = date.newDate()),
this._updateInput(elem),
inst.inline ||
inst.pickingRange ||
inst.selectedDates.length <
(inst.options.multiSelect || (inst.options.rangeSelect ? 2 : 1))
? this._update(elem)
: this.hide(elem);
}
},
_generateContent: function (elem, inst) {
function removeHighlight(elem) {
(inst.inline ? $(elem).closest("." + self._getMarker()) : inst.div)
.find(inst.options.renderer.daySelector + " a")
.removeClass(inst.options.renderer.highlightedClass);
}
var monthsToShow = inst.options.monthsToShow;
(monthsToShow = $.isArray(monthsToShow)
? monthsToShow
: [1, monthsToShow]),
(inst.drawDate = this._checkMinMax(
inst.drawDate ||
inst.get("defaultDate") ||
inst.options.calendar.today(),
inst
));
for (
var drawDate = inst.drawDate
.newDate()
.add(-inst.options.monthsOffset, "m"),
monthRows = "",
row = 0;
row < monthsToShow[0];
row++
) {
for (var months = "", col = 0; col < monthsToShow[1]; col++)
(months += this._generateMonth(
elem,
inst,
drawDate.year(),
drawDate.month(),
inst.options.calendar,
inst.options.renderer,
0 === row && 0 === col
)),
drawDate.add(1, "m");
monthRows += this._prepare(
inst.options.renderer.monthRow,
inst
).replace(/\{months\}/, months);
}
var picker = this._prepare(inst.options.renderer.picker, inst)
.replace(/\{months\}/, monthRows)
.replace(
/\{weekHeader\}/g,
this._generateDayHeaders(
inst,
inst.options.calendar,
inst.options.renderer
)
),
addCommand = function (type, open, close, name, classes) {
if (picker.indexOf("{" + type + ":" + name + "}") !== -1) {
var command = inst.options.commands[name],
date = inst.options.commandsAsDateFormat
? command.date.apply(elem, [inst])
: null;
picker = picker.replace(
new RegExp("\\{" + type + ":" + name + "\\}", "g"),
"<" +
open +
(command.status
? ' title="' + inst.options[command.status] + '"'
: "") +
' class="' +
inst.options.renderer.commandClass +
" " +
inst.options.renderer.commandClass +
"-" +
name +
" " +
classes +
(command.enabled(inst)
? ""
: " " + inst.options.renderer.disabledClass) +
'">' +
(date
? date.formatDate(inst.options[command.text], {
localNumbers: inst.options.localNumbers,
})
: inst.options[command.text]) +
"</" +
close +
">"
);
}
};
for (var name in inst.options.commands)
inst.options.commands.hasOwnProperty(name) &&
(addCommand(
"button",
'button type="button"',
"button",
name,
inst.options.renderer.commandButtonClass
),
addCommand(
"link",
'a href="javascript:void(0)"',
"a",
name,
inst.options.renderer.commandLinkClass
));
if (((picker = $(picker)), monthsToShow[1] > 1)) {
var count = 0;
$(inst.options.renderer.monthSelector, picker).each(function () {
var nth = ++count % monthsToShow[1];
$(this).addClass(1 === nth ? "first" : 0 === nth ? "last" : "");
});
}
var self = this;
picker
.find(inst.options.renderer.daySelector + " a")
.hover(
function () {
removeHighlight(this),
$(this).addClass(inst.options.renderer.highlightedClass);
},
function () {
removeHighlight(this);
}
)
.click(function () {
self.selectDate(elem, this);
})
.end()
.find(
"select." +
this._monthYearClass +
":not(." +
this._anyYearClass +
")"
)
.change(function () {
var monthYear = $(this).val().split("/");
self.showMonth(
elem,
parseInt(monthYear[1], 10),
parseInt(monthYear[0], 10)
);
})
.end()
.find("select." + this._anyYearClass)
.click(function () {
$(this)
.css("visibility", "hidden")
.next("input")
.css({
left: this.offsetLeft,
top: this.offsetTop,
width: this.offsetWidth,
height: this.offsetHeight,
})
.show()
.focus();
})
.end()
.find("input." + self._monthYearClass)
.change(function () {
try {
var year = parseInt($(this).val(), 10);
(year = isNaN(year) ? inst.drawDate.year() : year),
self.showMonth(
elem,
year,
inst.drawDate.month(),
inst.drawDate.day()
);
} catch (e) {}
})
.keydown(function (event) {
13 === event.keyCode
? $(event.elem).change()
: 27 === event.keyCode &&
($(event.elem)
.hide()
.prev("select")
.css("visibility", "visible"),
inst.elem.focus());
});
var data = { elem: inst.elem[0] };
picker
.keydown(data, this._keyDown)
.keypress(data, this._keyPress)
.keyup(data, this._keyUp),
picker
.find("." + inst.options.renderer.commandClass)
.click(function () {
if (!$(this).hasClass(inst.options.renderer.disabledClass)) {
var action = this.className.replace(
new RegExp(
"^.*" + inst.options.renderer.commandClass + "-([^ ]+).*$"
),
"$1"
);
plugin.performAction(elem, action);
}
}),
inst.options.isRTL && picker.addClass(inst.options.renderer.rtlClass),
monthsToShow[0] * monthsToShow[1] > 1 &&
picker.addClass(inst.options.renderer.multiClass),
inst.options.pickerClass && picker.addClass(inst.options.pickerClass),
$("body").append(picker);
var width = 0;
return (
picker.find(inst.options.renderer.monthSelector).each(function () {
width += $(this).outerWidth();
}),
picker.width(width / monthsToShow[0]),
$.isFunction(inst.options.onShow) &&
inst.options.onShow.apply(elem, [
picker,
inst.options.calendar,
inst,
]),
picker
);
},
_generateMonth: function (
elem,
inst,
year,
month,
calendar,
renderer,
first
) {
var daysInMonth = calendar.daysInMonth(year, month),
monthsToShow = inst.options.monthsToShow;
monthsToShow = $.isArray(monthsToShow)
? monthsToShow
: [1, monthsToShow];
var fixedWeeks =
inst.options.fixedWeeks || monthsToShow[0] * monthsToShow[1] > 1,
firstDay = inst.options.firstDay;
firstDay =
"undefined" == typeof firstDay || null === firstDay
? calendar.local.firstDay
: firstDay;
var leadDays =
(calendar.dayOfWeek(year, month, calendar.minDay) -
firstDay +
calendar.daysInWeek()) %
calendar.daysInWeek(),
numWeeks = fixedWeeks
? 6
: Math.ceil((leadDays + daysInMonth) / calendar.daysInWeek()),
selectOtherMonths =
inst.options.selectOtherMonths && inst.options.showOtherMonths,
minDate = inst.pickingRange
? inst.selectedDates[0]
: inst.get("minDate"),
maxDate = inst.get("maxDate"),
showWeeks = renderer.week.indexOf("{weekOfYear}") > -1,
today = calendar.today(),
drawDate = calendar.newDate(year, month, calendar.minDay);
drawDate.add(
-leadDays -
(fixedWeeks &&
(drawDate.dayOfWeek() === firstDay ||
drawDate.daysInMonth() < calendar.daysInWeek())
? calendar.daysInWeek()
: 0),
"d"
);
for (
var jd = drawDate.toJD(),
localiseNumbers = function (value) {
return inst.options.localNumbers && calendar.local.digits
? calendar.local.digits(value)
: value;
},
weeks = "",
week = 0;
week < numWeeks;
week++
) {
for (
var weekOfYear = showWeeks
? '<span class="jd' +
jd +
'">' +
($.isFunction(inst.options.calculateWeek)
? inst.options.calculateWeek(drawDate)
: drawDate.weekOfYear()) +
"</span>"
: "",
days = "",
day = 0;
day < calendar.daysInWeek();
day++
) {
var selected = !1;
if (inst.options.rangeSelect && inst.selectedDates.length > 0)
selected =
drawDate.compareTo(inst.selectedDates[0]) !== -1 &&
1 !== drawDate.compareTo(inst.selectedDates[1]);
else
for (var i = 0; i < inst.selectedDates.length; i++)
if (0 === inst.selectedDates[i].compareTo(drawDate)) {
selected = !0;
break;
}
var dateInfo = $.isFunction(inst.options.onDate)
? inst.options.onDate.apply(elem, [
drawDate,
drawDate.month() === month,
])
: {},
selectable =
(selectOtherMonths || drawDate.month() === month) &&
this._isSelectable(
elem,
drawDate,
dateInfo.selectable,
minDate,
maxDate
),
holidayClass = "",
onClick = "",
title =
dateInfo.title ||
drawDate.formatDate(inst.options.dayStatus, {
localNumbers: inst.options.localNumbers,
});
if (null != inst.options.holidays) {
var holiday =
inst.options.holidays[drawDate.year()] &&
inst.options.holidays[drawDate.year()][drawDate.month()] &&
inst.options.holidays[drawDate.year()][drawDate.month()][
drawDate.day()
];
void 0 != holiday &&
((holidayClass = inst.options.holidays.holidayClass),
(title += " : " + holiday.title),
(onClick = holiday.confirmed
? "alert('You are selecting a date which is a holiday (" +
holiday.title +
"). If you are appointing make sure service will be available on the this date.')"
: "alert('It seems you are selecting a date which maybe a holiday (" +
holiday.title +
"). Since this holiday will be on the selected date or one (1) day before/after the selected date, if you are appointing make sure service will be available on this dates.')"));
}
(days += this._prepare(renderer.day, inst).replace(
/\{day\}/g,
(selectable ? '<a href="javascript:void(0)"' : "<span") +
' onclick ="' +
onClick +
'" class="jd' +
jd +
" " +
(dateInfo.dateClass || "") +
(selected && (selectOtherMonths || drawDate.month() === month)
? " " + renderer.selectedClass
: "") +
(selectable ? " " + renderer.defaultClass : "") +
(drawDate.weekDay() ? "" : " " + renderer.weekendClass) +
(drawDate.month() === month
? ""
: " " + renderer.otherMonthClass) +
(0 === drawDate.compareTo(today) && drawDate.month() === month
? " " + renderer.todayClass
: "") +
(0 === drawDate.compareTo(inst.drawDate) &&
drawDate.month() === month
? " " + renderer.highlightedClass
: "") +
" " +
holidayClass +
'"' +
(dateInfo.title || (inst.options.dayStatus && selectable)
? ' title="' + title + '"'
: "") +
">" +
(inst.options.showOtherMonths || drawDate.month() === month
? dateInfo.content || localiseNumbers(drawDate.day())
: " ") +
(selectable ? "</a>" : "</span>")
)),
drawDate.add(1, "d"),
jd++;
}
weeks += this._prepare(renderer.week, inst)
.replace(/\{days\}/g, days)
.replace(/\{weekOfYear\}/g, weekOfYear);
}
var monthHeader = this._prepare(renderer.month, inst).match(
/\{monthHeader(:[^\}]+)?\}/
);
(monthHeader =
monthHeader[0].length <= 13
? "MM yyyy"
: monthHeader[0].substring(13, monthHeader[0].length - 1)),
(monthHeader = first
? this._generateMonthSelection(
inst,
year,
month,
minDate,
maxDate,
monthHeader,
calendar,
renderer
)
: calendar.formatDate(
monthHeader,
calendar.newDate(year, month, calendar.minDay),
{ localNumbers: inst.options.localNumbers }
));
var weekHeader = this._prepare(renderer.weekHeader, inst).replace(
/\{days\}/g,
this._generateDayHeaders(inst, calendar, renderer)
);
return this._prepare(renderer.month, inst)
.replace(/\{monthHeader(:[^\}]+)?\}/g, monthHeader)
.replace(/\{weekHeader\}/g, weekHeader)
.replace(/\{weeks\}/g, weeks);
},
_generateDayHeaders: function (inst, calendar, renderer) {
var firstDay = inst.options.firstDay;
firstDay =
"undefined" == typeof firstDay || null === firstDay
? calendar.local.firstDay
: firstDay;
for (var header = "", day = 0; day < calendar.daysInWeek(); day++) {
var dow = (day + firstDay) % calendar.daysInWeek();
header += this._prepare(renderer.dayHeader, inst).replace(
/\{day\}/g,
'<span class="' +
this._curDoWClass +
dow +
'" title="' +
calendar.local.dayNames[dow] +
'">' +
calendar.local.dayNamesMin[dow] +
"</span>"
);
}
return header;
},
_generateMonthSelection: function (
inst,
year,
month,
minDate,
maxDate,
monthHeader,
calendar
) {
if (!inst.options.changeMonth)
return calendar.formatDate(
monthHeader,
calendar.newDate(year, month, 1),
{ localNumbers: inst.options.localNumbers }
);
for (
var monthNames =
calendar.local[
"monthNames" + (monthHeader.match(/mm/i) ? "" : "Short")
],
html = monthHeader.replace(/m+/i, "\\x2E").replace(/y+/i, "\\x2F"),
selector =
'<select class="' +
this._monthYearClass +
'" title="' +
inst.options.monthStatus +
'">',
maxMonth = calendar.monthsInYear(year) + calendar.minMonth,
m = calendar.minMonth;
m < maxMonth;
m++
)
(minDate &&
calendar
.newDate(
year,
m,
calendar.daysInMonth(year, m) - 1 + calendar.minDay
)
.compareTo(minDate) === -1) ||
(maxDate &&
1 ===
calendar
.newDate(year, m, calendar.minDay)
.compareTo(maxDate)) ||
(selector +=
'<option value="' +
m +
"/" +
year +
'"' +
(month === m ? ' selected="selected"' : "") +
">" +
monthNames[m - calendar.minMonth] +
"</option>");
(selector += "</select>"), (html = html.replace(/\\x2E/, selector));
var localiseNumbers = function (value) {
return inst.options.localNumbers && calendar.local.digits
? calendar.local.digits(value)
: value;
},
yearRange = inst.options.yearRange;
if ("any" === yearRange)
selector =
'<select class="' +
this._monthYearClass +
" " +
this._anyYearClass +
'" title="' +
inst.options.yearStatus +
'"><option value="' +
year +
'">' +
localiseNumbers(year) +
'</option></select><input class="' +
this._monthYearClass +
" " +
this._curMonthClass +
month +
'" value="' +
year +
'">';
else {
yearRange = yearRange.split(":");
var todayYear = calendar.today().year(),
start = yearRange[0].match("c[+-].*")
? year + parseInt(yearRange[0].substring(1), 10)
: (yearRange[0].match("[+-].*") ? todayYear : 0) +
parseInt(yearRange[0], 10),
end = yearRange[1].match("c[+-].*")
? year + parseInt(yearRange[1].substring(1), 10)
: (yearRange[1].match("[+-].*") ? todayYear : 0) +
parseInt(yearRange[1], 10);
(selector =
'<select class="' +
this._monthYearClass +
'" title="' +
inst.options.yearStatus +
'">'),
(start = calendar
.newDate(start + 1, calendar.firstMonth, calendar.minDay)
.add(-1, "d")),
(end = calendar.newDate(end, calendar.firstMonth, calendar.minDay));
var earlierLater,
y,
addYear = function (y, yDisplay) {
(0 !== y || calendar.hasYearZero) &&
(selector +=
'<option value="' +
Math.min(
month,
calendar.monthsInYear(y) - 1 + calendar.minMonth
) +
"/" +
y +
'"' +
(year === y ? ' selected="selected"' : "") +
">" +
(yDisplay || localiseNumbers(y)) +
"</option>");
};
if (start.toJD() < end.toJD()) {
for (
start = (
minDate && 1 === minDate.compareTo(start) ? minDate : start
).year(),
end = (
maxDate && maxDate.compareTo(end) === -1 ? maxDate : end
).year(),
earlierLater = Math.floor((end - start) / 2),
(!minDate || minDate.year() < start) &&
addYear(start - earlierLater, inst.options.earlierText),
y = start;
y <= end;
y++
)
addYear(y);
(!maxDate || maxDate.year() > end) &&
addYear(end + earlierLater, inst.options.laterText);
} else {
for (
start = (
maxDate && maxDate.compareTo(start) === -1 ? maxDate : start
).year(),
end = (
minDate && 1 === minDate.compareTo(end) ? minDate : end
).year(),
earlierLater = Math.floor((start - end) / 2),
(!maxDate || maxDate.year() > start) &&
addYear(start + earlierLater, inst.options.earlierText),
y = start;
y >= end;
y--
)
addYear(y);
(!minDate || minDate.year() < end) &&
addYear(end - earlierLater, inst.options.laterText);
}
selector += "</select>";
}
return (html = html.replace(/\\x2F/, selector));
},
_prepare: function (text, inst) {
var replaceSection = function (type, retain) {
for (;;) {
var start = text.indexOf("{" + type + ":start}");
if (start === -1) return;
var end = text.substring(start).indexOf("{" + type + ":end}");
end > -1 &&
(text =
text.substring(0, start) +
(retain
? text.substr(start + type.length + 8, end - type.length - 8)
: "") +
text.substring(start + end + type.length + 6));
}
};
replaceSection("inline", inst.inline),
replaceSection("popup", !inst.inline);
for (
var pattern = /\{l10n:([^\}]+)\}/, matches = pattern.exec(text);
matches;
)
(text = text.replace(matches[0], inst.options[matches[1]])),
(matches = pattern.exec(text));
return text;
},
});
var plugin = $.calendarsPicker;
$(function () {
$(document)
.on("mousedown." + pluginName, plugin._checkExternalClick)
.on("resize." + pluginName, function () {
plugin.hide(plugin.curInst);
});
});
})(jQuery);