|
|
/*
|
|
|
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
|
|
|
if you want to view the source visit the plugins github repository
|
|
|
*/
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
var obsidian = require('obsidian');
|
|
|
|
|
|
/*! *****************************************************************************
|
|
|
Copyright (c) Microsoft Corporation.
|
|
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
|
purpose with or without fee is hereby granted.
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
PERFORMANCE OF THIS SOFTWARE.
|
|
|
***************************************************************************** */
|
|
|
/* global Reflect, Promise */
|
|
|
|
|
|
var extendStatics = function(d, b) {
|
|
|
extendStatics = Object.setPrototypeOf ||
|
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
|
return extendStatics(d, b);
|
|
|
};
|
|
|
|
|
|
function __extends(d, b) {
|
|
|
if (typeof b !== "function" && b !== null)
|
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
|
extendStatics(d, b);
|
|
|
function __() { this.constructor = d; }
|
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
|
}
|
|
|
|
|
|
var __assign = function() {
|
|
|
__assign = Object.assign || function __assign(t) {
|
|
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
|
s = arguments[i];
|
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
|
|
}
|
|
|
return t;
|
|
|
};
|
|
|
return __assign.apply(this, arguments);
|
|
|
};
|
|
|
|
|
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function __spreadArray(to, from, pack) {
|
|
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
|
if (ar || !(i in from)) {
|
|
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
|
ar[i] = from[i];
|
|
|
}
|
|
|
}
|
|
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
|
}
|
|
|
|
|
|
function _defineProperties(target, props) {
|
|
|
for (var i = 0; i < props.length; i++) {
|
|
|
var descriptor = props[i];
|
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
|
descriptor.configurable = true;
|
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
|
return Constructor;
|
|
|
}
|
|
|
|
|
|
function _inheritsLoose(subClass, superClass) {
|
|
|
subClass.prototype = Object.create(superClass.prototype);
|
|
|
subClass.prototype.constructor = subClass;
|
|
|
subClass.__proto__ = superClass;
|
|
|
}
|
|
|
|
|
|
function _getPrototypeOf(o) {
|
|
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
|
};
|
|
|
return _getPrototypeOf(o);
|
|
|
}
|
|
|
|
|
|
function _setPrototypeOf(o, p) {
|
|
|
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
|
o.__proto__ = p;
|
|
|
return o;
|
|
|
};
|
|
|
|
|
|
return _setPrototypeOf(o, p);
|
|
|
}
|
|
|
|
|
|
function _isNativeReflectConstruct() {
|
|
|
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
|
if (Reflect.construct.sham) return false;
|
|
|
if (typeof Proxy === "function") return true;
|
|
|
|
|
|
try {
|
|
|
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
|
|
|
return true;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function _construct(Parent, args, Class) {
|
|
|
if (_isNativeReflectConstruct()) {
|
|
|
_construct = Reflect.construct;
|
|
|
} else {
|
|
|
_construct = function _construct(Parent, args, Class) {
|
|
|
var a = [null];
|
|
|
a.push.apply(a, args);
|
|
|
var Constructor = Function.bind.apply(Parent, a);
|
|
|
var instance = new Constructor();
|
|
|
if (Class) _setPrototypeOf(instance, Class.prototype);
|
|
|
return instance;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return _construct.apply(null, arguments);
|
|
|
}
|
|
|
|
|
|
function _isNativeFunction(fn) {
|
|
|
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
|
}
|
|
|
|
|
|
function _wrapNativeSuper(Class) {
|
|
|
var _cache = typeof Map === "function" ? new Map() : undefined;
|
|
|
|
|
|
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
|
|
if (Class === null || !_isNativeFunction(Class)) return Class;
|
|
|
|
|
|
if (typeof Class !== "function") {
|
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
|
}
|
|
|
|
|
|
if (typeof _cache !== "undefined") {
|
|
|
if (_cache.has(Class)) return _cache.get(Class);
|
|
|
|
|
|
_cache.set(Class, Wrapper);
|
|
|
}
|
|
|
|
|
|
function Wrapper() {
|
|
|
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
|
|
|
}
|
|
|
|
|
|
Wrapper.prototype = Object.create(Class.prototype, {
|
|
|
constructor: {
|
|
|
value: Wrapper,
|
|
|
enumerable: false,
|
|
|
writable: true,
|
|
|
configurable: true
|
|
|
}
|
|
|
});
|
|
|
return _setPrototypeOf(Wrapper, Class);
|
|
|
};
|
|
|
|
|
|
return _wrapNativeSuper(Class);
|
|
|
}
|
|
|
|
|
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
if (source == null) return {};
|
|
|
var target = {};
|
|
|
var sourceKeys = Object.keys(source);
|
|
|
var key, i;
|
|
|
|
|
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
|
key = sourceKeys[i];
|
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
|
target[key] = source[key];
|
|
|
}
|
|
|
|
|
|
return target;
|
|
|
}
|
|
|
|
|
|
function _unsupportedIterableToArray(o, minLen) {
|
|
|
if (!o) return;
|
|
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
|
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
|
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
|
}
|
|
|
|
|
|
function _arrayLikeToArray(arr, len) {
|
|
|
if (len == null || len > arr.length) len = arr.length;
|
|
|
|
|
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
|
|
|
|
return arr2;
|
|
|
}
|
|
|
|
|
|
function _createForOfIteratorHelperLoose(o) {
|
|
|
var i = 0;
|
|
|
|
|
|
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
|
|
|
if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) return function () {
|
|
|
if (i >= o.length) return {
|
|
|
done: true
|
|
|
};
|
|
|
return {
|
|
|
done: false,
|
|
|
value: o[i++]
|
|
|
};
|
|
|
};
|
|
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
|
}
|
|
|
|
|
|
i = o[Symbol.iterator]();
|
|
|
return i.next.bind(i);
|
|
|
}
|
|
|
|
|
|
// these aren't really private, but nor are they really useful to document
|
|
|
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
var LuxonError = /*#__PURE__*/function (_Error) {
|
|
|
_inheritsLoose(LuxonError, _Error);
|
|
|
|
|
|
function LuxonError() {
|
|
|
return _Error.apply(this, arguments) || this;
|
|
|
}
|
|
|
|
|
|
return LuxonError;
|
|
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) {
|
|
|
_inheritsLoose(InvalidDateTimeError, _LuxonError);
|
|
|
|
|
|
function InvalidDateTimeError(reason) {
|
|
|
return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this;
|
|
|
}
|
|
|
|
|
|
return InvalidDateTimeError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) {
|
|
|
_inheritsLoose(InvalidIntervalError, _LuxonError2);
|
|
|
|
|
|
function InvalidIntervalError(reason) {
|
|
|
return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this;
|
|
|
}
|
|
|
|
|
|
return InvalidIntervalError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) {
|
|
|
_inheritsLoose(InvalidDurationError, _LuxonError3);
|
|
|
|
|
|
function InvalidDurationError(reason) {
|
|
|
return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this;
|
|
|
}
|
|
|
|
|
|
return InvalidDurationError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) {
|
|
|
_inheritsLoose(ConflictingSpecificationError, _LuxonError4);
|
|
|
|
|
|
function ConflictingSpecificationError() {
|
|
|
return _LuxonError4.apply(this, arguments) || this;
|
|
|
}
|
|
|
|
|
|
return ConflictingSpecificationError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) {
|
|
|
_inheritsLoose(InvalidUnitError, _LuxonError5);
|
|
|
|
|
|
function InvalidUnitError(unit) {
|
|
|
return _LuxonError5.call(this, "Invalid unit " + unit) || this;
|
|
|
}
|
|
|
|
|
|
return InvalidUnitError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) {
|
|
|
_inheritsLoose(InvalidArgumentError, _LuxonError6);
|
|
|
|
|
|
function InvalidArgumentError() {
|
|
|
return _LuxonError6.apply(this, arguments) || this;
|
|
|
}
|
|
|
|
|
|
return InvalidArgumentError;
|
|
|
}(LuxonError);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) {
|
|
|
_inheritsLoose(ZoneIsAbstractError, _LuxonError7);
|
|
|
|
|
|
function ZoneIsAbstractError() {
|
|
|
return _LuxonError7.call(this, "Zone is an abstract class") || this;
|
|
|
}
|
|
|
|
|
|
return ZoneIsAbstractError;
|
|
|
}(LuxonError);
|
|
|
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
var n$1 = "numeric",
|
|
|
s$1 = "short",
|
|
|
l$1 = "long";
|
|
|
var DATE_SHORT = {
|
|
|
year: n$1,
|
|
|
month: n$1,
|
|
|
day: n$1
|
|
|
};
|
|
|
var DATE_MED = {
|
|
|
year: n$1,
|
|
|
month: s$1,
|
|
|
day: n$1
|
|
|
};
|
|
|
var DATE_MED_WITH_WEEKDAY = {
|
|
|
year: n$1,
|
|
|
month: s$1,
|
|
|
day: n$1,
|
|
|
weekday: s$1
|
|
|
};
|
|
|
var DATE_FULL = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1
|
|
|
};
|
|
|
var DATE_HUGE = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1,
|
|
|
weekday: l$1
|
|
|
};
|
|
|
var TIME_SIMPLE = {
|
|
|
hour: n$1,
|
|
|
minute: n$1
|
|
|
};
|
|
|
var TIME_WITH_SECONDS = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1
|
|
|
};
|
|
|
var TIME_WITH_SHORT_OFFSET = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
timeZoneName: s$1
|
|
|
};
|
|
|
var TIME_WITH_LONG_OFFSET = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
timeZoneName: l$1
|
|
|
};
|
|
|
var TIME_24_SIMPLE = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
hour12: false
|
|
|
};
|
|
|
/**
|
|
|
* {@link toLocaleString}; format like '09:30:23', always 24-hour.
|
|
|
*/
|
|
|
|
|
|
var TIME_24_WITH_SECONDS = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
hour12: false
|
|
|
};
|
|
|
/**
|
|
|
* {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.
|
|
|
*/
|
|
|
|
|
|
var TIME_24_WITH_SHORT_OFFSET = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
hour12: false,
|
|
|
timeZoneName: s$1
|
|
|
};
|
|
|
/**
|
|
|
* {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.
|
|
|
*/
|
|
|
|
|
|
var TIME_24_WITH_LONG_OFFSET = {
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
hour12: false,
|
|
|
timeZoneName: l$1
|
|
|
};
|
|
|
/**
|
|
|
* {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.
|
|
|
*/
|
|
|
|
|
|
var DATETIME_SHORT = {
|
|
|
year: n$1,
|
|
|
month: n$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1
|
|
|
};
|
|
|
/**
|
|
|
* {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.
|
|
|
*/
|
|
|
|
|
|
var DATETIME_SHORT_WITH_SECONDS = {
|
|
|
year: n$1,
|
|
|
month: n$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1
|
|
|
};
|
|
|
var DATETIME_MED = {
|
|
|
year: n$1,
|
|
|
month: s$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1
|
|
|
};
|
|
|
var DATETIME_MED_WITH_SECONDS = {
|
|
|
year: n$1,
|
|
|
month: s$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1
|
|
|
};
|
|
|
var DATETIME_MED_WITH_WEEKDAY = {
|
|
|
year: n$1,
|
|
|
month: s$1,
|
|
|
day: n$1,
|
|
|
weekday: s$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1
|
|
|
};
|
|
|
var DATETIME_FULL = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
timeZoneName: s$1
|
|
|
};
|
|
|
var DATETIME_FULL_WITH_SECONDS = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
timeZoneName: s$1
|
|
|
};
|
|
|
var DATETIME_HUGE = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1,
|
|
|
weekday: l$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
timeZoneName: l$1
|
|
|
};
|
|
|
var DATETIME_HUGE_WITH_SECONDS = {
|
|
|
year: n$1,
|
|
|
month: l$1,
|
|
|
day: n$1,
|
|
|
weekday: l$1,
|
|
|
hour: n$1,
|
|
|
minute: n$1,
|
|
|
second: n$1,
|
|
|
timeZoneName: l$1
|
|
|
};
|
|
|
|
|
|
/*
|
|
|
This is just a junk drawer, containing anything used across multiple classes.
|
|
|
Because Luxon is small(ish), this should stay small and we won't worry about splitting
|
|
|
it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.
|
|
|
*/
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
// TYPES
|
|
|
|
|
|
function isUndefined(o) {
|
|
|
return typeof o === "undefined";
|
|
|
}
|
|
|
function isNumber(o) {
|
|
|
return typeof o === "number";
|
|
|
}
|
|
|
function isInteger(o) {
|
|
|
return typeof o === "number" && o % 1 === 0;
|
|
|
}
|
|
|
function isString(o) {
|
|
|
return typeof o === "string";
|
|
|
}
|
|
|
function isDate(o) {
|
|
|
return Object.prototype.toString.call(o) === "[object Date]";
|
|
|
} // CAPABILITIES
|
|
|
|
|
|
function hasIntl() {
|
|
|
try {
|
|
|
return typeof Intl !== "undefined" && Intl.DateTimeFormat;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
function hasFormatToParts() {
|
|
|
return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);
|
|
|
}
|
|
|
function hasRelative() {
|
|
|
try {
|
|
|
return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
} // OBJECTS AND ARRAYS
|
|
|
|
|
|
function maybeArray(thing) {
|
|
|
return Array.isArray(thing) ? thing : [thing];
|
|
|
}
|
|
|
function bestBy(arr, by, compare) {
|
|
|
if (arr.length === 0) {
|
|
|
return undefined;
|
|
|
}
|
|
|
|
|
|
return arr.reduce(function (best, next) {
|
|
|
var pair = [by(next), next];
|
|
|
|
|
|
if (!best) {
|
|
|
return pair;
|
|
|
} else if (compare(best[0], pair[0]) === best[0]) {
|
|
|
return best;
|
|
|
} else {
|
|
|
return pair;
|
|
|
}
|
|
|
}, null)[1];
|
|
|
}
|
|
|
function pick(obj, keys) {
|
|
|
return keys.reduce(function (a, k) {
|
|
|
a[k] = obj[k];
|
|
|
return a;
|
|
|
}, {});
|
|
|
}
|
|
|
function hasOwnProperty$1(obj, prop) {
|
|
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
|
} // NUMBERS AND STRINGS
|
|
|
|
|
|
function integerBetween(thing, bottom, top) {
|
|
|
return isInteger(thing) && thing >= bottom && thing <= top;
|
|
|
} // x % n but takes the sign of n instead of x
|
|
|
|
|
|
function floorMod(x, n) {
|
|
|
return x - n * Math.floor(x / n);
|
|
|
}
|
|
|
function padStart$1(input, n) {
|
|
|
if (n === void 0) {
|
|
|
n = 2;
|
|
|
}
|
|
|
|
|
|
var minus = input < 0 ? "-" : "";
|
|
|
var target = minus ? input * -1 : input;
|
|
|
var result;
|
|
|
|
|
|
if (target.toString().length < n) {
|
|
|
result = ("0".repeat(n) + target).slice(-n);
|
|
|
} else {
|
|
|
result = target.toString();
|
|
|
}
|
|
|
|
|
|
return "" + minus + result;
|
|
|
}
|
|
|
function parseInteger(string) {
|
|
|
if (isUndefined(string) || string === null || string === "") {
|
|
|
return undefined;
|
|
|
} else {
|
|
|
return parseInt(string, 10);
|
|
|
}
|
|
|
}
|
|
|
function parseMillis(fraction) {
|
|
|
// Return undefined (instead of 0) in these cases, where fraction is not set
|
|
|
if (isUndefined(fraction) || fraction === null || fraction === "") {
|
|
|
return undefined;
|
|
|
} else {
|
|
|
var f = parseFloat("0." + fraction) * 1000;
|
|
|
return Math.floor(f);
|
|
|
}
|
|
|
}
|
|
|
function roundTo(number, digits, towardZero) {
|
|
|
if (towardZero === void 0) {
|
|
|
towardZero = false;
|
|
|
}
|
|
|
|
|
|
var factor = Math.pow(10, digits),
|
|
|
rounder = towardZero ? Math.trunc : Math.round;
|
|
|
return rounder(number * factor) / factor;
|
|
|
} // DATE BASICS
|
|
|
|
|
|
function isLeapYear(year) {
|
|
|
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
|
|
|
}
|
|
|
function daysInYear(year) {
|
|
|
return isLeapYear(year) ? 366 : 365;
|
|
|
}
|
|
|
function daysInMonth(year, month) {
|
|
|
var modMonth = floorMod(month - 1, 12) + 1,
|
|
|
modYear = year + (month - modMonth) / 12;
|
|
|
|
|
|
if (modMonth === 2) {
|
|
|
return isLeapYear(modYear) ? 29 : 28;
|
|
|
} else {
|
|
|
return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];
|
|
|
}
|
|
|
} // covert a calendar object to a local timestamp (epoch, but with the offset baked in)
|
|
|
|
|
|
function objToLocalTS(obj) {
|
|
|
var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that
|
|
|
|
|
|
if (obj.year < 100 && obj.year >= 0) {
|
|
|
d = new Date(d);
|
|
|
d.setUTCFullYear(d.getUTCFullYear() - 1900);
|
|
|
}
|
|
|
|
|
|
return +d;
|
|
|
}
|
|
|
function weeksInWeekYear(weekYear) {
|
|
|
var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7,
|
|
|
last = weekYear - 1,
|
|
|
p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;
|
|
|
return p1 === 4 || p2 === 3 ? 53 : 52;
|
|
|
}
|
|
|
function untruncateYear(year) {
|
|
|
if (year > 99) {
|
|
|
return year;
|
|
|
} else return year > 60 ? 1900 + year : 2000 + year;
|
|
|
} // PARSING
|
|
|
|
|
|
function parseZoneInfo(ts, offsetFormat, locale, timeZone) {
|
|
|
if (timeZone === void 0) {
|
|
|
timeZone = null;
|
|
|
}
|
|
|
|
|
|
var date = new Date(ts),
|
|
|
intlOpts = {
|
|
|
hour12: false,
|
|
|
year: "numeric",
|
|
|
month: "2-digit",
|
|
|
day: "2-digit",
|
|
|
hour: "2-digit",
|
|
|
minute: "2-digit"
|
|
|
};
|
|
|
|
|
|
if (timeZone) {
|
|
|
intlOpts.timeZone = timeZone;
|
|
|
}
|
|
|
|
|
|
var modified = Object.assign({
|
|
|
timeZoneName: offsetFormat
|
|
|
}, intlOpts),
|
|
|
intl = hasIntl();
|
|
|
|
|
|
if (intl && hasFormatToParts()) {
|
|
|
var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) {
|
|
|
return m.type.toLowerCase() === "timezonename";
|
|
|
});
|
|
|
return parsed ? parsed.value : null;
|
|
|
} else if (intl) {
|
|
|
// this probably doesn't work for all locales
|
|
|
var without = new Intl.DateTimeFormat(locale, intlOpts).format(date),
|
|
|
included = new Intl.DateTimeFormat(locale, modified).format(date),
|
|
|
diffed = included.substring(without.length),
|
|
|
trimmed = diffed.replace(/^[, \u200e]+/, "");
|
|
|
return trimmed;
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
} // signedOffset('-5', '30') -> -330
|
|
|
|
|
|
function signedOffset(offHourStr, offMinuteStr) {
|
|
|
var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0
|
|
|
|
|
|
if (Number.isNaN(offHour)) {
|
|
|
offHour = 0;
|
|
|
}
|
|
|
|
|
|
var offMin = parseInt(offMinuteStr, 10) || 0,
|
|
|
offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;
|
|
|
return offHour * 60 + offMinSigned;
|
|
|
} // COERCION
|
|
|
|
|
|
function asNumber(value) {
|
|
|
var numericValue = Number(value);
|
|
|
if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value);
|
|
|
return numericValue;
|
|
|
}
|
|
|
function normalizeObject(obj, normalizer, nonUnitKeys) {
|
|
|
var normalized = {};
|
|
|
|
|
|
for (var u in obj) {
|
|
|
if (hasOwnProperty$1(obj, u)) {
|
|
|
if (nonUnitKeys.indexOf(u) >= 0) continue;
|
|
|
var v = obj[u];
|
|
|
if (v === undefined || v === null) continue;
|
|
|
normalized[normalizer(u)] = asNumber(v);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return normalized;
|
|
|
}
|
|
|
function formatOffset(offset, format) {
|
|
|
var hours = Math.trunc(Math.abs(offset / 60)),
|
|
|
minutes = Math.trunc(Math.abs(offset % 60)),
|
|
|
sign = offset >= 0 ? "+" : "-";
|
|
|
|
|
|
switch (format) {
|
|
|
case "short":
|
|
|
return "" + sign + padStart$1(hours, 2) + ":" + padStart$1(minutes, 2);
|
|
|
|
|
|
case "narrow":
|
|
|
return "" + sign + hours + (minutes > 0 ? ":" + minutes : "");
|
|
|
|
|
|
case "techie":
|
|
|
return "" + sign + padStart$1(hours, 2) + padStart$1(minutes, 2);
|
|
|
|
|
|
default:
|
|
|
throw new RangeError("Value format " + format + " is out of range for property format");
|
|
|
}
|
|
|
}
|
|
|
function timeObject(obj) {
|
|
|
return pick(obj, ["hour", "minute", "second", "millisecond"]);
|
|
|
}
|
|
|
var ianaRegex = /[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/;
|
|
|
|
|
|
function stringify(obj) {
|
|
|
return JSON.stringify(obj, Object.keys(obj).sort());
|
|
|
}
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
|
var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
|
var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"];
|
|
|
function months(length) {
|
|
|
switch (length) {
|
|
|
case "narrow":
|
|
|
return [].concat(monthsNarrow);
|
|
|
|
|
|
case "short":
|
|
|
return [].concat(monthsShort);
|
|
|
|
|
|
case "long":
|
|
|
return [].concat(monthsLong);
|
|
|
|
|
|
case "numeric":
|
|
|
return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"];
|
|
|
|
|
|
case "2-digit":
|
|
|
return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"];
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
|
|
|
var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
|
|
|
var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"];
|
|
|
function weekdays(length) {
|
|
|
switch (length) {
|
|
|
case "narrow":
|
|
|
return [].concat(weekdaysNarrow);
|
|
|
|
|
|
case "short":
|
|
|
return [].concat(weekdaysShort);
|
|
|
|
|
|
case "long":
|
|
|
return [].concat(weekdaysLong);
|
|
|
|
|
|
case "numeric":
|
|
|
return ["1", "2", "3", "4", "5", "6", "7"];
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
var meridiems = ["AM", "PM"];
|
|
|
var erasLong = ["Before Christ", "Anno Domini"];
|
|
|
var erasShort = ["BC", "AD"];
|
|
|
var erasNarrow = ["B", "A"];
|
|
|
function eras(length) {
|
|
|
switch (length) {
|
|
|
case "narrow":
|
|
|
return [].concat(erasNarrow);
|
|
|
|
|
|
case "short":
|
|
|
return [].concat(erasShort);
|
|
|
|
|
|
case "long":
|
|
|
return [].concat(erasLong);
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
function meridiemForDateTime(dt) {
|
|
|
return meridiems[dt.hour < 12 ? 0 : 1];
|
|
|
}
|
|
|
function weekdayForDateTime(dt, length) {
|
|
|
return weekdays(length)[dt.weekday - 1];
|
|
|
}
|
|
|
function monthForDateTime(dt, length) {
|
|
|
return months(length)[dt.month - 1];
|
|
|
}
|
|
|
function eraForDateTime(dt, length) {
|
|
|
return eras(length)[dt.year < 0 ? 0 : 1];
|
|
|
}
|
|
|
function formatRelativeTime(unit, count, numeric, narrow) {
|
|
|
if (numeric === void 0) {
|
|
|
numeric = "always";
|
|
|
}
|
|
|
|
|
|
if (narrow === void 0) {
|
|
|
narrow = false;
|
|
|
}
|
|
|
|
|
|
var units = {
|
|
|
years: ["year", "yr."],
|
|
|
quarters: ["quarter", "qtr."],
|
|
|
months: ["month", "mo."],
|
|
|
weeks: ["week", "wk."],
|
|
|
days: ["day", "day", "days"],
|
|
|
hours: ["hour", "hr."],
|
|
|
minutes: ["minute", "min."],
|
|
|
seconds: ["second", "sec."]
|
|
|
};
|
|
|
var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1;
|
|
|
|
|
|
if (numeric === "auto" && lastable) {
|
|
|
var isDay = unit === "days";
|
|
|
|
|
|
switch (count) {
|
|
|
case 1:
|
|
|
return isDay ? "tomorrow" : "next " + units[unit][0];
|
|
|
|
|
|
case -1:
|
|
|
return isDay ? "yesterday" : "last " + units[unit][0];
|
|
|
|
|
|
case 0:
|
|
|
return isDay ? "today" : "this " + units[unit][0];
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isInPast = Object.is(count, -0) || count < 0,
|
|
|
fmtValue = Math.abs(count),
|
|
|
singular = fmtValue === 1,
|
|
|
lilUnits = units[unit],
|
|
|
fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit;
|
|
|
return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit;
|
|
|
}
|
|
|
function formatString(knownFormat) {
|
|
|
// these all have the offsets removed because we don't have access to them
|
|
|
// without all the intl stuff this is backfilling
|
|
|
var filtered = pick(knownFormat, ["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName", "hour12"]),
|
|
|
key = stringify(filtered),
|
|
|
dateTimeHuge = "EEEE, LLLL d, yyyy, h:mm a";
|
|
|
|
|
|
switch (key) {
|
|
|
case stringify(DATE_SHORT):
|
|
|
return "M/d/yyyy";
|
|
|
|
|
|
case stringify(DATE_MED):
|
|
|
return "LLL d, yyyy";
|
|
|
|
|
|
case stringify(DATE_MED_WITH_WEEKDAY):
|
|
|
return "EEE, LLL d, yyyy";
|
|
|
|
|
|
case stringify(DATE_FULL):
|
|
|
return "LLLL d, yyyy";
|
|
|
|
|
|
case stringify(DATE_HUGE):
|
|
|
return "EEEE, LLLL d, yyyy";
|
|
|
|
|
|
case stringify(TIME_SIMPLE):
|
|
|
return "h:mm a";
|
|
|
|
|
|
case stringify(TIME_WITH_SECONDS):
|
|
|
return "h:mm:ss a";
|
|
|
|
|
|
case stringify(TIME_WITH_SHORT_OFFSET):
|
|
|
return "h:mm a";
|
|
|
|
|
|
case stringify(TIME_WITH_LONG_OFFSET):
|
|
|
return "h:mm a";
|
|
|
|
|
|
case stringify(TIME_24_SIMPLE):
|
|
|
return "HH:mm";
|
|
|
|
|
|
case stringify(TIME_24_WITH_SECONDS):
|
|
|
return "HH:mm:ss";
|
|
|
|
|
|
case stringify(TIME_24_WITH_SHORT_OFFSET):
|
|
|
return "HH:mm";
|
|
|
|
|
|
case stringify(TIME_24_WITH_LONG_OFFSET):
|
|
|
return "HH:mm";
|
|
|
|
|
|
case stringify(DATETIME_SHORT):
|
|
|
return "M/d/yyyy, h:mm a";
|
|
|
|
|
|
case stringify(DATETIME_MED):
|
|
|
return "LLL d, yyyy, h:mm a";
|
|
|
|
|
|
case stringify(DATETIME_FULL):
|
|
|
return "LLLL d, yyyy, h:mm a";
|
|
|
|
|
|
case stringify(DATETIME_HUGE):
|
|
|
return dateTimeHuge;
|
|
|
|
|
|
case stringify(DATETIME_SHORT_WITH_SECONDS):
|
|
|
return "M/d/yyyy, h:mm:ss a";
|
|
|
|
|
|
case stringify(DATETIME_MED_WITH_SECONDS):
|
|
|
return "LLL d, yyyy, h:mm:ss a";
|
|
|
|
|
|
case stringify(DATETIME_MED_WITH_WEEKDAY):
|
|
|
return "EEE, d LLL yyyy, h:mm a";
|
|
|
|
|
|
case stringify(DATETIME_FULL_WITH_SECONDS):
|
|
|
return "LLLL d, yyyy, h:mm:ss a";
|
|
|
|
|
|
case stringify(DATETIME_HUGE_WITH_SECONDS):
|
|
|
return "EEEE, LLLL d, yyyy, h:mm:ss a";
|
|
|
|
|
|
default:
|
|
|
return dateTimeHuge;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function stringifyTokens(splits, tokenToString) {
|
|
|
var s = "";
|
|
|
|
|
|
for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) {
|
|
|
var token = _step.value;
|
|
|
|
|
|
if (token.literal) {
|
|
|
s += token.val;
|
|
|
} else {
|
|
|
s += tokenToString(token.val);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return s;
|
|
|
}
|
|
|
|
|
|
var _macroTokenToFormatOpts = {
|
|
|
D: DATE_SHORT,
|
|
|
DD: DATE_MED,
|
|
|
DDD: DATE_FULL,
|
|
|
DDDD: DATE_HUGE,
|
|
|
t: TIME_SIMPLE,
|
|
|
tt: TIME_WITH_SECONDS,
|
|
|
ttt: TIME_WITH_SHORT_OFFSET,
|
|
|
tttt: TIME_WITH_LONG_OFFSET,
|
|
|
T: TIME_24_SIMPLE,
|
|
|
TT: TIME_24_WITH_SECONDS,
|
|
|
TTT: TIME_24_WITH_SHORT_OFFSET,
|
|
|
TTTT: TIME_24_WITH_LONG_OFFSET,
|
|
|
f: DATETIME_SHORT,
|
|
|
ff: DATETIME_MED,
|
|
|
fff: DATETIME_FULL,
|
|
|
ffff: DATETIME_HUGE,
|
|
|
F: DATETIME_SHORT_WITH_SECONDS,
|
|
|
FF: DATETIME_MED_WITH_SECONDS,
|
|
|
FFF: DATETIME_FULL_WITH_SECONDS,
|
|
|
FFFF: DATETIME_HUGE_WITH_SECONDS
|
|
|
};
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
var Formatter = /*#__PURE__*/function () {
|
|
|
Formatter.create = function create(locale, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return new Formatter(locale, opts);
|
|
|
};
|
|
|
|
|
|
Formatter.parseFormat = function parseFormat(fmt) {
|
|
|
var current = null,
|
|
|
currentFull = "",
|
|
|
bracketed = false;
|
|
|
var splits = [];
|
|
|
|
|
|
for (var i = 0; i < fmt.length; i++) {
|
|
|
var c = fmt.charAt(i);
|
|
|
|
|
|
if (c === "'") {
|
|
|
if (currentFull.length > 0) {
|
|
|
splits.push({
|
|
|
literal: bracketed,
|
|
|
val: currentFull
|
|
|
});
|
|
|
}
|
|
|
|
|
|
current = null;
|
|
|
currentFull = "";
|
|
|
bracketed = !bracketed;
|
|
|
} else if (bracketed) {
|
|
|
currentFull += c;
|
|
|
} else if (c === current) {
|
|
|
currentFull += c;
|
|
|
} else {
|
|
|
if (currentFull.length > 0) {
|
|
|
splits.push({
|
|
|
literal: false,
|
|
|
val: currentFull
|
|
|
});
|
|
|
}
|
|
|
|
|
|
currentFull = c;
|
|
|
current = c;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (currentFull.length > 0) {
|
|
|
splits.push({
|
|
|
literal: bracketed,
|
|
|
val: currentFull
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return splits;
|
|
|
};
|
|
|
|
|
|
Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) {
|
|
|
return _macroTokenToFormatOpts[token];
|
|
|
};
|
|
|
|
|
|
function Formatter(locale, formatOpts) {
|
|
|
this.opts = formatOpts;
|
|
|
this.loc = locale;
|
|
|
this.systemLoc = null;
|
|
|
}
|
|
|
|
|
|
var _proto = Formatter.prototype;
|
|
|
|
|
|
_proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) {
|
|
|
if (this.systemLoc === null) {
|
|
|
this.systemLoc = this.loc.redefaultToSystem();
|
|
|
}
|
|
|
|
|
|
var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));
|
|
|
return df.format();
|
|
|
};
|
|
|
|
|
|
_proto.formatDateTime = function formatDateTime(dt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));
|
|
|
return df.format();
|
|
|
};
|
|
|
|
|
|
_proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));
|
|
|
return df.formatToParts();
|
|
|
};
|
|
|
|
|
|
_proto.resolvedOptions = function resolvedOptions(dt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));
|
|
|
return df.resolvedOptions();
|
|
|
};
|
|
|
|
|
|
_proto.num = function num(n, p) {
|
|
|
if (p === void 0) {
|
|
|
p = 0;
|
|
|
}
|
|
|
|
|
|
// we get some perf out of doing this here, annoyingly
|
|
|
if (this.opts.forceSimple) {
|
|
|
return padStart$1(n, p);
|
|
|
}
|
|
|
|
|
|
var opts = Object.assign({}, this.opts);
|
|
|
|
|
|
if (p > 0) {
|
|
|
opts.padTo = p;
|
|
|
}
|
|
|
|
|
|
return this.loc.numberFormatter(opts).format(n);
|
|
|
};
|
|
|
|
|
|
_proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) {
|
|
|
var _this = this;
|
|
|
|
|
|
var knownEnglish = this.loc.listingMode() === "en",
|
|
|
useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory" && hasFormatToParts(),
|
|
|
string = function string(opts, extract) {
|
|
|
return _this.loc.extract(dt, opts, extract);
|
|
|
},
|
|
|
formatOffset = function formatOffset(opts) {
|
|
|
if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {
|
|
|
return "Z";
|
|
|
}
|
|
|
|
|
|
return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : "";
|
|
|
},
|
|
|
meridiem = function meridiem() {
|
|
|
return knownEnglish ? meridiemForDateTime(dt) : string({
|
|
|
hour: "numeric",
|
|
|
hour12: true
|
|
|
}, "dayperiod");
|
|
|
},
|
|
|
month = function month(length, standalone) {
|
|
|
return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? {
|
|
|
month: length
|
|
|
} : {
|
|
|
month: length,
|
|
|
day: "numeric"
|
|
|
}, "month");
|
|
|
},
|
|
|
weekday = function weekday(length, standalone) {
|
|
|
return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? {
|
|
|
weekday: length
|
|
|
} : {
|
|
|
weekday: length,
|
|
|
month: "long",
|
|
|
day: "numeric"
|
|
|
}, "weekday");
|
|
|
},
|
|
|
maybeMacro = function maybeMacro(token) {
|
|
|
var formatOpts = Formatter.macroTokenToFormatOpts(token);
|
|
|
|
|
|
if (formatOpts) {
|
|
|
return _this.formatWithSystemDefault(dt, formatOpts);
|
|
|
} else {
|
|
|
return token;
|
|
|
}
|
|
|
},
|
|
|
era = function era(length) {
|
|
|
return knownEnglish ? eraForDateTime(dt, length) : string({
|
|
|
era: length
|
|
|
}, "era");
|
|
|
},
|
|
|
tokenToString = function tokenToString(token) {
|
|
|
// Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles
|
|
|
switch (token) {
|
|
|
// ms
|
|
|
case "S":
|
|
|
return _this.num(dt.millisecond);
|
|
|
|
|
|
case "u": // falls through
|
|
|
|
|
|
case "SSS":
|
|
|
return _this.num(dt.millisecond, 3);
|
|
|
// seconds
|
|
|
|
|
|
case "s":
|
|
|
return _this.num(dt.second);
|
|
|
|
|
|
case "ss":
|
|
|
return _this.num(dt.second, 2);
|
|
|
// minutes
|
|
|
|
|
|
case "m":
|
|
|
return _this.num(dt.minute);
|
|
|
|
|
|
case "mm":
|
|
|
return _this.num(dt.minute, 2);
|
|
|
// hours
|
|
|
|
|
|
case "h":
|
|
|
return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);
|
|
|
|
|
|
case "hh":
|
|
|
return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);
|
|
|
|
|
|
case "H":
|
|
|
return _this.num(dt.hour);
|
|
|
|
|
|
case "HH":
|
|
|
return _this.num(dt.hour, 2);
|
|
|
// offset
|
|
|
|
|
|
case "Z":
|
|
|
// like +6
|
|
|
return formatOffset({
|
|
|
format: "narrow",
|
|
|
allowZ: _this.opts.allowZ
|
|
|
});
|
|
|
|
|
|
case "ZZ":
|
|
|
// like +06:00
|
|
|
return formatOffset({
|
|
|
format: "short",
|
|
|
allowZ: _this.opts.allowZ
|
|
|
});
|
|
|
|
|
|
case "ZZZ":
|
|
|
// like +0600
|
|
|
return formatOffset({
|
|
|
format: "techie",
|
|
|
allowZ: _this.opts.allowZ
|
|
|
});
|
|
|
|
|
|
case "ZZZZ":
|
|
|
// like EST
|
|
|
return dt.zone.offsetName(dt.ts, {
|
|
|
format: "short",
|
|
|
locale: _this.loc.locale
|
|
|
});
|
|
|
|
|
|
case "ZZZZZ":
|
|
|
// like Eastern Standard Time
|
|
|
return dt.zone.offsetName(dt.ts, {
|
|
|
format: "long",
|
|
|
locale: _this.loc.locale
|
|
|
});
|
|
|
// zone
|
|
|
|
|
|
case "z":
|
|
|
// like America/New_York
|
|
|
return dt.zoneName;
|
|
|
// meridiems
|
|
|
|
|
|
case "a":
|
|
|
return meridiem();
|
|
|
// dates
|
|
|
|
|
|
case "d":
|
|
|
return useDateTimeFormatter ? string({
|
|
|
day: "numeric"
|
|
|
}, "day") : _this.num(dt.day);
|
|
|
|
|
|
case "dd":
|
|
|
return useDateTimeFormatter ? string({
|
|
|
day: "2-digit"
|
|
|
}, "day") : _this.num(dt.day, 2);
|
|
|
// weekdays - standalone
|
|
|
|
|
|
case "c":
|
|
|
// like 1
|
|
|
return _this.num(dt.weekday);
|
|
|
|
|
|
case "ccc":
|
|
|
// like 'Tues'
|
|
|
return weekday("short", true);
|
|
|
|
|
|
case "cccc":
|
|
|
// like 'Tuesday'
|
|
|
return weekday("long", true);
|
|
|
|
|
|
case "ccccc":
|
|
|
// like 'T'
|
|
|
return weekday("narrow", true);
|
|
|
// weekdays - format
|
|
|
|
|
|
case "E":
|
|
|
// like 1
|
|
|
return _this.num(dt.weekday);
|
|
|
|
|
|
case "EEE":
|
|
|
// like 'Tues'
|
|
|
return weekday("short", false);
|
|
|
|
|
|
case "EEEE":
|
|
|
// like 'Tuesday'
|
|
|
return weekday("long", false);
|
|
|
|
|
|
case "EEEEE":
|
|
|
// like 'T'
|
|
|
return weekday("narrow", false);
|
|
|
// months - standalone
|
|
|
|
|
|
case "L":
|
|
|
// like 1
|
|
|
return useDateTimeFormatter ? string({
|
|
|
month: "numeric",
|
|
|
day: "numeric"
|
|
|
}, "month") : _this.num(dt.month);
|
|
|
|
|
|
case "LL":
|
|
|
// like 01, doesn't seem to work
|
|
|
return useDateTimeFormatter ? string({
|
|
|
month: "2-digit",
|
|
|
day: "numeric"
|
|
|
}, "month") : _this.num(dt.month, 2);
|
|
|
|
|
|
case "LLL":
|
|
|
// like Jan
|
|
|
return month("short", true);
|
|
|
|
|
|
case "LLLL":
|
|
|
// like January
|
|
|
return month("long", true);
|
|
|
|
|
|
case "LLLLL":
|
|
|
// like J
|
|
|
return month("narrow", true);
|
|
|
// months - format
|
|
|
|
|
|
case "M":
|
|
|
// like 1
|
|
|
return useDateTimeFormatter ? string({
|
|
|
month: "numeric"
|
|
|
}, "month") : _this.num(dt.month);
|
|
|
|
|
|
case "MM":
|
|
|
// like 01
|
|
|
return useDateTimeFormatter ? string({
|
|
|
month: "2-digit"
|
|
|
}, "month") : _this.num(dt.month, 2);
|
|
|
|
|
|
case "MMM":
|
|
|
// like Jan
|
|
|
return month("short", false);
|
|
|
|
|
|
case "MMMM":
|
|
|
// like January
|
|
|
return month("long", false);
|
|
|
|
|
|
case "MMMMM":
|
|
|
// like J
|
|
|
return month("narrow", false);
|
|
|
// years
|
|
|
|
|
|
case "y":
|
|
|
// like 2014
|
|
|
return useDateTimeFormatter ? string({
|
|
|
year: "numeric"
|
|
|
}, "year") : _this.num(dt.year);
|
|
|
|
|
|
case "yy":
|
|
|
// like 14
|
|
|
return useDateTimeFormatter ? string({
|
|
|
year: "2-digit"
|
|
|
}, "year") : _this.num(dt.year.toString().slice(-2), 2);
|
|
|
|
|
|
case "yyyy":
|
|
|
// like 0012
|
|
|
return useDateTimeFormatter ? string({
|
|
|
year: "numeric"
|
|
|
}, "year") : _this.num(dt.year, 4);
|
|
|
|
|
|
case "yyyyyy":
|
|
|
// like 000012
|
|
|
return useDateTimeFormatter ? string({
|
|
|
year: "numeric"
|
|
|
}, "year") : _this.num(dt.year, 6);
|
|
|
// eras
|
|
|
|
|
|
case "G":
|
|
|
// like AD
|
|
|
return era("short");
|
|
|
|
|
|
case "GG":
|
|
|
// like Anno Domini
|
|
|
return era("long");
|
|
|
|
|
|
case "GGGGG":
|
|
|
return era("narrow");
|
|
|
|
|
|
case "kk":
|
|
|
return _this.num(dt.weekYear.toString().slice(-2), 2);
|
|
|
|
|
|
case "kkkk":
|
|
|
return _this.num(dt.weekYear, 4);
|
|
|
|
|
|
case "W":
|
|
|
return _this.num(dt.weekNumber);
|
|
|
|
|
|
case "WW":
|
|
|
return _this.num(dt.weekNumber, 2);
|
|
|
|
|
|
case "o":
|
|
|
return _this.num(dt.ordinal);
|
|
|
|
|
|
case "ooo":
|
|
|
return _this.num(dt.ordinal, 3);
|
|
|
|
|
|
case "q":
|
|
|
// like 1
|
|
|
return _this.num(dt.quarter);
|
|
|
|
|
|
case "qq":
|
|
|
// like 01
|
|
|
return _this.num(dt.quarter, 2);
|
|
|
|
|
|
case "X":
|
|
|
return _this.num(Math.floor(dt.ts / 1000));
|
|
|
|
|
|
case "x":
|
|
|
return _this.num(dt.ts);
|
|
|
|
|
|
default:
|
|
|
return maybeMacro(token);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);
|
|
|
};
|
|
|
|
|
|
_proto.formatDurationFromString = function formatDurationFromString(dur, fmt) {
|
|
|
var _this2 = this;
|
|
|
|
|
|
var tokenToField = function tokenToField(token) {
|
|
|
switch (token[0]) {
|
|
|
case "S":
|
|
|
return "millisecond";
|
|
|
|
|
|
case "s":
|
|
|
return "second";
|
|
|
|
|
|
case "m":
|
|
|
return "minute";
|
|
|
|
|
|
case "h":
|
|
|
return "hour";
|
|
|
|
|
|
case "d":
|
|
|
return "day";
|
|
|
|
|
|
case "M":
|
|
|
return "month";
|
|
|
|
|
|
case "y":
|
|
|
return "year";
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
},
|
|
|
tokenToString = function tokenToString(lildur) {
|
|
|
return function (token) {
|
|
|
var mapped = tokenToField(token);
|
|
|
|
|
|
if (mapped) {
|
|
|
return _this2.num(lildur.get(mapped), token.length);
|
|
|
} else {
|
|
|
return token;
|
|
|
}
|
|
|
};
|
|
|
},
|
|
|
tokens = Formatter.parseFormat(fmt),
|
|
|
realTokens = tokens.reduce(function (found, _ref) {
|
|
|
var literal = _ref.literal,
|
|
|
val = _ref.val;
|
|
|
return literal ? found : found.concat(val);
|
|
|
}, []),
|
|
|
collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) {
|
|
|
return t;
|
|
|
}));
|
|
|
|
|
|
return stringifyTokens(tokens, tokenToString(collapsed));
|
|
|
};
|
|
|
|
|
|
return Formatter;
|
|
|
}();
|
|
|
|
|
|
var Invalid = /*#__PURE__*/function () {
|
|
|
function Invalid(reason, explanation) {
|
|
|
this.reason = reason;
|
|
|
this.explanation = explanation;
|
|
|
}
|
|
|
|
|
|
var _proto = Invalid.prototype;
|
|
|
|
|
|
_proto.toMessage = function toMessage() {
|
|
|
if (this.explanation) {
|
|
|
return this.reason + ": " + this.explanation;
|
|
|
} else {
|
|
|
return this.reason;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return Invalid;
|
|
|
}();
|
|
|
|
|
|
/**
|
|
|
* @interface
|
|
|
*/
|
|
|
|
|
|
var Zone = /*#__PURE__*/function () {
|
|
|
function Zone() {}
|
|
|
|
|
|
var _proto = Zone.prototype;
|
|
|
|
|
|
/**
|
|
|
* Returns the offset's common name (such as EST) at the specified timestamp
|
|
|
* @abstract
|
|
|
* @param {number} ts - Epoch milliseconds for which to get the name
|
|
|
* @param {Object} opts - Options to affect the format
|
|
|
* @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.
|
|
|
* @param {string} opts.locale - What locale to return the offset name in.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
_proto.offsetName = function offsetName(ts, opts) {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* Returns the offset's value as a string
|
|
|
* @abstract
|
|
|
* @param {number} ts - Epoch milliseconds for which to get the offset
|
|
|
* @param {string} format - What style of offset to return.
|
|
|
* Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.formatOffset = function formatOffset(ts, format) {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* Return the offset in minutes for this zone at the specified timestamp.
|
|
|
* @abstract
|
|
|
* @param {number} ts - Epoch milliseconds for which to compute the offset
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.offset = function offset(ts) {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Zone is equal to another zone
|
|
|
* @abstract
|
|
|
* @param {Zone} otherZone - the zone to compare
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(otherZone) {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Zone is valid.
|
|
|
* @abstract
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_createClass(Zone, [{
|
|
|
key: "type",
|
|
|
|
|
|
/**
|
|
|
* The type of zone
|
|
|
* @abstract
|
|
|
* @type {string}
|
|
|
*/
|
|
|
get: function get() {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* The name of this zone.
|
|
|
* @abstract
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "name",
|
|
|
get: function get() {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether the offset is known to be fixed for the whole year.
|
|
|
* @abstract
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "universal",
|
|
|
get: function get() {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
throw new ZoneIsAbstractError();
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Zone;
|
|
|
}();
|
|
|
|
|
|
var singleton = null;
|
|
|
/**
|
|
|
* Represents the local zone for this JavaScript environment.
|
|
|
* @implements {Zone}
|
|
|
*/
|
|
|
|
|
|
var LocalZone = /*#__PURE__*/function (_Zone) {
|
|
|
_inheritsLoose(LocalZone, _Zone);
|
|
|
|
|
|
function LocalZone() {
|
|
|
return _Zone.apply(this, arguments) || this;
|
|
|
}
|
|
|
|
|
|
var _proto = LocalZone.prototype;
|
|
|
|
|
|
/** @override **/
|
|
|
_proto.offsetName = function offsetName(ts, _ref) {
|
|
|
var format = _ref.format,
|
|
|
locale = _ref.locale;
|
|
|
return parseZoneInfo(ts, format, locale);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.formatOffset = function formatOffset$1(ts, format) {
|
|
|
return formatOffset(this.offset(ts), format);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.offset = function offset(ts) {
|
|
|
return -new Date(ts).getTimezoneOffset();
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(otherZone) {
|
|
|
return otherZone.type === "local";
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_createClass(LocalZone, [{
|
|
|
key: "type",
|
|
|
|
|
|
/** @override **/
|
|
|
get: function get() {
|
|
|
return "local";
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "name",
|
|
|
get: function get() {
|
|
|
if (hasIntl()) {
|
|
|
return new Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
|
} else return "local";
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "universal",
|
|
|
get: function get() {
|
|
|
return false;
|
|
|
}
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return true;
|
|
|
}
|
|
|
}], [{
|
|
|
key: "instance",
|
|
|
|
|
|
/**
|
|
|
* Get a singleton instance of the local zone
|
|
|
* @return {LocalZone}
|
|
|
*/
|
|
|
get: function get() {
|
|
|
if (singleton === null) {
|
|
|
singleton = new LocalZone();
|
|
|
}
|
|
|
|
|
|
return singleton;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return LocalZone;
|
|
|
}(Zone);
|
|
|
|
|
|
var matchingRegex = RegExp("^" + ianaRegex.source + "$");
|
|
|
var dtfCache = {};
|
|
|
|
|
|
function makeDTF(zone) {
|
|
|
if (!dtfCache[zone]) {
|
|
|
dtfCache[zone] = new Intl.DateTimeFormat("en-US", {
|
|
|
hour12: false,
|
|
|
timeZone: zone,
|
|
|
year: "numeric",
|
|
|
month: "2-digit",
|
|
|
day: "2-digit",
|
|
|
hour: "2-digit",
|
|
|
minute: "2-digit",
|
|
|
second: "2-digit"
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return dtfCache[zone];
|
|
|
}
|
|
|
|
|
|
var typeToPos = {
|
|
|
year: 0,
|
|
|
month: 1,
|
|
|
day: 2,
|
|
|
hour: 3,
|
|
|
minute: 4,
|
|
|
second: 5
|
|
|
};
|
|
|
|
|
|
function hackyOffset(dtf, date) {
|
|
|
var formatted = dtf.format(date).replace(/\u200E/g, ""),
|
|
|
parsed = /(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(formatted),
|
|
|
fMonth = parsed[1],
|
|
|
fDay = parsed[2],
|
|
|
fYear = parsed[3],
|
|
|
fHour = parsed[4],
|
|
|
fMinute = parsed[5],
|
|
|
fSecond = parsed[6];
|
|
|
return [fYear, fMonth, fDay, fHour, fMinute, fSecond];
|
|
|
}
|
|
|
|
|
|
function partsOffset(dtf, date) {
|
|
|
var formatted = dtf.formatToParts(date),
|
|
|
filled = [];
|
|
|
|
|
|
for (var i = 0; i < formatted.length; i++) {
|
|
|
var _formatted$i = formatted[i],
|
|
|
type = _formatted$i.type,
|
|
|
value = _formatted$i.value,
|
|
|
pos = typeToPos[type];
|
|
|
|
|
|
if (!isUndefined(pos)) {
|
|
|
filled[pos] = parseInt(value, 10);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return filled;
|
|
|
}
|
|
|
|
|
|
var ianaZoneCache = {};
|
|
|
/**
|
|
|
* A zone identified by an IANA identifier, like America/New_York
|
|
|
* @implements {Zone}
|
|
|
*/
|
|
|
|
|
|
var IANAZone = /*#__PURE__*/function (_Zone) {
|
|
|
_inheritsLoose(IANAZone, _Zone);
|
|
|
|
|
|
/**
|
|
|
* @param {string} name - Zone name
|
|
|
* @return {IANAZone}
|
|
|
*/
|
|
|
IANAZone.create = function create(name) {
|
|
|
if (!ianaZoneCache[name]) {
|
|
|
ianaZoneCache[name] = new IANAZone(name);
|
|
|
}
|
|
|
|
|
|
return ianaZoneCache[name];
|
|
|
}
|
|
|
/**
|
|
|
* Reset local caches. Should only be necessary in testing scenarios.
|
|
|
* @return {void}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
IANAZone.resetCache = function resetCache() {
|
|
|
ianaZoneCache = {};
|
|
|
dtfCache = {};
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.
|
|
|
* @param {string} s - The string to check validity on
|
|
|
* @example IANAZone.isValidSpecifier("America/New_York") //=> true
|
|
|
* @example IANAZone.isValidSpecifier("Fantasia/Castle") //=> true
|
|
|
* @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
IANAZone.isValidSpecifier = function isValidSpecifier(s) {
|
|
|
return !!(s && s.match(matchingRegex));
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether the provided string identifies a real zone
|
|
|
* @param {string} zone - The string to check
|
|
|
* @example IANAZone.isValidZone("America/New_York") //=> true
|
|
|
* @example IANAZone.isValidZone("Fantasia/Castle") //=> false
|
|
|
* @example IANAZone.isValidZone("Sport~~blorp") //=> false
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
IANAZone.isValidZone = function isValidZone(zone) {
|
|
|
try {
|
|
|
new Intl.DateTimeFormat("en-US", {
|
|
|
timeZone: zone
|
|
|
}).format();
|
|
|
return true;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
} // Etc/GMT+8 -> -480
|
|
|
|
|
|
/** @ignore */
|
|
|
;
|
|
|
|
|
|
IANAZone.parseGMTOffset = function parseGMTOffset(specifier) {
|
|
|
if (specifier) {
|
|
|
var match = specifier.match(/^Etc\/GMT(0|[+-]\d{1,2})$/i);
|
|
|
|
|
|
if (match) {
|
|
|
return -60 * parseInt(match[1]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
};
|
|
|
|
|
|
function IANAZone(name) {
|
|
|
var _this;
|
|
|
|
|
|
_this = _Zone.call(this) || this;
|
|
|
/** @private **/
|
|
|
|
|
|
_this.zoneName = name;
|
|
|
/** @private **/
|
|
|
|
|
|
_this.valid = IANAZone.isValidZone(name);
|
|
|
return _this;
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
|
|
|
var _proto = IANAZone.prototype;
|
|
|
|
|
|
/** @override **/
|
|
|
_proto.offsetName = function offsetName(ts, _ref) {
|
|
|
var format = _ref.format,
|
|
|
locale = _ref.locale;
|
|
|
return parseZoneInfo(ts, format, locale, this.name);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.formatOffset = function formatOffset$1(ts, format) {
|
|
|
return formatOffset(this.offset(ts), format);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.offset = function offset(ts) {
|
|
|
var date = new Date(ts);
|
|
|
if (isNaN(date)) return NaN;
|
|
|
|
|
|
var dtf = makeDTF(this.name),
|
|
|
_ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date),
|
|
|
year = _ref2[0],
|
|
|
month = _ref2[1],
|
|
|
day = _ref2[2],
|
|
|
hour = _ref2[3],
|
|
|
minute = _ref2[4],
|
|
|
second = _ref2[5],
|
|
|
adjustedHour = hour === 24 ? 0 : hour;
|
|
|
|
|
|
var asUTC = objToLocalTS({
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: day,
|
|
|
hour: adjustedHour,
|
|
|
minute: minute,
|
|
|
second: second,
|
|
|
millisecond: 0
|
|
|
});
|
|
|
var asTS = +date;
|
|
|
var over = asTS % 1000;
|
|
|
asTS -= over >= 0 ? over : 1000 + over;
|
|
|
return (asUTC - asTS) / (60 * 1000);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(otherZone) {
|
|
|
return otherZone.type === "iana" && otherZone.name === this.name;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_createClass(IANAZone, [{
|
|
|
key: "type",
|
|
|
get: function get() {
|
|
|
return "iana";
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "name",
|
|
|
get: function get() {
|
|
|
return this.zoneName;
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "universal",
|
|
|
get: function get() {
|
|
|
return false;
|
|
|
}
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return this.valid;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return IANAZone;
|
|
|
}(Zone);
|
|
|
|
|
|
var singleton$1 = null;
|
|
|
/**
|
|
|
* A zone with a fixed offset (meaning no DST)
|
|
|
* @implements {Zone}
|
|
|
*/
|
|
|
|
|
|
var FixedOffsetZone = /*#__PURE__*/function (_Zone) {
|
|
|
_inheritsLoose(FixedOffsetZone, _Zone);
|
|
|
|
|
|
/**
|
|
|
* Get an instance with a specified offset
|
|
|
* @param {number} offset - The offset in minutes
|
|
|
* @return {FixedOffsetZone}
|
|
|
*/
|
|
|
FixedOffsetZone.instance = function instance(offset) {
|
|
|
return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);
|
|
|
}
|
|
|
/**
|
|
|
* Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6"
|
|
|
* @param {string} s - The offset string to parse
|
|
|
* @example FixedOffsetZone.parseSpecifier("UTC+6")
|
|
|
* @example FixedOffsetZone.parseSpecifier("UTC+06")
|
|
|
* @example FixedOffsetZone.parseSpecifier("UTC-6:00")
|
|
|
* @return {FixedOffsetZone}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
FixedOffsetZone.parseSpecifier = function parseSpecifier(s) {
|
|
|
if (s) {
|
|
|
var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);
|
|
|
|
|
|
if (r) {
|
|
|
return new FixedOffsetZone(signedOffset(r[1], r[2]));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
};
|
|
|
|
|
|
_createClass(FixedOffsetZone, null, [{
|
|
|
key: "utcInstance",
|
|
|
|
|
|
/**
|
|
|
* Get a singleton instance of UTC
|
|
|
* @return {FixedOffsetZone}
|
|
|
*/
|
|
|
get: function get() {
|
|
|
if (singleton$1 === null) {
|
|
|
singleton$1 = new FixedOffsetZone(0);
|
|
|
}
|
|
|
|
|
|
return singleton$1;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
function FixedOffsetZone(offset) {
|
|
|
var _this;
|
|
|
|
|
|
_this = _Zone.call(this) || this;
|
|
|
/** @private **/
|
|
|
|
|
|
_this.fixed = offset;
|
|
|
return _this;
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
|
|
|
var _proto = FixedOffsetZone.prototype;
|
|
|
|
|
|
/** @override **/
|
|
|
_proto.offsetName = function offsetName() {
|
|
|
return this.name;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.formatOffset = function formatOffset$1(ts, format) {
|
|
|
return formatOffset(this.fixed, format);
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
/** @override **/
|
|
|
_proto.offset = function offset() {
|
|
|
return this.fixed;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(otherZone) {
|
|
|
return otherZone.type === "fixed" && otherZone.fixed === this.fixed;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_createClass(FixedOffsetZone, [{
|
|
|
key: "type",
|
|
|
get: function get() {
|
|
|
return "fixed";
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "name",
|
|
|
get: function get() {
|
|
|
return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow");
|
|
|
}
|
|
|
}, {
|
|
|
key: "universal",
|
|
|
get: function get() {
|
|
|
return true;
|
|
|
}
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return true;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return FixedOffsetZone;
|
|
|
}(Zone);
|
|
|
|
|
|
/**
|
|
|
* A zone that failed to parse. You should never need to instantiate this.
|
|
|
* @implements {Zone}
|
|
|
*/
|
|
|
|
|
|
var InvalidZone = /*#__PURE__*/function (_Zone) {
|
|
|
_inheritsLoose(InvalidZone, _Zone);
|
|
|
|
|
|
function InvalidZone(zoneName) {
|
|
|
var _this;
|
|
|
|
|
|
_this = _Zone.call(this) || this;
|
|
|
/** @private */
|
|
|
|
|
|
_this.zoneName = zoneName;
|
|
|
return _this;
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
|
|
|
var _proto = InvalidZone.prototype;
|
|
|
|
|
|
/** @override **/
|
|
|
_proto.offsetName = function offsetName() {
|
|
|
return null;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.formatOffset = function formatOffset() {
|
|
|
return "";
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.offset = function offset() {
|
|
|
return NaN;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals() {
|
|
|
return false;
|
|
|
}
|
|
|
/** @override **/
|
|
|
;
|
|
|
|
|
|
_createClass(InvalidZone, [{
|
|
|
key: "type",
|
|
|
get: function get() {
|
|
|
return "invalid";
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "name",
|
|
|
get: function get() {
|
|
|
return this.zoneName;
|
|
|
}
|
|
|
/** @override **/
|
|
|
|
|
|
}, {
|
|
|
key: "universal",
|
|
|
get: function get() {
|
|
|
return false;
|
|
|
}
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return false;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return InvalidZone;
|
|
|
}(Zone);
|
|
|
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
function normalizeZone(input, defaultZone) {
|
|
|
var offset;
|
|
|
|
|
|
if (isUndefined(input) || input === null) {
|
|
|
return defaultZone;
|
|
|
} else if (input instanceof Zone) {
|
|
|
return input;
|
|
|
} else if (isString(input)) {
|
|
|
var lowered = input.toLowerCase();
|
|
|
if (lowered === "local") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) {
|
|
|
// handle Etc/GMT-4, which V8 chokes on
|
|
|
return FixedOffsetZone.instance(offset);
|
|
|
} else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);
|
|
|
} else if (isNumber(input)) {
|
|
|
return FixedOffsetZone.instance(input);
|
|
|
} else if (typeof input === "object" && input.offset && typeof input.offset === "number") {
|
|
|
// This is dumb, but the instanceof check above doesn't seem to really work
|
|
|
// so we're duck checking it
|
|
|
return input;
|
|
|
} else {
|
|
|
return new InvalidZone(input);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var now = function now() {
|
|
|
return Date.now();
|
|
|
},
|
|
|
defaultZone = null,
|
|
|
// not setting this directly to LocalZone.instance bc loading order issues
|
|
|
defaultLocale = null,
|
|
|
defaultNumberingSystem = null,
|
|
|
defaultOutputCalendar = null,
|
|
|
throwOnInvalid = false;
|
|
|
/**
|
|
|
* Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var Settings = /*#__PURE__*/function () {
|
|
|
function Settings() {}
|
|
|
|
|
|
/**
|
|
|
* Reset Luxon's global caches. Should only be necessary in testing scenarios.
|
|
|
* @return {void}
|
|
|
*/
|
|
|
Settings.resetCaches = function resetCaches() {
|
|
|
Locale.resetCache();
|
|
|
IANAZone.resetCache();
|
|
|
};
|
|
|
|
|
|
_createClass(Settings, null, [{
|
|
|
key: "now",
|
|
|
|
|
|
/**
|
|
|
* Get the callback for returning the current timestamp.
|
|
|
* @type {function}
|
|
|
*/
|
|
|
get: function get() {
|
|
|
return now;
|
|
|
}
|
|
|
/**
|
|
|
* Set the callback for returning the current timestamp.
|
|
|
* The function should return a number, which will be interpreted as an Epoch millisecond count
|
|
|
* @type {function}
|
|
|
* @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future
|
|
|
* @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time
|
|
|
*/
|
|
|
,
|
|
|
set: function set(n) {
|
|
|
now = n;
|
|
|
}
|
|
|
/**
|
|
|
* Get the default time zone to create DateTimes in.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "defaultZoneName",
|
|
|
get: function get() {
|
|
|
return Settings.defaultZone.name;
|
|
|
}
|
|
|
/**
|
|
|
* Set the default time zone to create DateTimes in. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
,
|
|
|
set: function set(z) {
|
|
|
if (!z) {
|
|
|
defaultZone = null;
|
|
|
} else {
|
|
|
defaultZone = normalizeZone(z);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get the default time zone object to create DateTimes in. Does not affect existing instances.
|
|
|
* @type {Zone}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "defaultZone",
|
|
|
get: function get() {
|
|
|
return defaultZone || LocalZone.instance;
|
|
|
}
|
|
|
/**
|
|
|
* Get the default locale to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "defaultLocale",
|
|
|
get: function get() {
|
|
|
return defaultLocale;
|
|
|
}
|
|
|
/**
|
|
|
* Set the default locale to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
,
|
|
|
set: function set(locale) {
|
|
|
defaultLocale = locale;
|
|
|
}
|
|
|
/**
|
|
|
* Get the default numbering system to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "defaultNumberingSystem",
|
|
|
get: function get() {
|
|
|
return defaultNumberingSystem;
|
|
|
}
|
|
|
/**
|
|
|
* Set the default numbering system to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
,
|
|
|
set: function set(numberingSystem) {
|
|
|
defaultNumberingSystem = numberingSystem;
|
|
|
}
|
|
|
/**
|
|
|
* Get the default output calendar to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "defaultOutputCalendar",
|
|
|
get: function get() {
|
|
|
return defaultOutputCalendar;
|
|
|
}
|
|
|
/**
|
|
|
* Set the default output calendar to create DateTimes with. Does not affect existing instances.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
,
|
|
|
set: function set(outputCalendar) {
|
|
|
defaultOutputCalendar = outputCalendar;
|
|
|
}
|
|
|
/**
|
|
|
* Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "throwOnInvalid",
|
|
|
get: function get() {
|
|
|
return throwOnInvalid;
|
|
|
}
|
|
|
/**
|
|
|
* Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
,
|
|
|
set: function set(t) {
|
|
|
throwOnInvalid = t;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Settings;
|
|
|
}();
|
|
|
|
|
|
var intlDTCache = {};
|
|
|
|
|
|
function getCachedDTF(locString, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var key = JSON.stringify([locString, opts]);
|
|
|
var dtf = intlDTCache[key];
|
|
|
|
|
|
if (!dtf) {
|
|
|
dtf = new Intl.DateTimeFormat(locString, opts);
|
|
|
intlDTCache[key] = dtf;
|
|
|
}
|
|
|
|
|
|
return dtf;
|
|
|
}
|
|
|
|
|
|
var intlNumCache = {};
|
|
|
|
|
|
function getCachedINF(locString, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var key = JSON.stringify([locString, opts]);
|
|
|
var inf = intlNumCache[key];
|
|
|
|
|
|
if (!inf) {
|
|
|
inf = new Intl.NumberFormat(locString, opts);
|
|
|
intlNumCache[key] = inf;
|
|
|
}
|
|
|
|
|
|
return inf;
|
|
|
}
|
|
|
|
|
|
var intlRelCache = {};
|
|
|
|
|
|
function getCachedRTF(locString, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _opts = opts;
|
|
|
_opts.base;
|
|
|
var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, ["base"]); // exclude `base` from the options
|
|
|
|
|
|
|
|
|
var key = JSON.stringify([locString, cacheKeyOpts]);
|
|
|
var inf = intlRelCache[key];
|
|
|
|
|
|
if (!inf) {
|
|
|
inf = new Intl.RelativeTimeFormat(locString, opts);
|
|
|
intlRelCache[key] = inf;
|
|
|
}
|
|
|
|
|
|
return inf;
|
|
|
}
|
|
|
|
|
|
var sysLocaleCache = null;
|
|
|
|
|
|
function systemLocale() {
|
|
|
if (sysLocaleCache) {
|
|
|
return sysLocaleCache;
|
|
|
} else if (hasIntl()) {
|
|
|
var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale; // node sometimes defaults to "und". Override that because that is dumb
|
|
|
|
|
|
sysLocaleCache = !computedSys || computedSys === "und" ? "en-US" : computedSys;
|
|
|
return sysLocaleCache;
|
|
|
} else {
|
|
|
sysLocaleCache = "en-US";
|
|
|
return sysLocaleCache;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function parseLocaleString(localeStr) {
|
|
|
// I really want to avoid writing a BCP 47 parser
|
|
|
// see, e.g. https://github.com/wooorm/bcp-47
|
|
|
// Instead, we'll do this:
|
|
|
// a) if the string has no -u extensions, just leave it alone
|
|
|
// b) if it does, use Intl to resolve everything
|
|
|
// c) if Intl fails, try again without the -u
|
|
|
var uIndex = localeStr.indexOf("-u-");
|
|
|
|
|
|
if (uIndex === -1) {
|
|
|
return [localeStr];
|
|
|
} else {
|
|
|
var options;
|
|
|
var smaller = localeStr.substring(0, uIndex);
|
|
|
|
|
|
try {
|
|
|
options = getCachedDTF(localeStr).resolvedOptions();
|
|
|
} catch (e) {
|
|
|
options = getCachedDTF(smaller).resolvedOptions();
|
|
|
}
|
|
|
|
|
|
var _options = options,
|
|
|
numberingSystem = _options.numberingSystem,
|
|
|
calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it
|
|
|
|
|
|
return [smaller, numberingSystem, calendar];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function intlConfigString(localeStr, numberingSystem, outputCalendar) {
|
|
|
if (hasIntl()) {
|
|
|
if (outputCalendar || numberingSystem) {
|
|
|
localeStr += "-u";
|
|
|
|
|
|
if (outputCalendar) {
|
|
|
localeStr += "-ca-" + outputCalendar;
|
|
|
}
|
|
|
|
|
|
if (numberingSystem) {
|
|
|
localeStr += "-nu-" + numberingSystem;
|
|
|
}
|
|
|
|
|
|
return localeStr;
|
|
|
} else {
|
|
|
return localeStr;
|
|
|
}
|
|
|
} else {
|
|
|
return [];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mapMonths(f) {
|
|
|
var ms = [];
|
|
|
|
|
|
for (var i = 1; i <= 12; i++) {
|
|
|
var dt = DateTime.utc(2016, i, 1);
|
|
|
ms.push(f(dt));
|
|
|
}
|
|
|
|
|
|
return ms;
|
|
|
}
|
|
|
|
|
|
function mapWeekdays(f) {
|
|
|
var ms = [];
|
|
|
|
|
|
for (var i = 1; i <= 7; i++) {
|
|
|
var dt = DateTime.utc(2016, 11, 13 + i);
|
|
|
ms.push(f(dt));
|
|
|
}
|
|
|
|
|
|
return ms;
|
|
|
}
|
|
|
|
|
|
function listStuff(loc, length, defaultOK, englishFn, intlFn) {
|
|
|
var mode = loc.listingMode(defaultOK);
|
|
|
|
|
|
if (mode === "error") {
|
|
|
return null;
|
|
|
} else if (mode === "en") {
|
|
|
return englishFn(length);
|
|
|
} else {
|
|
|
return intlFn(length);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function supportsFastNumbers(loc) {
|
|
|
if (loc.numberingSystem && loc.numberingSystem !== "latn") {
|
|
|
return false;
|
|
|
} else {
|
|
|
return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn";
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var PolyNumberFormatter = /*#__PURE__*/function () {
|
|
|
function PolyNumberFormatter(intl, forceSimple, opts) {
|
|
|
this.padTo = opts.padTo || 0;
|
|
|
this.floor = opts.floor || false;
|
|
|
|
|
|
if (!forceSimple && hasIntl()) {
|
|
|
var intlOpts = {
|
|
|
useGrouping: false
|
|
|
};
|
|
|
if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;
|
|
|
this.inf = getCachedINF(intl, intlOpts);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _proto = PolyNumberFormatter.prototype;
|
|
|
|
|
|
_proto.format = function format(i) {
|
|
|
if (this.inf) {
|
|
|
var fixed = this.floor ? Math.floor(i) : i;
|
|
|
return this.inf.format(fixed);
|
|
|
} else {
|
|
|
// to match the browser's numberformatter defaults
|
|
|
var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3);
|
|
|
|
|
|
return padStart$1(_fixed, this.padTo);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return PolyNumberFormatter;
|
|
|
}();
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var PolyDateFormatter = /*#__PURE__*/function () {
|
|
|
function PolyDateFormatter(dt, intl, opts) {
|
|
|
this.opts = opts;
|
|
|
this.hasIntl = hasIntl();
|
|
|
var z;
|
|
|
|
|
|
if (dt.zone.universal && this.hasIntl) {
|
|
|
// UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.
|
|
|
// That is why fixed-offset TZ is set to that unless it is:
|
|
|
// 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.
|
|
|
// 2. Unsupported by the browser:
|
|
|
// - some do not support Etc/
|
|
|
// - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata
|
|
|
var gmtOffset = -1 * (dt.offset / 60);
|
|
|
var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset;
|
|
|
var isOffsetZoneSupported = IANAZone.isValidZone(offsetZ);
|
|
|
|
|
|
if (dt.offset !== 0 && isOffsetZoneSupported) {
|
|
|
z = offsetZ;
|
|
|
this.dt = dt;
|
|
|
} else {
|
|
|
// Not all fixed-offset zones like Etc/+4:30 are present in tzdata.
|
|
|
// So we have to make do. Two cases:
|
|
|
// 1. The format options tell us to show the zone. We can't do that, so the best
|
|
|
// we can do is format the date in UTC.
|
|
|
// 2. The format options don't tell us to show the zone. Then we can adjust them
|
|
|
// the time and tell the formatter to show it to us in UTC, so that the time is right
|
|
|
// and the bad zone doesn't show up.
|
|
|
z = "UTC";
|
|
|
|
|
|
if (opts.timeZoneName) {
|
|
|
this.dt = dt;
|
|
|
} else {
|
|
|
this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);
|
|
|
}
|
|
|
}
|
|
|
} else if (dt.zone.type === "local") {
|
|
|
this.dt = dt;
|
|
|
} else {
|
|
|
this.dt = dt;
|
|
|
z = dt.zone.name;
|
|
|
}
|
|
|
|
|
|
if (this.hasIntl) {
|
|
|
var intlOpts = Object.assign({}, this.opts);
|
|
|
|
|
|
if (z) {
|
|
|
intlOpts.timeZone = z;
|
|
|
}
|
|
|
|
|
|
this.dtf = getCachedDTF(intl, intlOpts);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _proto2 = PolyDateFormatter.prototype;
|
|
|
|
|
|
_proto2.format = function format() {
|
|
|
if (this.hasIntl) {
|
|
|
return this.dtf.format(this.dt.toJSDate());
|
|
|
} else {
|
|
|
var tokenFormat = formatString(this.opts),
|
|
|
loc = Locale.create("en-US");
|
|
|
return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_proto2.formatToParts = function formatToParts() {
|
|
|
if (this.hasIntl && hasFormatToParts()) {
|
|
|
return this.dtf.formatToParts(this.dt.toJSDate());
|
|
|
} else {
|
|
|
// This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings
|
|
|
// and IMO it's too weird to have an uncanny valley like that
|
|
|
return [];
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_proto2.resolvedOptions = function resolvedOptions() {
|
|
|
if (this.hasIntl) {
|
|
|
return this.dtf.resolvedOptions();
|
|
|
} else {
|
|
|
return {
|
|
|
locale: "en-US",
|
|
|
numberingSystem: "latn",
|
|
|
outputCalendar: "gregory"
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return PolyDateFormatter;
|
|
|
}();
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var PolyRelFormatter = /*#__PURE__*/function () {
|
|
|
function PolyRelFormatter(intl, isEnglish, opts) {
|
|
|
this.opts = Object.assign({
|
|
|
style: "long"
|
|
|
}, opts);
|
|
|
|
|
|
if (!isEnglish && hasRelative()) {
|
|
|
this.rtf = getCachedRTF(intl, opts);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _proto3 = PolyRelFormatter.prototype;
|
|
|
|
|
|
_proto3.format = function format(count, unit) {
|
|
|
if (this.rtf) {
|
|
|
return this.rtf.format(count, unit);
|
|
|
} else {
|
|
|
return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long");
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_proto3.formatToParts = function formatToParts(count, unit) {
|
|
|
if (this.rtf) {
|
|
|
return this.rtf.formatToParts(count, unit);
|
|
|
} else {
|
|
|
return [];
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return PolyRelFormatter;
|
|
|
}();
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
var Locale = /*#__PURE__*/function () {
|
|
|
Locale.fromOpts = function fromOpts(opts) {
|
|
|
return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);
|
|
|
};
|
|
|
|
|
|
Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) {
|
|
|
if (defaultToEN === void 0) {
|
|
|
defaultToEN = false;
|
|
|
}
|
|
|
|
|
|
var specifiedLocale = locale || Settings.defaultLocale,
|
|
|
// the system locale is useful for human readable strings but annoying for parsing/formatting known formats
|
|
|
localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()),
|
|
|
numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,
|
|
|
outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;
|
|
|
return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);
|
|
|
};
|
|
|
|
|
|
Locale.resetCache = function resetCache() {
|
|
|
sysLocaleCache = null;
|
|
|
intlDTCache = {};
|
|
|
intlNumCache = {};
|
|
|
intlRelCache = {};
|
|
|
};
|
|
|
|
|
|
Locale.fromObject = function fromObject(_temp) {
|
|
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
|
locale = _ref.locale,
|
|
|
numberingSystem = _ref.numberingSystem,
|
|
|
outputCalendar = _ref.outputCalendar;
|
|
|
|
|
|
return Locale.create(locale, numberingSystem, outputCalendar);
|
|
|
};
|
|
|
|
|
|
function Locale(locale, numbering, outputCalendar, specifiedLocale) {
|
|
|
var _parseLocaleString = parseLocaleString(locale),
|
|
|
parsedLocale = _parseLocaleString[0],
|
|
|
parsedNumberingSystem = _parseLocaleString[1],
|
|
|
parsedOutputCalendar = _parseLocaleString[2];
|
|
|
|
|
|
this.locale = parsedLocale;
|
|
|
this.numberingSystem = numbering || parsedNumberingSystem || null;
|
|
|
this.outputCalendar = outputCalendar || parsedOutputCalendar || null;
|
|
|
this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);
|
|
|
this.weekdaysCache = {
|
|
|
format: {},
|
|
|
standalone: {}
|
|
|
};
|
|
|
this.monthsCache = {
|
|
|
format: {},
|
|
|
standalone: {}
|
|
|
};
|
|
|
this.meridiemCache = null;
|
|
|
this.eraCache = {};
|
|
|
this.specifiedLocale = specifiedLocale;
|
|
|
this.fastNumbersCached = null;
|
|
|
}
|
|
|
|
|
|
var _proto4 = Locale.prototype;
|
|
|
|
|
|
_proto4.listingMode = function listingMode(defaultOK) {
|
|
|
if (defaultOK === void 0) {
|
|
|
defaultOK = true;
|
|
|
}
|
|
|
|
|
|
var intl = hasIntl(),
|
|
|
hasFTP = intl && hasFormatToParts(),
|
|
|
isActuallyEn = this.isEnglish(),
|
|
|
hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory");
|
|
|
|
|
|
if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {
|
|
|
return "error";
|
|
|
} else if (!hasFTP || isActuallyEn && hasNoWeirdness) {
|
|
|
return "en";
|
|
|
} else {
|
|
|
return "intl";
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_proto4.clone = function clone(alts) {
|
|
|
if (!alts || Object.getOwnPropertyNames(alts).length === 0) {
|
|
|
return this;
|
|
|
} else {
|
|
|
return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_proto4.redefaultToEN = function redefaultToEN(alts) {
|
|
|
if (alts === void 0) {
|
|
|
alts = {};
|
|
|
}
|
|
|
|
|
|
return this.clone(Object.assign({}, alts, {
|
|
|
defaultToEN: true
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
_proto4.redefaultToSystem = function redefaultToSystem(alts) {
|
|
|
if (alts === void 0) {
|
|
|
alts = {};
|
|
|
}
|
|
|
|
|
|
return this.clone(Object.assign({}, alts, {
|
|
|
defaultToEN: false
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
_proto4.months = function months$1(length, format, defaultOK) {
|
|
|
var _this = this;
|
|
|
|
|
|
if (format === void 0) {
|
|
|
format = false;
|
|
|
}
|
|
|
|
|
|
if (defaultOK === void 0) {
|
|
|
defaultOK = true;
|
|
|
}
|
|
|
|
|
|
return listStuff(this, length, defaultOK, months, function () {
|
|
|
var intl = format ? {
|
|
|
month: length,
|
|
|
day: "numeric"
|
|
|
} : {
|
|
|
month: length
|
|
|
},
|
|
|
formatStr = format ? "format" : "standalone";
|
|
|
|
|
|
if (!_this.monthsCache[formatStr][length]) {
|
|
|
_this.monthsCache[formatStr][length] = mapMonths(function (dt) {
|
|
|
return _this.extract(dt, intl, "month");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return _this.monthsCache[formatStr][length];
|
|
|
});
|
|
|
};
|
|
|
|
|
|
_proto4.weekdays = function weekdays$1(length, format, defaultOK) {
|
|
|
var _this2 = this;
|
|
|
|
|
|
if (format === void 0) {
|
|
|
format = false;
|
|
|
}
|
|
|
|
|
|
if (defaultOK === void 0) {
|
|
|
defaultOK = true;
|
|
|
}
|
|
|
|
|
|
return listStuff(this, length, defaultOK, weekdays, function () {
|
|
|
var intl = format ? {
|
|
|
weekday: length,
|
|
|
year: "numeric",
|
|
|
month: "long",
|
|
|
day: "numeric"
|
|
|
} : {
|
|
|
weekday: length
|
|
|
},
|
|
|
formatStr = format ? "format" : "standalone";
|
|
|
|
|
|
if (!_this2.weekdaysCache[formatStr][length]) {
|
|
|
_this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) {
|
|
|
return _this2.extract(dt, intl, "weekday");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return _this2.weekdaysCache[formatStr][length];
|
|
|
});
|
|
|
};
|
|
|
|
|
|
_proto4.meridiems = function meridiems$1(defaultOK) {
|
|
|
var _this3 = this;
|
|
|
|
|
|
if (defaultOK === void 0) {
|
|
|
defaultOK = true;
|
|
|
}
|
|
|
|
|
|
return listStuff(this, undefined, defaultOK, function () {
|
|
|
return meridiems;
|
|
|
}, function () {
|
|
|
// In theory there could be aribitrary day periods. We're gonna assume there are exactly two
|
|
|
// for AM and PM. This is probably wrong, but it's makes parsing way easier.
|
|
|
if (!_this3.meridiemCache) {
|
|
|
var intl = {
|
|
|
hour: "numeric",
|
|
|
hour12: true
|
|
|
};
|
|
|
_this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) {
|
|
|
return _this3.extract(dt, intl, "dayperiod");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return _this3.meridiemCache;
|
|
|
});
|
|
|
};
|
|
|
|
|
|
_proto4.eras = function eras$1(length, defaultOK) {
|
|
|
var _this4 = this;
|
|
|
|
|
|
if (defaultOK === void 0) {
|
|
|
defaultOK = true;
|
|
|
}
|
|
|
|
|
|
return listStuff(this, length, defaultOK, eras, function () {
|
|
|
var intl = {
|
|
|
era: length
|
|
|
}; // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates
|
|
|
// to definitely enumerate them.
|
|
|
|
|
|
if (!_this4.eraCache[length]) {
|
|
|
_this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) {
|
|
|
return _this4.extract(dt, intl, "era");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return _this4.eraCache[length];
|
|
|
});
|
|
|
};
|
|
|
|
|
|
_proto4.extract = function extract(dt, intlOpts, field) {
|
|
|
var df = this.dtFormatter(dt, intlOpts),
|
|
|
results = df.formatToParts(),
|
|
|
matching = results.find(function (m) {
|
|
|
return m.type.toLowerCase() === field;
|
|
|
});
|
|
|
return matching ? matching.value : null;
|
|
|
};
|
|
|
|
|
|
_proto4.numberFormatter = function numberFormatter(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
// this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)
|
|
|
// (in contrast, the rest of the condition is used heavily)
|
|
|
return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);
|
|
|
};
|
|
|
|
|
|
_proto4.dtFormatter = function dtFormatter(dt, intlOpts) {
|
|
|
if (intlOpts === void 0) {
|
|
|
intlOpts = {};
|
|
|
}
|
|
|
|
|
|
return new PolyDateFormatter(dt, this.intl, intlOpts);
|
|
|
};
|
|
|
|
|
|
_proto4.relFormatter = function relFormatter(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return new PolyRelFormatter(this.intl, this.isEnglish(), opts);
|
|
|
};
|
|
|
|
|
|
_proto4.isEnglish = function isEnglish() {
|
|
|
return this.locale === "en" || this.locale.toLowerCase() === "en-us" || hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us");
|
|
|
};
|
|
|
|
|
|
_proto4.equals = function equals(other) {
|
|
|
return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar;
|
|
|
};
|
|
|
|
|
|
_createClass(Locale, [{
|
|
|
key: "fastNumbers",
|
|
|
get: function get() {
|
|
|
if (this.fastNumbersCached == null) {
|
|
|
this.fastNumbersCached = supportsFastNumbers(this);
|
|
|
}
|
|
|
|
|
|
return this.fastNumbersCached;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Locale;
|
|
|
}();
|
|
|
|
|
|
/*
|
|
|
* This file handles parsing for well-specified formats. Here's how it works:
|
|
|
* Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.
|
|
|
* An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object
|
|
|
* parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.
|
|
|
* Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors.
|
|
|
* combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.
|
|
|
* Some extractions are super dumb and simpleParse and fromStrings help DRY them.
|
|
|
*/
|
|
|
|
|
|
function combineRegexes() {
|
|
|
for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
regexes[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
var full = regexes.reduce(function (f, r) {
|
|
|
return f + r.source;
|
|
|
}, "");
|
|
|
return RegExp("^" + full + "$");
|
|
|
}
|
|
|
|
|
|
function combineExtractors() {
|
|
|
for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
extractors[_key2] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
return function (m) {
|
|
|
return extractors.reduce(function (_ref, ex) {
|
|
|
var mergedVals = _ref[0],
|
|
|
mergedZone = _ref[1],
|
|
|
cursor = _ref[2];
|
|
|
|
|
|
var _ex = ex(m, cursor),
|
|
|
val = _ex[0],
|
|
|
zone = _ex[1],
|
|
|
next = _ex[2];
|
|
|
|
|
|
return [Object.assign(mergedVals, val), mergedZone || zone, next];
|
|
|
}, [{}, null, 1]).slice(0, 2);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function parse$1(s) {
|
|
|
if (s == null) {
|
|
|
return [null, null];
|
|
|
}
|
|
|
|
|
|
for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
|
|
|
patterns[_key3 - 1] = arguments[_key3];
|
|
|
}
|
|
|
|
|
|
for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) {
|
|
|
var _patterns$_i = _patterns[_i],
|
|
|
regex = _patterns$_i[0],
|
|
|
extractor = _patterns$_i[1];
|
|
|
var m = regex.exec(s);
|
|
|
|
|
|
if (m) {
|
|
|
return extractor(m);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return [null, null];
|
|
|
}
|
|
|
|
|
|
function simpleParse() {
|
|
|
for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
|
keys[_key4] = arguments[_key4];
|
|
|
}
|
|
|
|
|
|
return function (match, cursor) {
|
|
|
var ret = {};
|
|
|
var i;
|
|
|
|
|
|
for (i = 0; i < keys.length; i++) {
|
|
|
ret[keys[i]] = parseInteger(match[cursor + i]);
|
|
|
}
|
|
|
|
|
|
return [ret, null, cursor + i];
|
|
|
};
|
|
|
} // ISO and SQL parsing
|
|
|
|
|
|
|
|
|
var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/,
|
|
|
isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/,
|
|
|
isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + offsetRegex.source + "?"),
|
|
|
isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"),
|
|
|
isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,
|
|
|
isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/,
|
|
|
isoOrdinalRegex = /(\d{4})-?(\d{3})/,
|
|
|
extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"),
|
|
|
extractISOOrdinalData = simpleParse("year", "ordinal"),
|
|
|
sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/,
|
|
|
// dumbed-down version of the ISO one
|
|
|
sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"),
|
|
|
sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?");
|
|
|
|
|
|
function int(match, pos, fallback) {
|
|
|
var m = match[pos];
|
|
|
return isUndefined(m) ? fallback : parseInteger(m);
|
|
|
}
|
|
|
|
|
|
function extractISOYmd(match, cursor) {
|
|
|
var item = {
|
|
|
year: int(match, cursor),
|
|
|
month: int(match, cursor + 1, 1),
|
|
|
day: int(match, cursor + 2, 1)
|
|
|
};
|
|
|
return [item, null, cursor + 3];
|
|
|
}
|
|
|
|
|
|
function extractISOTime(match, cursor) {
|
|
|
var item = {
|
|
|
hours: int(match, cursor, 0),
|
|
|
minutes: int(match, cursor + 1, 0),
|
|
|
seconds: int(match, cursor + 2, 0),
|
|
|
milliseconds: parseMillis(match[cursor + 3])
|
|
|
};
|
|
|
return [item, null, cursor + 4];
|
|
|
}
|
|
|
|
|
|
function extractISOOffset(match, cursor) {
|
|
|
var local = !match[cursor] && !match[cursor + 1],
|
|
|
fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),
|
|
|
zone = local ? null : FixedOffsetZone.instance(fullOffset);
|
|
|
return [{}, zone, cursor + 3];
|
|
|
}
|
|
|
|
|
|
function extractIANAZone(match, cursor) {
|
|
|
var zone = match[cursor] ? IANAZone.create(match[cursor]) : null;
|
|
|
return [{}, zone, cursor + 1];
|
|
|
} // ISO time parsing
|
|
|
|
|
|
|
|
|
var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); // ISO duration parsing
|
|
|
|
|
|
var isoDuration = /^-?P(?:(?:(-?\d{1,9})Y)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})W)?(?:(-?\d{1,9})D)?(?:T(?:(-?\d{1,9})H)?(?:(-?\d{1,9})M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/;
|
|
|
|
|
|
function extractISODuration(match) {
|
|
|
var s = match[0],
|
|
|
yearStr = match[1],
|
|
|
monthStr = match[2],
|
|
|
weekStr = match[3],
|
|
|
dayStr = match[4],
|
|
|
hourStr = match[5],
|
|
|
minuteStr = match[6],
|
|
|
secondStr = match[7],
|
|
|
millisecondsStr = match[8];
|
|
|
var hasNegativePrefix = s[0] === "-";
|
|
|
var negativeSeconds = secondStr && secondStr[0] === "-";
|
|
|
|
|
|
var maybeNegate = function maybeNegate(num, force) {
|
|
|
if (force === void 0) {
|
|
|
force = false;
|
|
|
}
|
|
|
|
|
|
return num !== undefined && (force || num && hasNegativePrefix) ? -num : num;
|
|
|
};
|
|
|
|
|
|
return [{
|
|
|
years: maybeNegate(parseInteger(yearStr)),
|
|
|
months: maybeNegate(parseInteger(monthStr)),
|
|
|
weeks: maybeNegate(parseInteger(weekStr)),
|
|
|
days: maybeNegate(parseInteger(dayStr)),
|
|
|
hours: maybeNegate(parseInteger(hourStr)),
|
|
|
minutes: maybeNegate(parseInteger(minuteStr)),
|
|
|
seconds: maybeNegate(parseInteger(secondStr), secondStr === "-0"),
|
|
|
milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds)
|
|
|
}];
|
|
|
} // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York
|
|
|
// and not just that we're in -240 *right now*. But since I don't think these are used that often
|
|
|
// I'm just going to ignore that
|
|
|
|
|
|
|
|
|
var obsOffsets = {
|
|
|
GMT: 0,
|
|
|
EDT: -4 * 60,
|
|
|
EST: -5 * 60,
|
|
|
CDT: -5 * 60,
|
|
|
CST: -6 * 60,
|
|
|
MDT: -6 * 60,
|
|
|
MST: -7 * 60,
|
|
|
PDT: -7 * 60,
|
|
|
PST: -8 * 60
|
|
|
};
|
|
|
|
|
|
function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
|
|
|
var result = {
|
|
|
year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),
|
|
|
month: monthsShort.indexOf(monthStr) + 1,
|
|
|
day: parseInteger(dayStr),
|
|
|
hour: parseInteger(hourStr),
|
|
|
minute: parseInteger(minuteStr)
|
|
|
};
|
|
|
if (secondStr) result.second = parseInteger(secondStr);
|
|
|
|
|
|
if (weekdayStr) {
|
|
|
result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1;
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
} // RFC 2822/5322
|
|
|
|
|
|
|
|
|
var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;
|
|
|
|
|
|
function extractRFC2822(match) {
|
|
|
var weekdayStr = match[1],
|
|
|
dayStr = match[2],
|
|
|
monthStr = match[3],
|
|
|
yearStr = match[4],
|
|
|
hourStr = match[5],
|
|
|
minuteStr = match[6],
|
|
|
secondStr = match[7],
|
|
|
obsOffset = match[8],
|
|
|
milOffset = match[9],
|
|
|
offHourStr = match[10],
|
|
|
offMinuteStr = match[11],
|
|
|
result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
|
|
|
var offset;
|
|
|
|
|
|
if (obsOffset) {
|
|
|
offset = obsOffsets[obsOffset];
|
|
|
} else if (milOffset) {
|
|
|
offset = 0;
|
|
|
} else {
|
|
|
offset = signedOffset(offHourStr, offMinuteStr);
|
|
|
}
|
|
|
|
|
|
return [result, new FixedOffsetZone(offset)];
|
|
|
}
|
|
|
|
|
|
function preprocessRFC2822(s) {
|
|
|
// Remove comments and folding whitespace and replace multiple-spaces with a single space
|
|
|
return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim();
|
|
|
} // http date
|
|
|
|
|
|
|
|
|
var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,
|
|
|
rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,
|
|
|
ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;
|
|
|
|
|
|
function extractRFC1123Or850(match) {
|
|
|
var weekdayStr = match[1],
|
|
|
dayStr = match[2],
|
|
|
monthStr = match[3],
|
|
|
yearStr = match[4],
|
|
|
hourStr = match[5],
|
|
|
minuteStr = match[6],
|
|
|
secondStr = match[7],
|
|
|
result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
|
|
|
return [result, FixedOffsetZone.utcInstance];
|
|
|
}
|
|
|
|
|
|
function extractASCII(match) {
|
|
|
var weekdayStr = match[1],
|
|
|
monthStr = match[2],
|
|
|
dayStr = match[3],
|
|
|
hourStr = match[4],
|
|
|
minuteStr = match[5],
|
|
|
secondStr = match[6],
|
|
|
yearStr = match[7],
|
|
|
result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);
|
|
|
return [result, FixedOffsetZone.utcInstance];
|
|
|
}
|
|
|
|
|
|
var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);
|
|
|
var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);
|
|
|
var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);
|
|
|
var isoTimeCombinedRegex = combineRegexes(isoTimeRegex);
|
|
|
var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset);
|
|
|
var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset);
|
|
|
var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset);
|
|
|
var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
function parseISODate(s) {
|
|
|
return parse$1(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]);
|
|
|
}
|
|
|
function parseRFC2822Date(s) {
|
|
|
return parse$1(preprocessRFC2822(s), [rfc2822, extractRFC2822]);
|
|
|
}
|
|
|
function parseHTTPDate(s) {
|
|
|
return parse$1(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]);
|
|
|
}
|
|
|
function parseISODuration(s) {
|
|
|
return parse$1(s, [isoDuration, extractISODuration]);
|
|
|
}
|
|
|
var extractISOTimeOnly = combineExtractors(extractISOTime);
|
|
|
function parseISOTimeOnly(s) {
|
|
|
return parse$1(s, [isoTimeOnly, extractISOTimeOnly]);
|
|
|
}
|
|
|
var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);
|
|
|
var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);
|
|
|
var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone);
|
|
|
var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone);
|
|
|
function parseSQL(s) {
|
|
|
return parse$1(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]);
|
|
|
}
|
|
|
|
|
|
var INVALID = "Invalid Duration"; // unit conversion constants
|
|
|
|
|
|
var lowOrderMatrix = {
|
|
|
weeks: {
|
|
|
days: 7,
|
|
|
hours: 7 * 24,
|
|
|
minutes: 7 * 24 * 60,
|
|
|
seconds: 7 * 24 * 60 * 60,
|
|
|
milliseconds: 7 * 24 * 60 * 60 * 1000
|
|
|
},
|
|
|
days: {
|
|
|
hours: 24,
|
|
|
minutes: 24 * 60,
|
|
|
seconds: 24 * 60 * 60,
|
|
|
milliseconds: 24 * 60 * 60 * 1000
|
|
|
},
|
|
|
hours: {
|
|
|
minutes: 60,
|
|
|
seconds: 60 * 60,
|
|
|
milliseconds: 60 * 60 * 1000
|
|
|
},
|
|
|
minutes: {
|
|
|
seconds: 60,
|
|
|
milliseconds: 60 * 1000
|
|
|
},
|
|
|
seconds: {
|
|
|
milliseconds: 1000
|
|
|
}
|
|
|
},
|
|
|
casualMatrix = Object.assign({
|
|
|
years: {
|
|
|
quarters: 4,
|
|
|
months: 12,
|
|
|
weeks: 52,
|
|
|
days: 365,
|
|
|
hours: 365 * 24,
|
|
|
minutes: 365 * 24 * 60,
|
|
|
seconds: 365 * 24 * 60 * 60,
|
|
|
milliseconds: 365 * 24 * 60 * 60 * 1000
|
|
|
},
|
|
|
quarters: {
|
|
|
months: 3,
|
|
|
weeks: 13,
|
|
|
days: 91,
|
|
|
hours: 91 * 24,
|
|
|
minutes: 91 * 24 * 60,
|
|
|
seconds: 91 * 24 * 60 * 60,
|
|
|
milliseconds: 91 * 24 * 60 * 60 * 1000
|
|
|
},
|
|
|
months: {
|
|
|
weeks: 4,
|
|
|
days: 30,
|
|
|
hours: 30 * 24,
|
|
|
minutes: 30 * 24 * 60,
|
|
|
seconds: 30 * 24 * 60 * 60,
|
|
|
milliseconds: 30 * 24 * 60 * 60 * 1000
|
|
|
}
|
|
|
}, lowOrderMatrix),
|
|
|
daysInYearAccurate = 146097.0 / 400,
|
|
|
daysInMonthAccurate = 146097.0 / 4800,
|
|
|
accurateMatrix = Object.assign({
|
|
|
years: {
|
|
|
quarters: 4,
|
|
|
months: 12,
|
|
|
weeks: daysInYearAccurate / 7,
|
|
|
days: daysInYearAccurate,
|
|
|
hours: daysInYearAccurate * 24,
|
|
|
minutes: daysInYearAccurate * 24 * 60,
|
|
|
seconds: daysInYearAccurate * 24 * 60 * 60,
|
|
|
milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000
|
|
|
},
|
|
|
quarters: {
|
|
|
months: 3,
|
|
|
weeks: daysInYearAccurate / 28,
|
|
|
days: daysInYearAccurate / 4,
|
|
|
hours: daysInYearAccurate * 24 / 4,
|
|
|
minutes: daysInYearAccurate * 24 * 60 / 4,
|
|
|
seconds: daysInYearAccurate * 24 * 60 * 60 / 4,
|
|
|
milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4
|
|
|
},
|
|
|
months: {
|
|
|
weeks: daysInMonthAccurate / 7,
|
|
|
days: daysInMonthAccurate,
|
|
|
hours: daysInMonthAccurate * 24,
|
|
|
minutes: daysInMonthAccurate * 24 * 60,
|
|
|
seconds: daysInMonthAccurate * 24 * 60 * 60,
|
|
|
milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000
|
|
|
}
|
|
|
}, lowOrderMatrix); // units ordered by size
|
|
|
|
|
|
var orderedUnits = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"];
|
|
|
var reverseUnits = orderedUnits.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes"
|
|
|
|
|
|
function clone(dur, alts, clear) {
|
|
|
if (clear === void 0) {
|
|
|
clear = false;
|
|
|
}
|
|
|
|
|
|
// deep merge for vals
|
|
|
var conf = {
|
|
|
values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),
|
|
|
loc: dur.loc.clone(alts.loc),
|
|
|
conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy
|
|
|
};
|
|
|
return new Duration(conf);
|
|
|
}
|
|
|
|
|
|
function antiTrunc(n) {
|
|
|
return n < 0 ? Math.floor(n) : Math.ceil(n);
|
|
|
} // NB: mutates parameters
|
|
|
|
|
|
|
|
|
function convert(matrix, fromMap, fromUnit, toMap, toUnit) {
|
|
|
var conv = matrix[toUnit][fromUnit],
|
|
|
raw = fromMap[fromUnit] / conv,
|
|
|
sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),
|
|
|
// ok, so this is wild, but see the matrix in the tests
|
|
|
added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);
|
|
|
toMap[toUnit] += added;
|
|
|
fromMap[fromUnit] -= added * conv;
|
|
|
} // NB: mutates parameters
|
|
|
|
|
|
|
|
|
function normalizeValues(matrix, vals) {
|
|
|
reverseUnits.reduce(function (previous, current) {
|
|
|
if (!isUndefined(vals[current])) {
|
|
|
if (previous) {
|
|
|
convert(matrix, vals, previous, vals, current);
|
|
|
}
|
|
|
|
|
|
return current;
|
|
|
} else {
|
|
|
return previous;
|
|
|
}
|
|
|
}, null);
|
|
|
}
|
|
|
/**
|
|
|
* A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.
|
|
|
*
|
|
|
* Here is a brief overview of commonly used methods and getters in Duration:
|
|
|
*
|
|
|
* * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.
|
|
|
* * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.
|
|
|
* * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.
|
|
|
* * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.
|
|
|
* * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}
|
|
|
*
|
|
|
* There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var Duration = /*#__PURE__*/function () {
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
function Duration(config) {
|
|
|
var accurate = config.conversionAccuracy === "longterm" || false;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.values = config.values;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.loc = config.loc || Locale.create();
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.conversionAccuracy = accurate ? "longterm" : "casual";
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.invalid = config.invalid || null;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.matrix = accurate ? accurateMatrix : casualMatrix;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.isLuxonDuration = true;
|
|
|
}
|
|
|
/**
|
|
|
* Create Duration from a number of milliseconds.
|
|
|
* @param {number} count of milliseconds
|
|
|
* @param {Object} opts - options for parsing
|
|
|
* @param {string} [opts.locale='en-US'] - the locale to use
|
|
|
* @param {string} opts.numberingSystem - the numbering system to use
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
|
|
|
|
|
|
Duration.fromMillis = function fromMillis(count, opts) {
|
|
|
return Duration.fromObject(Object.assign({
|
|
|
milliseconds: count
|
|
|
}, opts));
|
|
|
}
|
|
|
/**
|
|
|
* Create a Duration from a JavaScript object with keys like 'years' and 'hours'.
|
|
|
* If this object is empty then a zero milliseconds duration is returned.
|
|
|
* @param {Object} obj - the object to create the DateTime from
|
|
|
* @param {number} obj.years
|
|
|
* @param {number} obj.quarters
|
|
|
* @param {number} obj.months
|
|
|
* @param {number} obj.weeks
|
|
|
* @param {number} obj.days
|
|
|
* @param {number} obj.hours
|
|
|
* @param {number} obj.minutes
|
|
|
* @param {number} obj.seconds
|
|
|
* @param {number} obj.milliseconds
|
|
|
* @param {string} [obj.locale='en-US'] - the locale to use
|
|
|
* @param {string} obj.numberingSystem - the numbering system to use
|
|
|
* @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.fromObject = function fromObject(obj) {
|
|
|
if (obj == null || typeof obj !== "object") {
|
|
|
throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj));
|
|
|
}
|
|
|
|
|
|
return new Duration({
|
|
|
values: normalizeObject(obj, Duration.normalizeUnit, ["locale", "numberingSystem", "conversionAccuracy", "zone" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this
|
|
|
]),
|
|
|
loc: Locale.fromObject(obj),
|
|
|
conversionAccuracy: obj.conversionAccuracy
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Create a Duration from an ISO 8601 duration string.
|
|
|
* @param {string} text - text to parse
|
|
|
* @param {Object} opts - options for parsing
|
|
|
* @param {string} [opts.locale='en-US'] - the locale to use
|
|
|
* @param {string} opts.numberingSystem - the numbering system to use
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Durations
|
|
|
* @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }
|
|
|
* @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }
|
|
|
* @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.fromISO = function fromISO(text, opts) {
|
|
|
var _parseISODuration = parseISODuration(text),
|
|
|
parsed = _parseISODuration[0];
|
|
|
|
|
|
if (parsed) {
|
|
|
var obj = Object.assign(parsed, opts);
|
|
|
return Duration.fromObject(obj);
|
|
|
} else {
|
|
|
return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601");
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create a Duration from an ISO 8601 time string.
|
|
|
* @param {string} text - text to parse
|
|
|
* @param {Object} opts - options for parsing
|
|
|
* @param {string} [opts.locale='en-US'] - the locale to use
|
|
|
* @param {string} opts.numberingSystem - the numbering system to use
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Times
|
|
|
* @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }
|
|
|
* @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
|
|
|
* @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
|
|
|
* @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
|
|
|
* @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.fromISOTime = function fromISOTime(text, opts) {
|
|
|
var _parseISOTimeOnly = parseISOTimeOnly(text),
|
|
|
parsed = _parseISOTimeOnly[0];
|
|
|
|
|
|
if (parsed) {
|
|
|
var obj = Object.assign(parsed, opts);
|
|
|
return Duration.fromObject(obj);
|
|
|
} else {
|
|
|
return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601");
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create an invalid Duration.
|
|
|
* @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent
|
|
|
* @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.invalid = function invalid(reason, explanation) {
|
|
|
if (explanation === void 0) {
|
|
|
explanation = null;
|
|
|
}
|
|
|
|
|
|
if (!reason) {
|
|
|
throw new InvalidArgumentError("need to specify a reason the Duration is invalid");
|
|
|
}
|
|
|
|
|
|
var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
|
|
|
|
|
|
if (Settings.throwOnInvalid) {
|
|
|
throw new InvalidDurationError(invalid);
|
|
|
} else {
|
|
|
return new Duration({
|
|
|
invalid: invalid
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.normalizeUnit = function normalizeUnit(unit) {
|
|
|
var normalized = {
|
|
|
year: "years",
|
|
|
years: "years",
|
|
|
quarter: "quarters",
|
|
|
quarters: "quarters",
|
|
|
month: "months",
|
|
|
months: "months",
|
|
|
week: "weeks",
|
|
|
weeks: "weeks",
|
|
|
day: "days",
|
|
|
days: "days",
|
|
|
hour: "hours",
|
|
|
hours: "hours",
|
|
|
minute: "minutes",
|
|
|
minutes: "minutes",
|
|
|
second: "seconds",
|
|
|
seconds: "seconds",
|
|
|
millisecond: "milliseconds",
|
|
|
milliseconds: "milliseconds"
|
|
|
}[unit ? unit.toLowerCase() : unit];
|
|
|
if (!normalized) throw new InvalidUnitError(unit);
|
|
|
return normalized;
|
|
|
}
|
|
|
/**
|
|
|
* Check if an object is a Duration. Works across context boundaries
|
|
|
* @param {object} o
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Duration.isDuration = function isDuration(o) {
|
|
|
return o && o.isLuxonDuration || false;
|
|
|
}
|
|
|
/**
|
|
|
* Get the locale of a Duration, such 'en-GB'
|
|
|
* @type {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
var _proto = Duration.prototype;
|
|
|
|
|
|
/**
|
|
|
* Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:
|
|
|
* * `S` for milliseconds
|
|
|
* * `s` for seconds
|
|
|
* * `m` for minutes
|
|
|
* * `h` for hours
|
|
|
* * `d` for days
|
|
|
* * `M` for months
|
|
|
* * `y` for years
|
|
|
* Notes:
|
|
|
* * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits
|
|
|
* * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.
|
|
|
* @param {string} fmt - the format string
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.floor=true] - floor numerical values
|
|
|
* @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2"
|
|
|
* @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002"
|
|
|
* @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000"
|
|
|
* @return {string}
|
|
|
*/
|
|
|
_proto.toFormat = function toFormat(fmt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
// reverse-compat since 1.2; we always round down now, never up, and we do it by default
|
|
|
var fmtOpts = Object.assign({}, opts, {
|
|
|
floor: opts.round !== false && opts.floor !== false
|
|
|
});
|
|
|
return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID;
|
|
|
}
|
|
|
/**
|
|
|
* Returns a JavaScript object with this Duration's values.
|
|
|
* @param opts - options for generating the object
|
|
|
* @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output
|
|
|
* @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }
|
|
|
* @return {Object}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toObject = function toObject(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return {};
|
|
|
var base = Object.assign({}, this.values);
|
|
|
|
|
|
if (opts.includeConfig) {
|
|
|
base.conversionAccuracy = this.conversionAccuracy;
|
|
|
base.numberingSystem = this.loc.numberingSystem;
|
|
|
base.locale = this.loc.locale;
|
|
|
}
|
|
|
|
|
|
return base;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this Duration.
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Durations
|
|
|
* @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'
|
|
|
* @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'
|
|
|
* @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'
|
|
|
* @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'
|
|
|
* @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISO = function toISO() {
|
|
|
// we could use the formatter, but this is an easier way to get the minimum string
|
|
|
if (!this.isValid) return null;
|
|
|
var s = "P";
|
|
|
if (this.years !== 0) s += this.years + "Y";
|
|
|
if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M";
|
|
|
if (this.weeks !== 0) s += this.weeks + "W";
|
|
|
if (this.days !== 0) s += this.days + "D";
|
|
|
if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T";
|
|
|
if (this.hours !== 0) s += this.hours + "H";
|
|
|
if (this.minutes !== 0) s += this.minutes + "M";
|
|
|
if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places
|
|
|
// https://stackoverflow.com/questions/588004/is-floating-point-math-broken
|
|
|
s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S";
|
|
|
if (s === "P") s += "T0S";
|
|
|
return s;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.
|
|
|
* Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Times
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0
|
|
|
* @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0
|
|
|
* @param {boolean} [opts.includePrefix=false] - include the `T` prefix
|
|
|
* @param {string} [opts.format='extended'] - choose between the basic and extended format
|
|
|
* @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'
|
|
|
* @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'
|
|
|
* @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'
|
|
|
* @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'
|
|
|
* @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISOTime = function toISOTime(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return null;
|
|
|
var millis = this.toMillis();
|
|
|
if (millis < 0 || millis >= 86400000) return null;
|
|
|
opts = Object.assign({
|
|
|
suppressMilliseconds: false,
|
|
|
suppressSeconds: false,
|
|
|
includePrefix: false,
|
|
|
format: "extended"
|
|
|
}, opts);
|
|
|
var value = this.shiftTo("hours", "minutes", "seconds", "milliseconds");
|
|
|
var fmt = opts.format === "basic" ? "hhmm" : "hh:mm";
|
|
|
|
|
|
if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {
|
|
|
fmt += opts.format === "basic" ? "ss" : ":ss";
|
|
|
|
|
|
if (!opts.suppressMilliseconds || value.milliseconds !== 0) {
|
|
|
fmt += ".SSS";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var str = value.toFormat(fmt);
|
|
|
|
|
|
if (opts.includePrefix) {
|
|
|
str = "T" + str;
|
|
|
}
|
|
|
|
|
|
return str;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601 representation of this Duration appropriate for use in JSON.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toJSON = function toJSON() {
|
|
|
return this.toISO();
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601 representation of this Duration appropriate for use in debugging.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toString = function toString() {
|
|
|
return this.toISO();
|
|
|
}
|
|
|
/**
|
|
|
* Returns an milliseconds value of this Duration.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toMillis = function toMillis() {
|
|
|
return this.as("milliseconds");
|
|
|
}
|
|
|
/**
|
|
|
* Returns an milliseconds value of this Duration. Alias of {@link toMillis}
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.valueOf = function valueOf() {
|
|
|
return this.toMillis();
|
|
|
}
|
|
|
/**
|
|
|
* Make this Duration longer by the specified amount. Return a newly-constructed Duration.
|
|
|
* @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.plus = function plus(duration) {
|
|
|
if (!this.isValid) return this;
|
|
|
var dur = friendlyDuration(duration),
|
|
|
result = {};
|
|
|
|
|
|
for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) {
|
|
|
var k = _step.value;
|
|
|
|
|
|
if (hasOwnProperty$1(dur.values, k) || hasOwnProperty$1(this.values, k)) {
|
|
|
result[k] = dur.get(k) + this.get(k);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return clone(this, {
|
|
|
values: result
|
|
|
}, true);
|
|
|
}
|
|
|
/**
|
|
|
* Make this Duration shorter by the specified amount. Return a newly-constructed Duration.
|
|
|
* @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.minus = function minus(duration) {
|
|
|
if (!this.isValid) return this;
|
|
|
var dur = friendlyDuration(duration);
|
|
|
return this.plus(dur.negate());
|
|
|
}
|
|
|
/**
|
|
|
* Scale this Duration by the specified amount. Return a newly-constructed Duration.
|
|
|
* @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.
|
|
|
* @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }
|
|
|
* @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.mapUnits = function mapUnits(fn) {
|
|
|
if (!this.isValid) return this;
|
|
|
var result = {};
|
|
|
|
|
|
for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) {
|
|
|
var k = _Object$keys[_i];
|
|
|
result[k] = asNumber(fn(this.values[k], k));
|
|
|
}
|
|
|
|
|
|
return clone(this, {
|
|
|
values: result
|
|
|
}, true);
|
|
|
}
|
|
|
/**
|
|
|
* Get the value of unit.
|
|
|
* @param {string} unit - a unit such as 'minute' or 'day'
|
|
|
* @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2
|
|
|
* @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0
|
|
|
* @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.get = function get(unit) {
|
|
|
return this[Duration.normalizeUnit(unit)];
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the values of specified units. Return a newly-constructed Duration.
|
|
|
* @param {Object} values - a mapping of units to numbers
|
|
|
* @example dur.set({ years: 2017 })
|
|
|
* @example dur.set({ hours: 8, minutes: 30 })
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.set = function set(values) {
|
|
|
if (!this.isValid) return this;
|
|
|
var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));
|
|
|
return clone(this, {
|
|
|
values: mixed
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration.
|
|
|
* @example dur.reconfigure({ locale: 'en-GB' })
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.reconfigure = function reconfigure(_temp) {
|
|
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
|
locale = _ref.locale,
|
|
|
numberingSystem = _ref.numberingSystem,
|
|
|
conversionAccuracy = _ref.conversionAccuracy;
|
|
|
|
|
|
var loc = this.loc.clone({
|
|
|
locale: locale,
|
|
|
numberingSystem: numberingSystem
|
|
|
}),
|
|
|
opts = {
|
|
|
loc: loc
|
|
|
};
|
|
|
|
|
|
if (conversionAccuracy) {
|
|
|
opts.conversionAccuracy = conversionAccuracy;
|
|
|
}
|
|
|
|
|
|
return clone(this, opts);
|
|
|
}
|
|
|
/**
|
|
|
* Return the length of the duration in the specified unit.
|
|
|
* @param {string} unit - a unit such as 'minutes' or 'days'
|
|
|
* @example Duration.fromObject({years: 1}).as('days') //=> 365
|
|
|
* @example Duration.fromObject({years: 1}).as('months') //=> 12
|
|
|
* @example Duration.fromObject({hours: 60}).as('days') //=> 2.5
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.as = function as(unit) {
|
|
|
return this.isValid ? this.shiftTo(unit).get(unit) : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Reduce this Duration to its canonical representation in its current units.
|
|
|
* @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }
|
|
|
* @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.normalize = function normalize() {
|
|
|
if (!this.isValid) return this;
|
|
|
var vals = this.toObject();
|
|
|
normalizeValues(this.matrix, vals);
|
|
|
return clone(this, {
|
|
|
values: vals
|
|
|
}, true);
|
|
|
}
|
|
|
/**
|
|
|
* Convert this Duration into its representation in a different set of units.
|
|
|
* @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.shiftTo = function shiftTo() {
|
|
|
for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
units[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return this;
|
|
|
|
|
|
if (units.length === 0) {
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
units = units.map(function (u) {
|
|
|
return Duration.normalizeUnit(u);
|
|
|
});
|
|
|
var built = {},
|
|
|
accumulated = {},
|
|
|
vals = this.toObject();
|
|
|
var lastUnit;
|
|
|
|
|
|
for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits), _step2; !(_step2 = _iterator2()).done;) {
|
|
|
var k = _step2.value;
|
|
|
|
|
|
if (units.indexOf(k) >= 0) {
|
|
|
lastUnit = k;
|
|
|
var own = 0; // anything we haven't boiled down yet should get boiled to this unit
|
|
|
|
|
|
for (var ak in accumulated) {
|
|
|
own += this.matrix[ak][k] * accumulated[ak];
|
|
|
accumulated[ak] = 0;
|
|
|
} // plus anything that's already in this unit
|
|
|
|
|
|
|
|
|
if (isNumber(vals[k])) {
|
|
|
own += vals[k];
|
|
|
}
|
|
|
|
|
|
var i = Math.trunc(own);
|
|
|
built[k] = i;
|
|
|
accumulated[k] = own - i; // we'd like to absorb these fractions in another unit
|
|
|
// plus anything further down the chain that should be rolled up in to this
|
|
|
|
|
|
for (var down in vals) {
|
|
|
if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {
|
|
|
convert(this.matrix, vals, down, built, k);
|
|
|
}
|
|
|
} // otherwise, keep it in the wings to boil it later
|
|
|
|
|
|
} else if (isNumber(vals[k])) {
|
|
|
accumulated[k] = vals[k];
|
|
|
}
|
|
|
} // anything leftover becomes the decimal for the last unit
|
|
|
// lastUnit must be defined since units is not empty
|
|
|
|
|
|
|
|
|
for (var key in accumulated) {
|
|
|
if (accumulated[key] !== 0) {
|
|
|
built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return clone(this, {
|
|
|
values: built
|
|
|
}, true).normalize();
|
|
|
}
|
|
|
/**
|
|
|
* Return the negative of this Duration.
|
|
|
* @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.negate = function negate() {
|
|
|
if (!this.isValid) return this;
|
|
|
var negated = {};
|
|
|
|
|
|
for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) {
|
|
|
var k = _Object$keys2[_i2];
|
|
|
negated[k] = -this.values[k];
|
|
|
}
|
|
|
|
|
|
return clone(this, {
|
|
|
values: negated
|
|
|
}, true);
|
|
|
}
|
|
|
/**
|
|
|
* Get the years.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
/**
|
|
|
* Equality check
|
|
|
* Two Durations are equal iff they have the same units and the same values for each unit.
|
|
|
* @param {Duration} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
_proto.equals = function equals(other) {
|
|
|
if (!this.isValid || !other.isValid) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (!this.loc.equals(other.loc)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function eq(v1, v2) {
|
|
|
// Consider 0 and undefined as equal
|
|
|
if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;
|
|
|
return v1 === v2;
|
|
|
}
|
|
|
|
|
|
for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits), _step3; !(_step3 = _iterator3()).done;) {
|
|
|
var u = _step3.value;
|
|
|
|
|
|
if (!eq(this.values[u], other.values[u])) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
};
|
|
|
|
|
|
_createClass(Duration, [{
|
|
|
key: "locale",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.loc.locale : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration
|
|
|
*
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "numberingSystem",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.loc.numberingSystem : null;
|
|
|
}
|
|
|
}, {
|
|
|
key: "years",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.years || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the quarters.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "quarters",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.quarters || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the months.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "months",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.months || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the weeks
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weeks",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.weeks || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the days.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "days",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.days || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the hours.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "hours",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.hours || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the minutes.
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "minutes",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.minutes || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the seconds.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "seconds",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.seconds || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the milliseconds.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "milliseconds",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.values.milliseconds || 0 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether the Duration is invalid. Invalid durations are returned by diff operations
|
|
|
* on invalid DateTimes or Intervals.
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return this.invalid === null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an error code if this Duration became invalid, or null if the Duration is valid
|
|
|
* @return {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidReason",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.reason : null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an explanation of why this Duration became invalid, or null if the Duration is valid
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidExplanation",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.explanation : null;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Duration;
|
|
|
}();
|
|
|
function friendlyDuration(durationish) {
|
|
|
if (isNumber(durationish)) {
|
|
|
return Duration.fromMillis(durationish);
|
|
|
} else if (Duration.isDuration(durationish)) {
|
|
|
return durationish;
|
|
|
} else if (typeof durationish === "object") {
|
|
|
return Duration.fromObject(durationish);
|
|
|
} else {
|
|
|
throw new InvalidArgumentError("Unknown duration argument " + durationish + " of type " + typeof durationish);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end
|
|
|
|
|
|
function validateStartEnd(start, end) {
|
|
|
if (!start || !start.isValid) {
|
|
|
return Interval.invalid("missing or invalid start");
|
|
|
} else if (!end || !end.isValid) {
|
|
|
return Interval.invalid("missing or invalid end");
|
|
|
} else if (end < start) {
|
|
|
return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO());
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.
|
|
|
*
|
|
|
* Here is a brief overview of the most commonly used methods and getters in Interval:
|
|
|
*
|
|
|
* * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.
|
|
|
* * **Accessors** Use {@link start} and {@link end} to get the start and end.
|
|
|
* * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.
|
|
|
* * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.
|
|
|
* * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}.
|
|
|
* * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var Interval = /*#__PURE__*/function () {
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
function Interval(config) {
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
this.s = config.start;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.e = config.end;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.invalid = config.invalid || null;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.isLuxonInterval = true;
|
|
|
}
|
|
|
/**
|
|
|
* Create an invalid Interval.
|
|
|
* @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent
|
|
|
* @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
|
|
|
|
|
|
Interval.invalid = function invalid(reason, explanation) {
|
|
|
if (explanation === void 0) {
|
|
|
explanation = null;
|
|
|
}
|
|
|
|
|
|
if (!reason) {
|
|
|
throw new InvalidArgumentError("need to specify a reason the Interval is invalid");
|
|
|
}
|
|
|
|
|
|
var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
|
|
|
|
|
|
if (Settings.throwOnInvalid) {
|
|
|
throw new InvalidIntervalError(invalid);
|
|
|
} else {
|
|
|
return new Interval({
|
|
|
invalid: invalid
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.
|
|
|
* @param {DateTime|Date|Object} start
|
|
|
* @param {DateTime|Date|Object} end
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.fromDateTimes = function fromDateTimes(start, end) {
|
|
|
var builtStart = friendlyDateTime(start),
|
|
|
builtEnd = friendlyDateTime(end);
|
|
|
var validateError = validateStartEnd(builtStart, builtEnd);
|
|
|
|
|
|
if (validateError == null) {
|
|
|
return new Interval({
|
|
|
start: builtStart,
|
|
|
end: builtEnd
|
|
|
});
|
|
|
} else {
|
|
|
return validateError;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create an Interval from a start DateTime and a Duration to extend to.
|
|
|
* @param {DateTime|Date|Object} start
|
|
|
* @param {Duration|Object|number} duration - the length of the Interval.
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.after = function after(start, duration) {
|
|
|
var dur = friendlyDuration(duration),
|
|
|
dt = friendlyDateTime(start);
|
|
|
return Interval.fromDateTimes(dt, dt.plus(dur));
|
|
|
}
|
|
|
/**
|
|
|
* Create an Interval from an end DateTime and a Duration to extend backwards to.
|
|
|
* @param {DateTime|Date|Object} end
|
|
|
* @param {Duration|Object|number} duration - the length of the Interval.
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.before = function before(end, duration) {
|
|
|
var dur = friendlyDuration(duration),
|
|
|
dt = friendlyDateTime(end);
|
|
|
return Interval.fromDateTimes(dt.minus(dur), dt);
|
|
|
}
|
|
|
/**
|
|
|
* Create an Interval from an ISO 8601 string.
|
|
|
* Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.
|
|
|
* @param {string} text - the ISO string to parse
|
|
|
* @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.fromISO = function fromISO(text, opts) {
|
|
|
var _split = (text || "").split("/", 2),
|
|
|
s = _split[0],
|
|
|
e = _split[1];
|
|
|
|
|
|
if (s && e) {
|
|
|
var start, startIsValid;
|
|
|
|
|
|
try {
|
|
|
start = DateTime.fromISO(s, opts);
|
|
|
startIsValid = start.isValid;
|
|
|
} catch (e) {
|
|
|
startIsValid = false;
|
|
|
}
|
|
|
|
|
|
var end, endIsValid;
|
|
|
|
|
|
try {
|
|
|
end = DateTime.fromISO(e, opts);
|
|
|
endIsValid = end.isValid;
|
|
|
} catch (e) {
|
|
|
endIsValid = false;
|
|
|
}
|
|
|
|
|
|
if (startIsValid && endIsValid) {
|
|
|
return Interval.fromDateTimes(start, end);
|
|
|
}
|
|
|
|
|
|
if (startIsValid) {
|
|
|
var dur = Duration.fromISO(e, opts);
|
|
|
|
|
|
if (dur.isValid) {
|
|
|
return Interval.after(start, dur);
|
|
|
}
|
|
|
} else if (endIsValid) {
|
|
|
var _dur = Duration.fromISO(s, opts);
|
|
|
|
|
|
if (_dur.isValid) {
|
|
|
return Interval.before(end, _dur);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601");
|
|
|
}
|
|
|
/**
|
|
|
* Check if an object is an Interval. Works across context boundaries
|
|
|
* @param {object} o
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.isInterval = function isInterval(o) {
|
|
|
return o && o.isLuxonInterval || false;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the start of the Interval
|
|
|
* @type {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
var _proto = Interval.prototype;
|
|
|
|
|
|
/**
|
|
|
* Returns the length of the Interval in the specified unit.
|
|
|
* @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
_proto.length = function length(unit) {
|
|
|
if (unit === void 0) {
|
|
|
unit = "milliseconds";
|
|
|
}
|
|
|
|
|
|
return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.
|
|
|
* Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'
|
|
|
* asks 'what dates are included in this interval?', not 'how many days long is this interval?'
|
|
|
* @param {string} [unit='milliseconds'] - the unit of time to count.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.count = function count(unit) {
|
|
|
if (unit === void 0) {
|
|
|
unit = "milliseconds";
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return NaN;
|
|
|
var start = this.start.startOf(unit),
|
|
|
end = this.end.startOf(unit);
|
|
|
return Math.floor(end.diff(start, unit).get(unit)) + 1;
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether this Interval's start and end are both in the same unit of time
|
|
|
* @param {string} unit - the unit of time to check sameness on
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.hasSame = function hasSame(unit) {
|
|
|
return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval has the same start and end DateTimes.
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.isEmpty = function isEmpty() {
|
|
|
return this.s.valueOf() === this.e.valueOf();
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval's start is after the specified DateTime.
|
|
|
* @param {DateTime} dateTime
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.isAfter = function isAfter(dateTime) {
|
|
|
if (!this.isValid) return false;
|
|
|
return this.s > dateTime;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval's end is before the specified DateTime.
|
|
|
* @param {DateTime} dateTime
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.isBefore = function isBefore(dateTime) {
|
|
|
if (!this.isValid) return false;
|
|
|
return this.e <= dateTime;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval contains the specified DateTime.
|
|
|
* @param {DateTime} dateTime
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.contains = function contains(dateTime) {
|
|
|
if (!this.isValid) return false;
|
|
|
return this.s <= dateTime && this.e > dateTime;
|
|
|
}
|
|
|
/**
|
|
|
* "Sets" the start and/or end dates. Returns a newly-constructed Interval.
|
|
|
* @param {Object} values - the values to set
|
|
|
* @param {DateTime} values.start - the starting DateTime
|
|
|
* @param {DateTime} values.end - the ending DateTime
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.set = function set(_temp) {
|
|
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
|
start = _ref.start,
|
|
|
end = _ref.end;
|
|
|
|
|
|
if (!this.isValid) return this;
|
|
|
return Interval.fromDateTimes(start || this.s, end || this.e);
|
|
|
}
|
|
|
/**
|
|
|
* Split this Interval at each of the specified DateTimes
|
|
|
* @param {...[DateTime]} dateTimes - the unit of time to count.
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.splitAt = function splitAt() {
|
|
|
var _this = this;
|
|
|
|
|
|
if (!this.isValid) return [];
|
|
|
|
|
|
for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
dateTimes[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
var sorted = dateTimes.map(friendlyDateTime).filter(function (d) {
|
|
|
return _this.contains(d);
|
|
|
}).sort(),
|
|
|
results = [];
|
|
|
var s = this.s,
|
|
|
i = 0;
|
|
|
|
|
|
while (s < this.e) {
|
|
|
var added = sorted[i] || this.e,
|
|
|
next = +added > +this.e ? this.e : added;
|
|
|
results.push(Interval.fromDateTimes(s, next));
|
|
|
s = next;
|
|
|
i += 1;
|
|
|
}
|
|
|
|
|
|
return results;
|
|
|
}
|
|
|
/**
|
|
|
* Split this Interval into smaller Intervals, each of the specified length.
|
|
|
* Left over time is grouped into a smaller interval
|
|
|
* @param {Duration|Object|number} duration - The length of each resulting interval.
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.splitBy = function splitBy(duration) {
|
|
|
var dur = friendlyDuration(duration);
|
|
|
|
|
|
if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) {
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
var s = this.s,
|
|
|
idx = 1,
|
|
|
next;
|
|
|
var results = [];
|
|
|
|
|
|
while (s < this.e) {
|
|
|
var added = this.start.plus(dur.mapUnits(function (x) {
|
|
|
return x * idx;
|
|
|
}));
|
|
|
next = +added > +this.e ? this.e : added;
|
|
|
results.push(Interval.fromDateTimes(s, next));
|
|
|
s = next;
|
|
|
idx += 1;
|
|
|
}
|
|
|
|
|
|
return results;
|
|
|
}
|
|
|
/**
|
|
|
* Split this Interval into the specified number of smaller intervals.
|
|
|
* @param {number} numberOfParts - The number of Intervals to divide the Interval into.
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.divideEqually = function divideEqually(numberOfParts) {
|
|
|
if (!this.isValid) return [];
|
|
|
return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval overlaps with the specified Interval
|
|
|
* @param {Interval} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.overlaps = function overlaps(other) {
|
|
|
return this.e > other.s && this.s < other.e;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval's end is adjacent to the specified Interval's start.
|
|
|
* @param {Interval} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.abutsStart = function abutsStart(other) {
|
|
|
if (!this.isValid) return false;
|
|
|
return +this.e === +other.s;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval's start is adjacent to the specified Interval's end.
|
|
|
* @param {Interval} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.abutsEnd = function abutsEnd(other) {
|
|
|
if (!this.isValid) return false;
|
|
|
return +other.e === +this.s;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval engulfs the start and end of the specified Interval.
|
|
|
* @param {Interval} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.engulfs = function engulfs(other) {
|
|
|
if (!this.isValid) return false;
|
|
|
return this.s <= other.s && this.e >= other.e;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this Interval has the same start and end as the specified Interval.
|
|
|
* @param {Interval} other
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(other) {
|
|
|
if (!this.isValid || !other.isValid) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return this.s.equals(other.s) && this.e.equals(other.e);
|
|
|
}
|
|
|
/**
|
|
|
* Return an Interval representing the intersection of this Interval and the specified Interval.
|
|
|
* Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.
|
|
|
* Returns null if the intersection is empty, meaning, the intervals don't intersect.
|
|
|
* @param {Interval} other
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.intersection = function intersection(other) {
|
|
|
if (!this.isValid) return this;
|
|
|
var s = this.s > other.s ? this.s : other.s,
|
|
|
e = this.e < other.e ? this.e : other.e;
|
|
|
|
|
|
if (s >= e) {
|
|
|
return null;
|
|
|
} else {
|
|
|
return Interval.fromDateTimes(s, e);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Return an Interval representing the union of this Interval and the specified Interval.
|
|
|
* Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.
|
|
|
* @param {Interval} other
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.union = function union(other) {
|
|
|
if (!this.isValid) return this;
|
|
|
var s = this.s < other.s ? this.s : other.s,
|
|
|
e = this.e > other.e ? this.e : other.e;
|
|
|
return Interval.fromDateTimes(s, e);
|
|
|
}
|
|
|
/**
|
|
|
* Merge an array of Intervals into a equivalent minimal set of Intervals.
|
|
|
* Combines overlapping and adjacent Intervals.
|
|
|
* @param {[Interval]} intervals
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.merge = function merge(intervals) {
|
|
|
var _intervals$sort$reduc = intervals.sort(function (a, b) {
|
|
|
return a.s - b.s;
|
|
|
}).reduce(function (_ref2, item) {
|
|
|
var sofar = _ref2[0],
|
|
|
current = _ref2[1];
|
|
|
|
|
|
if (!current) {
|
|
|
return [sofar, item];
|
|
|
} else if (current.overlaps(item) || current.abutsStart(item)) {
|
|
|
return [sofar, current.union(item)];
|
|
|
} else {
|
|
|
return [sofar.concat([current]), item];
|
|
|
}
|
|
|
}, [[], null]),
|
|
|
found = _intervals$sort$reduc[0],
|
|
|
final = _intervals$sort$reduc[1];
|
|
|
|
|
|
if (final) {
|
|
|
found.push(final);
|
|
|
}
|
|
|
|
|
|
return found;
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.
|
|
|
* @param {[Interval]} intervals
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Interval.xor = function xor(intervals) {
|
|
|
var _Array$prototype;
|
|
|
|
|
|
var start = null,
|
|
|
currentCount = 0;
|
|
|
|
|
|
var results = [],
|
|
|
ends = intervals.map(function (i) {
|
|
|
return [{
|
|
|
time: i.s,
|
|
|
type: "s"
|
|
|
}, {
|
|
|
time: i.e,
|
|
|
type: "e"
|
|
|
}];
|
|
|
}),
|
|
|
flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends),
|
|
|
arr = flattened.sort(function (a, b) {
|
|
|
return a.time - b.time;
|
|
|
});
|
|
|
|
|
|
for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) {
|
|
|
var i = _step.value;
|
|
|
currentCount += i.type === "s" ? 1 : -1;
|
|
|
|
|
|
if (currentCount === 1) {
|
|
|
start = i.time;
|
|
|
} else {
|
|
|
if (start && +start !== +i.time) {
|
|
|
results.push(Interval.fromDateTimes(start, i.time));
|
|
|
}
|
|
|
|
|
|
start = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return Interval.merge(results);
|
|
|
}
|
|
|
/**
|
|
|
* Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.
|
|
|
* @param {...Interval} intervals
|
|
|
* @return {[Interval]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.difference = function difference() {
|
|
|
var _this2 = this;
|
|
|
|
|
|
for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
intervals[_key2] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
return Interval.xor([this].concat(intervals)).map(function (i) {
|
|
|
return _this2.intersection(i);
|
|
|
}).filter(function (i) {
|
|
|
return i && !i.isEmpty();
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this Interval appropriate for debugging.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toString = function toString() {
|
|
|
if (!this.isValid) return INVALID$1;
|
|
|
return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")";
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this Interval.
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
|
|
|
* @param {Object} opts - The same options as {@link DateTime.toISO}
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISO = function toISO(opts) {
|
|
|
if (!this.isValid) return INVALID$1;
|
|
|
return this.s.toISO(opts) + "/" + this.e.toISO(opts);
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of date of this Interval.
|
|
|
* The time components are ignored.
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISODate = function toISODate() {
|
|
|
if (!this.isValid) return INVALID$1;
|
|
|
return this.s.toISODate() + "/" + this.e.toISODate();
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of time of this Interval.
|
|
|
* The date components are ignored.
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
|
|
|
* @param {Object} opts - The same options as {@link DateTime.toISO}
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISOTime = function toISOTime(opts) {
|
|
|
if (!this.isValid) return INVALID$1;
|
|
|
return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts);
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this Interval formatted according to the specified format string.
|
|
|
* @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toFormat = function toFormat(dateFormat, _temp2) {
|
|
|
var _ref3 = _temp2 === void 0 ? {} : _temp2,
|
|
|
_ref3$separator = _ref3.separator,
|
|
|
separator = _ref3$separator === void 0 ? " – " : _ref3$separator;
|
|
|
|
|
|
if (!this.isValid) return INVALID$1;
|
|
|
return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat);
|
|
|
}
|
|
|
/**
|
|
|
* Return a Duration representing the time spanned by this interval.
|
|
|
* @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.
|
|
|
* @param {Object} opts - options that affect the creation of the Duration
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toDuration = function toDuration(unit, opts) {
|
|
|
if (!this.isValid) {
|
|
|
return Duration.invalid(this.invalidReason);
|
|
|
}
|
|
|
|
|
|
return this.e.diff(this.s, unit, opts);
|
|
|
}
|
|
|
/**
|
|
|
* Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes
|
|
|
* @param {function} mapFn
|
|
|
* @return {Interval}
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())
|
|
|
* @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.mapEndpoints = function mapEndpoints(mapFn) {
|
|
|
return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));
|
|
|
};
|
|
|
|
|
|
_createClass(Interval, [{
|
|
|
key: "start",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.s : null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the end of the Interval
|
|
|
* @type {DateTime}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "end",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.e : null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return this.invalidReason === null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an error code if this Interval is invalid, or null if the Interval is valid
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidReason",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.reason : null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an explanation of why this Interval became invalid, or null if the Interval is valid
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidExplanation",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.explanation : null;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return Interval;
|
|
|
}();
|
|
|
|
|
|
/**
|
|
|
* The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.
|
|
|
*/
|
|
|
|
|
|
var Info = /*#__PURE__*/function () {
|
|
|
function Info() {}
|
|
|
|
|
|
/**
|
|
|
* Return whether the specified zone contains a DST.
|
|
|
* @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
Info.hasDST = function hasDST(zone) {
|
|
|
if (zone === void 0) {
|
|
|
zone = Settings.defaultZone;
|
|
|
}
|
|
|
|
|
|
var proto = DateTime.now().setZone(zone).set({
|
|
|
month: 12
|
|
|
});
|
|
|
return !zone.universal && proto.offset !== proto.set({
|
|
|
month: 6
|
|
|
}).offset;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether the specified zone is a valid IANA specifier.
|
|
|
* @param {string} zone - Zone to check
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.isValidIANAZone = function isValidIANAZone(zone) {
|
|
|
return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);
|
|
|
}
|
|
|
/**
|
|
|
* Converts the input into a {@link Zone} instance.
|
|
|
*
|
|
|
* * If `input` is already a Zone instance, it is returned unchanged.
|
|
|
* * If `input` is a string containing a valid time zone name, a Zone instance
|
|
|
* with that name is returned.
|
|
|
* * If `input` is a string that doesn't refer to a known time zone, a Zone
|
|
|
* instance with {@link Zone.isValid} == false is returned.
|
|
|
* * If `input is a number, a Zone instance with the specified fixed offset
|
|
|
* in minutes is returned.
|
|
|
* * If `input` is `null` or `undefined`, the default zone is returned.
|
|
|
* @param {string|Zone|number} [input] - the value to be converted
|
|
|
* @return {Zone}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.normalizeZone = function normalizeZone$1(input) {
|
|
|
return normalizeZone(input, Settings.defaultZone);
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of standalone month names.
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
|
|
|
* @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long"
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale] - the locale code
|
|
|
* @param {string} [opts.numberingSystem=null] - the numbering system
|
|
|
* @param {string} [opts.locObj=null] - an existing locale object to use
|
|
|
* @param {string} [opts.outputCalendar='gregory'] - the calendar
|
|
|
* @example Info.months()[0] //=> 'January'
|
|
|
* @example Info.months('short')[0] //=> 'Jan'
|
|
|
* @example Info.months('numeric')[0] //=> '1'
|
|
|
* @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'
|
|
|
* @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'
|
|
|
* @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.months = function months(length, _temp) {
|
|
|
if (length === void 0) {
|
|
|
length = "long";
|
|
|
}
|
|
|
|
|
|
var _ref = _temp === void 0 ? {} : _temp,
|
|
|
_ref$locale = _ref.locale,
|
|
|
locale = _ref$locale === void 0 ? null : _ref$locale,
|
|
|
_ref$numberingSystem = _ref.numberingSystem,
|
|
|
numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem,
|
|
|
_ref$locObj = _ref.locObj,
|
|
|
locObj = _ref$locObj === void 0 ? null : _ref$locObj,
|
|
|
_ref$outputCalendar = _ref.outputCalendar,
|
|
|
outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar;
|
|
|
|
|
|
return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of format month names.
|
|
|
* Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that
|
|
|
* changes the string.
|
|
|
* See {@link months}
|
|
|
* @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long"
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale] - the locale code
|
|
|
* @param {string} [opts.numberingSystem=null] - the numbering system
|
|
|
* @param {string} [opts.locObj=null] - an existing locale object to use
|
|
|
* @param {string} [opts.outputCalendar='gregory'] - the calendar
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.monthsFormat = function monthsFormat(length, _temp2) {
|
|
|
if (length === void 0) {
|
|
|
length = "long";
|
|
|
}
|
|
|
|
|
|
var _ref2 = _temp2 === void 0 ? {} : _temp2,
|
|
|
_ref2$locale = _ref2.locale,
|
|
|
locale = _ref2$locale === void 0 ? null : _ref2$locale,
|
|
|
_ref2$numberingSystem = _ref2.numberingSystem,
|
|
|
numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem,
|
|
|
_ref2$locObj = _ref2.locObj,
|
|
|
locObj = _ref2$locObj === void 0 ? null : _ref2$locObj,
|
|
|
_ref2$outputCalendar = _ref2.outputCalendar,
|
|
|
outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar;
|
|
|
|
|
|
return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of standalone week names.
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
|
|
|
* @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long".
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale] - the locale code
|
|
|
* @param {string} [opts.numberingSystem=null] - the numbering system
|
|
|
* @param {string} [opts.locObj=null] - an existing locale object to use
|
|
|
* @example Info.weekdays()[0] //=> 'Monday'
|
|
|
* @example Info.weekdays('short')[0] //=> 'Mon'
|
|
|
* @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'
|
|
|
* @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.weekdays = function weekdays(length, _temp3) {
|
|
|
if (length === void 0) {
|
|
|
length = "long";
|
|
|
}
|
|
|
|
|
|
var _ref3 = _temp3 === void 0 ? {} : _temp3,
|
|
|
_ref3$locale = _ref3.locale,
|
|
|
locale = _ref3$locale === void 0 ? null : _ref3$locale,
|
|
|
_ref3$numberingSystem = _ref3.numberingSystem,
|
|
|
numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem,
|
|
|
_ref3$locObj = _ref3.locObj,
|
|
|
locObj = _ref3$locObj === void 0 ? null : _ref3$locObj;
|
|
|
|
|
|
return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of format week names.
|
|
|
* Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that
|
|
|
* changes the string.
|
|
|
* See {@link weekdays}
|
|
|
* @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long".
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale=null] - the locale code
|
|
|
* @param {string} [opts.numberingSystem=null] - the numbering system
|
|
|
* @param {string} [opts.locObj=null] - an existing locale object to use
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.weekdaysFormat = function weekdaysFormat(length, _temp4) {
|
|
|
if (length === void 0) {
|
|
|
length = "long";
|
|
|
}
|
|
|
|
|
|
var _ref4 = _temp4 === void 0 ? {} : _temp4,
|
|
|
_ref4$locale = _ref4.locale,
|
|
|
locale = _ref4$locale === void 0 ? null : _ref4$locale,
|
|
|
_ref4$numberingSystem = _ref4.numberingSystem,
|
|
|
numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem,
|
|
|
_ref4$locObj = _ref4.locObj,
|
|
|
locObj = _ref4$locObj === void 0 ? null : _ref4$locObj;
|
|
|
|
|
|
return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of meridiems.
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale] - the locale code
|
|
|
* @example Info.meridiems() //=> [ 'AM', 'PM' ]
|
|
|
* @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.meridiems = function meridiems(_temp5) {
|
|
|
var _ref5 = _temp5 === void 0 ? {} : _temp5,
|
|
|
_ref5$locale = _ref5.locale,
|
|
|
locale = _ref5$locale === void 0 ? null : _ref5$locale;
|
|
|
|
|
|
return Locale.create(locale).meridiems();
|
|
|
}
|
|
|
/**
|
|
|
* Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.
|
|
|
* @param {string} [length='short'] - the length of the era representation, such as "short" or "long".
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.locale] - the locale code
|
|
|
* @example Info.eras() //=> [ 'BC', 'AD' ]
|
|
|
* @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]
|
|
|
* @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]
|
|
|
* @return {[string]}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.eras = function eras(length, _temp6) {
|
|
|
if (length === void 0) {
|
|
|
length = "short";
|
|
|
}
|
|
|
|
|
|
var _ref6 = _temp6 === void 0 ? {} : _temp6,
|
|
|
_ref6$locale = _ref6.locale,
|
|
|
locale = _ref6$locale === void 0 ? null : _ref6$locale;
|
|
|
|
|
|
return Locale.create(locale, null, "gregory").eras(length);
|
|
|
}
|
|
|
/**
|
|
|
* Return the set of available features in this environment.
|
|
|
* Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.
|
|
|
* Keys:
|
|
|
* * `zones`: whether this environment supports IANA timezones
|
|
|
* * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing
|
|
|
* * `intl`: whether this environment supports general internationalization
|
|
|
* * `relative`: whether this environment supports relative time formatting
|
|
|
* @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }
|
|
|
* @return {Object}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
Info.features = function features() {
|
|
|
var intl = false,
|
|
|
intlTokens = false,
|
|
|
zones = false,
|
|
|
relative = false;
|
|
|
|
|
|
if (hasIntl()) {
|
|
|
intl = true;
|
|
|
intlTokens = hasFormatToParts();
|
|
|
relative = hasRelative();
|
|
|
|
|
|
try {
|
|
|
zones = new Intl.DateTimeFormat("en", {
|
|
|
timeZone: "America/New_York"
|
|
|
}).resolvedOptions().timeZone === "America/New_York";
|
|
|
} catch (e) {
|
|
|
zones = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
intl: intl,
|
|
|
intlTokens: intlTokens,
|
|
|
zones: zones,
|
|
|
relative: relative
|
|
|
};
|
|
|
};
|
|
|
|
|
|
return Info;
|
|
|
}();
|
|
|
|
|
|
function dayDiff(earlier, later) {
|
|
|
var utcDayStart = function utcDayStart(dt) {
|
|
|
return dt.toUTC(0, {
|
|
|
keepLocalTime: true
|
|
|
}).startOf("day").valueOf();
|
|
|
},
|
|
|
ms = utcDayStart(later) - utcDayStart(earlier);
|
|
|
|
|
|
return Math.floor(Duration.fromMillis(ms).as("days"));
|
|
|
}
|
|
|
|
|
|
function highOrderDiffs(cursor, later, units) {
|
|
|
var differs = [["years", function (a, b) {
|
|
|
return b.year - a.year;
|
|
|
}], ["quarters", function (a, b) {
|
|
|
return b.quarter - a.quarter;
|
|
|
}], ["months", function (a, b) {
|
|
|
return b.month - a.month + (b.year - a.year) * 12;
|
|
|
}], ["weeks", function (a, b) {
|
|
|
var days = dayDiff(a, b);
|
|
|
return (days - days % 7) / 7;
|
|
|
}], ["days", dayDiff]];
|
|
|
var results = {};
|
|
|
var lowestOrder, highWater;
|
|
|
|
|
|
for (var _i = 0, _differs = differs; _i < _differs.length; _i++) {
|
|
|
var _differs$_i = _differs[_i],
|
|
|
unit = _differs$_i[0],
|
|
|
differ = _differs$_i[1];
|
|
|
|
|
|
if (units.indexOf(unit) >= 0) {
|
|
|
var _cursor$plus;
|
|
|
|
|
|
lowestOrder = unit;
|
|
|
var delta = differ(cursor, later);
|
|
|
highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus));
|
|
|
|
|
|
if (highWater > later) {
|
|
|
var _cursor$plus2;
|
|
|
|
|
|
cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2));
|
|
|
delta -= 1;
|
|
|
} else {
|
|
|
cursor = highWater;
|
|
|
}
|
|
|
|
|
|
results[unit] = delta;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return [cursor, results, highWater, lowestOrder];
|
|
|
}
|
|
|
|
|
|
function _diff (earlier, later, units, opts) {
|
|
|
var _highOrderDiffs = highOrderDiffs(earlier, later, units),
|
|
|
cursor = _highOrderDiffs[0],
|
|
|
results = _highOrderDiffs[1],
|
|
|
highWater = _highOrderDiffs[2],
|
|
|
lowestOrder = _highOrderDiffs[3];
|
|
|
|
|
|
var remainingMillis = later - cursor;
|
|
|
var lowerOrderUnits = units.filter(function (u) {
|
|
|
return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0;
|
|
|
});
|
|
|
|
|
|
if (lowerOrderUnits.length === 0) {
|
|
|
if (highWater < later) {
|
|
|
var _cursor$plus3;
|
|
|
|
|
|
highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3));
|
|
|
}
|
|
|
|
|
|
if (highWater !== cursor) {
|
|
|
results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var duration = Duration.fromObject(Object.assign(results, opts));
|
|
|
|
|
|
if (lowerOrderUnits.length > 0) {
|
|
|
var _Duration$fromMillis;
|
|
|
|
|
|
return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration);
|
|
|
} else {
|
|
|
return duration;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var numberingSystems = {
|
|
|
arab: "[\u0660-\u0669]",
|
|
|
arabext: "[\u06F0-\u06F9]",
|
|
|
bali: "[\u1B50-\u1B59]",
|
|
|
beng: "[\u09E6-\u09EF]",
|
|
|
deva: "[\u0966-\u096F]",
|
|
|
fullwide: "[\uFF10-\uFF19]",
|
|
|
gujr: "[\u0AE6-\u0AEF]",
|
|
|
hanidec: "[〇|一|二|三|四|五|六|七|八|九]",
|
|
|
khmr: "[\u17E0-\u17E9]",
|
|
|
knda: "[\u0CE6-\u0CEF]",
|
|
|
laoo: "[\u0ED0-\u0ED9]",
|
|
|
limb: "[\u1946-\u194F]",
|
|
|
mlym: "[\u0D66-\u0D6F]",
|
|
|
mong: "[\u1810-\u1819]",
|
|
|
mymr: "[\u1040-\u1049]",
|
|
|
orya: "[\u0B66-\u0B6F]",
|
|
|
tamldec: "[\u0BE6-\u0BEF]",
|
|
|
telu: "[\u0C66-\u0C6F]",
|
|
|
thai: "[\u0E50-\u0E59]",
|
|
|
tibt: "[\u0F20-\u0F29]",
|
|
|
latn: "\\d"
|
|
|
};
|
|
|
var numberingSystemsUTF16 = {
|
|
|
arab: [1632, 1641],
|
|
|
arabext: [1776, 1785],
|
|
|
bali: [6992, 7001],
|
|
|
beng: [2534, 2543],
|
|
|
deva: [2406, 2415],
|
|
|
fullwide: [65296, 65303],
|
|
|
gujr: [2790, 2799],
|
|
|
khmr: [6112, 6121],
|
|
|
knda: [3302, 3311],
|
|
|
laoo: [3792, 3801],
|
|
|
limb: [6470, 6479],
|
|
|
mlym: [3430, 3439],
|
|
|
mong: [6160, 6169],
|
|
|
mymr: [4160, 4169],
|
|
|
orya: [2918, 2927],
|
|
|
tamldec: [3046, 3055],
|
|
|
telu: [3174, 3183],
|
|
|
thai: [3664, 3673],
|
|
|
tibt: [3872, 3881]
|
|
|
}; // eslint-disable-next-line
|
|
|
|
|
|
var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split("");
|
|
|
function parseDigits(str) {
|
|
|
var value = parseInt(str, 10);
|
|
|
|
|
|
if (isNaN(value)) {
|
|
|
value = "";
|
|
|
|
|
|
for (var i = 0; i < str.length; i++) {
|
|
|
var code = str.charCodeAt(i);
|
|
|
|
|
|
if (str[i].search(numberingSystems.hanidec) !== -1) {
|
|
|
value += hanidecChars.indexOf(str[i]);
|
|
|
} else {
|
|
|
for (var key in numberingSystemsUTF16) {
|
|
|
var _numberingSystemsUTF = numberingSystemsUTF16[key],
|
|
|
min = _numberingSystemsUTF[0],
|
|
|
max = _numberingSystemsUTF[1];
|
|
|
|
|
|
if (code >= min && code <= max) {
|
|
|
value += code - min;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return parseInt(value, 10);
|
|
|
} else {
|
|
|
return value;
|
|
|
}
|
|
|
}
|
|
|
function digitRegex(_ref, append) {
|
|
|
var numberingSystem = _ref.numberingSystem;
|
|
|
|
|
|
if (append === void 0) {
|
|
|
append = "";
|
|
|
}
|
|
|
|
|
|
return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append);
|
|
|
}
|
|
|
|
|
|
var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support";
|
|
|
|
|
|
function intUnit(regex, post) {
|
|
|
if (post === void 0) {
|
|
|
post = function post(i) {
|
|
|
return i;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
regex: regex,
|
|
|
deser: function deser(_ref) {
|
|
|
var s = _ref[0];
|
|
|
return post(parseDigits(s));
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var NBSP = String.fromCharCode(160);
|
|
|
var spaceOrNBSP = "( |" + NBSP + ")";
|
|
|
var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g");
|
|
|
|
|
|
function fixListRegex(s) {
|
|
|
// make dots optional and also make them literal
|
|
|
// make space and non breakable space characters interchangeable
|
|
|
return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP);
|
|
|
}
|
|
|
|
|
|
function stripInsensitivities(s) {
|
|
|
return s.replace(/\./g, "") // ignore dots that were made optional
|
|
|
.replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp
|
|
|
.toLowerCase();
|
|
|
}
|
|
|
|
|
|
function oneOf(strings, startIndex) {
|
|
|
if (strings === null) {
|
|
|
return null;
|
|
|
} else {
|
|
|
return {
|
|
|
regex: RegExp(strings.map(fixListRegex).join("|")),
|
|
|
deser: function deser(_ref2) {
|
|
|
var s = _ref2[0];
|
|
|
return strings.findIndex(function (i) {
|
|
|
return stripInsensitivities(s) === stripInsensitivities(i);
|
|
|
}) + startIndex;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function offset(regex, groups) {
|
|
|
return {
|
|
|
regex: regex,
|
|
|
deser: function deser(_ref3) {
|
|
|
var h = _ref3[1],
|
|
|
m = _ref3[2];
|
|
|
return signedOffset(h, m);
|
|
|
},
|
|
|
groups: groups
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function simple(regex) {
|
|
|
return {
|
|
|
regex: regex,
|
|
|
deser: function deser(_ref4) {
|
|
|
var s = _ref4[0];
|
|
|
return s;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function escapeToken(value) {
|
|
|
// eslint-disable-next-line no-useless-escape
|
|
|
return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
|
|
|
}
|
|
|
|
|
|
function unitForToken(token, loc) {
|
|
|
var one = digitRegex(loc),
|
|
|
two = digitRegex(loc, "{2}"),
|
|
|
three = digitRegex(loc, "{3}"),
|
|
|
four = digitRegex(loc, "{4}"),
|
|
|
six = digitRegex(loc, "{6}"),
|
|
|
oneOrTwo = digitRegex(loc, "{1,2}"),
|
|
|
oneToThree = digitRegex(loc, "{1,3}"),
|
|
|
oneToSix = digitRegex(loc, "{1,6}"),
|
|
|
oneToNine = digitRegex(loc, "{1,9}"),
|
|
|
twoToFour = digitRegex(loc, "{2,4}"),
|
|
|
fourToSix = digitRegex(loc, "{4,6}"),
|
|
|
literal = function literal(t) {
|
|
|
return {
|
|
|
regex: RegExp(escapeToken(t.val)),
|
|
|
deser: function deser(_ref5) {
|
|
|
var s = _ref5[0];
|
|
|
return s;
|
|
|
},
|
|
|
literal: true
|
|
|
};
|
|
|
},
|
|
|
unitate = function unitate(t) {
|
|
|
if (token.literal) {
|
|
|
return literal(t);
|
|
|
}
|
|
|
|
|
|
switch (t.val) {
|
|
|
// era
|
|
|
case "G":
|
|
|
return oneOf(loc.eras("short", false), 0);
|
|
|
|
|
|
case "GG":
|
|
|
return oneOf(loc.eras("long", false), 0);
|
|
|
// years
|
|
|
|
|
|
case "y":
|
|
|
return intUnit(oneToSix);
|
|
|
|
|
|
case "yy":
|
|
|
return intUnit(twoToFour, untruncateYear);
|
|
|
|
|
|
case "yyyy":
|
|
|
return intUnit(four);
|
|
|
|
|
|
case "yyyyy":
|
|
|
return intUnit(fourToSix);
|
|
|
|
|
|
case "yyyyyy":
|
|
|
return intUnit(six);
|
|
|
// months
|
|
|
|
|
|
case "M":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "MM":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "MMM":
|
|
|
return oneOf(loc.months("short", true, false), 1);
|
|
|
|
|
|
case "MMMM":
|
|
|
return oneOf(loc.months("long", true, false), 1);
|
|
|
|
|
|
case "L":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "LL":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "LLL":
|
|
|
return oneOf(loc.months("short", false, false), 1);
|
|
|
|
|
|
case "LLLL":
|
|
|
return oneOf(loc.months("long", false, false), 1);
|
|
|
// dates
|
|
|
|
|
|
case "d":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "dd":
|
|
|
return intUnit(two);
|
|
|
// ordinals
|
|
|
|
|
|
case "o":
|
|
|
return intUnit(oneToThree);
|
|
|
|
|
|
case "ooo":
|
|
|
return intUnit(three);
|
|
|
// time
|
|
|
|
|
|
case "HH":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "H":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "hh":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "h":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "mm":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "m":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "q":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "qq":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "s":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "ss":
|
|
|
return intUnit(two);
|
|
|
|
|
|
case "S":
|
|
|
return intUnit(oneToThree);
|
|
|
|
|
|
case "SSS":
|
|
|
return intUnit(three);
|
|
|
|
|
|
case "u":
|
|
|
return simple(oneToNine);
|
|
|
// meridiem
|
|
|
|
|
|
case "a":
|
|
|
return oneOf(loc.meridiems(), 0);
|
|
|
// weekYear (k)
|
|
|
|
|
|
case "kkkk":
|
|
|
return intUnit(four);
|
|
|
|
|
|
case "kk":
|
|
|
return intUnit(twoToFour, untruncateYear);
|
|
|
// weekNumber (W)
|
|
|
|
|
|
case "W":
|
|
|
return intUnit(oneOrTwo);
|
|
|
|
|
|
case "WW":
|
|
|
return intUnit(two);
|
|
|
// weekdays
|
|
|
|
|
|
case "E":
|
|
|
case "c":
|
|
|
return intUnit(one);
|
|
|
|
|
|
case "EEE":
|
|
|
return oneOf(loc.weekdays("short", false, false), 1);
|
|
|
|
|
|
case "EEEE":
|
|
|
return oneOf(loc.weekdays("long", false, false), 1);
|
|
|
|
|
|
case "ccc":
|
|
|
return oneOf(loc.weekdays("short", true, false), 1);
|
|
|
|
|
|
case "cccc":
|
|
|
return oneOf(loc.weekdays("long", true, false), 1);
|
|
|
// offset/zone
|
|
|
|
|
|
case "Z":
|
|
|
case "ZZ":
|
|
|
return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2);
|
|
|
|
|
|
case "ZZZ":
|
|
|
return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2);
|
|
|
// we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing
|
|
|
// because we don't have any way to figure out what they are
|
|
|
|
|
|
case "z":
|
|
|
return simple(/[a-z_+-/]{1,256}?/i);
|
|
|
|
|
|
default:
|
|
|
return literal(t);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var unit = unitate(token) || {
|
|
|
invalidReason: MISSING_FTP
|
|
|
};
|
|
|
unit.token = token;
|
|
|
return unit;
|
|
|
}
|
|
|
|
|
|
var partTypeStyleToTokenVal = {
|
|
|
year: {
|
|
|
"2-digit": "yy",
|
|
|
numeric: "yyyyy"
|
|
|
},
|
|
|
month: {
|
|
|
numeric: "M",
|
|
|
"2-digit": "MM",
|
|
|
short: "MMM",
|
|
|
long: "MMMM"
|
|
|
},
|
|
|
day: {
|
|
|
numeric: "d",
|
|
|
"2-digit": "dd"
|
|
|
},
|
|
|
weekday: {
|
|
|
short: "EEE",
|
|
|
long: "EEEE"
|
|
|
},
|
|
|
dayperiod: "a",
|
|
|
dayPeriod: "a",
|
|
|
hour: {
|
|
|
numeric: "h",
|
|
|
"2-digit": "hh"
|
|
|
},
|
|
|
minute: {
|
|
|
numeric: "m",
|
|
|
"2-digit": "mm"
|
|
|
},
|
|
|
second: {
|
|
|
numeric: "s",
|
|
|
"2-digit": "ss"
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function tokenForPart(part, locale, formatOpts) {
|
|
|
var type = part.type,
|
|
|
value = part.value;
|
|
|
|
|
|
if (type === "literal") {
|
|
|
return {
|
|
|
literal: true,
|
|
|
val: value
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var style = formatOpts[type];
|
|
|
var val = partTypeStyleToTokenVal[type];
|
|
|
|
|
|
if (typeof val === "object") {
|
|
|
val = val[style];
|
|
|
}
|
|
|
|
|
|
if (val) {
|
|
|
return {
|
|
|
literal: false,
|
|
|
val: val
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return undefined;
|
|
|
}
|
|
|
|
|
|
function buildRegex(units) {
|
|
|
var re = units.map(function (u) {
|
|
|
return u.regex;
|
|
|
}).reduce(function (f, r) {
|
|
|
return f + "(" + r.source + ")";
|
|
|
}, "");
|
|
|
return ["^" + re + "$", units];
|
|
|
}
|
|
|
|
|
|
function match(input, regex, handlers) {
|
|
|
var matches = input.match(regex);
|
|
|
|
|
|
if (matches) {
|
|
|
var all = {};
|
|
|
var matchIndex = 1;
|
|
|
|
|
|
for (var i in handlers) {
|
|
|
if (hasOwnProperty$1(handlers, i)) {
|
|
|
var h = handlers[i],
|
|
|
groups = h.groups ? h.groups + 1 : 1;
|
|
|
|
|
|
if (!h.literal && h.token) {
|
|
|
all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));
|
|
|
}
|
|
|
|
|
|
matchIndex += groups;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return [matches, all];
|
|
|
} else {
|
|
|
return [matches, {}];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function dateTimeFromMatches(matches) {
|
|
|
var toField = function toField(token) {
|
|
|
switch (token) {
|
|
|
case "S":
|
|
|
return "millisecond";
|
|
|
|
|
|
case "s":
|
|
|
return "second";
|
|
|
|
|
|
case "m":
|
|
|
return "minute";
|
|
|
|
|
|
case "h":
|
|
|
case "H":
|
|
|
return "hour";
|
|
|
|
|
|
case "d":
|
|
|
return "day";
|
|
|
|
|
|
case "o":
|
|
|
return "ordinal";
|
|
|
|
|
|
case "L":
|
|
|
case "M":
|
|
|
return "month";
|
|
|
|
|
|
case "y":
|
|
|
return "year";
|
|
|
|
|
|
case "E":
|
|
|
case "c":
|
|
|
return "weekday";
|
|
|
|
|
|
case "W":
|
|
|
return "weekNumber";
|
|
|
|
|
|
case "k":
|
|
|
return "weekYear";
|
|
|
|
|
|
case "q":
|
|
|
return "quarter";
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var zone;
|
|
|
|
|
|
if (!isUndefined(matches.Z)) {
|
|
|
zone = new FixedOffsetZone(matches.Z);
|
|
|
} else if (!isUndefined(matches.z)) {
|
|
|
zone = IANAZone.create(matches.z);
|
|
|
} else {
|
|
|
zone = null;
|
|
|
}
|
|
|
|
|
|
if (!isUndefined(matches.q)) {
|
|
|
matches.M = (matches.q - 1) * 3 + 1;
|
|
|
}
|
|
|
|
|
|
if (!isUndefined(matches.h)) {
|
|
|
if (matches.h < 12 && matches.a === 1) {
|
|
|
matches.h += 12;
|
|
|
} else if (matches.h === 12 && matches.a === 0) {
|
|
|
matches.h = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (matches.G === 0 && matches.y) {
|
|
|
matches.y = -matches.y;
|
|
|
}
|
|
|
|
|
|
if (!isUndefined(matches.u)) {
|
|
|
matches.S = parseMillis(matches.u);
|
|
|
}
|
|
|
|
|
|
var vals = Object.keys(matches).reduce(function (r, k) {
|
|
|
var f = toField(k);
|
|
|
|
|
|
if (f) {
|
|
|
r[f] = matches[k];
|
|
|
}
|
|
|
|
|
|
return r;
|
|
|
}, {});
|
|
|
return [vals, zone];
|
|
|
}
|
|
|
|
|
|
var dummyDateTimeCache = null;
|
|
|
|
|
|
function getDummyDateTime() {
|
|
|
if (!dummyDateTimeCache) {
|
|
|
dummyDateTimeCache = DateTime.fromMillis(1555555555555);
|
|
|
}
|
|
|
|
|
|
return dummyDateTimeCache;
|
|
|
}
|
|
|
|
|
|
function maybeExpandMacroToken(token, locale) {
|
|
|
if (token.literal) {
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
var formatOpts = Formatter.macroTokenToFormatOpts(token.val);
|
|
|
|
|
|
if (!formatOpts) {
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
var formatter = Formatter.create(locale, formatOpts);
|
|
|
var parts = formatter.formatDateTimeParts(getDummyDateTime());
|
|
|
var tokens = parts.map(function (p) {
|
|
|
return tokenForPart(p, locale, formatOpts);
|
|
|
});
|
|
|
|
|
|
if (tokens.includes(undefined)) {
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
return tokens;
|
|
|
}
|
|
|
|
|
|
function expandMacroTokens(tokens, locale) {
|
|
|
var _Array$prototype;
|
|
|
|
|
|
return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) {
|
|
|
return maybeExpandMacroToken(t, locale);
|
|
|
}));
|
|
|
}
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
function explainFromTokens(locale, input, format) {
|
|
|
var tokens = expandMacroTokens(Formatter.parseFormat(format), locale),
|
|
|
units = tokens.map(function (t) {
|
|
|
return unitForToken(t, locale);
|
|
|
}),
|
|
|
disqualifyingUnit = units.find(function (t) {
|
|
|
return t.invalidReason;
|
|
|
});
|
|
|
|
|
|
if (disqualifyingUnit) {
|
|
|
return {
|
|
|
input: input,
|
|
|
tokens: tokens,
|
|
|
invalidReason: disqualifyingUnit.invalidReason
|
|
|
};
|
|
|
} else {
|
|
|
var _buildRegex = buildRegex(units),
|
|
|
regexString = _buildRegex[0],
|
|
|
handlers = _buildRegex[1],
|
|
|
regex = RegExp(regexString, "i"),
|
|
|
_match = match(input, regex, handlers),
|
|
|
rawMatches = _match[0],
|
|
|
matches = _match[1],
|
|
|
_ref6 = matches ? dateTimeFromMatches(matches) : [null, null],
|
|
|
result = _ref6[0],
|
|
|
zone = _ref6[1];
|
|
|
|
|
|
if (hasOwnProperty$1(matches, "a") && hasOwnProperty$1(matches, "H")) {
|
|
|
throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format");
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
input: input,
|
|
|
tokens: tokens,
|
|
|
regex: regex,
|
|
|
rawMatches: rawMatches,
|
|
|
matches: matches,
|
|
|
result: result,
|
|
|
zone: zone
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
function parseFromTokens(locale, input, format) {
|
|
|
var _explainFromTokens = explainFromTokens(locale, input, format),
|
|
|
result = _explainFromTokens.result,
|
|
|
zone = _explainFromTokens.zone,
|
|
|
invalidReason = _explainFromTokens.invalidReason;
|
|
|
|
|
|
return [result, zone, invalidReason];
|
|
|
}
|
|
|
|
|
|
var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
|
|
|
leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];
|
|
|
|
|
|
function unitOutOfRange(unit, value) {
|
|
|
return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid");
|
|
|
}
|
|
|
|
|
|
function dayOfWeek(year, month, day) {
|
|
|
var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();
|
|
|
return js === 0 ? 7 : js;
|
|
|
}
|
|
|
|
|
|
function computeOrdinal(year, month, day) {
|
|
|
return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];
|
|
|
}
|
|
|
|
|
|
function uncomputeOrdinal(year, ordinal) {
|
|
|
var table = isLeapYear(year) ? leapLadder : nonLeapLadder,
|
|
|
month0 = table.findIndex(function (i) {
|
|
|
return i < ordinal;
|
|
|
}),
|
|
|
day = ordinal - table[month0];
|
|
|
return {
|
|
|
month: month0 + 1,
|
|
|
day: day
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* @private
|
|
|
*/
|
|
|
|
|
|
|
|
|
function gregorianToWeek(gregObj) {
|
|
|
var year = gregObj.year,
|
|
|
month = gregObj.month,
|
|
|
day = gregObj.day,
|
|
|
ordinal = computeOrdinal(year, month, day),
|
|
|
weekday = dayOfWeek(year, month, day);
|
|
|
var weekNumber = Math.floor((ordinal - weekday + 10) / 7),
|
|
|
weekYear;
|
|
|
|
|
|
if (weekNumber < 1) {
|
|
|
weekYear = year - 1;
|
|
|
weekNumber = weeksInWeekYear(weekYear);
|
|
|
} else if (weekNumber > weeksInWeekYear(year)) {
|
|
|
weekYear = year + 1;
|
|
|
weekNumber = 1;
|
|
|
} else {
|
|
|
weekYear = year;
|
|
|
}
|
|
|
|
|
|
return Object.assign({
|
|
|
weekYear: weekYear,
|
|
|
weekNumber: weekNumber,
|
|
|
weekday: weekday
|
|
|
}, timeObject(gregObj));
|
|
|
}
|
|
|
function weekToGregorian(weekData) {
|
|
|
var weekYear = weekData.weekYear,
|
|
|
weekNumber = weekData.weekNumber,
|
|
|
weekday = weekData.weekday,
|
|
|
weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),
|
|
|
yearInDays = daysInYear(weekYear);
|
|
|
var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,
|
|
|
year;
|
|
|
|
|
|
if (ordinal < 1) {
|
|
|
year = weekYear - 1;
|
|
|
ordinal += daysInYear(year);
|
|
|
} else if (ordinal > yearInDays) {
|
|
|
year = weekYear + 1;
|
|
|
ordinal -= daysInYear(weekYear);
|
|
|
} else {
|
|
|
year = weekYear;
|
|
|
}
|
|
|
|
|
|
var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal),
|
|
|
month = _uncomputeOrdinal.month,
|
|
|
day = _uncomputeOrdinal.day;
|
|
|
|
|
|
return Object.assign({
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: day
|
|
|
}, timeObject(weekData));
|
|
|
}
|
|
|
function gregorianToOrdinal(gregData) {
|
|
|
var year = gregData.year,
|
|
|
month = gregData.month,
|
|
|
day = gregData.day,
|
|
|
ordinal = computeOrdinal(year, month, day);
|
|
|
return Object.assign({
|
|
|
year: year,
|
|
|
ordinal: ordinal
|
|
|
}, timeObject(gregData));
|
|
|
}
|
|
|
function ordinalToGregorian(ordinalData) {
|
|
|
var year = ordinalData.year,
|
|
|
ordinal = ordinalData.ordinal,
|
|
|
_uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal),
|
|
|
month = _uncomputeOrdinal2.month,
|
|
|
day = _uncomputeOrdinal2.day;
|
|
|
|
|
|
return Object.assign({
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: day
|
|
|
}, timeObject(ordinalData));
|
|
|
}
|
|
|
function hasInvalidWeekData(obj) {
|
|
|
var validYear = isInteger(obj.weekYear),
|
|
|
validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),
|
|
|
validWeekday = integerBetween(obj.weekday, 1, 7);
|
|
|
|
|
|
if (!validYear) {
|
|
|
return unitOutOfRange("weekYear", obj.weekYear);
|
|
|
} else if (!validWeek) {
|
|
|
return unitOutOfRange("week", obj.week);
|
|
|
} else if (!validWeekday) {
|
|
|
return unitOutOfRange("weekday", obj.weekday);
|
|
|
} else return false;
|
|
|
}
|
|
|
function hasInvalidOrdinalData(obj) {
|
|
|
var validYear = isInteger(obj.year),
|
|
|
validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));
|
|
|
|
|
|
if (!validYear) {
|
|
|
return unitOutOfRange("year", obj.year);
|
|
|
} else if (!validOrdinal) {
|
|
|
return unitOutOfRange("ordinal", obj.ordinal);
|
|
|
} else return false;
|
|
|
}
|
|
|
function hasInvalidGregorianData(obj) {
|
|
|
var validYear = isInteger(obj.year),
|
|
|
validMonth = integerBetween(obj.month, 1, 12),
|
|
|
validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));
|
|
|
|
|
|
if (!validYear) {
|
|
|
return unitOutOfRange("year", obj.year);
|
|
|
} else if (!validMonth) {
|
|
|
return unitOutOfRange("month", obj.month);
|
|
|
} else if (!validDay) {
|
|
|
return unitOutOfRange("day", obj.day);
|
|
|
} else return false;
|
|
|
}
|
|
|
function hasInvalidTimeData(obj) {
|
|
|
var hour = obj.hour,
|
|
|
minute = obj.minute,
|
|
|
second = obj.second,
|
|
|
millisecond = obj.millisecond;
|
|
|
var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0,
|
|
|
validMinute = integerBetween(minute, 0, 59),
|
|
|
validSecond = integerBetween(second, 0, 59),
|
|
|
validMillisecond = integerBetween(millisecond, 0, 999);
|
|
|
|
|
|
if (!validHour) {
|
|
|
return unitOutOfRange("hour", hour);
|
|
|
} else if (!validMinute) {
|
|
|
return unitOutOfRange("minute", minute);
|
|
|
} else if (!validSecond) {
|
|
|
return unitOutOfRange("second", second);
|
|
|
} else if (!validMillisecond) {
|
|
|
return unitOutOfRange("millisecond", millisecond);
|
|
|
} else return false;
|
|
|
}
|
|
|
|
|
|
var INVALID$2 = "Invalid DateTime";
|
|
|
var MAX_DATE = 8.64e15;
|
|
|
|
|
|
function unsupportedZone(zone) {
|
|
|
return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported");
|
|
|
} // we cache week data on the DT object and this intermediates the cache
|
|
|
|
|
|
|
|
|
function possiblyCachedWeekData(dt) {
|
|
|
if (dt.weekData === null) {
|
|
|
dt.weekData = gregorianToWeek(dt.c);
|
|
|
}
|
|
|
|
|
|
return dt.weekData;
|
|
|
} // clone really means, "make a new object with these modifications". all "setters" really use this
|
|
|
// to create a new object while only changing some of the properties
|
|
|
|
|
|
|
|
|
function clone$1(inst, alts) {
|
|
|
var current = {
|
|
|
ts: inst.ts,
|
|
|
zone: inst.zone,
|
|
|
c: inst.c,
|
|
|
o: inst.o,
|
|
|
loc: inst.loc,
|
|
|
invalid: inst.invalid
|
|
|
};
|
|
|
return new DateTime(Object.assign({}, current, alts, {
|
|
|
old: current
|
|
|
}));
|
|
|
} // find the right offset a given local time. The o input is our guess, which determines which
|
|
|
// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)
|
|
|
|
|
|
|
|
|
function fixOffset(localTS, o, tz) {
|
|
|
// Our UTC time is just a guess because our offset is just a guess
|
|
|
var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts
|
|
|
|
|
|
var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done
|
|
|
|
|
|
if (o === o2) {
|
|
|
return [utcGuess, o];
|
|
|
} // If not, change the ts by the difference in the offset
|
|
|
|
|
|
|
|
|
utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done
|
|
|
|
|
|
var o3 = tz.offset(utcGuess);
|
|
|
|
|
|
if (o2 === o3) {
|
|
|
return [utcGuess, o2];
|
|
|
} // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time
|
|
|
|
|
|
|
|
|
return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];
|
|
|
} // convert an epoch timestamp into a calendar object with the given offset
|
|
|
|
|
|
|
|
|
function tsToObj(ts, offset) {
|
|
|
ts += offset * 60 * 1000;
|
|
|
var d = new Date(ts);
|
|
|
return {
|
|
|
year: d.getUTCFullYear(),
|
|
|
month: d.getUTCMonth() + 1,
|
|
|
day: d.getUTCDate(),
|
|
|
hour: d.getUTCHours(),
|
|
|
minute: d.getUTCMinutes(),
|
|
|
second: d.getUTCSeconds(),
|
|
|
millisecond: d.getUTCMilliseconds()
|
|
|
};
|
|
|
} // convert a calendar object to a epoch timestamp
|
|
|
|
|
|
|
|
|
function objToTS(obj, offset, zone) {
|
|
|
return fixOffset(objToLocalTS(obj), offset, zone);
|
|
|
} // create a new DT instance by adding a duration, adjusting for DSTs
|
|
|
|
|
|
|
|
|
function adjustTime(inst, dur) {
|
|
|
var oPre = inst.o,
|
|
|
year = inst.c.year + Math.trunc(dur.years),
|
|
|
month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,
|
|
|
c = Object.assign({}, inst.c, {
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7
|
|
|
}),
|
|
|
millisToAdd = Duration.fromObject({
|
|
|
years: dur.years - Math.trunc(dur.years),
|
|
|
quarters: dur.quarters - Math.trunc(dur.quarters),
|
|
|
months: dur.months - Math.trunc(dur.months),
|
|
|
weeks: dur.weeks - Math.trunc(dur.weeks),
|
|
|
days: dur.days - Math.trunc(dur.days),
|
|
|
hours: dur.hours,
|
|
|
minutes: dur.minutes,
|
|
|
seconds: dur.seconds,
|
|
|
milliseconds: dur.milliseconds
|
|
|
}).as("milliseconds"),
|
|
|
localTS = objToLocalTS(c);
|
|
|
|
|
|
var _fixOffset = fixOffset(localTS, oPre, inst.zone),
|
|
|
ts = _fixOffset[0],
|
|
|
o = _fixOffset[1];
|
|
|
|
|
|
if (millisToAdd !== 0) {
|
|
|
ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same
|
|
|
|
|
|
o = inst.zone.offset(ts);
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
ts: ts,
|
|
|
o: o
|
|
|
};
|
|
|
} // helper useful in turning the results of parsing into real dates
|
|
|
// by handling the zone options
|
|
|
|
|
|
|
|
|
function parseDataToDateTime(parsed, parsedZone, opts, format, text) {
|
|
|
var setZone = opts.setZone,
|
|
|
zone = opts.zone;
|
|
|
|
|
|
if (parsed && Object.keys(parsed).length !== 0) {
|
|
|
var interpretationZone = parsedZone || zone,
|
|
|
inst = DateTime.fromObject(Object.assign(parsed, opts, {
|
|
|
zone: interpretationZone,
|
|
|
// setZone is a valid option in the calling methods, but not in fromObject
|
|
|
setZone: undefined
|
|
|
}));
|
|
|
return setZone ? inst : inst.setZone(zone);
|
|
|
} else {
|
|
|
return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format));
|
|
|
}
|
|
|
} // if you want to output a technical format (e.g. RFC 2822), this helper
|
|
|
// helps handle the details
|
|
|
|
|
|
|
|
|
function toTechFormat(dt, format, allowZ) {
|
|
|
if (allowZ === void 0) {
|
|
|
allowZ = true;
|
|
|
}
|
|
|
|
|
|
return dt.isValid ? Formatter.create(Locale.create("en-US"), {
|
|
|
allowZ: allowZ,
|
|
|
forceSimple: true
|
|
|
}).formatDateTimeFromString(dt, format) : null;
|
|
|
} // technical time formats (e.g. the time part of ISO 8601), take some options
|
|
|
// and this commonizes their handling
|
|
|
|
|
|
|
|
|
function toTechTimeFormat(dt, _ref) {
|
|
|
var _ref$suppressSeconds = _ref.suppressSeconds,
|
|
|
suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds,
|
|
|
_ref$suppressMillisec = _ref.suppressMilliseconds,
|
|
|
suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec,
|
|
|
includeOffset = _ref.includeOffset,
|
|
|
_ref$includePrefix = _ref.includePrefix,
|
|
|
includePrefix = _ref$includePrefix === void 0 ? false : _ref$includePrefix,
|
|
|
_ref$includeZone = _ref.includeZone,
|
|
|
includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone,
|
|
|
_ref$spaceZone = _ref.spaceZone,
|
|
|
spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone,
|
|
|
_ref$format = _ref.format,
|
|
|
format = _ref$format === void 0 ? "extended" : _ref$format;
|
|
|
var fmt = format === "basic" ? "HHmm" : "HH:mm";
|
|
|
|
|
|
if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {
|
|
|
fmt += format === "basic" ? "ss" : ":ss";
|
|
|
|
|
|
if (!suppressMilliseconds || dt.millisecond !== 0) {
|
|
|
fmt += ".SSS";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ((includeZone || includeOffset) && spaceZone) {
|
|
|
fmt += " ";
|
|
|
}
|
|
|
|
|
|
if (includeZone) {
|
|
|
fmt += "z";
|
|
|
} else if (includeOffset) {
|
|
|
fmt += format === "basic" ? "ZZZ" : "ZZ";
|
|
|
}
|
|
|
|
|
|
var str = toTechFormat(dt, fmt);
|
|
|
|
|
|
if (includePrefix) {
|
|
|
str = "T" + str;
|
|
|
}
|
|
|
|
|
|
return str;
|
|
|
} // defaults for unspecified units in the supported calendars
|
|
|
|
|
|
|
|
|
var defaultUnitValues = {
|
|
|
month: 1,
|
|
|
day: 1,
|
|
|
hour: 0,
|
|
|
minute: 0,
|
|
|
second: 0,
|
|
|
millisecond: 0
|
|
|
},
|
|
|
defaultWeekUnitValues = {
|
|
|
weekNumber: 1,
|
|
|
weekday: 1,
|
|
|
hour: 0,
|
|
|
minute: 0,
|
|
|
second: 0,
|
|
|
millisecond: 0
|
|
|
},
|
|
|
defaultOrdinalUnitValues = {
|
|
|
ordinal: 1,
|
|
|
hour: 0,
|
|
|
minute: 0,
|
|
|
second: 0,
|
|
|
millisecond: 0
|
|
|
}; // Units in the supported calendars, sorted by bigness
|
|
|
|
|
|
var orderedUnits$1 = ["year", "month", "day", "hour", "minute", "second", "millisecond"],
|
|
|
orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"],
|
|
|
orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units
|
|
|
|
|
|
function normalizeUnit(unit) {
|
|
|
var normalized = {
|
|
|
year: "year",
|
|
|
years: "year",
|
|
|
month: "month",
|
|
|
months: "month",
|
|
|
day: "day",
|
|
|
days: "day",
|
|
|
hour: "hour",
|
|
|
hours: "hour",
|
|
|
minute: "minute",
|
|
|
minutes: "minute",
|
|
|
quarter: "quarter",
|
|
|
quarters: "quarter",
|
|
|
second: "second",
|
|
|
seconds: "second",
|
|
|
millisecond: "millisecond",
|
|
|
milliseconds: "millisecond",
|
|
|
weekday: "weekday",
|
|
|
weekdays: "weekday",
|
|
|
weeknumber: "weekNumber",
|
|
|
weeksnumber: "weekNumber",
|
|
|
weeknumbers: "weekNumber",
|
|
|
weekyear: "weekYear",
|
|
|
weekyears: "weekYear",
|
|
|
ordinal: "ordinal"
|
|
|
}[unit.toLowerCase()];
|
|
|
if (!normalized) throw new InvalidUnitError(unit);
|
|
|
return normalized;
|
|
|
} // this is a dumbed down version of fromObject() that runs about 60% faster
|
|
|
// but doesn't do any validation, makes a bunch of assumptions about what units
|
|
|
// are present, and so on.
|
|
|
|
|
|
|
|
|
function quickDT(obj, zone) {
|
|
|
// assume we have the higher-order units
|
|
|
for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) {
|
|
|
var u = _step.value;
|
|
|
|
|
|
if (isUndefined(obj[u])) {
|
|
|
obj[u] = defaultUnitValues[u];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);
|
|
|
|
|
|
if (invalid) {
|
|
|
return DateTime.invalid(invalid);
|
|
|
}
|
|
|
|
|
|
var tsNow = Settings.now(),
|
|
|
offsetProvis = zone.offset(tsNow),
|
|
|
_objToTS = objToTS(obj, offsetProvis, zone),
|
|
|
ts = _objToTS[0],
|
|
|
o = _objToTS[1];
|
|
|
|
|
|
return new DateTime({
|
|
|
ts: ts,
|
|
|
zone: zone,
|
|
|
o: o
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function diffRelative(start, end, opts) {
|
|
|
var round = isUndefined(opts.round) ? true : opts.round,
|
|
|
format = function format(c, unit) {
|
|
|
c = roundTo(c, round || opts.calendary ? 0 : 2, true);
|
|
|
var formatter = end.loc.clone(opts).relFormatter(opts);
|
|
|
return formatter.format(c, unit);
|
|
|
},
|
|
|
differ = function differ(unit) {
|
|
|
if (opts.calendary) {
|
|
|
if (!end.hasSame(start, unit)) {
|
|
|
return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);
|
|
|
} else return 0;
|
|
|
} else {
|
|
|
return end.diff(start, unit).get(unit);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (opts.unit) {
|
|
|
return format(differ(opts.unit), opts.unit);
|
|
|
}
|
|
|
|
|
|
for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) {
|
|
|
var unit = _step2.value;
|
|
|
var count = differ(unit);
|
|
|
|
|
|
if (Math.abs(count) >= 1) {
|
|
|
return format(count, unit);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);
|
|
|
}
|
|
|
/**
|
|
|
* A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.
|
|
|
*
|
|
|
* A DateTime comprises of:
|
|
|
* * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.
|
|
|
* * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).
|
|
|
* * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.
|
|
|
*
|
|
|
* Here is a brief overview of the most commonly used functionality it provides:
|
|
|
*
|
|
|
* * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.
|
|
|
* * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},
|
|
|
* {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.
|
|
|
* * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.
|
|
|
* * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.
|
|
|
* * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.
|
|
|
* * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.
|
|
|
*
|
|
|
* There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var DateTime = /*#__PURE__*/function () {
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
function DateTime(config) {
|
|
|
var zone = config.zone || Settings.defaultZone;
|
|
|
var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null);
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;
|
|
|
var c = null,
|
|
|
o = null;
|
|
|
|
|
|
if (!invalid) {
|
|
|
var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);
|
|
|
|
|
|
if (unchanged) {
|
|
|
var _ref2 = [config.old.c, config.old.o];
|
|
|
c = _ref2[0];
|
|
|
o = _ref2[1];
|
|
|
} else {
|
|
|
var ot = zone.offset(this.ts);
|
|
|
c = tsToObj(this.ts, ot);
|
|
|
invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null;
|
|
|
c = invalid ? null : c;
|
|
|
o = invalid ? null : ot;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
|
|
|
this._zone = zone;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.loc = config.loc || Locale.create();
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.invalid = invalid;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.weekData = null;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.c = c;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.o = o;
|
|
|
/**
|
|
|
* @access private
|
|
|
*/
|
|
|
|
|
|
this.isLuxonDateTime = true;
|
|
|
} // CONSTRUCT
|
|
|
|
|
|
/**
|
|
|
* Create a DateTime for the current instant, in the system's time zone.
|
|
|
*
|
|
|
* Use Settings to override these default values if needed.
|
|
|
* @example DateTime.now().toISO() //~> now in the ISO format
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
|
|
|
|
|
|
DateTime.now = function now() {
|
|
|
return new DateTime({});
|
|
|
}
|
|
|
/**
|
|
|
* Create a local DateTime
|
|
|
* @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used
|
|
|
* @param {number} [month=1] - The month, 1-indexed
|
|
|
* @param {number} [day=1] - The day of the month, 1-indexed
|
|
|
* @param {number} [hour=0] - The hour of the day, in 24-hour time
|
|
|
* @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59
|
|
|
* @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59
|
|
|
* @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999
|
|
|
* @example DateTime.local() //~> now
|
|
|
* @example DateTime.local(2017) //~> 2017-01-01T00:00:00
|
|
|
* @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00
|
|
|
* @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00
|
|
|
* @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00
|
|
|
* @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00
|
|
|
* @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10
|
|
|
* @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.local = function local(year, month, day, hour, minute, second, millisecond) {
|
|
|
if (isUndefined(year)) {
|
|
|
return DateTime.now();
|
|
|
} else {
|
|
|
return quickDT({
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: day,
|
|
|
hour: hour,
|
|
|
minute: minute,
|
|
|
second: second,
|
|
|
millisecond: millisecond
|
|
|
}, Settings.defaultZone);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime in UTC
|
|
|
* @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used
|
|
|
* @param {number} [month=1] - The month, 1-indexed
|
|
|
* @param {number} [day=1] - The day of the month
|
|
|
* @param {number} [hour=0] - The hour of the day, in 24-hour time
|
|
|
* @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59
|
|
|
* @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59
|
|
|
* @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999
|
|
|
* @example DateTime.utc() //~> now
|
|
|
* @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z
|
|
|
* @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z
|
|
|
* @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z
|
|
|
* @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z
|
|
|
* @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z
|
|
|
* @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z
|
|
|
* @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) {
|
|
|
if (isUndefined(year)) {
|
|
|
return new DateTime({
|
|
|
ts: Settings.now(),
|
|
|
zone: FixedOffsetZone.utcInstance
|
|
|
});
|
|
|
} else {
|
|
|
return quickDT({
|
|
|
year: year,
|
|
|
month: month,
|
|
|
day: day,
|
|
|
hour: hour,
|
|
|
minute: minute,
|
|
|
second: second,
|
|
|
millisecond: millisecond
|
|
|
}, FixedOffsetZone.utcInstance);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from a JavaScript Date object. Uses the default zone.
|
|
|
* @param {Date} date - a JavaScript Date object
|
|
|
* @param {Object} options - configuration options for the DateTime
|
|
|
* @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromJSDate = function fromJSDate(date, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
var ts = isDate(date) ? date.valueOf() : NaN;
|
|
|
|
|
|
if (Number.isNaN(ts)) {
|
|
|
return DateTime.invalid("invalid input");
|
|
|
}
|
|
|
|
|
|
var zoneToUse = normalizeZone(options.zone, Settings.defaultZone);
|
|
|
|
|
|
if (!zoneToUse.isValid) {
|
|
|
return DateTime.invalid(unsupportedZone(zoneToUse));
|
|
|
}
|
|
|
|
|
|
return new DateTime({
|
|
|
ts: ts,
|
|
|
zone: zoneToUse,
|
|
|
loc: Locale.fromObject(options)
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.
|
|
|
* @param {number} milliseconds - a number of milliseconds since 1970 UTC
|
|
|
* @param {Object} options - configuration options for the DateTime
|
|
|
* @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into
|
|
|
* @param {string} [options.locale] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromMillis = function fromMillis(milliseconds, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!isNumber(milliseconds)) {
|
|
|
throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds);
|
|
|
} else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {
|
|
|
// this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start
|
|
|
return DateTime.invalid("Timestamp out of range");
|
|
|
} else {
|
|
|
return new DateTime({
|
|
|
ts: milliseconds,
|
|
|
zone: normalizeZone(options.zone, Settings.defaultZone),
|
|
|
loc: Locale.fromObject(options)
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.
|
|
|
* @param {number} seconds - a number of seconds since 1970 UTC
|
|
|
* @param {Object} options - configuration options for the DateTime
|
|
|
* @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into
|
|
|
* @param {string} [options.locale] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromSeconds = function fromSeconds(seconds, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!isNumber(seconds)) {
|
|
|
throw new InvalidArgumentError("fromSeconds requires a numerical input");
|
|
|
} else {
|
|
|
return new DateTime({
|
|
|
ts: seconds * 1000,
|
|
|
zone: normalizeZone(options.zone, Settings.defaultZone),
|
|
|
loc: Locale.fromObject(options)
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.
|
|
|
* @param {Object} obj - the object to create the DateTime from
|
|
|
* @param {number} obj.year - a year, such as 1987
|
|
|
* @param {number} obj.month - a month, 1-12
|
|
|
* @param {number} obj.day - a day of the month, 1-31, depending on the month
|
|
|
* @param {number} obj.ordinal - day of the year, 1-365 or 366
|
|
|
* @param {number} obj.weekYear - an ISO week year
|
|
|
* @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year
|
|
|
* @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday
|
|
|
* @param {number} obj.hour - hour of the day, 0-23
|
|
|
* @param {number} obj.minute - minute of the hour, 0-59
|
|
|
* @param {number} obj.second - second of the minute, 0-59
|
|
|
* @param {number} obj.millisecond - millisecond of the second, 0-999
|
|
|
* @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()
|
|
|
* @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance
|
|
|
* @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'
|
|
|
* @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'
|
|
|
* @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06
|
|
|
* @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),
|
|
|
* @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })
|
|
|
* @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })
|
|
|
* @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromObject = function fromObject(obj) {
|
|
|
var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);
|
|
|
|
|
|
if (!zoneToUse.isValid) {
|
|
|
return DateTime.invalid(unsupportedZone(zoneToUse));
|
|
|
}
|
|
|
|
|
|
var tsNow = Settings.now(),
|
|
|
offsetProvis = zoneToUse.offset(tsNow),
|
|
|
normalized = normalizeObject(obj, normalizeUnit, ["zone", "locale", "outputCalendar", "numberingSystem"]),
|
|
|
containsOrdinal = !isUndefined(normalized.ordinal),
|
|
|
containsGregorYear = !isUndefined(normalized.year),
|
|
|
containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),
|
|
|
containsGregor = containsGregorYear || containsGregorMD,
|
|
|
definiteWeekDef = normalized.weekYear || normalized.weekNumber,
|
|
|
loc = Locale.fromObject(obj); // cases:
|
|
|
// just a weekday -> this week's instance of that weekday, no worries
|
|
|
// (gregorian data or ordinal) + (weekYear or weekNumber) -> error
|
|
|
// (gregorian month or day) + ordinal -> error
|
|
|
// otherwise just use weeks or ordinals or gregorian, depending on what's specified
|
|
|
|
|
|
if ((containsGregor || containsOrdinal) && definiteWeekDef) {
|
|
|
throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");
|
|
|
}
|
|
|
|
|
|
if (containsGregorMD && containsOrdinal) {
|
|
|
throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");
|
|
|
}
|
|
|
|
|
|
var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff
|
|
|
|
|
|
var units,
|
|
|
defaultValues,
|
|
|
objNow = tsToObj(tsNow, offsetProvis);
|
|
|
|
|
|
if (useWeekData) {
|
|
|
units = orderedWeekUnits;
|
|
|
defaultValues = defaultWeekUnitValues;
|
|
|
objNow = gregorianToWeek(objNow);
|
|
|
} else if (containsOrdinal) {
|
|
|
units = orderedOrdinalUnits;
|
|
|
defaultValues = defaultOrdinalUnitValues;
|
|
|
objNow = gregorianToOrdinal(objNow);
|
|
|
} else {
|
|
|
units = orderedUnits$1;
|
|
|
defaultValues = defaultUnitValues;
|
|
|
} // set default values for missing stuff
|
|
|
|
|
|
|
|
|
var foundFirst = false;
|
|
|
|
|
|
for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) {
|
|
|
var u = _step3.value;
|
|
|
var v = normalized[u];
|
|
|
|
|
|
if (!isUndefined(v)) {
|
|
|
foundFirst = true;
|
|
|
} else if (foundFirst) {
|
|
|
normalized[u] = defaultValues[u];
|
|
|
} else {
|
|
|
normalized[u] = objNow[u];
|
|
|
}
|
|
|
} // make sure the values we have are in range
|
|
|
|
|
|
|
|
|
var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized),
|
|
|
invalid = higherOrderInvalid || hasInvalidTimeData(normalized);
|
|
|
|
|
|
if (invalid) {
|
|
|
return DateTime.invalid(invalid);
|
|
|
} // compute the actual time
|
|
|
|
|
|
|
|
|
var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized,
|
|
|
_objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse),
|
|
|
tsFinal = _objToTS2[0],
|
|
|
offsetFinal = _objToTS2[1],
|
|
|
inst = new DateTime({
|
|
|
ts: tsFinal,
|
|
|
zone: zoneToUse,
|
|
|
o: offsetFinal,
|
|
|
loc: loc
|
|
|
}); // gregorian data + weekday serves only to validate
|
|
|
|
|
|
|
|
|
if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {
|
|
|
return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO());
|
|
|
}
|
|
|
|
|
|
return inst;
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from an ISO 8601 string
|
|
|
* @param {string} text - the ISO string
|
|
|
* @param {Object} opts - options to affect the creation
|
|
|
* @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone
|
|
|
* @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one
|
|
|
* @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance
|
|
|
* @example DateTime.fromISO('2016-05-25T09:08:34.123')
|
|
|
* @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')
|
|
|
* @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})
|
|
|
* @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})
|
|
|
* @example DateTime.fromISO('2016-W05-4')
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromISO = function fromISO(text, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _parseISODate = parseISODate(text),
|
|
|
vals = _parseISODate[0],
|
|
|
parsedZone = _parseISODate[1];
|
|
|
|
|
|
return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text);
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from an RFC 2822 string
|
|
|
* @param {string} text - the RFC 2822 string
|
|
|
* @param {Object} opts - options to affect the creation
|
|
|
* @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.
|
|
|
* @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one
|
|
|
* @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance
|
|
|
* @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')
|
|
|
* @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')
|
|
|
* @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromRFC2822 = function fromRFC2822(text, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _parseRFC2822Date = parseRFC2822Date(text),
|
|
|
vals = _parseRFC2822Date[0],
|
|
|
parsedZone = _parseRFC2822Date[1];
|
|
|
|
|
|
return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text);
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from an HTTP header date
|
|
|
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
|
|
|
* @param {string} text - the HTTP header date
|
|
|
* @param {Object} opts - options to affect the creation
|
|
|
* @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.
|
|
|
* @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.
|
|
|
* @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance
|
|
|
* @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance
|
|
|
* @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')
|
|
|
* @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')
|
|
|
* @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromHTTP = function fromHTTP(text, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _parseHTTPDate = parseHTTPDate(text),
|
|
|
vals = _parseHTTPDate[0],
|
|
|
parsedZone = _parseHTTPDate[1];
|
|
|
|
|
|
return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts);
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from an input string and format string.
|
|
|
* Defaults to en-US if no locale has been specified, regardless of the system's locale.
|
|
|
* @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens
|
|
|
* @param {string} text - the string to parse
|
|
|
* @param {string} fmt - the format the string is expected to be in (see the link below for the formats)
|
|
|
* @param {Object} opts - options to affect the creation
|
|
|
* @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone
|
|
|
* @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one
|
|
|
* @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale
|
|
|
* @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system
|
|
|
* @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromFormat = function fromFormat(text, fmt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (isUndefined(text) || isUndefined(fmt)) {
|
|
|
throw new InvalidArgumentError("fromFormat requires an input string and a format");
|
|
|
}
|
|
|
|
|
|
var _opts = opts,
|
|
|
_opts$locale = _opts.locale,
|
|
|
locale = _opts$locale === void 0 ? null : _opts$locale,
|
|
|
_opts$numberingSystem = _opts.numberingSystem,
|
|
|
numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem,
|
|
|
localeToUse = Locale.fromOpts({
|
|
|
locale: locale,
|
|
|
numberingSystem: numberingSystem,
|
|
|
defaultToEN: true
|
|
|
}),
|
|
|
_parseFromTokens = parseFromTokens(localeToUse, text, fmt),
|
|
|
vals = _parseFromTokens[0],
|
|
|
parsedZone = _parseFromTokens[1],
|
|
|
invalid = _parseFromTokens[2];
|
|
|
|
|
|
if (invalid) {
|
|
|
return DateTime.invalid(invalid);
|
|
|
} else {
|
|
|
return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @deprecated use fromFormat instead
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromString = function fromString(text, fmt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return DateTime.fromFormat(text, fmt, opts);
|
|
|
}
|
|
|
/**
|
|
|
* Create a DateTime from a SQL date, time, or datetime
|
|
|
* Defaults to en-US if no locale has been specified, regardless of the system's locale
|
|
|
* @param {string} text - the string to parse
|
|
|
* @param {Object} opts - options to affect the creation
|
|
|
* @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone
|
|
|
* @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one
|
|
|
* @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale
|
|
|
* @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system
|
|
|
* @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance
|
|
|
* @example DateTime.fromSQL('2017-05-15')
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34')
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34.342')
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })
|
|
|
* @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })
|
|
|
* @example DateTime.fromSQL('09:12:34.342')
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromSQL = function fromSQL(text, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _parseSQL = parseSQL(text),
|
|
|
vals = _parseSQL[0],
|
|
|
parsedZone = _parseSQL[1];
|
|
|
|
|
|
return parseDataToDateTime(vals, parsedZone, opts, "SQL", text);
|
|
|
}
|
|
|
/**
|
|
|
* Create an invalid DateTime.
|
|
|
* @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent
|
|
|
* @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.invalid = function invalid(reason, explanation) {
|
|
|
if (explanation === void 0) {
|
|
|
explanation = null;
|
|
|
}
|
|
|
|
|
|
if (!reason) {
|
|
|
throw new InvalidArgumentError("need to specify a reason the DateTime is invalid");
|
|
|
}
|
|
|
|
|
|
var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
|
|
|
|
|
|
if (Settings.throwOnInvalid) {
|
|
|
throw new InvalidDateTimeError(invalid);
|
|
|
} else {
|
|
|
return new DateTime({
|
|
|
invalid: invalid
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Check if an object is a DateTime. Works across context boundaries
|
|
|
* @param {object} o
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.isDateTime = function isDateTime(o) {
|
|
|
return o && o.isLuxonDateTime || false;
|
|
|
} // INFO
|
|
|
|
|
|
/**
|
|
|
* Get the value of unit.
|
|
|
* @param {string} unit - a unit such as 'minute' or 'day'
|
|
|
* @example DateTime.local(2017, 7, 4).get('month'); //=> 7
|
|
|
* @example DateTime.local(2017, 7, 4).get('day'); //=> 4
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
var _proto = DateTime.prototype;
|
|
|
|
|
|
_proto.get = function get(unit) {
|
|
|
return this[unit];
|
|
|
}
|
|
|
/**
|
|
|
* Returns whether the DateTime is valid. Invalid DateTimes occur when:
|
|
|
* * The DateTime was created from invalid calendar information, such as the 13th month or February 30
|
|
|
* * The DateTime was created by an operation on another invalid date
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
/**
|
|
|
* Returns the resolved Intl options for this DateTime.
|
|
|
* This is useful in understanding the behavior of formatting methods
|
|
|
* @param {Object} opts - the same options as toLocaleString
|
|
|
* @return {Object}
|
|
|
*/
|
|
|
_proto.resolvedLocaleOpts = function resolvedLocaleOpts(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this),
|
|
|
locale = _Formatter$create$res.locale,
|
|
|
numberingSystem = _Formatter$create$res.numberingSystem,
|
|
|
calendar = _Formatter$create$res.calendar;
|
|
|
|
|
|
return {
|
|
|
locale: locale,
|
|
|
numberingSystem: numberingSystem,
|
|
|
outputCalendar: calendar
|
|
|
};
|
|
|
} // TRANSFORM
|
|
|
|
|
|
/**
|
|
|
* "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime.
|
|
|
*
|
|
|
* Equivalent to {@link setZone}('utc')
|
|
|
* @param {number} [offset=0] - optionally, an offset from UTC in minutes
|
|
|
* @param {Object} [opts={}] - options to pass to `setZone()`
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toUTC = function toUTC(offset, opts) {
|
|
|
if (offset === void 0) {
|
|
|
offset = 0;
|
|
|
}
|
|
|
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return this.setZone(FixedOffsetZone.instance(offset), opts);
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.
|
|
|
*
|
|
|
* Equivalent to `setZone('local')`
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toLocal = function toLocal() {
|
|
|
return this.setZone(Settings.defaultZone);
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.
|
|
|
*
|
|
|
* By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.
|
|
|
* @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.setZone = function setZone(zone, _temp) {
|
|
|
var _ref3 = _temp === void 0 ? {} : _temp,
|
|
|
_ref3$keepLocalTime = _ref3.keepLocalTime,
|
|
|
keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime,
|
|
|
_ref3$keepCalendarTim = _ref3.keepCalendarTime,
|
|
|
keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim;
|
|
|
|
|
|
zone = normalizeZone(zone, Settings.defaultZone);
|
|
|
|
|
|
if (zone.equals(this.zone)) {
|
|
|
return this;
|
|
|
} else if (!zone.isValid) {
|
|
|
return DateTime.invalid(unsupportedZone(zone));
|
|
|
} else {
|
|
|
var newTS = this.ts;
|
|
|
|
|
|
if (keepLocalTime || keepCalendarTime) {
|
|
|
var offsetGuess = zone.offset(this.ts);
|
|
|
var asObj = this.toObject();
|
|
|
|
|
|
var _objToTS3 = objToTS(asObj, offsetGuess, zone);
|
|
|
|
|
|
newTS = _objToTS3[0];
|
|
|
}
|
|
|
|
|
|
return clone$1(this, {
|
|
|
ts: newTS,
|
|
|
zone: zone
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.
|
|
|
* @param {Object} properties - the properties to set
|
|
|
* @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.reconfigure = function reconfigure(_temp2) {
|
|
|
var _ref4 = _temp2 === void 0 ? {} : _temp2,
|
|
|
locale = _ref4.locale,
|
|
|
numberingSystem = _ref4.numberingSystem,
|
|
|
outputCalendar = _ref4.outputCalendar;
|
|
|
|
|
|
var loc = this.loc.clone({
|
|
|
locale: locale,
|
|
|
numberingSystem: numberingSystem,
|
|
|
outputCalendar: outputCalendar
|
|
|
});
|
|
|
return clone$1(this, {
|
|
|
loc: loc
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the locale. Returns a newly-constructed DateTime.
|
|
|
* Just a convenient alias for reconfigure({ locale })
|
|
|
* @example DateTime.local(2017, 5, 25).setLocale('en-GB')
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.setLocale = function setLocale(locale) {
|
|
|
return this.reconfigure({
|
|
|
locale: locale
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* "Set" the values of specified units. Returns a newly-constructed DateTime.
|
|
|
* You can only set units with this method; for "setting" metadata, see {@link reconfigure} and {@link setZone}.
|
|
|
* @param {Object} values - a mapping of units to numbers
|
|
|
* @example dt.set({ year: 2017 })
|
|
|
* @example dt.set({ hour: 8, minute: 30 })
|
|
|
* @example dt.set({ weekday: 5 })
|
|
|
* @example dt.set({ year: 2005, ordinal: 234 })
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.set = function set(values) {
|
|
|
if (!this.isValid) return this;
|
|
|
var normalized = normalizeObject(values, normalizeUnit, []),
|
|
|
settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday),
|
|
|
containsOrdinal = !isUndefined(normalized.ordinal),
|
|
|
containsGregorYear = !isUndefined(normalized.year),
|
|
|
containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),
|
|
|
containsGregor = containsGregorYear || containsGregorMD,
|
|
|
definiteWeekDef = normalized.weekYear || normalized.weekNumber;
|
|
|
|
|
|
if ((containsGregor || containsOrdinal) && definiteWeekDef) {
|
|
|
throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals");
|
|
|
}
|
|
|
|
|
|
if (containsGregorMD && containsOrdinal) {
|
|
|
throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day");
|
|
|
}
|
|
|
|
|
|
var mixed;
|
|
|
|
|
|
if (settingWeekStuff) {
|
|
|
mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));
|
|
|
} else if (!isUndefined(normalized.ordinal)) {
|
|
|
mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));
|
|
|
} else {
|
|
|
mixed = Object.assign(this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date,
|
|
|
// use the last day of the right month
|
|
|
|
|
|
if (isUndefined(normalized.day)) {
|
|
|
mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _objToTS4 = objToTS(mixed, this.o, this.zone),
|
|
|
ts = _objToTS4[0],
|
|
|
o = _objToTS4[1];
|
|
|
|
|
|
return clone$1(this, {
|
|
|
ts: ts,
|
|
|
o: o
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Add a period of time to this DateTime and return the resulting DateTime
|
|
|
*
|
|
|
* Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.
|
|
|
* @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
|
|
|
* @example DateTime.now().plus(123) //~> in 123 milliseconds
|
|
|
* @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes
|
|
|
* @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow
|
|
|
* @example DateTime.now().plus({ days: -1 }) //~> this time yesterday
|
|
|
* @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min
|
|
|
* @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.plus = function plus(duration) {
|
|
|
if (!this.isValid) return this;
|
|
|
var dur = friendlyDuration(duration);
|
|
|
return clone$1(this, adjustTime(this, dur));
|
|
|
}
|
|
|
/**
|
|
|
* Subtract a period of time to this DateTime and return the resulting DateTime
|
|
|
* See {@link plus}
|
|
|
* @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
|
|
|
@return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.minus = function minus(duration) {
|
|
|
if (!this.isValid) return this;
|
|
|
var dur = friendlyDuration(duration).negate();
|
|
|
return clone$1(this, adjustTime(this, dur));
|
|
|
}
|
|
|
/**
|
|
|
* "Set" this DateTime to the beginning of a unit of time.
|
|
|
* @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.
|
|
|
* @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'
|
|
|
* @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'
|
|
|
* @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays
|
|
|
* @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'
|
|
|
* @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.startOf = function startOf(unit) {
|
|
|
if (!this.isValid) return this;
|
|
|
var o = {},
|
|
|
normalizedUnit = Duration.normalizeUnit(unit);
|
|
|
|
|
|
switch (normalizedUnit) {
|
|
|
case "years":
|
|
|
o.month = 1;
|
|
|
// falls through
|
|
|
|
|
|
case "quarters":
|
|
|
case "months":
|
|
|
o.day = 1;
|
|
|
// falls through
|
|
|
|
|
|
case "weeks":
|
|
|
case "days":
|
|
|
o.hour = 0;
|
|
|
// falls through
|
|
|
|
|
|
case "hours":
|
|
|
o.minute = 0;
|
|
|
// falls through
|
|
|
|
|
|
case "minutes":
|
|
|
o.second = 0;
|
|
|
// falls through
|
|
|
|
|
|
case "seconds":
|
|
|
o.millisecond = 0;
|
|
|
break;
|
|
|
// no default, invalid units throw in normalizeUnit()
|
|
|
}
|
|
|
|
|
|
if (normalizedUnit === "weeks") {
|
|
|
o.weekday = 1;
|
|
|
}
|
|
|
|
|
|
if (normalizedUnit === "quarters") {
|
|
|
var q = Math.ceil(this.month / 3);
|
|
|
o.month = (q - 1) * 3 + 1;
|
|
|
}
|
|
|
|
|
|
return this.set(o);
|
|
|
}
|
|
|
/**
|
|
|
* "Set" this DateTime to the end (meaning the last millisecond) of a unit of time
|
|
|
* @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.
|
|
|
* @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'
|
|
|
* @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'
|
|
|
* @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays
|
|
|
* @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'
|
|
|
* @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'
|
|
|
* @return {DateTime}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.endOf = function endOf(unit) {
|
|
|
var _this$plus;
|
|
|
|
|
|
return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this;
|
|
|
} // OUTPUT
|
|
|
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime formatted according to the specified format string.
|
|
|
* **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).
|
|
|
* Defaults to en-US if no locale has been specified, regardless of the system's locale.
|
|
|
* @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens
|
|
|
* @param {string} fmt - the format string
|
|
|
* @param {Object} opts - opts to override the configuration options
|
|
|
* @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'
|
|
|
* @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'
|
|
|
* @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22'
|
|
|
* @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toFormat = function toFormat(fmt, opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID$2;
|
|
|
}
|
|
|
/**
|
|
|
* Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.
|
|
|
* The exact behavior of this method is browser-specific, but in general it will return an appropriate representation
|
|
|
* of the DateTime in the assigned locale.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
|
|
|
* @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options
|
|
|
* @example DateTime.now().toLocaleString(); //=> 4/20/2017
|
|
|
* @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'
|
|
|
* @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'
|
|
|
* @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'
|
|
|
* @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'
|
|
|
* @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'
|
|
|
* @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'
|
|
|
* @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'
|
|
|
* @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toLocaleString = function toLocaleString(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = DATE_SHORT;
|
|
|
}
|
|
|
|
|
|
return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts
|
|
|
* @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.
|
|
|
* @example DateTime.now().toLocaleParts(); //=> [
|
|
|
* //=> { type: 'day', value: '25' },
|
|
|
* //=> { type: 'literal', value: '/' },
|
|
|
* //=> { type: 'month', value: '05' },
|
|
|
* //=> { type: 'literal', value: '/' },
|
|
|
* //=> { type: 'year', value: '1982' }
|
|
|
* //=> ]
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toLocaleParts = function toLocaleParts(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : [];
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this DateTime
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0
|
|
|
* @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0
|
|
|
* @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'
|
|
|
* @param {string} [opts.format='extended'] - choose between the basic and extended format
|
|
|
* @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'
|
|
|
* @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'
|
|
|
* @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'
|
|
|
* @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISO = function toISO(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return this.toISODate(opts) + "T" + this.toISOTime(opts);
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this DateTime's date component
|
|
|
* @param {Object} opts - options
|
|
|
* @param {string} [opts.format='extended'] - choose between the basic and extended format
|
|
|
* @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'
|
|
|
* @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISODate = function toISODate(_temp3) {
|
|
|
var _ref5 = _temp3 === void 0 ? {} : _temp3,
|
|
|
_ref5$format = _ref5.format,
|
|
|
format = _ref5$format === void 0 ? "extended" : _ref5$format;
|
|
|
|
|
|
var fmt = format === "basic" ? "yyyyMMdd" : "yyyy-MM-dd";
|
|
|
|
|
|
if (this.year > 9999) {
|
|
|
fmt = "+" + fmt;
|
|
|
}
|
|
|
|
|
|
return toTechFormat(this, fmt);
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this DateTime's week date
|
|
|
* @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISOWeekDate = function toISOWeekDate() {
|
|
|
return toTechFormat(this, "kkkk-'W'WW-c");
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601-compliant string representation of this DateTime's time component
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0
|
|
|
* @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0
|
|
|
* @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'
|
|
|
* @param {boolean} [opts.includePrefix=false] - include the `T` prefix
|
|
|
* @param {string} [opts.format='extended'] - choose between the basic and extended format
|
|
|
* @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'
|
|
|
* @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'
|
|
|
* @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'
|
|
|
* @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toISOTime = function toISOTime(_temp4) {
|
|
|
var _ref6 = _temp4 === void 0 ? {} : _temp4,
|
|
|
_ref6$suppressMillise = _ref6.suppressMilliseconds,
|
|
|
suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise,
|
|
|
_ref6$suppressSeconds = _ref6.suppressSeconds,
|
|
|
suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds,
|
|
|
_ref6$includeOffset = _ref6.includeOffset,
|
|
|
includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset,
|
|
|
_ref6$includePrefix = _ref6.includePrefix,
|
|
|
includePrefix = _ref6$includePrefix === void 0 ? false : _ref6$includePrefix,
|
|
|
_ref6$format = _ref6.format,
|
|
|
format = _ref6$format === void 0 ? "extended" : _ref6$format;
|
|
|
|
|
|
return toTechTimeFormat(this, {
|
|
|
suppressSeconds: suppressSeconds,
|
|
|
suppressMilliseconds: suppressMilliseconds,
|
|
|
includeOffset: includeOffset,
|
|
|
includePrefix: includePrefix,
|
|
|
format: format
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Returns an RFC 2822-compatible string representation of this DateTime, always in UTC
|
|
|
* @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'
|
|
|
* @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toRFC2822 = function toRFC2822() {
|
|
|
return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false);
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime appropriate for use in HTTP headers.
|
|
|
* Specifically, the string conforms to RFC 1123.
|
|
|
* @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
|
|
|
* @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'
|
|
|
* @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toHTTP = function toHTTP() {
|
|
|
return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'");
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime appropriate for use in SQL Date
|
|
|
* @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toSQLDate = function toSQLDate() {
|
|
|
return toTechFormat(this, "yyyy-MM-dd");
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime appropriate for use in SQL Time
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.
|
|
|
* @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'
|
|
|
* @example DateTime.utc().toSQL() //=> '05:15:16.345'
|
|
|
* @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'
|
|
|
* @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'
|
|
|
* @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toSQLTime = function toSQLTime(_temp5) {
|
|
|
var _ref7 = _temp5 === void 0 ? {} : _temp5,
|
|
|
_ref7$includeOffset = _ref7.includeOffset,
|
|
|
includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset,
|
|
|
_ref7$includeZone = _ref7.includeZone,
|
|
|
includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone;
|
|
|
|
|
|
return toTechTimeFormat(this, {
|
|
|
includeOffset: includeOffset,
|
|
|
includeZone: includeZone,
|
|
|
spaceZone: true
|
|
|
});
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime appropriate for use in SQL DateTime
|
|
|
* @param {Object} opts - options
|
|
|
* @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.
|
|
|
* @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'
|
|
|
* @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'
|
|
|
* @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'
|
|
|
* @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'
|
|
|
* @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toSQL = function toSQL(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return this.toSQLDate() + " " + this.toSQLTime(opts);
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this DateTime appropriate for debugging
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toString = function toString() {
|
|
|
return this.isValid ? this.toISO() : INVALID$2;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.valueOf = function valueOf() {
|
|
|
return this.toMillis();
|
|
|
}
|
|
|
/**
|
|
|
* Returns the epoch milliseconds of this DateTime.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toMillis = function toMillis() {
|
|
|
return this.isValid ? this.ts : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the epoch seconds of this DateTime.
|
|
|
* @return {number}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toSeconds = function toSeconds() {
|
|
|
return this.isValid ? this.ts / 1000 : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toJSON = function toJSON() {
|
|
|
return this.toISO();
|
|
|
}
|
|
|
/**
|
|
|
* Returns a BSON serializable equivalent to this DateTime.
|
|
|
* @return {Date}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toBSON = function toBSON() {
|
|
|
return this.toJSDate();
|
|
|
}
|
|
|
/**
|
|
|
* Returns a JavaScript object with this DateTime's year, month, day, and so on.
|
|
|
* @param opts - options for generating the object
|
|
|
* @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output
|
|
|
* @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }
|
|
|
* @return {Object}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toObject = function toObject(opts) {
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return {};
|
|
|
var base = Object.assign({}, this.c);
|
|
|
|
|
|
if (opts.includeConfig) {
|
|
|
base.outputCalendar = this.outputCalendar;
|
|
|
base.numberingSystem = this.loc.numberingSystem;
|
|
|
base.locale = this.loc.locale;
|
|
|
}
|
|
|
|
|
|
return base;
|
|
|
}
|
|
|
/**
|
|
|
* Returns a JavaScript Date equivalent to this DateTime.
|
|
|
* @return {Date}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toJSDate = function toJSDate() {
|
|
|
return new Date(this.isValid ? this.ts : NaN);
|
|
|
} // COMPARE
|
|
|
|
|
|
/**
|
|
|
* Return the difference between two DateTimes as a Duration.
|
|
|
* @param {DateTime} otherDateTime - the DateTime to compare this one to
|
|
|
* @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.
|
|
|
* @param {Object} opts - options that affect the creation of the Duration
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @example
|
|
|
* var i1 = DateTime.fromISO('1982-05-25T09:45'),
|
|
|
* i2 = DateTime.fromISO('1983-10-14T10:30');
|
|
|
* i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }
|
|
|
* i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }
|
|
|
* i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }
|
|
|
* i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.diff = function diff(otherDateTime, unit, opts) {
|
|
|
if (unit === void 0) {
|
|
|
unit = "milliseconds";
|
|
|
}
|
|
|
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid || !otherDateTime.isValid) {
|
|
|
return Duration.invalid(this.invalid || otherDateTime.invalid, "created by diffing an invalid DateTime");
|
|
|
}
|
|
|
|
|
|
var durOpts = Object.assign({
|
|
|
locale: this.locale,
|
|
|
numberingSystem: this.numberingSystem
|
|
|
}, opts);
|
|
|
|
|
|
var units = maybeArray(unit).map(Duration.normalizeUnit),
|
|
|
otherIsLater = otherDateTime.valueOf() > this.valueOf(),
|
|
|
earlier = otherIsLater ? this : otherDateTime,
|
|
|
later = otherIsLater ? otherDateTime : this,
|
|
|
diffed = _diff(earlier, later, units, durOpts);
|
|
|
|
|
|
return otherIsLater ? diffed.negate() : diffed;
|
|
|
}
|
|
|
/**
|
|
|
* Return the difference between this DateTime and right now.
|
|
|
* See {@link diff}
|
|
|
* @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration
|
|
|
* @param {Object} opts - options that affect the creation of the Duration
|
|
|
* @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
|
|
|
* @return {Duration}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.diffNow = function diffNow(unit, opts) {
|
|
|
if (unit === void 0) {
|
|
|
unit = "milliseconds";
|
|
|
}
|
|
|
|
|
|
if (opts === void 0) {
|
|
|
opts = {};
|
|
|
}
|
|
|
|
|
|
return this.diff(DateTime.now(), unit, opts);
|
|
|
}
|
|
|
/**
|
|
|
* Return an Interval spanning between this DateTime and another DateTime
|
|
|
* @param {DateTime} otherDateTime - the other end point of the Interval
|
|
|
* @return {Interval}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.until = function until(otherDateTime) {
|
|
|
return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;
|
|
|
}
|
|
|
/**
|
|
|
* Return whether this DateTime is in the same unit of time as another DateTime.
|
|
|
* Higher-order units must also be identical for this function to return `true`.
|
|
|
* Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link setZone} to convert one of the dates if needed.
|
|
|
* @param {DateTime} otherDateTime - the other DateTime
|
|
|
* @param {string} unit - the unit of time to check sameness on
|
|
|
* @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.hasSame = function hasSame(otherDateTime, unit) {
|
|
|
if (!this.isValid) return false;
|
|
|
var inputMs = otherDateTime.valueOf();
|
|
|
var otherZoneDateTime = this.setZone(otherDateTime.zone, {
|
|
|
keepLocalTime: true
|
|
|
});
|
|
|
return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit);
|
|
|
}
|
|
|
/**
|
|
|
* Equality check
|
|
|
* Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.
|
|
|
* To compare just the millisecond values, use `+dt1 === +dt2`.
|
|
|
* @param {DateTime} other - the other DateTime
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.equals = function equals(other) {
|
|
|
return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc);
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your
|
|
|
* platform supports Intl.RelativeTimeFormat. Rounds down by default.
|
|
|
* @param {Object} options - options that affect the output
|
|
|
* @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.
|
|
|
* @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow"
|
|
|
* @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds"
|
|
|
* @param {boolean} [options.round=true] - whether to round the numbers in the output.
|
|
|
* @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.
|
|
|
* @param {string} options.locale - override the locale of this DateTime
|
|
|
* @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this
|
|
|
* @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day"
|
|
|
* @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día"
|
|
|
* @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures"
|
|
|
* @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago"
|
|
|
* @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago"
|
|
|
* @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago"
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toRelative = function toRelative(options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return null;
|
|
|
var base = options.base || DateTime.fromObject({
|
|
|
zone: this.zone
|
|
|
}),
|
|
|
padding = options.padding ? this < base ? -options.padding : options.padding : 0;
|
|
|
var units = ["years", "months", "days", "hours", "minutes", "seconds"];
|
|
|
var unit = options.unit;
|
|
|
|
|
|
if (Array.isArray(options.unit)) {
|
|
|
units = options.unit;
|
|
|
unit = undefined;
|
|
|
}
|
|
|
|
|
|
return diffRelative(base, this.plus(padding), Object.assign(options, {
|
|
|
numeric: "always",
|
|
|
units: units,
|
|
|
unit: unit
|
|
|
}));
|
|
|
}
|
|
|
/**
|
|
|
* Returns a string representation of this date relative to today, such as "yesterday" or "next month".
|
|
|
* Only internationalizes on platforms that supports Intl.RelativeTimeFormat.
|
|
|
* @param {Object} options - options that affect the output
|
|
|
* @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.
|
|
|
* @param {string} options.locale - override the locale of this DateTime
|
|
|
* @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days"
|
|
|
* @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this
|
|
|
* @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow"
|
|
|
* @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana"
|
|
|
* @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain"
|
|
|
* @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago"
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_proto.toRelativeCalendar = function toRelativeCalendar(options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!this.isValid) return null;
|
|
|
return diffRelative(options.base || DateTime.fromObject({
|
|
|
zone: this.zone
|
|
|
}), this, Object.assign(options, {
|
|
|
numeric: "auto",
|
|
|
units: ["years", "months", "days"],
|
|
|
calendary: true
|
|
|
}));
|
|
|
}
|
|
|
/**
|
|
|
* Return the min of several date times
|
|
|
* @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum
|
|
|
* @return {DateTime} the min DateTime, or undefined if called with no argument
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.min = function min() {
|
|
|
for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
dateTimes[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
if (!dateTimes.every(DateTime.isDateTime)) {
|
|
|
throw new InvalidArgumentError("min requires all arguments be DateTimes");
|
|
|
}
|
|
|
|
|
|
return bestBy(dateTimes, function (i) {
|
|
|
return i.valueOf();
|
|
|
}, Math.min);
|
|
|
}
|
|
|
/**
|
|
|
* Return the max of several date times
|
|
|
* @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum
|
|
|
* @return {DateTime} the max DateTime, or undefined if called with no argument
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.max = function max() {
|
|
|
for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
dateTimes[_key2] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
if (!dateTimes.every(DateTime.isDateTime)) {
|
|
|
throw new InvalidArgumentError("max requires all arguments be DateTimes");
|
|
|
}
|
|
|
|
|
|
return bestBy(dateTimes, function (i) {
|
|
|
return i.valueOf();
|
|
|
}, Math.max);
|
|
|
} // MISC
|
|
|
|
|
|
/**
|
|
|
* Explain how a string would be parsed by fromFormat()
|
|
|
* @param {string} text - the string to parse
|
|
|
* @param {string} fmt - the format the string is expected to be in (see description)
|
|
|
* @param {Object} options - options taken by fromFormat()
|
|
|
* @return {Object}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
var _options = options,
|
|
|
_options$locale = _options.locale,
|
|
|
locale = _options$locale === void 0 ? null : _options$locale,
|
|
|
_options$numberingSys = _options.numberingSystem,
|
|
|
numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys,
|
|
|
localeToUse = Locale.fromOpts({
|
|
|
locale: locale,
|
|
|
numberingSystem: numberingSystem,
|
|
|
defaultToEN: true
|
|
|
});
|
|
|
return explainFromTokens(localeToUse, text, fmt);
|
|
|
}
|
|
|
/**
|
|
|
* @deprecated use fromFormatExplain instead
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) {
|
|
|
if (options === void 0) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
return DateTime.fromFormatExplain(text, fmt, options);
|
|
|
} // FORMAT PRESETS
|
|
|
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 10/14/1983
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
;
|
|
|
|
|
|
_createClass(DateTime, [{
|
|
|
key: "isValid",
|
|
|
get: function get() {
|
|
|
return this.invalid === null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an error code if this DateTime is invalid, or null if the DateTime is valid
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidReason",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.reason : null;
|
|
|
}
|
|
|
/**
|
|
|
* Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "invalidExplanation",
|
|
|
get: function get() {
|
|
|
return this.invalid ? this.invalid.explanation : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime
|
|
|
*
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "locale",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.loc.locale : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime
|
|
|
*
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "numberingSystem",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.loc.numberingSystem : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime
|
|
|
*
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "outputCalendar",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.loc.outputCalendar : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the time zone associated with this DateTime.
|
|
|
* @type {Zone}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "zone",
|
|
|
get: function get() {
|
|
|
return this._zone;
|
|
|
}
|
|
|
/**
|
|
|
* Get the name of the time zone.
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "zoneName",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.zone.name : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the year
|
|
|
* @example DateTime.local(2017, 5, 25).year //=> 2017
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "year",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.year : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the quarter
|
|
|
* @example DateTime.local(2017, 5, 25).quarter //=> 2
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "quarter",
|
|
|
get: function get() {
|
|
|
return this.isValid ? Math.ceil(this.c.month / 3) : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the month (1-12).
|
|
|
* @example DateTime.local(2017, 5, 25).month //=> 5
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "month",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.month : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the day of the month (1-30ish).
|
|
|
* @example DateTime.local(2017, 5, 25).day //=> 25
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "day",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.day : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the hour of the day (0-23).
|
|
|
* @example DateTime.local(2017, 5, 25, 9).hour //=> 9
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "hour",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.hour : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the minute of the hour (0-59).
|
|
|
* @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "minute",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.minute : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the second of the minute (0-59).
|
|
|
* @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "second",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.second : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the millisecond of the second (0-999).
|
|
|
* @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "millisecond",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.c.millisecond : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the week year
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
* @example DateTime.local(2014, 12, 31).weekYear //=> 2015
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weekYear",
|
|
|
get: function get() {
|
|
|
return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the week number of the week year (1-52ish).
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
* @example DateTime.local(2017, 5, 25).weekNumber //=> 21
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weekNumber",
|
|
|
get: function get() {
|
|
|
return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the day of the week.
|
|
|
* 1 is Monday and 7 is Sunday
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
* @example DateTime.local(2014, 11, 31).weekday //=> 4
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weekday",
|
|
|
get: function get() {
|
|
|
return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the ordinal (meaning the day of the year)
|
|
|
* @example DateTime.local(2017, 5, 25).ordinal //=> 145
|
|
|
* @type {number|DateTime}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "ordinal",
|
|
|
get: function get() {
|
|
|
return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the human readable short month name, such as 'Oct'.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @example DateTime.local(2017, 10, 30).monthShort //=> Oct
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "monthShort",
|
|
|
get: function get() {
|
|
|
return this.isValid ? Info.months("short", {
|
|
|
locObj: this.loc
|
|
|
})[this.month - 1] : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the human readable long month name, such as 'October'.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @example DateTime.local(2017, 10, 30).monthLong //=> October
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "monthLong",
|
|
|
get: function get() {
|
|
|
return this.isValid ? Info.months("long", {
|
|
|
locObj: this.loc
|
|
|
})[this.month - 1] : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the human readable short weekday, such as 'Mon'.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weekdayShort",
|
|
|
get: function get() {
|
|
|
return this.isValid ? Info.weekdays("short", {
|
|
|
locObj: this.loc
|
|
|
})[this.weekday - 1] : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the human readable long weekday, such as 'Monday'.
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weekdayLong",
|
|
|
get: function get() {
|
|
|
return this.isValid ? Info.weekdays("long", {
|
|
|
locObj: this.loc
|
|
|
})[this.weekday - 1] : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get the UTC offset of this DateTime in minutes
|
|
|
* @example DateTime.now().offset //=> -240
|
|
|
* @example DateTime.utc().offset //=> 0
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "offset",
|
|
|
get: function get() {
|
|
|
return this.isValid ? +this.o : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Get the short human name for the zone's current offset, for example "EST" or "EDT".
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "offsetNameShort",
|
|
|
get: function get() {
|
|
|
if (this.isValid) {
|
|
|
return this.zone.offsetName(this.ts, {
|
|
|
format: "short",
|
|
|
locale: this.locale
|
|
|
});
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time".
|
|
|
* Defaults to the system's locale if no locale has been specified
|
|
|
* @type {string}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "offsetNameLong",
|
|
|
get: function get() {
|
|
|
if (this.isValid) {
|
|
|
return this.zone.offsetName(this.ts, {
|
|
|
format: "long",
|
|
|
locale: this.locale
|
|
|
});
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get whether this zone's offset ever changes, as in a DST.
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "isOffsetFixed",
|
|
|
get: function get() {
|
|
|
return this.isValid ? this.zone.universal : null;
|
|
|
}
|
|
|
/**
|
|
|
* Get whether the DateTime is in a DST.
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "isInDST",
|
|
|
get: function get() {
|
|
|
if (this.isOffsetFixed) {
|
|
|
return false;
|
|
|
} else {
|
|
|
return this.offset > this.set({
|
|
|
month: 1
|
|
|
}).offset || this.offset > this.set({
|
|
|
month: 5
|
|
|
}).offset;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Returns true if this DateTime is in a leap year, false otherwise
|
|
|
* @example DateTime.local(2016).isInLeapYear //=> true
|
|
|
* @example DateTime.local(2013).isInLeapYear //=> false
|
|
|
* @type {boolean}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "isInLeapYear",
|
|
|
get: function get() {
|
|
|
return isLeapYear(this.year);
|
|
|
}
|
|
|
/**
|
|
|
* Returns the number of days in this DateTime's month
|
|
|
* @example DateTime.local(2016, 2).daysInMonth //=> 29
|
|
|
* @example DateTime.local(2016, 3).daysInMonth //=> 31
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "daysInMonth",
|
|
|
get: function get() {
|
|
|
return daysInMonth(this.year, this.month);
|
|
|
}
|
|
|
/**
|
|
|
* Returns the number of days in this DateTime's year
|
|
|
* @example DateTime.local(2016).daysInYear //=> 366
|
|
|
* @example DateTime.local(2013).daysInYear //=> 365
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "daysInYear",
|
|
|
get: function get() {
|
|
|
return this.isValid ? daysInYear(this.year) : NaN;
|
|
|
}
|
|
|
/**
|
|
|
* Returns the number of weeks in this DateTime's year
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_week_date
|
|
|
* @example DateTime.local(2004).weeksInWeekYear //=> 53
|
|
|
* @example DateTime.local(2013).weeksInWeekYear //=> 52
|
|
|
* @type {number}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "weeksInWeekYear",
|
|
|
get: function get() {
|
|
|
return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;
|
|
|
}
|
|
|
}], [{
|
|
|
key: "DATE_SHORT",
|
|
|
get: function get() {
|
|
|
return DATE_SHORT;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Oct 14, 1983'
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATE_MED",
|
|
|
get: function get() {
|
|
|
return DATE_MED;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Fri, Oct 14, 1983'
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATE_MED_WITH_WEEKDAY",
|
|
|
get: function get() {
|
|
|
return DATE_MED_WITH_WEEKDAY;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'October 14, 1983'
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATE_FULL",
|
|
|
get: function get() {
|
|
|
return DATE_FULL;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Tuesday, October 14, 1983'
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATE_HUGE",
|
|
|
get: function get() {
|
|
|
return DATE_HUGE;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_SIMPLE",
|
|
|
get: function get() {
|
|
|
return TIME_SIMPLE;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return TIME_WITH_SECONDS;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_WITH_SHORT_OFFSET",
|
|
|
get: function get() {
|
|
|
return TIME_WITH_SHORT_OFFSET;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_WITH_LONG_OFFSET",
|
|
|
get: function get() {
|
|
|
return TIME_WITH_LONG_OFFSET;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30', always 24-hour.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_24_SIMPLE",
|
|
|
get: function get() {
|
|
|
return TIME_24_SIMPLE;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23', always 24-hour.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_24_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return TIME_24_WITH_SECONDS;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_24_WITH_SHORT_OFFSET",
|
|
|
get: function get() {
|
|
|
return TIME_24_WITH_SHORT_OFFSET;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "TIME_24_WITH_LONG_OFFSET",
|
|
|
get: function get() {
|
|
|
return TIME_24_WITH_LONG_OFFSET;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_SHORT",
|
|
|
get: function get() {
|
|
|
return DATETIME_SHORT;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_SHORT_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return DATETIME_SHORT_WITH_SECONDS;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_MED",
|
|
|
get: function get() {
|
|
|
return DATETIME_MED;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_MED_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return DATETIME_MED_WITH_SECONDS;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_MED_WITH_WEEKDAY",
|
|
|
get: function get() {
|
|
|
return DATETIME_MED_WITH_WEEKDAY;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_FULL",
|
|
|
get: function get() {
|
|
|
return DATETIME_FULL;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_FULL_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return DATETIME_FULL_WITH_SECONDS;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_HUGE",
|
|
|
get: function get() {
|
|
|
return DATETIME_HUGE;
|
|
|
}
|
|
|
/**
|
|
|
* {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
}, {
|
|
|
key: "DATETIME_HUGE_WITH_SECONDS",
|
|
|
get: function get() {
|
|
|
return DATETIME_HUGE_WITH_SECONDS;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return DateTime;
|
|
|
}();
|
|
|
function friendlyDateTime(dateTimeish) {
|
|
|
if (DateTime.isDateTime(dateTimeish)) {
|
|
|
return dateTimeish;
|
|
|
} else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {
|
|
|
return DateTime.fromJSDate(dateTimeish);
|
|
|
} else if (dateTimeish && typeof dateTimeish === "object") {
|
|
|
return DateTime.fromObject(dateTimeish);
|
|
|
} else {
|
|
|
throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var DateTime_1 = DateTime;
|
|
|
|
|
|
const DefaultTextColor = "white";
|
|
|
const DefaultColor = "blue";
|
|
|
function getEventInformation(fileData) {
|
|
|
const matcher = /```itinerary-event\n([^`]*)\n```/g;
|
|
|
const matches = [];
|
|
|
let match;
|
|
|
do {
|
|
|
match = matcher.exec(fileData);
|
|
|
if (match) {
|
|
|
try {
|
|
|
matches.push(parseEventSpec(match[1]));
|
|
|
}
|
|
|
catch (e) {
|
|
|
// Although you're probably tempted to raise an error here, it
|
|
|
// won't help you -- this isn't called from within a render loop.
|
|
|
}
|
|
|
}
|
|
|
} while (match);
|
|
|
return matches;
|
|
|
}
|
|
|
function parseEventSpec(eventSpec) {
|
|
|
var _a, _b;
|
|
|
const parsed = obsidian.parseYaml(eventSpec);
|
|
|
// Apply timezones to start/end times if provided
|
|
|
if (!parsed.allDay) {
|
|
|
if (parsed.start && (parsed.startTimeZone || parsed.timeZone)) {
|
|
|
parsed.start = DateTime_1.fromISO(parsed.start, {
|
|
|
zone: parsed.startTimeZone || parsed.timeZone,
|
|
|
}).toISO();
|
|
|
}
|
|
|
if (parsed.end && (parsed.endTimeZone || parsed.timeZone)) {
|
|
|
parsed.end = DateTime_1.fromISO(parsed.end, {
|
|
|
zone: parsed.endTimeZone || parsed.timeZone,
|
|
|
}).toISO();
|
|
|
}
|
|
|
}
|
|
|
if (!parsed.backgroundColor) {
|
|
|
parsed.backgroundColor = (_a = parsed.color) !== null && _a !== void 0 ? _a : DefaultColor;
|
|
|
}
|
|
|
if (!parsed.borderColor) {
|
|
|
parsed.borderColor = (_b = parsed.color) !== null && _b !== void 0 ? _b : DefaultColor;
|
|
|
}
|
|
|
if (!parsed.textColor) {
|
|
|
parsed.textColor = DefaultTextColor;
|
|
|
}
|
|
|
if (!parsed.title) {
|
|
|
parsed.title = "Untitled Event";
|
|
|
}
|
|
|
return parsed;
|
|
|
}
|
|
|
|
|
|
var n,l,u,t,r$1,o,f$1,e$1={},c$1=[],s=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function a$1(n,l){for(var u in l)n[u]=l[u];return n}function h(n){var l=n.parentNode;l&&l.removeChild(n);}function v$1(l,u,i){var t,r,o,f={};for(o in u)"key"==o?t=u[o]:"ref"==o?r=u[o]:f[o]=u[o];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===f[o]&&(f[o]=l.defaultProps[o]);return y(l,f,t,r,null)}function y(n,i,t,r,o){var f={type:n,props:i,key:t,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++u:o};return null==o&&null!=l.vnode&&l.vnode(f),f}function p(){return {current:null}}function d(n){return n.children}function _(n,l){this.props=n,this.context=l;}function k(n,l){if(null==l)return n.__?k(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?k(n):null}function b$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return b$1(n)}}function m(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g$1.__r++||o!==l.debounceRendering)&&((o=l.debounceRendering)||r$1)(g$1);}function g$1(){for(var n;g$1.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,r,o;n.__d&&(r=(t=(l=n).__v).__e,(o=l.__P)&&(u=[],(i=a$1({},t)).__v=t.__v+1,j$2(o,t,i,l.__n,void 0!==o.ownerSVGElement,null!=t.__h?[r]:null,u,null==r?k(t):r,t.__h),z$1(u,t),t.__e!=r&&b$1(t)));});}function w$1(n,l,u,i,t,r,o,f,s,a){var h,v,p,_,b,m,g,w=i&&i.__k||c$1,A=w.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(_=u.__k[h]=null==(_=l[h])||"boolean"==typeof _?null:"string"==typeof _||"number"==typeof _||"bigint"==typeof _?y(null,_,null,null,_):Array.isArray(_)?y(d,{children:_},null,null,null):_.__b>0?y(_.type,_.props,_.key,null,_.__v):_)){if(_.__=u,_.__b=u.__b+1,null===(p=w[h])||p&&_.key==p.key&&_.type===p.type)w[h]=void 0;else for(v=0;v<A;v++){if((p=w[v])&&_.key==p.key&&_.type===p.type){w[v]=void 0;break}p=null;}j$2(n,_,p=p||e$1,t,r,o,f,s,a),b=_.__e,(v=_.ref)&&p.ref!=v&&(g||(g=[]),p.ref&&g.push(p.ref,null,_),g.push(v,_.__c||b,_)),null!=b?(null==m&&(m=b),"function"==typeof _.type&&_.__k===p.__k?_.__d=s=x$1(_,s,n):s=P$1(n,_,p,w,b,s),"function"==typeof u.type&&(u.__d=s)):s&&p.__e==s&&s.parentNode!=n&&(s=k(p));}for(u.__e=m,h=A;h--;)null!=w[h]&&("function"==typeof u.type&&null!=w[h].__e&&w[h].__e==u.__d&&(u.__d=k(i,h+1)),N(w[h],w[h]));if(g)for(h=0;h<g.length;h++)M$1(g[h],g[++h],g[++h]);}function x$1(n,l,u){for(var i,t=n.__k,r=0;t&&r<t.length;r++)(i=t[r])&&(i.__=n,l="function"==typeof i.type?x$1(i,l,u):P$1(u,i,i,t,i.__e,l));return l}function A$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){A$1(n,l);}):l.push(n)),l}function P$1(n,l,u,i,t,r){var o,f,e;if(void 0!==l.__d)o=l.__d,l.__d=void 0;else if(null==u||t!=r||null==t.parentNode)n:if(null==r||r.parentNode!==n)n.appendChild(t),o=null;else {for(f=r,e=0;(f=f.nextSibling)&&e<i.length;e+=2)if(f==t)break n;n.insertBefore(t,r),o=r;}return void 0!==o?o:t.nextSibling}function C$1(n,l,u,i,t){var r;for(r in u)"children"===r||"key"===r||r in l||H(n,r,null,u[r],i);for(r in l)t&&"function"!=typeof l[r]||"children"===r||"key"===r||"value"===r||"checked"===r||u[r]===l[r]||H(n,r,l[r],u[r],i);}function $$1(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||s.test(l)?u:u+"px";}function H(n,l,u,i,t){var r;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||$$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||$$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])r=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?i||n.addEventListener(l,r?T$1:I$1,r):n.removeEventListener(l,r?T$1:I$1,r);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink[H:h]/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null!=u&&(!1!==u||"a"===l[0]&&"r"===l[1])?n.setAttribute(l,u):n.removeAttribute(l));}}function I$1(n){this.l[n.type+!1](l.event?l.event(n):n);}function T$1(n){this.l[n.type+!0](l.event?l.event(n):n);}function j$2(n,u,i,t,r,o,f,e,c){var s,h,v,y,p,k,b,m,g,x,A,P=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,o=[e]),(s=l.__b)&&s(u);try{n:if("function"==typeof P){if(m=u.props,g=(s=P.contextType)&&t[s.__c],x=s?g?g.props.value:s.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:("prototype"in P&&P.prototype.render?u.__c=h=new P(m,x):(u.__c=h=new _(m,x),h.constructor=P,h.render=O$1),g&&g.sub(h),h.props=m,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[]),null==h.__s&&(h.__s=h.state),null!=P.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=a$1({},h.__s)),a$1(h.__s,P.getDerivedStateFromProps(m,h.__s))),y=h.props,p=h.state,v)null==P.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(null==P.getDerivedStateFromProps&&m!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(m,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(m,h.__s,x)||u.__v===i.__v){h.props=m,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(m,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,p,k);});}h.context=x,h.props=m,h.state=h.__s,(s=l.__r)&&s(u),h.__d=!1,h.__v=u,h.__P=n,s=h.render(h.props,h.state,h.context),h.state=h.__s,null!=h.getChildContext&&(t=a$1(a$1({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,p)),A=null!=s&&s.type===d&&null==s.key?s.props.children:s,w$1(n,Array.isArray(A)?A:[A],u,i,t,r,o,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1;}else null==o&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L$1(i.__e,u,i,t,r,o,f,c);(s=l.diffed)&&s(u);}catch(n){u.__v=null,(c||null!=o)&&(u.__e=e,u.__h=!!c,o[o.indexOf(e)]=null),l.__e(n,u,i);}}function z$1(n,u){l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l.__e(n,u.__v);}});}function L$1(l,u,i,t,r,o,f,c){var s,a,v,y=i.props,p=u.props,d=u.type,_=0;if("svg"===d&&(r=!0),null!=o)for(;_<o.length;_++)if((s=o[_])&&(s===l||(d?s.localName==d:3==s.nodeType))){l=s,o[_]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=r?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),o=null,c=!1;}if(null===d)y===p||c&&l.data===p||(l.data=p);else {if(o=o&&n.call(l.childNodes),a=(y=i.props||e$1).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=o)for(y={},_=0;_<l.attributes.length;_++)y[l.attributes[_].name]=l.attributes[_].value;(v||a)&&(v&&(a&&v.__html==a.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||""));}if(C$1(l,p,y,r,c),v)u.__k=[];else if(_=u.props.children,w$1(l,Array.isArray(_)?_:[_],u,i,t,r&&"foreignObject"!==d,o,f,o?o[0]:i.__k&&k(i,0),c),null!=o)for(_=o.length;_--;)null!=o[_]&&h(o[_]);c||("value"in p&&void 0!==(_=p.value)&&(_!==l.value||"progress"===d&&!_)&&H(l,"value",_,y.value,!1),"checked"in p&&void 0!==(_=p.checked)&&_!==l.checked&&H(l,"checked",_,y.checked,!1));}return l}function M$1(n,u,i){try{"function"==typeof n?n(u):n.current=u;}catch(n){l.__e(n,i);}}function N(n,u,i){var t,r;if(l.unmount&&l.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M$1(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(n){l.__e(n,u);}t.base=t.__P=null;}if(t=n.__k)for(r=0;r<t.length;r++)t[r]&&N(t[r],u,"function"!=typeof n.type);i||null==n.__e||h(n.__e),n.__e=n.__d=void 0;}function O$1(n,l,u){return this.constructor(n,u)}function S$1(u,i,t){var r,o,f;l.__&&l.__(u,i),o=(r="function"==typeof t)?null:t&&t.__k||i.__k,f=[],j$2(i,u=(!r&&t||i).__k=v$1(d,null,[u]),o||e$1,e$1,void 0!==i.ownerSVGElement,!r&&t?[t]:o?null:i.firstChild?n.call(i.childNodes):null,f,!r&&t?t:o?o.__e:i.firstChild,r),z$1(f,u);}function D$1(n,l){var u={__c:l="__cC"+f$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(m);},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=c$1.slice,l={__e:function(n,l){for(var u,i,t;l=l.__;)if((u=l.__c)&&!u.__)try{if((i=u.constructor)&&null!=i.getDerivedStateFromError&&(u.setState(i.getDerivedStateFromError(n)),t=u.__d),null!=u.componentDidCatch&&(u.componentDidCatch(n),t=u.__d),t)return u.__E=u}catch(l){n=l;}throw n}},u=0,_.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=a$1({},this.state),"function"==typeof n&&(n=n(a$1({},u),this.props)),n&&a$1(u,n),null!=n&&this.__v&&(l&&this.__h.push(l),m(this));},_.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),m(this));},_.prototype.render=d,t=[],r$1="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,g$1.__r=0,f$1=0;
|
|
|
|
|
|
var r,i=[],c=l.__b,f=l.__r,e=l.diffed,a=l.__c,v=l.unmount;function x(){i.forEach(function(t){if(t.__P)try{t.__H.__h.forEach(g),t.__H.__h.forEach(j$1),t.__H.__h=[];}catch(u){t.__H.__h=[],l.__e(u,t.__v);}}),i=[];}l.__b=function(n){c&&c(n);},l.__r=function(n){f&&f(n);var r=(n.__c).__H;r&&(r.__h.forEach(g),r.__h.forEach(j$1),r.__h=[]);},l.diffed=function(t){e&&e(t);var o=t.__c;o&&o.__H&&o.__H.__h.length&&(1!==i.push(o)&&r===l.requestAnimationFrame||((r=l.requestAnimationFrame)||function(n){var t,u=function(){clearTimeout(r),b&&cancelAnimationFrame(t),setTimeout(n);},r=setTimeout(u,100);b&&(t=requestAnimationFrame(u));})(x));},l.__c=function(t,u){u.some(function(t){try{t.__h.forEach(g),t.__h=t.__h.filter(function(n){return !n.__||j$1(n)});}catch(r){u.some(function(n){n.__h&&(n.__h=[]);}),u=[],l.__e(r,t.__v);}}),a&&a(t,u);},l.unmount=function(t){v&&v(t);var u=t.__c;if(u&&u.__H)try{u.__H.__.forEach(g);}catch(t){l.__e(t,u.__v);}};var b="function"==typeof requestAnimationFrame;function g(n){"function"==typeof n.__c&&n.__c();}function j$1(n){n.__c=n.__();}
|
|
|
|
|
|
function S(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function E(n){this.props=n;}(E.prototype=new _).isPureReactComponent=!0,E.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var w=l.__b;l.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),w&&w(n);};var A=l.__e;l.__e=function(n,t,e){if(n.then)for(var r,u=t;u=u.__;)if((r=u.__c)&&r.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),r.__c(n,t);A(n,t,e);};var O=l.unmount;function L(){this.__u=0,this.t=null,this.__b=null;}function U(n){var t=n.__.__c;return t&&t.__e&&t.__e(n)}function M(){this.u=null,this.o=null;}l.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),O&&O(n);},(L.prototype=new _).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=U(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__e){var n=r.state.__e;r.__v.__k[0]=function n(t,e,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)}),t.__c&&t.__c.__P===e&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__e:r.__b=null});t=r.t.pop();)t.forceUpdate();}},c=!0===t.__h;r.__u++||c||r.setState({__e:r.__b=r.__v.__k[0]}),n.then(i,i);},L.prototype.componentWillUnmount=function(){this.t=[];},L.prototype.render=function(n,t){if(this.__b){if(this.__v.__k){var e=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function n(t,e,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),t.__c.__H=null),null!=(t=S({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=e),t.__c=null),t.__k=t.__k&&t.__k.map(function(t){return n(t,e,r)})),t}(this.__b,e,r.__O=r.__P);}this.__b=null;}var u=t.__e&&v$1(d,null,n.fallback);return u&&(u.__h=null),[v$1(d,null,t.__e?null:n.children),u]};var T=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function D(n){return this.getChildContext=function(){return n.context},n.children}function I(n){var t=this,e=n.i;t.componentWillUnmount=function(){S$1(null,t.l),t.l=null,t.i=null;},t.i&&t.i!==e&&t.componentWillUnmount(),n.__v?(t.l||(t.i=e,t.l={nodeType:1,parentNode:e,childNodes:[],appendChild:function(n){this.childNodes.push(n),t.i.appendChild(n);},insertBefore:function(n,e){this.childNodes.push(n),t.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),t.i.removeChild(n);}}),S$1(v$1(D,{context:t.context},n.__v),t.l)):t.l&&t.componentWillUnmount();}function W(n,t){return v$1(I,{__v:n,i:t})}(M.prototype=new _).__e=function(n){var t=this,e=U(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),T(t,n,r)):u();};e?e(o):o();}},M.prototype.render=function(n){this.u=null,this.o=new Map;var t=A$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},M.prototype.componentDidUpdate=M.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){T(n,e,t);});};var j="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,P=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,V="undefined"!=typeof document,z=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};_.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(n){Object.defineProperty(_.prototype,n,{configurable:!0,get:function(){return this["UNSAFE_"+n]},set:function(t){Object.defineProperty(this,n,{configurable:!0,writable:!0,value:t});}});});var Z=l.event;function Y(){}function $(){return this.cancelBubble}function q(){return this.defaultPrevented}l.event=function(n){return Z&&(n=Z(n)),n.persist=Y,n.isPropagationStopped=$,n.isDefaultPrevented=q,n.nativeEvent=n};var J={configurable:!0,get:function(){return this.class}},K=l.vnode;l.vnode=function(n){var t=n.type,e=n.props,r=e;if("string"==typeof t){var u=-1===t.indexOf("-");for(var o in r={},e){var i=e[o];V&&"children"===o&&"noscript"===t||"value"===o&&"defaultValue"in e&&null==i||("defaultValue"===o&&"value"in e&&null==e.value?o="value":"download"===o&&!0===i?i="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!z(e.type)?o="oninput":/^on(Ani|Tra|Tou|BeforeInp)/.test(o)?o=o.toLowerCase():u&&P.test(o)?o=o.replace(/[A-Z0-9]/,"-$&").toLowerCase():null===i&&(i=void 0),r[o]=i);}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=A$1(e.children).forEach(function(n){n.props.selected=-1!=r.value.indexOf(n.props.value);})),"select"==t&&null!=r.defaultValue&&(r.value=A$1(e.children).forEach(function(n){n.props.selected=r.multiple?-1!=r.defaultValue.indexOf(n.props.value):r.defaultValue==n.props.value;})),n.props=r;}t&&e.class!=e.className&&(J.enumerable="className"in e,null!=e.className&&(r.class=e.className),Object.defineProperty(r,"className",J)),n.$$typeof=j,K&&K(n);};var Q=l.__r;l.__r=function(n){Q&&Q(n);};
|
|
|
|
|
|
var globalObj = typeof globalThis !== 'undefined' ? globalThis : window; // // TODO: streamline when killing IE11 support
|
|
|
if (globalObj.FullCalendarVDom) {
|
|
|
console.warn('FullCalendar VDOM already loaded');
|
|
|
}
|
|
|
else {
|
|
|
globalObj.FullCalendarVDom = {
|
|
|
Component: _,
|
|
|
createElement: v$1,
|
|
|
render: S$1,
|
|
|
createRef: p,
|
|
|
Fragment: d,
|
|
|
createContext: createContext$1,
|
|
|
createPortal: W,
|
|
|
flushToDom: flushToDom$1,
|
|
|
unmountComponentAtNode: unmountComponentAtNode$1,
|
|
|
};
|
|
|
}
|
|
|
// HACKS...
|
|
|
// TODO: lock version
|
|
|
// TODO: link gh issues
|
|
|
function flushToDom$1() {
|
|
|
var oldDebounceRendering = l.debounceRendering; // orig
|
|
|
var callbackQ = [];
|
|
|
function execCallbackSync(callback) {
|
|
|
callbackQ.push(callback);
|
|
|
}
|
|
|
l.debounceRendering = execCallbackSync;
|
|
|
S$1(v$1(FakeComponent, {}), document.createElement('div'));
|
|
|
while (callbackQ.length) {
|
|
|
callbackQ.shift()();
|
|
|
}
|
|
|
l.debounceRendering = oldDebounceRendering;
|
|
|
}
|
|
|
var FakeComponent = /** @class */ (function (_super) {
|
|
|
__extends(FakeComponent, _super);
|
|
|
function FakeComponent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
FakeComponent.prototype.render = function () { return v$1('div', {}); };
|
|
|
FakeComponent.prototype.componentDidMount = function () { this.setState({}); };
|
|
|
return FakeComponent;
|
|
|
}(_));
|
|
|
function createContext$1(defaultValue) {
|
|
|
var ContextType = D$1(defaultValue);
|
|
|
var origProvider = ContextType.Provider;
|
|
|
ContextType.Provider = function () {
|
|
|
var _this = this;
|
|
|
var isNew = !this.getChildContext;
|
|
|
var children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
|
|
if (isNew) {
|
|
|
var subs_1 = [];
|
|
|
this.shouldComponentUpdate = function (_props) {
|
|
|
if (_this.props.value !== _props.value) {
|
|
|
subs_1.forEach(function (c) {
|
|
|
c.context = _props.value;
|
|
|
c.forceUpdate();
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
this.sub = function (c) {
|
|
|
subs_1.push(c);
|
|
|
var old = c.componentWillUnmount;
|
|
|
c.componentWillUnmount = function () {
|
|
|
subs_1.splice(subs_1.indexOf(c), 1);
|
|
|
old && old.call(c);
|
|
|
};
|
|
|
};
|
|
|
}
|
|
|
return children;
|
|
|
};
|
|
|
return ContextType;
|
|
|
}
|
|
|
function unmountComponentAtNode$1(node) {
|
|
|
S$1(null, node);
|
|
|
}
|
|
|
|
|
|
/// <reference types="@fullcalendar/core-preact" />
|
|
|
if (typeof FullCalendarVDom === 'undefined') {
|
|
|
throw new Error('Please import the top-level fullcalendar lib before attempting to import a plugin.');
|
|
|
}
|
|
|
var Component = FullCalendarVDom.Component;
|
|
|
var createElement = FullCalendarVDom.createElement;
|
|
|
var render = FullCalendarVDom.render;
|
|
|
var createRef = FullCalendarVDom.createRef;
|
|
|
var Fragment = FullCalendarVDom.Fragment;
|
|
|
var createContext = FullCalendarVDom.createContext;
|
|
|
var createPortal = FullCalendarVDom.createPortal;
|
|
|
var flushToDom = FullCalendarVDom.flushToDom;
|
|
|
var unmountComponentAtNode = FullCalendarVDom.unmountComponentAtNode;
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
|
|
|
// no public types yet. when there are, export from:
|
|
|
// import {} from './api-type-deps'
|
|
|
var EventSourceApi = /** @class */ (function () {
|
|
|
function EventSourceApi(context, internalEventSource) {
|
|
|
this.context = context;
|
|
|
this.internalEventSource = internalEventSource;
|
|
|
}
|
|
|
EventSourceApi.prototype.remove = function () {
|
|
|
this.context.dispatch({
|
|
|
type: 'REMOVE_EVENT_SOURCE',
|
|
|
sourceId: this.internalEventSource.sourceId,
|
|
|
});
|
|
|
};
|
|
|
EventSourceApi.prototype.refetch = function () {
|
|
|
this.context.dispatch({
|
|
|
type: 'FETCH_EVENT_SOURCES',
|
|
|
sourceIds: [this.internalEventSource.sourceId],
|
|
|
isRefetch: true,
|
|
|
});
|
|
|
};
|
|
|
Object.defineProperty(EventSourceApi.prototype, "id", {
|
|
|
get: function () {
|
|
|
return this.internalEventSource.publicId;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventSourceApi.prototype, "url", {
|
|
|
get: function () {
|
|
|
return this.internalEventSource.meta.url;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventSourceApi.prototype, "format", {
|
|
|
get: function () {
|
|
|
return this.internalEventSource.meta.format; // TODO: bad. not guaranteed
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
return EventSourceApi;
|
|
|
}());
|
|
|
|
|
|
function removeElement(el) {
|
|
|
if (el.parentNode) {
|
|
|
el.parentNode.removeChild(el);
|
|
|
}
|
|
|
}
|
|
|
// Querying
|
|
|
// ----------------------------------------------------------------------------------------------------------------
|
|
|
function elementClosest(el, selector) {
|
|
|
if (el.closest) {
|
|
|
return el.closest(selector);
|
|
|
// really bad fallback for IE
|
|
|
// from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
|
|
|
}
|
|
|
if (!document.documentElement.contains(el)) {
|
|
|
return null;
|
|
|
}
|
|
|
do {
|
|
|
if (elementMatches(el, selector)) {
|
|
|
return el;
|
|
|
}
|
|
|
el = (el.parentElement || el.parentNode);
|
|
|
} while (el !== null && el.nodeType === 1);
|
|
|
return null;
|
|
|
}
|
|
|
function elementMatches(el, selector) {
|
|
|
var method = el.matches || el.matchesSelector || el.msMatchesSelector;
|
|
|
return method.call(el, selector);
|
|
|
}
|
|
|
// accepts multiple subject els
|
|
|
// returns a real array. good for methods like forEach
|
|
|
// TODO: accept the document
|
|
|
function findElements(container, selector) {
|
|
|
var containers = container instanceof HTMLElement ? [container] : container;
|
|
|
var allMatches = [];
|
|
|
for (var i = 0; i < containers.length; i += 1) {
|
|
|
var matches = containers[i].querySelectorAll(selector);
|
|
|
for (var j = 0; j < matches.length; j += 1) {
|
|
|
allMatches.push(matches[j]);
|
|
|
}
|
|
|
}
|
|
|
return allMatches;
|
|
|
}
|
|
|
// Style
|
|
|
// ----------------------------------------------------------------------------------------------------------------
|
|
|
var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
|
|
|
function applyStyle(el, props) {
|
|
|
for (var propName in props) {
|
|
|
applyStyleProp(el, propName, props[propName]);
|
|
|
}
|
|
|
}
|
|
|
function applyStyleProp(el, name, val) {
|
|
|
if (val == null) {
|
|
|
el.style[name] = '';
|
|
|
}
|
|
|
else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
|
|
|
el.style[name] = val + "px";
|
|
|
}
|
|
|
else {
|
|
|
el.style[name] = val;
|
|
|
}
|
|
|
}
|
|
|
// Event Handling
|
|
|
// ----------------------------------------------------------------------------------------------------------------
|
|
|
// if intercepting bubbled events at the document/window/body level,
|
|
|
// and want to see originating element (the 'target'), use this util instead
|
|
|
// of `ev.target` because it goes within web-component boundaries.
|
|
|
function getEventTargetViaRoot(ev) {
|
|
|
var _a, _b;
|
|
|
return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
|
|
|
}
|
|
|
// Event Delegation
|
|
|
// ----------------------------------------------------------------------------------------------------------------
|
|
|
function buildDelegationHandler(selector, handler) {
|
|
|
return function (ev) {
|
|
|
var matchedChild = elementClosest(ev.target, selector);
|
|
|
if (matchedChild) {
|
|
|
handler.call(matchedChild, ev, matchedChild);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
function listenBySelector(container, eventType, selector, handler) {
|
|
|
var attachedHandler = buildDelegationHandler(selector, handler);
|
|
|
container.addEventListener(eventType, attachedHandler);
|
|
|
return function () {
|
|
|
container.removeEventListener(eventType, attachedHandler);
|
|
|
};
|
|
|
}
|
|
|
function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
|
|
|
var currentMatchedChild;
|
|
|
return listenBySelector(container, 'mouseover', selector, function (mouseOverEv, matchedChild) {
|
|
|
if (matchedChild !== currentMatchedChild) {
|
|
|
currentMatchedChild = matchedChild;
|
|
|
onMouseEnter(mouseOverEv, matchedChild);
|
|
|
var realOnMouseLeave_1 = function (mouseLeaveEv) {
|
|
|
currentMatchedChild = null;
|
|
|
onMouseLeave(mouseLeaveEv, matchedChild);
|
|
|
matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);
|
|
|
};
|
|
|
// listen to the next mouseleave, and then unattach
|
|
|
matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var guidNumber = 0;
|
|
|
function guid() {
|
|
|
guidNumber += 1;
|
|
|
return String(guidNumber);
|
|
|
}
|
|
|
function parseFieldSpecs(input) {
|
|
|
var specs = [];
|
|
|
var tokens = [];
|
|
|
var i;
|
|
|
var token;
|
|
|
if (typeof input === 'string') {
|
|
|
tokens = input.split(/\s*,\s*/);
|
|
|
}
|
|
|
else if (typeof input === 'function') {
|
|
|
tokens = [input];
|
|
|
}
|
|
|
else if (Array.isArray(input)) {
|
|
|
tokens = input;
|
|
|
}
|
|
|
for (i = 0; i < tokens.length; i += 1) {
|
|
|
token = tokens[i];
|
|
|
if (typeof token === 'string') {
|
|
|
specs.push(token.charAt(0) === '-' ?
|
|
|
{ field: token.substring(1), order: -1 } :
|
|
|
{ field: token, order: 1 });
|
|
|
}
|
|
|
else if (typeof token === 'function') {
|
|
|
specs.push({ func: token });
|
|
|
}
|
|
|
}
|
|
|
return specs;
|
|
|
}
|
|
|
function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
|
|
|
var i;
|
|
|
var cmp;
|
|
|
for (i = 0; i < fieldSpecs.length; i += 1) {
|
|
|
cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
|
|
|
if (cmp) {
|
|
|
return cmp;
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
function compareByFieldSpec(obj0, obj1, fieldSpec) {
|
|
|
if (fieldSpec.func) {
|
|
|
return fieldSpec.func(obj0, obj1);
|
|
|
}
|
|
|
return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
|
|
|
* (fieldSpec.order || 1);
|
|
|
}
|
|
|
function flexibleCompare(a, b) {
|
|
|
if (!a && !b) {
|
|
|
return 0;
|
|
|
}
|
|
|
if (b == null) {
|
|
|
return -1;
|
|
|
}
|
|
|
if (a == null) {
|
|
|
return 1;
|
|
|
}
|
|
|
if (typeof a === 'string' || typeof b === 'string') {
|
|
|
return String(a).localeCompare(String(b));
|
|
|
}
|
|
|
return a - b;
|
|
|
}
|
|
|
/* String Utilities
|
|
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
|
function padStart(val, len) {
|
|
|
var s = String(val);
|
|
|
return '000'.substr(0, len - s.length) + s;
|
|
|
}
|
|
|
function isInt(n) {
|
|
|
return n % 1 === 0;
|
|
|
}
|
|
|
/* FC-specific DOM dimension stuff
|
|
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
|
function computeSmallestCellWidth(cellEl) {
|
|
|
var allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');
|
|
|
var contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');
|
|
|
if (!allWidthEl) {
|
|
|
throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const
|
|
|
}
|
|
|
if (!contentWidthEl) {
|
|
|
throw new Error('needs fc-scrollgrid-shrink-cushion className');
|
|
|
}
|
|
|
return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border
|
|
|
contentWidthEl.getBoundingClientRect().width;
|
|
|
}
|
|
|
|
|
|
var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
|
|
|
// Adding
|
|
|
function addWeeks(m, n) {
|
|
|
var a = dateToUtcArray(m);
|
|
|
a[2] += n * 7;
|
|
|
return arrayToUtcDate(a);
|
|
|
}
|
|
|
function addDays(m, n) {
|
|
|
var a = dateToUtcArray(m);
|
|
|
a[2] += n;
|
|
|
return arrayToUtcDate(a);
|
|
|
}
|
|
|
function addMs(m, n) {
|
|
|
var a = dateToUtcArray(m);
|
|
|
a[6] += n;
|
|
|
return arrayToUtcDate(a);
|
|
|
}
|
|
|
// Diffing (all return floats)
|
|
|
// TODO: why not use ranges?
|
|
|
function diffWeeks(m0, m1) {
|
|
|
return diffDays(m0, m1) / 7;
|
|
|
}
|
|
|
function diffDays(m0, m1) {
|
|
|
return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
|
|
|
}
|
|
|
function diffHours(m0, m1) {
|
|
|
return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
|
|
|
}
|
|
|
function diffMinutes(m0, m1) {
|
|
|
return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
|
|
|
}
|
|
|
function diffSeconds(m0, m1) {
|
|
|
return (m1.valueOf() - m0.valueOf()) / 1000;
|
|
|
}
|
|
|
function diffDayAndTime(m0, m1) {
|
|
|
var m0day = startOfDay(m0);
|
|
|
var m1day = startOfDay(m1);
|
|
|
return {
|
|
|
years: 0,
|
|
|
months: 0,
|
|
|
days: Math.round(diffDays(m0day, m1day)),
|
|
|
milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),
|
|
|
};
|
|
|
}
|
|
|
// Diffing Whole Units
|
|
|
function diffWholeWeeks(m0, m1) {
|
|
|
var d = diffWholeDays(m0, m1);
|
|
|
if (d !== null && d % 7 === 0) {
|
|
|
return d / 7;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function diffWholeDays(m0, m1) {
|
|
|
if (timeAsMs(m0) === timeAsMs(m1)) {
|
|
|
return Math.round(diffDays(m0, m1));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
// Start-Of
|
|
|
function startOfDay(m) {
|
|
|
return arrayToUtcDate([
|
|
|
m.getUTCFullYear(),
|
|
|
m.getUTCMonth(),
|
|
|
m.getUTCDate(),
|
|
|
]);
|
|
|
}
|
|
|
function startOfHour(m) {
|
|
|
return arrayToUtcDate([
|
|
|
m.getUTCFullYear(),
|
|
|
m.getUTCMonth(),
|
|
|
m.getUTCDate(),
|
|
|
m.getUTCHours(),
|
|
|
]);
|
|
|
}
|
|
|
function startOfMinute(m) {
|
|
|
return arrayToUtcDate([
|
|
|
m.getUTCFullYear(),
|
|
|
m.getUTCMonth(),
|
|
|
m.getUTCDate(),
|
|
|
m.getUTCHours(),
|
|
|
m.getUTCMinutes(),
|
|
|
]);
|
|
|
}
|
|
|
function startOfSecond(m) {
|
|
|
return arrayToUtcDate([
|
|
|
m.getUTCFullYear(),
|
|
|
m.getUTCMonth(),
|
|
|
m.getUTCDate(),
|
|
|
m.getUTCHours(),
|
|
|
m.getUTCMinutes(),
|
|
|
m.getUTCSeconds(),
|
|
|
]);
|
|
|
}
|
|
|
// Week Computation
|
|
|
function weekOfYear(marker, dow, doy) {
|
|
|
var y = marker.getUTCFullYear();
|
|
|
var w = weekOfGivenYear(marker, y, dow, doy);
|
|
|
if (w < 1) {
|
|
|
return weekOfGivenYear(marker, y - 1, dow, doy);
|
|
|
}
|
|
|
var nextW = weekOfGivenYear(marker, y + 1, dow, doy);
|
|
|
if (nextW >= 1) {
|
|
|
return Math.min(w, nextW);
|
|
|
}
|
|
|
return w;
|
|
|
}
|
|
|
function weekOfGivenYear(marker, year, dow, doy) {
|
|
|
var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
|
|
|
var dayStart = startOfDay(marker);
|
|
|
var days = Math.round(diffDays(firstWeekStart, dayStart));
|
|
|
return Math.floor(days / 7) + 1; // zero-indexed
|
|
|
}
|
|
|
// start-of-first-week - start-of-year
|
|
|
function firstWeekOffset(year, dow, doy) {
|
|
|
// first-week day -- which january is always in the first week (4 for iso, 1 for other)
|
|
|
var fwd = 7 + dow - doy;
|
|
|
// first-week day local weekday -- which local weekday is fwd
|
|
|
var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
|
|
|
return -fwdlw + fwd - 1;
|
|
|
}
|
|
|
// Array Conversion
|
|
|
function dateToLocalArray(date) {
|
|
|
return [
|
|
|
date.getFullYear(),
|
|
|
date.getMonth(),
|
|
|
date.getDate(),
|
|
|
date.getHours(),
|
|
|
date.getMinutes(),
|
|
|
date.getSeconds(),
|
|
|
date.getMilliseconds(),
|
|
|
];
|
|
|
}
|
|
|
function arrayToLocalDate(a) {
|
|
|
return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
|
|
|
a[3] || 0, a[4] || 0, a[5] || 0);
|
|
|
}
|
|
|
function dateToUtcArray(date) {
|
|
|
return [
|
|
|
date.getUTCFullYear(),
|
|
|
date.getUTCMonth(),
|
|
|
date.getUTCDate(),
|
|
|
date.getUTCHours(),
|
|
|
date.getUTCMinutes(),
|
|
|
date.getUTCSeconds(),
|
|
|
date.getUTCMilliseconds(),
|
|
|
];
|
|
|
}
|
|
|
function arrayToUtcDate(a) {
|
|
|
// according to web standards (and Safari), a month index is required.
|
|
|
// massage if only given a year.
|
|
|
if (a.length === 1) {
|
|
|
a = a.concat([0]);
|
|
|
}
|
|
|
return new Date(Date.UTC.apply(Date, a));
|
|
|
}
|
|
|
// Other Utils
|
|
|
function isValidDate(m) {
|
|
|
return !isNaN(m.valueOf());
|
|
|
}
|
|
|
function timeAsMs(m) {
|
|
|
return m.getUTCHours() * 1000 * 60 * 60 +
|
|
|
m.getUTCMinutes() * 1000 * 60 +
|
|
|
m.getUTCSeconds() * 1000 +
|
|
|
m.getUTCMilliseconds();
|
|
|
}
|
|
|
|
|
|
function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
|
|
|
return {
|
|
|
instanceId: guid(),
|
|
|
defId: defId,
|
|
|
range: range,
|
|
|
forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
|
|
|
forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
|
// Merges an array of objects into a single object.
|
|
|
// The second argument allows for an array of property names who's object values will be merged together.
|
|
|
function mergeProps(propObjs, complexPropsMap) {
|
|
|
var dest = {};
|
|
|
if (complexPropsMap) {
|
|
|
for (var name_1 in complexPropsMap) {
|
|
|
var complexObjs = [];
|
|
|
// collect the trailing object values, stopping when a non-object is discovered
|
|
|
for (var i = propObjs.length - 1; i >= 0; i -= 1) {
|
|
|
var val = propObjs[i][name_1];
|
|
|
if (typeof val === 'object' && val) { // non-null object
|
|
|
complexObjs.unshift(val);
|
|
|
}
|
|
|
else if (val !== undefined) {
|
|
|
dest[name_1] = val; // if there were no objects, this value will be used
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
// if the trailing values were objects, use the merged value
|
|
|
if (complexObjs.length) {
|
|
|
dest[name_1] = mergeProps(complexObjs);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// copy values into the destination, going from last to first
|
|
|
for (var i = propObjs.length - 1; i >= 0; i -= 1) {
|
|
|
var props = propObjs[i];
|
|
|
for (var name_2 in props) {
|
|
|
if (!(name_2 in dest)) { // if already assigned by previous props or complex props, don't reassign
|
|
|
dest[name_2] = props[name_2];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return dest;
|
|
|
}
|
|
|
function filterHash(hash, func) {
|
|
|
var filtered = {};
|
|
|
for (var key in hash) {
|
|
|
if (func(hash[key], key)) {
|
|
|
filtered[key] = hash[key];
|
|
|
}
|
|
|
}
|
|
|
return filtered;
|
|
|
}
|
|
|
function mapHash(hash, func) {
|
|
|
var newHash = {};
|
|
|
for (var key in hash) {
|
|
|
newHash[key] = func(hash[key], key);
|
|
|
}
|
|
|
return newHash;
|
|
|
}
|
|
|
function arrayToHash(a) {
|
|
|
var hash = {};
|
|
|
for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {
|
|
|
var item = a_1[_i];
|
|
|
hash[item] = true;
|
|
|
}
|
|
|
return hash;
|
|
|
}
|
|
|
function hashValuesToArray(obj) {
|
|
|
var a = [];
|
|
|
for (var key in obj) {
|
|
|
a.push(obj[key]);
|
|
|
}
|
|
|
return a;
|
|
|
}
|
|
|
function isPropsEqual(obj0, obj1) {
|
|
|
if (obj0 === obj1) {
|
|
|
return true;
|
|
|
}
|
|
|
for (var key in obj0) {
|
|
|
if (hasOwnProperty.call(obj0, key)) {
|
|
|
if (!(key in obj1)) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (var key in obj1) {
|
|
|
if (hasOwnProperty.call(obj1, key)) {
|
|
|
if (obj0[key] !== obj1[key]) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
function getUnequalProps(obj0, obj1) {
|
|
|
var keys = [];
|
|
|
for (var key in obj0) {
|
|
|
if (hasOwnProperty.call(obj0, key)) {
|
|
|
if (!(key in obj1)) {
|
|
|
keys.push(key);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (var key in obj1) {
|
|
|
if (hasOwnProperty.call(obj1, key)) {
|
|
|
if (obj0[key] !== obj1[key]) {
|
|
|
keys.push(key);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return keys;
|
|
|
}
|
|
|
function compareObjs(oldProps, newProps, equalityFuncs) {
|
|
|
if (equalityFuncs === void 0) { equalityFuncs = {}; }
|
|
|
if (oldProps === newProps) {
|
|
|
return true;
|
|
|
}
|
|
|
for (var key in newProps) {
|
|
|
if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;
|
|
|
else {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
// check for props that were omitted in the new
|
|
|
for (var key in oldProps) {
|
|
|
if (!(key in newProps)) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
/*
|
|
|
assumed "true" equality for handler names like "onReceiveSomething"
|
|
|
*/
|
|
|
function isObjValsEqual(val0, val1, comparator) {
|
|
|
if (val0 === val1 || comparator === true) {
|
|
|
return true;
|
|
|
}
|
|
|
if (comparator) {
|
|
|
return comparator(val0, val1);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
function collectFromHash(hash, startIndex, endIndex, step) {
|
|
|
if (startIndex === void 0) { startIndex = 0; }
|
|
|
if (step === void 0) { step = 1; }
|
|
|
var res = [];
|
|
|
if (endIndex == null) {
|
|
|
endIndex = Object.keys(hash).length;
|
|
|
}
|
|
|
for (var i = startIndex; i < endIndex; i += step) {
|
|
|
var val = hash[i];
|
|
|
if (val !== undefined) { // will disregard undefined for sparse arrays
|
|
|
res.push(val);
|
|
|
}
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
function parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {
|
|
|
for (var i = 0; i < recurringTypes.length; i += 1) {
|
|
|
var parsed = recurringTypes[i].parse(refined, dateEnv);
|
|
|
if (parsed) {
|
|
|
var allDay = refined.allDay;
|
|
|
if (allDay == null) {
|
|
|
allDay = defaultAllDay;
|
|
|
if (allDay == null) {
|
|
|
allDay = parsed.allDayGuess;
|
|
|
if (allDay == null) {
|
|
|
allDay = false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return {
|
|
|
allDay: allDay,
|
|
|
duration: parsed.duration,
|
|
|
typeData: parsed.typeData,
|
|
|
typeId: i,
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function expandRecurring(eventStore, framingRange, context) {
|
|
|
var dateEnv = context.dateEnv, pluginHooks = context.pluginHooks, options = context.options;
|
|
|
var defs = eventStore.defs, instances = eventStore.instances;
|
|
|
// remove existing recurring instances
|
|
|
// TODO: bad. always expand events as a second step
|
|
|
instances = filterHash(instances, function (instance) { return !defs[instance.defId].recurringDef; });
|
|
|
for (var defId in defs) {
|
|
|
var def = defs[defId];
|
|
|
if (def.recurringDef) {
|
|
|
var duration = def.recurringDef.duration;
|
|
|
if (!duration) {
|
|
|
duration = def.allDay ?
|
|
|
options.defaultAllDayEventDuration :
|
|
|
options.defaultTimedEventDuration;
|
|
|
}
|
|
|
var starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);
|
|
|
for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {
|
|
|
var start = starts_1[_i];
|
|
|
var instance = createEventInstance(defId, {
|
|
|
start: start,
|
|
|
end: dateEnv.add(start, duration),
|
|
|
});
|
|
|
instances[instance.instanceId] = instance;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return { defs: defs, instances: instances };
|
|
|
}
|
|
|
/*
|
|
|
Event MUST have a recurringDef
|
|
|
*/
|
|
|
function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
|
|
|
var typeDef = recurringTypes[eventDef.recurringDef.typeId];
|
|
|
var markers = typeDef.expand(eventDef.recurringDef.typeData, {
|
|
|
start: dateEnv.subtract(framingRange.start, duration),
|
|
|
end: framingRange.end,
|
|
|
}, dateEnv);
|
|
|
// the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
|
|
|
if (eventDef.allDay) {
|
|
|
markers = markers.map(startOfDay);
|
|
|
}
|
|
|
return markers;
|
|
|
}
|
|
|
|
|
|
var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
|
|
|
var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
|
|
|
// Parsing and Creation
|
|
|
function createDuration(input, unit) {
|
|
|
var _a;
|
|
|
if (typeof input === 'string') {
|
|
|
return parseString(input);
|
|
|
}
|
|
|
if (typeof input === 'object' && input) { // non-null object
|
|
|
return parseObject(input);
|
|
|
}
|
|
|
if (typeof input === 'number') {
|
|
|
return parseObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function parseString(s) {
|
|
|
var m = PARSE_RE.exec(s);
|
|
|
if (m) {
|
|
|
var sign = m[1] ? -1 : 1;
|
|
|
return {
|
|
|
years: 0,
|
|
|
months: 0,
|
|
|
days: sign * (m[2] ? parseInt(m[2], 10) : 0),
|
|
|
milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
|
|
|
(m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
|
|
|
(m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
|
|
|
(m[6] ? parseInt(m[6], 10) : 0) // ms
|
|
|
),
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function parseObject(obj) {
|
|
|
var duration = {
|
|
|
years: obj.years || obj.year || 0,
|
|
|
months: obj.months || obj.month || 0,
|
|
|
days: obj.days || obj.day || 0,
|
|
|
milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
|
|
|
(obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
|
|
|
(obj.seconds || obj.second || 0) * 1000 + // seconds
|
|
|
(obj.milliseconds || obj.millisecond || obj.ms || 0), // ms
|
|
|
};
|
|
|
var weeks = obj.weeks || obj.week;
|
|
|
if (weeks) {
|
|
|
duration.days += weeks * 7;
|
|
|
duration.specifiedWeeks = true;
|
|
|
}
|
|
|
return duration;
|
|
|
}
|
|
|
// Equality
|
|
|
function durationsEqual(d0, d1) {
|
|
|
return d0.years === d1.years &&
|
|
|
d0.months === d1.months &&
|
|
|
d0.days === d1.days &&
|
|
|
d0.milliseconds === d1.milliseconds;
|
|
|
}
|
|
|
// Simple Math
|
|
|
function addDurations(d0, d1) {
|
|
|
return {
|
|
|
years: d0.years + d1.years,
|
|
|
months: d0.months + d1.months,
|
|
|
days: d0.days + d1.days,
|
|
|
milliseconds: d0.milliseconds + d1.milliseconds,
|
|
|
};
|
|
|
}
|
|
|
function subtractDurations(d1, d0) {
|
|
|
return {
|
|
|
years: d1.years - d0.years,
|
|
|
months: d1.months - d0.months,
|
|
|
days: d1.days - d0.days,
|
|
|
milliseconds: d1.milliseconds - d0.milliseconds,
|
|
|
};
|
|
|
}
|
|
|
function multiplyDuration(d, n) {
|
|
|
return {
|
|
|
years: d.years * n,
|
|
|
months: d.months * n,
|
|
|
days: d.days * n,
|
|
|
milliseconds: d.milliseconds * n,
|
|
|
};
|
|
|
}
|
|
|
// Conversions
|
|
|
// "Rough" because they are based on average-case Gregorian months/years
|
|
|
function asRoughYears(dur) {
|
|
|
return asRoughDays(dur) / 365;
|
|
|
}
|
|
|
function asRoughMonths(dur) {
|
|
|
return asRoughDays(dur) / 30;
|
|
|
}
|
|
|
function asRoughDays(dur) {
|
|
|
return asRoughMs(dur) / 864e5;
|
|
|
}
|
|
|
function asRoughMs(dur) {
|
|
|
return dur.years * (365 * 864e5) +
|
|
|
dur.months * (30 * 864e5) +
|
|
|
dur.days * 864e5 +
|
|
|
dur.milliseconds;
|
|
|
}
|
|
|
// Advanced Math
|
|
|
function wholeDivideDurations(numerator, denominator) {
|
|
|
var res = null;
|
|
|
for (var i = 0; i < INTERNAL_UNITS.length; i += 1) {
|
|
|
var unit = INTERNAL_UNITS[i];
|
|
|
if (denominator[unit]) {
|
|
|
var localRes = numerator[unit] / denominator[unit];
|
|
|
if (!isInt(localRes) || (res !== null && res !== localRes)) {
|
|
|
return null;
|
|
|
}
|
|
|
res = localRes;
|
|
|
}
|
|
|
else if (numerator[unit]) {
|
|
|
// needs to divide by something but can't!
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
function greatestDurationDenominator(dur) {
|
|
|
var ms = dur.milliseconds;
|
|
|
if (ms) {
|
|
|
if (ms % 1000 !== 0) {
|
|
|
return { unit: 'millisecond', value: ms };
|
|
|
}
|
|
|
if (ms % (1000 * 60) !== 0) {
|
|
|
return { unit: 'second', value: ms / 1000 };
|
|
|
}
|
|
|
if (ms % (1000 * 60 * 60) !== 0) {
|
|
|
return { unit: 'minute', value: ms / (1000 * 60) };
|
|
|
}
|
|
|
if (ms) {
|
|
|
return { unit: 'hour', value: ms / (1000 * 60 * 60) };
|
|
|
}
|
|
|
}
|
|
|
if (dur.days) {
|
|
|
if (dur.specifiedWeeks && dur.days % 7 === 0) {
|
|
|
return { unit: 'week', value: dur.days / 7 };
|
|
|
}
|
|
|
return { unit: 'day', value: dur.days };
|
|
|
}
|
|
|
if (dur.months) {
|
|
|
return { unit: 'month', value: dur.months };
|
|
|
}
|
|
|
if (dur.years) {
|
|
|
return { unit: 'year', value: dur.years };
|
|
|
}
|
|
|
return { unit: 'millisecond', value: 0 };
|
|
|
}
|
|
|
|
|
|
// timeZoneOffset is in minutes
|
|
|
function buildIsoString(marker, timeZoneOffset, stripZeroTime) {
|
|
|
if (stripZeroTime === void 0) { stripZeroTime = false; }
|
|
|
var s = marker.toISOString();
|
|
|
s = s.replace('.000', '');
|
|
|
if (stripZeroTime) {
|
|
|
s = s.replace('T00:00:00Z', '');
|
|
|
}
|
|
|
if (s.length > 10) { // time part wasn't stripped, can add timezone info
|
|
|
if (timeZoneOffset == null) {
|
|
|
s = s.replace('Z', '');
|
|
|
}
|
|
|
else if (timeZoneOffset !== 0) {
|
|
|
s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
|
|
|
}
|
|
|
// otherwise, its UTC-0 and we want to keep the Z
|
|
|
}
|
|
|
return s;
|
|
|
}
|
|
|
// formats the date, but with no time part
|
|
|
// TODO: somehow merge with buildIsoString and stripZeroTime
|
|
|
// TODO: rename. omit "string"
|
|
|
function formatDayString(marker) {
|
|
|
return marker.toISOString().replace(/T.*$/, '');
|
|
|
}
|
|
|
// TODO: use Date::toISOString and use everything after the T?
|
|
|
function formatIsoTimeString(marker) {
|
|
|
return padStart(marker.getUTCHours(), 2) + ':' +
|
|
|
padStart(marker.getUTCMinutes(), 2) + ':' +
|
|
|
padStart(marker.getUTCSeconds(), 2);
|
|
|
}
|
|
|
function formatTimeZoneOffset(minutes, doIso) {
|
|
|
if (doIso === void 0) { doIso = false; }
|
|
|
var sign = minutes < 0 ? '-' : '+';
|
|
|
var abs = Math.abs(minutes);
|
|
|
var hours = Math.floor(abs / 60);
|
|
|
var mins = Math.round(abs % 60);
|
|
|
if (doIso) {
|
|
|
return sign + padStart(hours, 2) + ":" + padStart(mins, 2);
|
|
|
}
|
|
|
return "GMT" + sign + hours + (mins ? ":" + padStart(mins, 2) : '');
|
|
|
}
|
|
|
function isArraysEqual(a0, a1, equalityFunc) {
|
|
|
if (a0 === a1) {
|
|
|
return true;
|
|
|
}
|
|
|
var len = a0.length;
|
|
|
var i;
|
|
|
if (len !== a1.length) { // not array? or not same length?
|
|
|
return false;
|
|
|
}
|
|
|
for (i = 0; i < len; i += 1) {
|
|
|
if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function memoize(workerFunc, resEquality, teardownFunc) {
|
|
|
var currentArgs;
|
|
|
var currentRes;
|
|
|
return function () {
|
|
|
var newArgs = [];
|
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
|
newArgs[_i] = arguments[_i];
|
|
|
}
|
|
|
if (!currentArgs) {
|
|
|
currentRes = workerFunc.apply(this, newArgs);
|
|
|
}
|
|
|
else if (!isArraysEqual(currentArgs, newArgs)) {
|
|
|
if (teardownFunc) {
|
|
|
teardownFunc(currentRes);
|
|
|
}
|
|
|
var res = workerFunc.apply(this, newArgs);
|
|
|
if (!resEquality || !resEquality(res, currentRes)) {
|
|
|
currentRes = res;
|
|
|
}
|
|
|
}
|
|
|
currentArgs = newArgs;
|
|
|
return currentRes;
|
|
|
};
|
|
|
}
|
|
|
function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
|
|
|
var _this = this;
|
|
|
var currentArg;
|
|
|
var currentRes;
|
|
|
return function (newArg) {
|
|
|
if (!currentArg) {
|
|
|
currentRes = workerFunc.call(_this, newArg);
|
|
|
}
|
|
|
else if (!isPropsEqual(currentArg, newArg)) {
|
|
|
if (teardownFunc) {
|
|
|
teardownFunc(currentRes);
|
|
|
}
|
|
|
var res = workerFunc.call(_this, newArg);
|
|
|
if (!resEquality || !resEquality(res, currentRes)) {
|
|
|
currentRes = res;
|
|
|
}
|
|
|
}
|
|
|
currentArg = newArg;
|
|
|
return currentRes;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var EXTENDED_SETTINGS_AND_SEVERITIES = {
|
|
|
week: 3,
|
|
|
separator: 0,
|
|
|
omitZeroMinute: 0,
|
|
|
meridiem: 0,
|
|
|
omitCommas: 0,
|
|
|
};
|
|
|
var STANDARD_DATE_PROP_SEVERITIES = {
|
|
|
timeZoneName: 7,
|
|
|
era: 6,
|
|
|
year: 5,
|
|
|
month: 4,
|
|
|
day: 2,
|
|
|
weekday: 2,
|
|
|
hour: 1,
|
|
|
minute: 1,
|
|
|
second: 1,
|
|
|
};
|
|
|
var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
|
|
|
var COMMA_RE = /,/g; // we need re for globalness
|
|
|
var MULTI_SPACE_RE = /\s+/g;
|
|
|
var LTR_RE = /\u200e/g; // control character
|
|
|
var UTC_RE = /UTC|GMT/;
|
|
|
var NativeFormatter = /** @class */ (function () {
|
|
|
function NativeFormatter(formatSettings) {
|
|
|
var standardDateProps = {};
|
|
|
var extendedSettings = {};
|
|
|
var severity = 0;
|
|
|
for (var name_1 in formatSettings) {
|
|
|
if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {
|
|
|
extendedSettings[name_1] = formatSettings[name_1];
|
|
|
severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);
|
|
|
}
|
|
|
else {
|
|
|
standardDateProps[name_1] = formatSettings[name_1];
|
|
|
if (name_1 in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity
|
|
|
severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
this.standardDateProps = standardDateProps;
|
|
|
this.extendedSettings = extendedSettings;
|
|
|
this.severity = severity;
|
|
|
this.buildFormattingFunc = memoize(buildFormattingFunc);
|
|
|
}
|
|
|
NativeFormatter.prototype.format = function (date, context) {
|
|
|
return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
|
|
|
};
|
|
|
NativeFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
|
|
|
var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings;
|
|
|
var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
|
|
|
if (!diffSeverity) {
|
|
|
return this.format(start, context);
|
|
|
}
|
|
|
var biggestUnitForPartial = diffSeverity;
|
|
|
if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
|
|
|
(standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
|
|
|
(standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
|
|
|
(standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
|
|
|
biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
|
|
|
}
|
|
|
var full0 = this.format(start, context);
|
|
|
var full1 = this.format(end, context);
|
|
|
if (full0 === full1) {
|
|
|
return full0;
|
|
|
}
|
|
|
var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
|
|
|
var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
|
|
|
var partial0 = partialFormattingFunc(start);
|
|
|
var partial1 = partialFormattingFunc(end);
|
|
|
var insertion = findCommonInsertion(full0, partial0, full1, partial1);
|
|
|
var separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';
|
|
|
if (insertion) {
|
|
|
return insertion.before + partial0 + separator + partial1 + insertion.after;
|
|
|
}
|
|
|
return full0 + separator + full1;
|
|
|
};
|
|
|
NativeFormatter.prototype.getLargestUnit = function () {
|
|
|
switch (this.severity) {
|
|
|
case 7:
|
|
|
case 6:
|
|
|
case 5:
|
|
|
return 'year';
|
|
|
case 4:
|
|
|
return 'month';
|
|
|
case 3:
|
|
|
return 'week';
|
|
|
case 2:
|
|
|
return 'day';
|
|
|
default:
|
|
|
return 'time'; // really?
|
|
|
}
|
|
|
};
|
|
|
return NativeFormatter;
|
|
|
}());
|
|
|
function buildFormattingFunc(standardDateProps, extendedSettings, context) {
|
|
|
var standardDatePropCnt = Object.keys(standardDateProps).length;
|
|
|
if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
|
|
|
return function (date) { return (formatTimeZoneOffset(date.timeZoneOffset)); };
|
|
|
}
|
|
|
if (standardDatePropCnt === 0 && extendedSettings.week) {
|
|
|
return function (date) { return (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.locale, extendedSettings.week)); };
|
|
|
}
|
|
|
return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
|
|
|
}
|
|
|
function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
|
|
|
standardDateProps = __assign({}, standardDateProps); // copy
|
|
|
extendedSettings = __assign({}, extendedSettings); // copy
|
|
|
sanitizeSettings(standardDateProps, extendedSettings);
|
|
|
standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
|
|
|
var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
|
|
|
var zeroFormat; // needed?
|
|
|
if (extendedSettings.omitZeroMinute) {
|
|
|
var zeroProps = __assign({}, standardDateProps);
|
|
|
delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
|
|
|
zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
|
|
|
}
|
|
|
return function (date) {
|
|
|
var marker = date.marker;
|
|
|
var format;
|
|
|
if (zeroFormat && !marker.getUTCMinutes()) {
|
|
|
format = zeroFormat;
|
|
|
}
|
|
|
else {
|
|
|
format = normalFormat;
|
|
|
}
|
|
|
var s = format.format(marker);
|
|
|
return postProcess(s, date, standardDateProps, extendedSettings, context);
|
|
|
};
|
|
|
}
|
|
|
function sanitizeSettings(standardDateProps, extendedSettings) {
|
|
|
// deal with a browser inconsistency where formatting the timezone
|
|
|
// requires that the hour/minute be present.
|
|
|
if (standardDateProps.timeZoneName) {
|
|
|
if (!standardDateProps.hour) {
|
|
|
standardDateProps.hour = '2-digit';
|
|
|
}
|
|
|
if (!standardDateProps.minute) {
|
|
|
standardDateProps.minute = '2-digit';
|
|
|
}
|
|
|
}
|
|
|
// only support short timezone names
|
|
|
if (standardDateProps.timeZoneName === 'long') {
|
|
|
standardDateProps.timeZoneName = 'short';
|
|
|
}
|
|
|
// if requesting to display seconds, MUST display minutes
|
|
|
if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
|
|
|
delete extendedSettings.omitZeroMinute;
|
|
|
}
|
|
|
}
|
|
|
function postProcess(s, date, standardDateProps, extendedSettings, context) {
|
|
|
s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
|
|
|
if (standardDateProps.timeZoneName === 'short') {
|
|
|
s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
|
|
|
'UTC' : // important to normalize for IE, which does "GMT"
|
|
|
formatTimeZoneOffset(date.timeZoneOffset));
|
|
|
}
|
|
|
if (extendedSettings.omitCommas) {
|
|
|
s = s.replace(COMMA_RE, '').trim();
|
|
|
}
|
|
|
if (extendedSettings.omitZeroMinute) {
|
|
|
s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
|
|
|
}
|
|
|
// ^ do anything that might create adjacent spaces before this point,
|
|
|
// because MERIDIEM_RE likes to eat up loading spaces
|
|
|
if (extendedSettings.meridiem === false) {
|
|
|
s = s.replace(MERIDIEM_RE, '').trim();
|
|
|
}
|
|
|
else if (extendedSettings.meridiem === 'narrow') { // a/p
|
|
|
s = s.replace(MERIDIEM_RE, function (m0, m1) { return m1.toLocaleLowerCase(); });
|
|
|
}
|
|
|
else if (extendedSettings.meridiem === 'short') { // am/pm
|
|
|
s = s.replace(MERIDIEM_RE, function (m0, m1) { return m1.toLocaleLowerCase() + "m"; });
|
|
|
}
|
|
|
else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
|
|
|
s = s.replace(MERIDIEM_RE, function (m0) { return m0.toLocaleLowerCase(); });
|
|
|
}
|
|
|
s = s.replace(MULTI_SPACE_RE, ' ');
|
|
|
s = s.trim();
|
|
|
return s;
|
|
|
}
|
|
|
function injectTzoStr(s, tzoStr) {
|
|
|
var replaced = false;
|
|
|
s = s.replace(UTC_RE, function () {
|
|
|
replaced = true;
|
|
|
return tzoStr;
|
|
|
});
|
|
|
// IE11 doesn't include UTC/GMT in the original string, so append to end
|
|
|
if (!replaced) {
|
|
|
s += " " + tzoStr;
|
|
|
}
|
|
|
return s;
|
|
|
}
|
|
|
function formatWeekNumber(num, weekText, locale, display) {
|
|
|
var parts = [];
|
|
|
if (display === 'narrow') {
|
|
|
parts.push(weekText);
|
|
|
}
|
|
|
else if (display === 'short') {
|
|
|
parts.push(weekText, ' ');
|
|
|
}
|
|
|
// otherwise, considered 'numeric'
|
|
|
parts.push(locale.simpleNumberFormat.format(num));
|
|
|
if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
|
|
|
parts.reverse();
|
|
|
}
|
|
|
return parts.join('');
|
|
|
}
|
|
|
// Range Formatting Utils
|
|
|
// 0 = exactly the same
|
|
|
// 1 = different by time
|
|
|
// and bigger
|
|
|
function computeMarkerDiffSeverity(d0, d1, ca) {
|
|
|
if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
|
|
|
return 5;
|
|
|
}
|
|
|
if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
|
|
|
return 4;
|
|
|
}
|
|
|
if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
|
|
|
return 2;
|
|
|
}
|
|
|
if (timeAsMs(d0) !== timeAsMs(d1)) {
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
function computePartialFormattingOptions(options, biggestUnit) {
|
|
|
var partialOptions = {};
|
|
|
for (var name_2 in options) {
|
|
|
if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
|
|
|
STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {
|
|
|
partialOptions[name_2] = options[name_2];
|
|
|
}
|
|
|
}
|
|
|
return partialOptions;
|
|
|
}
|
|
|
function findCommonInsertion(full0, partial0, full1, partial1) {
|
|
|
var i0 = 0;
|
|
|
while (i0 < full0.length) {
|
|
|
var found0 = full0.indexOf(partial0, i0);
|
|
|
if (found0 === -1) {
|
|
|
break;
|
|
|
}
|
|
|
var before0 = full0.substr(0, found0);
|
|
|
i0 = found0 + partial0.length;
|
|
|
var after0 = full0.substr(i0);
|
|
|
var i1 = 0;
|
|
|
while (i1 < full1.length) {
|
|
|
var found1 = full1.indexOf(partial1, i1);
|
|
|
if (found1 === -1) {
|
|
|
break;
|
|
|
}
|
|
|
var before1 = full1.substr(0, found1);
|
|
|
i1 = found1 + partial1.length;
|
|
|
var after1 = full1.substr(i1);
|
|
|
if (before0 === before1 && after0 === after1) {
|
|
|
return {
|
|
|
before: before0,
|
|
|
after: after0,
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function expandZonedMarker(dateInfo, calendarSystem) {
|
|
|
var a = calendarSystem.markerToArray(dateInfo.marker);
|
|
|
return {
|
|
|
marker: dateInfo.marker,
|
|
|
timeZoneOffset: dateInfo.timeZoneOffset,
|
|
|
array: a,
|
|
|
year: a[0],
|
|
|
month: a[1],
|
|
|
day: a[2],
|
|
|
hour: a[3],
|
|
|
minute: a[4],
|
|
|
second: a[5],
|
|
|
millisecond: a[6],
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {
|
|
|
var startInfo = expandZonedMarker(start, context.calendarSystem);
|
|
|
var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
|
|
|
return {
|
|
|
date: startInfo,
|
|
|
start: startInfo,
|
|
|
end: endInfo,
|
|
|
timeZone: context.timeZone,
|
|
|
localeCodes: context.locale.codes,
|
|
|
defaultSeparator: betterDefaultSeparator || context.defaultSeparator,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
TODO: fix the terminology of "formatter" vs "formatting func"
|
|
|
*/
|
|
|
/*
|
|
|
At the time of instantiation, this object does not know which cmd-formatting system it will use.
|
|
|
It receives this at the time of formatting, as a setting.
|
|
|
*/
|
|
|
var CmdFormatter = /** @class */ (function () {
|
|
|
function CmdFormatter(cmdStr) {
|
|
|
this.cmdStr = cmdStr;
|
|
|
}
|
|
|
CmdFormatter.prototype.format = function (date, context, betterDefaultSeparator) {
|
|
|
return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
|
|
|
};
|
|
|
CmdFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
|
|
|
return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
|
|
|
};
|
|
|
return CmdFormatter;
|
|
|
}());
|
|
|
|
|
|
var FuncFormatter = /** @class */ (function () {
|
|
|
function FuncFormatter(func) {
|
|
|
this.func = func;
|
|
|
}
|
|
|
FuncFormatter.prototype.format = function (date, context, betterDefaultSeparator) {
|
|
|
return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
|
|
|
};
|
|
|
FuncFormatter.prototype.formatRange = function (start, end, context, betterDefaultSeparator) {
|
|
|
return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
|
|
|
};
|
|
|
return FuncFormatter;
|
|
|
}());
|
|
|
|
|
|
function createFormatter(input) {
|
|
|
if (typeof input === 'object' && input) { // non-null object
|
|
|
return new NativeFormatter(input);
|
|
|
}
|
|
|
if (typeof input === 'string') {
|
|
|
return new CmdFormatter(input);
|
|
|
}
|
|
|
if (typeof input === 'function') {
|
|
|
return new FuncFormatter(input);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
// base options
|
|
|
// ------------
|
|
|
var BASE_OPTION_REFINERS = {
|
|
|
navLinkDayClick: identity,
|
|
|
navLinkWeekClick: identity,
|
|
|
duration: createDuration,
|
|
|
bootstrapFontAwesome: identity,
|
|
|
buttonIcons: identity,
|
|
|
customButtons: identity,
|
|
|
defaultAllDayEventDuration: createDuration,
|
|
|
defaultTimedEventDuration: createDuration,
|
|
|
nextDayThreshold: createDuration,
|
|
|
scrollTime: createDuration,
|
|
|
scrollTimeReset: Boolean,
|
|
|
slotMinTime: createDuration,
|
|
|
slotMaxTime: createDuration,
|
|
|
dayPopoverFormat: createFormatter,
|
|
|
slotDuration: createDuration,
|
|
|
snapDuration: createDuration,
|
|
|
headerToolbar: identity,
|
|
|
footerToolbar: identity,
|
|
|
defaultRangeSeparator: String,
|
|
|
titleRangeSeparator: String,
|
|
|
forceEventDuration: Boolean,
|
|
|
dayHeaders: Boolean,
|
|
|
dayHeaderFormat: createFormatter,
|
|
|
dayHeaderClassNames: identity,
|
|
|
dayHeaderContent: identity,
|
|
|
dayHeaderDidMount: identity,
|
|
|
dayHeaderWillUnmount: identity,
|
|
|
dayCellClassNames: identity,
|
|
|
dayCellContent: identity,
|
|
|
dayCellDidMount: identity,
|
|
|
dayCellWillUnmount: identity,
|
|
|
initialView: String,
|
|
|
aspectRatio: Number,
|
|
|
weekends: Boolean,
|
|
|
weekNumberCalculation: identity,
|
|
|
weekNumbers: Boolean,
|
|
|
weekNumberClassNames: identity,
|
|
|
weekNumberContent: identity,
|
|
|
weekNumberDidMount: identity,
|
|
|
weekNumberWillUnmount: identity,
|
|
|
editable: Boolean,
|
|
|
viewClassNames: identity,
|
|
|
viewDidMount: identity,
|
|
|
viewWillUnmount: identity,
|
|
|
nowIndicator: Boolean,
|
|
|
nowIndicatorClassNames: identity,
|
|
|
nowIndicatorContent: identity,
|
|
|
nowIndicatorDidMount: identity,
|
|
|
nowIndicatorWillUnmount: identity,
|
|
|
showNonCurrentDates: Boolean,
|
|
|
lazyFetching: Boolean,
|
|
|
startParam: String,
|
|
|
endParam: String,
|
|
|
timeZoneParam: String,
|
|
|
timeZone: String,
|
|
|
locales: identity,
|
|
|
locale: identity,
|
|
|
themeSystem: String,
|
|
|
dragRevertDuration: Number,
|
|
|
dragScroll: Boolean,
|
|
|
allDayMaintainDuration: Boolean,
|
|
|
unselectAuto: Boolean,
|
|
|
dropAccept: identity,
|
|
|
eventOrder: parseFieldSpecs,
|
|
|
eventOrderStrict: Boolean,
|
|
|
handleWindowResize: Boolean,
|
|
|
windowResizeDelay: Number,
|
|
|
longPressDelay: Number,
|
|
|
eventDragMinDistance: Number,
|
|
|
expandRows: Boolean,
|
|
|
height: identity,
|
|
|
contentHeight: identity,
|
|
|
direction: String,
|
|
|
weekNumberFormat: createFormatter,
|
|
|
eventResizableFromStart: Boolean,
|
|
|
displayEventTime: Boolean,
|
|
|
displayEventEnd: Boolean,
|
|
|
weekText: String,
|
|
|
progressiveEventRendering: Boolean,
|
|
|
businessHours: identity,
|
|
|
initialDate: identity,
|
|
|
now: identity,
|
|
|
eventDataTransform: identity,
|
|
|
stickyHeaderDates: identity,
|
|
|
stickyFooterScrollbar: identity,
|
|
|
viewHeight: identity,
|
|
|
defaultAllDay: Boolean,
|
|
|
eventSourceFailure: identity,
|
|
|
eventSourceSuccess: identity,
|
|
|
eventDisplay: String,
|
|
|
eventStartEditable: Boolean,
|
|
|
eventDurationEditable: Boolean,
|
|
|
eventOverlap: identity,
|
|
|
eventConstraint: identity,
|
|
|
eventAllow: identity,
|
|
|
eventBackgroundColor: String,
|
|
|
eventBorderColor: String,
|
|
|
eventTextColor: String,
|
|
|
eventColor: String,
|
|
|
eventClassNames: identity,
|
|
|
eventContent: identity,
|
|
|
eventDidMount: identity,
|
|
|
eventWillUnmount: identity,
|
|
|
selectConstraint: identity,
|
|
|
selectOverlap: identity,
|
|
|
selectAllow: identity,
|
|
|
droppable: Boolean,
|
|
|
unselectCancel: String,
|
|
|
slotLabelFormat: identity,
|
|
|
slotLaneClassNames: identity,
|
|
|
slotLaneContent: identity,
|
|
|
slotLaneDidMount: identity,
|
|
|
slotLaneWillUnmount: identity,
|
|
|
slotLabelClassNames: identity,
|
|
|
slotLabelContent: identity,
|
|
|
slotLabelDidMount: identity,
|
|
|
slotLabelWillUnmount: identity,
|
|
|
dayMaxEvents: identity,
|
|
|
dayMaxEventRows: identity,
|
|
|
dayMinWidth: Number,
|
|
|
slotLabelInterval: createDuration,
|
|
|
allDayText: String,
|
|
|
allDayClassNames: identity,
|
|
|
allDayContent: identity,
|
|
|
allDayDidMount: identity,
|
|
|
allDayWillUnmount: identity,
|
|
|
slotMinWidth: Number,
|
|
|
navLinks: Boolean,
|
|
|
eventTimeFormat: createFormatter,
|
|
|
rerenderDelay: Number,
|
|
|
moreLinkText: identity,
|
|
|
selectMinDistance: Number,
|
|
|
selectable: Boolean,
|
|
|
selectLongPressDelay: Number,
|
|
|
eventLongPressDelay: Number,
|
|
|
selectMirror: Boolean,
|
|
|
eventMaxStack: Number,
|
|
|
eventMinHeight: Number,
|
|
|
eventMinWidth: Number,
|
|
|
eventShortHeight: Number,
|
|
|
slotEventOverlap: Boolean,
|
|
|
plugins: identity,
|
|
|
firstDay: Number,
|
|
|
dayCount: Number,
|
|
|
dateAlignment: String,
|
|
|
dateIncrement: createDuration,
|
|
|
hiddenDays: identity,
|
|
|
monthMode: Boolean,
|
|
|
fixedWeekCount: Boolean,
|
|
|
validRange: identity,
|
|
|
visibleRange: identity,
|
|
|
titleFormat: identity,
|
|
|
// only used by list-view, but languages define the value, so we need it in base options
|
|
|
noEventsText: String,
|
|
|
moreLinkClick: identity,
|
|
|
moreLinkClassNames: identity,
|
|
|
moreLinkContent: identity,
|
|
|
moreLinkDidMount: identity,
|
|
|
moreLinkWillUnmount: identity,
|
|
|
};
|
|
|
// do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
|
|
|
// raw values.
|
|
|
var BASE_OPTION_DEFAULTS = {
|
|
|
eventDisplay: 'auto',
|
|
|
defaultRangeSeparator: ' - ',
|
|
|
titleRangeSeparator: ' \u2013 ',
|
|
|
defaultTimedEventDuration: '01:00:00',
|
|
|
defaultAllDayEventDuration: { day: 1 },
|
|
|
forceEventDuration: false,
|
|
|
nextDayThreshold: '00:00:00',
|
|
|
dayHeaders: true,
|
|
|
initialView: '',
|
|
|
aspectRatio: 1.35,
|
|
|
headerToolbar: {
|
|
|
start: 'title',
|
|
|
center: '',
|
|
|
end: 'today prev,next',
|
|
|
},
|
|
|
weekends: true,
|
|
|
weekNumbers: false,
|
|
|
weekNumberCalculation: 'local',
|
|
|
editable: false,
|
|
|
nowIndicator: false,
|
|
|
scrollTime: '06:00:00',
|
|
|
scrollTimeReset: true,
|
|
|
slotMinTime: '00:00:00',
|
|
|
slotMaxTime: '24:00:00',
|
|
|
showNonCurrentDates: true,
|
|
|
lazyFetching: true,
|
|
|
startParam: 'start',
|
|
|
endParam: 'end',
|
|
|
timeZoneParam: 'timeZone',
|
|
|
timeZone: 'local',
|
|
|
locales: [],
|
|
|
locale: '',
|
|
|
themeSystem: 'standard',
|
|
|
dragRevertDuration: 500,
|
|
|
dragScroll: true,
|
|
|
allDayMaintainDuration: false,
|
|
|
unselectAuto: true,
|
|
|
dropAccept: '*',
|
|
|
eventOrder: 'start,-duration,allDay,title',
|
|
|
dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
|
|
|
handleWindowResize: true,
|
|
|
windowResizeDelay: 100,
|
|
|
longPressDelay: 1000,
|
|
|
eventDragMinDistance: 5,
|
|
|
expandRows: false,
|
|
|
navLinks: false,
|
|
|
selectable: false,
|
|
|
eventMinHeight: 15,
|
|
|
eventMinWidth: 30,
|
|
|
eventShortHeight: 30,
|
|
|
};
|
|
|
// calendar listeners
|
|
|
// ------------------
|
|
|
var CALENDAR_LISTENER_REFINERS = {
|
|
|
datesSet: identity,
|
|
|
eventsSet: identity,
|
|
|
eventAdd: identity,
|
|
|
eventChange: identity,
|
|
|
eventRemove: identity,
|
|
|
windowResize: identity,
|
|
|
eventClick: identity,
|
|
|
eventMouseEnter: identity,
|
|
|
eventMouseLeave: identity,
|
|
|
select: identity,
|
|
|
unselect: identity,
|
|
|
loading: identity,
|
|
|
// internal
|
|
|
_unmount: identity,
|
|
|
_beforeprint: identity,
|
|
|
_afterprint: identity,
|
|
|
_noEventDrop: identity,
|
|
|
_noEventResize: identity,
|
|
|
_resize: identity,
|
|
|
_scrollRequest: identity,
|
|
|
};
|
|
|
// calendar-specific options
|
|
|
// -------------------------
|
|
|
var CALENDAR_OPTION_REFINERS = {
|
|
|
buttonText: identity,
|
|
|
views: identity,
|
|
|
plugins: identity,
|
|
|
initialEvents: identity,
|
|
|
events: identity,
|
|
|
eventSources: identity,
|
|
|
};
|
|
|
var COMPLEX_OPTION_COMPARATORS = {
|
|
|
headerToolbar: isBoolComplexEqual,
|
|
|
footerToolbar: isBoolComplexEqual,
|
|
|
buttonText: isBoolComplexEqual,
|
|
|
buttonIcons: isBoolComplexEqual,
|
|
|
};
|
|
|
function isBoolComplexEqual(a, b) {
|
|
|
if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects
|
|
|
return isPropsEqual(a, b);
|
|
|
}
|
|
|
return a === b;
|
|
|
}
|
|
|
// view-specific options
|
|
|
// ---------------------
|
|
|
var VIEW_OPTION_REFINERS = {
|
|
|
type: String,
|
|
|
component: identity,
|
|
|
buttonText: String,
|
|
|
buttonTextKey: String,
|
|
|
dateProfileGeneratorClass: identity,
|
|
|
usesMinMaxTime: Boolean,
|
|
|
classNames: identity,
|
|
|
content: identity,
|
|
|
didMount: identity,
|
|
|
willUnmount: identity,
|
|
|
};
|
|
|
// util funcs
|
|
|
// ----------------------------------------------------------------------------------------------------
|
|
|
function mergeRawOptions(optionSets) {
|
|
|
return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);
|
|
|
}
|
|
|
function refineProps(input, refiners) {
|
|
|
var refined = {};
|
|
|
var extra = {};
|
|
|
for (var propName in refiners) {
|
|
|
if (propName in input) {
|
|
|
refined[propName] = refiners[propName](input[propName]);
|
|
|
}
|
|
|
}
|
|
|
for (var propName in input) {
|
|
|
if (!(propName in refiners)) {
|
|
|
extra[propName] = input[propName];
|
|
|
}
|
|
|
}
|
|
|
return { refined: refined, extra: extra };
|
|
|
}
|
|
|
function identity(raw) {
|
|
|
return raw;
|
|
|
}
|
|
|
|
|
|
function parseEvents(rawEvents, eventSource, context, allowOpenRange) {
|
|
|
var eventStore = createEmptyEventStore();
|
|
|
var eventRefiners = buildEventRefiners(context);
|
|
|
for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
|
|
|
var rawEvent = rawEvents_1[_i];
|
|
|
var tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners);
|
|
|
if (tuple) {
|
|
|
eventTupleToStore(tuple, eventStore);
|
|
|
}
|
|
|
}
|
|
|
return eventStore;
|
|
|
}
|
|
|
function eventTupleToStore(tuple, eventStore) {
|
|
|
if (eventStore === void 0) { eventStore = createEmptyEventStore(); }
|
|
|
eventStore.defs[tuple.def.defId] = tuple.def;
|
|
|
if (tuple.instance) {
|
|
|
eventStore.instances[tuple.instance.instanceId] = tuple.instance;
|
|
|
}
|
|
|
return eventStore;
|
|
|
}
|
|
|
// retrieves events that have the same groupId as the instance specified by `instanceId`
|
|
|
// or they are the same as the instance.
|
|
|
// why might instanceId not be in the store? an event from another calendar?
|
|
|
function getRelevantEvents(eventStore, instanceId) {
|
|
|
var instance = eventStore.instances[instanceId];
|
|
|
if (instance) {
|
|
|
var def_1 = eventStore.defs[instance.defId];
|
|
|
// get events/instances with same group
|
|
|
var newStore = filterEventStoreDefs(eventStore, function (lookDef) { return isEventDefsGrouped(def_1, lookDef); });
|
|
|
// add the original
|
|
|
// TODO: wish we could use eventTupleToStore or something like it
|
|
|
newStore.defs[def_1.defId] = def_1;
|
|
|
newStore.instances[instance.instanceId] = instance;
|
|
|
return newStore;
|
|
|
}
|
|
|
return createEmptyEventStore();
|
|
|
}
|
|
|
function isEventDefsGrouped(def0, def1) {
|
|
|
return Boolean(def0.groupId && def0.groupId === def1.groupId);
|
|
|
}
|
|
|
function createEmptyEventStore() {
|
|
|
return { defs: {}, instances: {} };
|
|
|
}
|
|
|
function mergeEventStores(store0, store1) {
|
|
|
return {
|
|
|
defs: __assign(__assign({}, store0.defs), store1.defs),
|
|
|
instances: __assign(__assign({}, store0.instances), store1.instances),
|
|
|
};
|
|
|
}
|
|
|
function filterEventStoreDefs(eventStore, filterFunc) {
|
|
|
var defs = filterHash(eventStore.defs, filterFunc);
|
|
|
var instances = filterHash(eventStore.instances, function (instance) { return (defs[instance.defId] // still exists?
|
|
|
); });
|
|
|
return { defs: defs, instances: instances };
|
|
|
}
|
|
|
function excludeSubEventStore(master, sub) {
|
|
|
var defs = master.defs, instances = master.instances;
|
|
|
var filteredDefs = {};
|
|
|
var filteredInstances = {};
|
|
|
for (var defId in defs) {
|
|
|
if (!sub.defs[defId]) { // not explicitly excluded
|
|
|
filteredDefs[defId] = defs[defId];
|
|
|
}
|
|
|
}
|
|
|
for (var instanceId in instances) {
|
|
|
if (!sub.instances[instanceId] && // not explicitly excluded
|
|
|
filteredDefs[instances[instanceId].defId] // def wasn't filtered away
|
|
|
) {
|
|
|
filteredInstances[instanceId] = instances[instanceId];
|
|
|
}
|
|
|
}
|
|
|
return {
|
|
|
defs: filteredDefs,
|
|
|
instances: filteredInstances,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function normalizeConstraint(input, context) {
|
|
|
if (Array.isArray(input)) {
|
|
|
return parseEvents(input, null, context, true); // allowOpenRange=true
|
|
|
}
|
|
|
if (typeof input === 'object' && input) { // non-null object
|
|
|
return parseEvents([input], null, context, true); // allowOpenRange=true
|
|
|
}
|
|
|
if (input != null) {
|
|
|
return String(input);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function parseClassNames(raw) {
|
|
|
if (Array.isArray(raw)) {
|
|
|
return raw;
|
|
|
}
|
|
|
if (typeof raw === 'string') {
|
|
|
return raw.split(/\s+/);
|
|
|
}
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
// TODO: better called "EventSettings" or "EventConfig"
|
|
|
// TODO: move this file into structs
|
|
|
// TODO: separate constraint/overlap/allow, because selection uses only that, not other props
|
|
|
var EVENT_UI_REFINERS = {
|
|
|
display: String,
|
|
|
editable: Boolean,
|
|
|
startEditable: Boolean,
|
|
|
durationEditable: Boolean,
|
|
|
constraint: identity,
|
|
|
overlap: identity,
|
|
|
allow: identity,
|
|
|
className: parseClassNames,
|
|
|
classNames: parseClassNames,
|
|
|
color: String,
|
|
|
backgroundColor: String,
|
|
|
borderColor: String,
|
|
|
textColor: String,
|
|
|
};
|
|
|
var EMPTY_EVENT_UI = {
|
|
|
display: null,
|
|
|
startEditable: null,
|
|
|
durationEditable: null,
|
|
|
constraints: [],
|
|
|
overlap: null,
|
|
|
allows: [],
|
|
|
backgroundColor: '',
|
|
|
borderColor: '',
|
|
|
textColor: '',
|
|
|
classNames: [],
|
|
|
};
|
|
|
function createEventUi(refined, context) {
|
|
|
var constraint = normalizeConstraint(refined.constraint, context);
|
|
|
return {
|
|
|
display: refined.display || null,
|
|
|
startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,
|
|
|
durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,
|
|
|
constraints: constraint != null ? [constraint] : [],
|
|
|
overlap: refined.overlap != null ? refined.overlap : null,
|
|
|
allows: refined.allow != null ? [refined.allow] : [],
|
|
|
backgroundColor: refined.backgroundColor || refined.color || '',
|
|
|
borderColor: refined.borderColor || refined.color || '',
|
|
|
textColor: refined.textColor || '',
|
|
|
classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural
|
|
|
};
|
|
|
}
|
|
|
// TODO: prevent against problems with <2 args!
|
|
|
function combineEventUis(uis) {
|
|
|
return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
|
|
|
}
|
|
|
function combineTwoEventUis(item0, item1) {
|
|
|
return {
|
|
|
display: item1.display != null ? item1.display : item0.display,
|
|
|
startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
|
|
|
durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
|
|
|
constraints: item0.constraints.concat(item1.constraints),
|
|
|
overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
|
|
|
allows: item0.allows.concat(item1.allows),
|
|
|
backgroundColor: item1.backgroundColor || item0.backgroundColor,
|
|
|
borderColor: item1.borderColor || item0.borderColor,
|
|
|
textColor: item1.textColor || item0.textColor,
|
|
|
classNames: item0.classNames.concat(item1.classNames),
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var EVENT_NON_DATE_REFINERS = {
|
|
|
id: String,
|
|
|
groupId: String,
|
|
|
title: String,
|
|
|
url: String,
|
|
|
};
|
|
|
var EVENT_DATE_REFINERS = {
|
|
|
start: identity,
|
|
|
end: identity,
|
|
|
date: identity,
|
|
|
allDay: Boolean,
|
|
|
};
|
|
|
var EVENT_REFINERS = __assign(__assign(__assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });
|
|
|
function parseEvent(raw, eventSource, context, allowOpenRange, refiners) {
|
|
|
if (refiners === void 0) { refiners = buildEventRefiners(context); }
|
|
|
var _a = refineEventDef(raw, context, refiners), refined = _a.refined, extra = _a.extra;
|
|
|
var defaultAllDay = computeIsDefaultAllDay(eventSource, context);
|
|
|
var recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);
|
|
|
if (recurringRes) {
|
|
|
var def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context);
|
|
|
def.recurringDef = {
|
|
|
typeId: recurringRes.typeId,
|
|
|
typeData: recurringRes.typeData,
|
|
|
duration: recurringRes.duration,
|
|
|
};
|
|
|
return { def: def, instance: null };
|
|
|
}
|
|
|
var singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);
|
|
|
if (singleRes) {
|
|
|
var def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context);
|
|
|
var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
|
|
|
return { def: def, instance: instance };
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function refineEventDef(raw, context, refiners) {
|
|
|
if (refiners === void 0) { refiners = buildEventRefiners(context); }
|
|
|
return refineProps(raw, refiners);
|
|
|
}
|
|
|
function buildEventRefiners(context) {
|
|
|
return __assign(__assign(__assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);
|
|
|
}
|
|
|
/*
|
|
|
Will NOT populate extendedProps with the leftover properties.
|
|
|
Will NOT populate date-related props.
|
|
|
*/
|
|
|
function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
|
|
|
var def = {
|
|
|
title: refined.title || '',
|
|
|
groupId: refined.groupId || '',
|
|
|
publicId: refined.id || '',
|
|
|
url: refined.url || '',
|
|
|
recurringDef: null,
|
|
|
defId: guid(),
|
|
|
sourceId: sourceId,
|
|
|
allDay: allDay,
|
|
|
hasEnd: hasEnd,
|
|
|
ui: createEventUi(refined, context),
|
|
|
extendedProps: __assign(__assign({}, (refined.extendedProps || {})), extra),
|
|
|
};
|
|
|
for (var _i = 0, _a = context.pluginHooks.eventDefMemberAdders; _i < _a.length; _i++) {
|
|
|
var memberAdder = _a[_i];
|
|
|
__assign(def, memberAdder(refined));
|
|
|
}
|
|
|
// help out EventApi from having user modify props
|
|
|
Object.freeze(def.ui.classNames);
|
|
|
Object.freeze(def.extendedProps);
|
|
|
return def;
|
|
|
}
|
|
|
function parseSingle(refined, defaultAllDay, context, allowOpenRange) {
|
|
|
var allDay = refined.allDay;
|
|
|
var startMeta;
|
|
|
var startMarker = null;
|
|
|
var hasEnd = false;
|
|
|
var endMeta;
|
|
|
var endMarker = null;
|
|
|
var startInput = refined.start != null ? refined.start : refined.date;
|
|
|
startMeta = context.dateEnv.createMarkerMeta(startInput);
|
|
|
if (startMeta) {
|
|
|
startMarker = startMeta.marker;
|
|
|
}
|
|
|
else if (!allowOpenRange) {
|
|
|
return null;
|
|
|
}
|
|
|
if (refined.end != null) {
|
|
|
endMeta = context.dateEnv.createMarkerMeta(refined.end);
|
|
|
}
|
|
|
if (allDay == null) {
|
|
|
if (defaultAllDay != null) {
|
|
|
allDay = defaultAllDay;
|
|
|
}
|
|
|
else {
|
|
|
// fall back to the date props LAST
|
|
|
allDay = (!startMeta || startMeta.isTimeUnspecified) &&
|
|
|
(!endMeta || endMeta.isTimeUnspecified);
|
|
|
}
|
|
|
}
|
|
|
if (allDay && startMarker) {
|
|
|
startMarker = startOfDay(startMarker);
|
|
|
}
|
|
|
if (endMeta) {
|
|
|
endMarker = endMeta.marker;
|
|
|
if (allDay) {
|
|
|
endMarker = startOfDay(endMarker);
|
|
|
}
|
|
|
if (startMarker && endMarker <= startMarker) {
|
|
|
endMarker = null;
|
|
|
}
|
|
|
}
|
|
|
if (endMarker) {
|
|
|
hasEnd = true;
|
|
|
}
|
|
|
else if (!allowOpenRange) {
|
|
|
hasEnd = context.options.forceEventDuration || false;
|
|
|
endMarker = context.dateEnv.add(startMarker, allDay ?
|
|
|
context.options.defaultAllDayEventDuration :
|
|
|
context.options.defaultTimedEventDuration);
|
|
|
}
|
|
|
return {
|
|
|
allDay: allDay,
|
|
|
hasEnd: hasEnd,
|
|
|
range: { start: startMarker, end: endMarker },
|
|
|
forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
|
|
|
forcedEndTzo: endMeta ? endMeta.forcedTzo : null,
|
|
|
};
|
|
|
}
|
|
|
function computeIsDefaultAllDay(eventSource, context) {
|
|
|
var res = null;
|
|
|
if (eventSource) {
|
|
|
res = eventSource.defaultAllDay;
|
|
|
}
|
|
|
if (res == null) {
|
|
|
res = context.options.defaultAllDay;
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
/* Date stuff that doesn't belong in datelib core
|
|
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
|
// given a timed range, computes an all-day range that has the same exact duration,
|
|
|
// but whose start time is aligned with the start of the day.
|
|
|
function computeAlignedDayRange(timedRange) {
|
|
|
var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
|
|
|
var start = startOfDay(timedRange.start);
|
|
|
var end = addDays(start, dayCnt);
|
|
|
return { start: start, end: end };
|
|
|
}
|
|
|
// given a timed range, computes an all-day range based on how for the end date bleeds into the next day
|
|
|
// TODO: give nextDayThreshold a default arg
|
|
|
function computeVisibleDayRange(timedRange, nextDayThreshold) {
|
|
|
if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); }
|
|
|
var startDay = null;
|
|
|
var endDay = null;
|
|
|
if (timedRange.end) {
|
|
|
endDay = startOfDay(timedRange.end);
|
|
|
var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
|
|
|
// If the end time is actually inclusively part of the next day and is equal to or
|
|
|
// beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
|
|
|
// Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
|
|
|
if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
|
|
|
endDay = addDays(endDay, 1);
|
|
|
}
|
|
|
}
|
|
|
if (timedRange.start) {
|
|
|
startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
|
|
|
// If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
|
|
|
if (endDay && endDay <= startDay) {
|
|
|
endDay = addDays(startDay, 1);
|
|
|
}
|
|
|
}
|
|
|
return { start: startDay, end: endDay };
|
|
|
}
|
|
|
// spans from one day into another?
|
|
|
function isMultiDayRange(range) {
|
|
|
var visibleRange = computeVisibleDayRange(range);
|
|
|
return diffDays(visibleRange.start, visibleRange.end) > 1;
|
|
|
}
|
|
|
function diffDates(date0, date1, dateEnv, largeUnit) {
|
|
|
if (largeUnit === 'year') {
|
|
|
return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
|
|
|
}
|
|
|
if (largeUnit === 'month') {
|
|
|
return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
|
|
|
}
|
|
|
return diffDayAndTime(date0, date1); // returns a duration
|
|
|
}
|
|
|
|
|
|
function parseRange(input, dateEnv) {
|
|
|
var start = null;
|
|
|
var end = null;
|
|
|
if (input.start) {
|
|
|
start = dateEnv.createMarker(input.start);
|
|
|
}
|
|
|
if (input.end) {
|
|
|
end = dateEnv.createMarker(input.end);
|
|
|
}
|
|
|
if (!start && !end) {
|
|
|
return null;
|
|
|
}
|
|
|
if (start && end && end < start) {
|
|
|
return null;
|
|
|
}
|
|
|
return { start: start, end: end };
|
|
|
}
|
|
|
// SIDE-EFFECT: will mutate ranges.
|
|
|
// Will return a new array result.
|
|
|
function invertRanges(ranges, constraintRange) {
|
|
|
var invertedRanges = [];
|
|
|
var start = constraintRange.start; // the end of the previous range. the start of the new range
|
|
|
var i;
|
|
|
var dateRange;
|
|
|
// ranges need to be in order. required for our date-walking algorithm
|
|
|
ranges.sort(compareRanges);
|
|
|
for (i = 0; i < ranges.length; i += 1) {
|
|
|
dateRange = ranges[i];
|
|
|
// add the span of time before the event (if there is any)
|
|
|
if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
|
|
|
invertedRanges.push({ start: start, end: dateRange.start });
|
|
|
}
|
|
|
if (dateRange.end > start) {
|
|
|
start = dateRange.end;
|
|
|
}
|
|
|
}
|
|
|
// add the span of time after the last event (if there is any)
|
|
|
if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
|
|
|
invertedRanges.push({ start: start, end: constraintRange.end });
|
|
|
}
|
|
|
return invertedRanges;
|
|
|
}
|
|
|
function compareRanges(range0, range1) {
|
|
|
return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
|
|
|
}
|
|
|
function intersectRanges(range0, range1) {
|
|
|
var start = range0.start, end = range0.end;
|
|
|
var newRange = null;
|
|
|
if (range1.start !== null) {
|
|
|
if (start === null) {
|
|
|
start = range1.start;
|
|
|
}
|
|
|
else {
|
|
|
start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
|
|
|
}
|
|
|
}
|
|
|
if (range1.end != null) {
|
|
|
if (end === null) {
|
|
|
end = range1.end;
|
|
|
}
|
|
|
else {
|
|
|
end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
|
|
|
}
|
|
|
}
|
|
|
if (start === null || end === null || start < end) {
|
|
|
newRange = { start: start, end: end };
|
|
|
}
|
|
|
return newRange;
|
|
|
}
|
|
|
function rangesIntersect(range0, range1) {
|
|
|
return (range0.end === null || range1.start === null || range0.end > range1.start) &&
|
|
|
(range0.start === null || range1.end === null || range0.start < range1.end);
|
|
|
}
|
|
|
function rangeContainsMarker(range, date) {
|
|
|
return (range.start === null || date >= range.start) &&
|
|
|
(range.end === null || date < range.end);
|
|
|
}
|
|
|
// If the given date is not within the given range, move it inside.
|
|
|
// (If it's past the end, make it one millisecond before the end).
|
|
|
function constrainMarkerToRange(date, range) {
|
|
|
if (range.start != null && date < range.start) {
|
|
|
return range.start;
|
|
|
}
|
|
|
if (range.end != null && date >= range.end) {
|
|
|
return new Date(range.end.valueOf() - 1);
|
|
|
}
|
|
|
return date;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
Specifying nextDayThreshold signals that all-day ranges should be sliced.
|
|
|
*/
|
|
|
function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
|
|
|
var inverseBgByGroupId = {};
|
|
|
var inverseBgByDefId = {};
|
|
|
var defByGroupId = {};
|
|
|
var bgRanges = [];
|
|
|
var fgRanges = [];
|
|
|
var eventUis = compileEventUis(eventStore.defs, eventUiBases);
|
|
|
for (var defId in eventStore.defs) {
|
|
|
var def = eventStore.defs[defId];
|
|
|
var ui = eventUis[def.defId];
|
|
|
if (ui.display === 'inverse-background') {
|
|
|
if (def.groupId) {
|
|
|
inverseBgByGroupId[def.groupId] = [];
|
|
|
if (!defByGroupId[def.groupId]) {
|
|
|
defByGroupId[def.groupId] = def;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
inverseBgByDefId[defId] = [];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (var instanceId in eventStore.instances) {
|
|
|
var instance = eventStore.instances[instanceId];
|
|
|
var def = eventStore.defs[instance.defId];
|
|
|
var ui = eventUis[def.defId];
|
|
|
var origRange = instance.range;
|
|
|
var normalRange = (!def.allDay && nextDayThreshold) ?
|
|
|
computeVisibleDayRange(origRange, nextDayThreshold) :
|
|
|
origRange;
|
|
|
var slicedRange = intersectRanges(normalRange, framingRange);
|
|
|
if (slicedRange) {
|
|
|
if (ui.display === 'inverse-background') {
|
|
|
if (def.groupId) {
|
|
|
inverseBgByGroupId[def.groupId].push(slicedRange);
|
|
|
}
|
|
|
else {
|
|
|
inverseBgByDefId[instance.defId].push(slicedRange);
|
|
|
}
|
|
|
}
|
|
|
else if (ui.display !== 'none') {
|
|
|
(ui.display === 'background' ? bgRanges : fgRanges).push({
|
|
|
def: def,
|
|
|
ui: ui,
|
|
|
instance: instance,
|
|
|
range: slicedRange,
|
|
|
isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
|
|
|
isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
for (var groupId in inverseBgByGroupId) { // BY GROUP
|
|
|
var ranges = inverseBgByGroupId[groupId];
|
|
|
var invertedRanges = invertRanges(ranges, framingRange);
|
|
|
for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {
|
|
|
var invertedRange = invertedRanges_1[_i];
|
|
|
var def = defByGroupId[groupId];
|
|
|
var ui = eventUis[def.defId];
|
|
|
bgRanges.push({
|
|
|
def: def,
|
|
|
ui: ui,
|
|
|
instance: null,
|
|
|
range: invertedRange,
|
|
|
isStart: false,
|
|
|
isEnd: false,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
for (var defId in inverseBgByDefId) {
|
|
|
var ranges = inverseBgByDefId[defId];
|
|
|
var invertedRanges = invertRanges(ranges, framingRange);
|
|
|
for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {
|
|
|
var invertedRange = invertedRanges_2[_a];
|
|
|
bgRanges.push({
|
|
|
def: eventStore.defs[defId],
|
|
|
ui: eventUis[defId],
|
|
|
instance: null,
|
|
|
range: invertedRange,
|
|
|
isStart: false,
|
|
|
isEnd: false,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
return { bg: bgRanges, fg: fgRanges };
|
|
|
}
|
|
|
function hasBgRendering(def) {
|
|
|
return def.ui.display === 'background' || def.ui.display === 'inverse-background';
|
|
|
}
|
|
|
function setElSeg(el, seg) {
|
|
|
el.fcSeg = seg;
|
|
|
}
|
|
|
function getElSeg(el) {
|
|
|
return el.fcSeg ||
|
|
|
el.parentNode.fcSeg || // for the harness
|
|
|
null;
|
|
|
}
|
|
|
// event ui computation
|
|
|
function compileEventUis(eventDefs, eventUiBases) {
|
|
|
return mapHash(eventDefs, function (eventDef) { return compileEventUi(eventDef, eventUiBases); });
|
|
|
}
|
|
|
function compileEventUi(eventDef, eventUiBases) {
|
|
|
var uis = [];
|
|
|
if (eventUiBases['']) {
|
|
|
uis.push(eventUiBases['']);
|
|
|
}
|
|
|
if (eventUiBases[eventDef.defId]) {
|
|
|
uis.push(eventUiBases[eventDef.defId]);
|
|
|
}
|
|
|
uis.push(eventDef.ui);
|
|
|
return combineEventUis(uis);
|
|
|
}
|
|
|
function sortEventSegs(segs, eventOrderSpecs) {
|
|
|
var objs = segs.map(buildSegCompareObj);
|
|
|
objs.sort(function (obj0, obj1) { return compareByFieldSpecs(obj0, obj1, eventOrderSpecs); });
|
|
|
return objs.map(function (c) { return c._seg; });
|
|
|
}
|
|
|
// returns a object with all primitive props that can be compared
|
|
|
function buildSegCompareObj(seg) {
|
|
|
var eventRange = seg.eventRange;
|
|
|
var eventDef = eventRange.def;
|
|
|
var range = eventRange.instance ? eventRange.instance.range : eventRange.range;
|
|
|
var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
|
|
|
var end = range.end ? range.end.valueOf() : 0; // "
|
|
|
return __assign(__assign(__assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start: start,
|
|
|
end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });
|
|
|
}
|
|
|
function computeSegDraggable(seg, context) {
|
|
|
var pluginHooks = context.pluginHooks;
|
|
|
var transformers = pluginHooks.isDraggableTransformers;
|
|
|
var _a = seg.eventRange, def = _a.def, ui = _a.ui;
|
|
|
var val = ui.startEditable;
|
|
|
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
|
var transformer = transformers_1[_i];
|
|
|
val = transformer(val, def, ui, context);
|
|
|
}
|
|
|
return val;
|
|
|
}
|
|
|
function computeSegStartResizable(seg, context) {
|
|
|
return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
|
|
|
}
|
|
|
function computeSegEndResizable(seg, context) {
|
|
|
return seg.isEnd && seg.eventRange.ui.durationEditable;
|
|
|
}
|
|
|
function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true
|
|
|
defaultDisplayEventEnd, // defaults to true
|
|
|
startOverride, endOverride) {
|
|
|
var dateEnv = context.dateEnv, options = context.options;
|
|
|
var displayEventTime = options.displayEventTime, displayEventEnd = options.displayEventEnd;
|
|
|
var eventDef = seg.eventRange.def;
|
|
|
var eventInstance = seg.eventRange.instance;
|
|
|
if (displayEventTime == null) {
|
|
|
displayEventTime = defaultDisplayEventTime !== false;
|
|
|
}
|
|
|
if (displayEventEnd == null) {
|
|
|
displayEventEnd = defaultDisplayEventEnd !== false;
|
|
|
}
|
|
|
var wholeEventStart = eventInstance.range.start;
|
|
|
var wholeEventEnd = eventInstance.range.end;
|
|
|
var segStart = startOverride || seg.start || seg.eventRange.range.start;
|
|
|
var segEnd = endOverride || seg.end || seg.eventRange.range.end;
|
|
|
var isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
|
|
|
var isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
|
|
|
if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
|
|
|
segStart = isStartDay ? wholeEventStart : segStart;
|
|
|
segEnd = isEndDay ? wholeEventEnd : segEnd;
|
|
|
if (displayEventEnd && eventDef.hasEnd) {
|
|
|
return dateEnv.formatRange(segStart, segEnd, timeFormat, {
|
|
|
forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
|
|
|
forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,
|
|
|
});
|
|
|
}
|
|
|
return dateEnv.format(segStart, timeFormat, {
|
|
|
forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
|
|
|
});
|
|
|
}
|
|
|
return '';
|
|
|
}
|
|
|
function getSegMeta(seg, todayRange, nowDate) {
|
|
|
var segRange = seg.eventRange.range;
|
|
|
return {
|
|
|
isPast: segRange.end < (nowDate || todayRange.start),
|
|
|
isFuture: segRange.start >= (nowDate || todayRange.end),
|
|
|
isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),
|
|
|
};
|
|
|
}
|
|
|
function getEventClassNames(props) {
|
|
|
var classNames = ['fc-event'];
|
|
|
if (props.isMirror) {
|
|
|
classNames.push('fc-event-mirror');
|
|
|
}
|
|
|
if (props.isDraggable) {
|
|
|
classNames.push('fc-event-draggable');
|
|
|
}
|
|
|
if (props.isStartResizable || props.isEndResizable) {
|
|
|
classNames.push('fc-event-resizable');
|
|
|
}
|
|
|
if (props.isDragging) {
|
|
|
classNames.push('fc-event-dragging');
|
|
|
}
|
|
|
if (props.isResizing) {
|
|
|
classNames.push('fc-event-resizing');
|
|
|
}
|
|
|
if (props.isSelected) {
|
|
|
classNames.push('fc-event-selected');
|
|
|
}
|
|
|
if (props.isStart) {
|
|
|
classNames.push('fc-event-start');
|
|
|
}
|
|
|
if (props.isEnd) {
|
|
|
classNames.push('fc-event-end');
|
|
|
}
|
|
|
if (props.isPast) {
|
|
|
classNames.push('fc-event-past');
|
|
|
}
|
|
|
if (props.isToday) {
|
|
|
classNames.push('fc-event-today');
|
|
|
}
|
|
|
if (props.isFuture) {
|
|
|
classNames.push('fc-event-future');
|
|
|
}
|
|
|
return classNames;
|
|
|
}
|
|
|
function buildEventRangeKey(eventRange) {
|
|
|
return eventRange.instance
|
|
|
? eventRange.instance.instanceId
|
|
|
: eventRange.def.defId + ":" + eventRange.range.start.toISOString();
|
|
|
// inverse-background events don't have specific instances. TODO: better solution
|
|
|
}
|
|
|
|
|
|
var STANDARD_PROPS = {
|
|
|
start: identity,
|
|
|
end: identity,
|
|
|
allDay: Boolean,
|
|
|
};
|
|
|
function parseDateSpan(raw, dateEnv, defaultDuration) {
|
|
|
var span = parseOpenDateSpan(raw, dateEnv);
|
|
|
var range = span.range;
|
|
|
if (!range.start) {
|
|
|
return null;
|
|
|
}
|
|
|
if (!range.end) {
|
|
|
if (defaultDuration == null) {
|
|
|
return null;
|
|
|
}
|
|
|
range.end = dateEnv.add(range.start, defaultDuration);
|
|
|
}
|
|
|
return span;
|
|
|
}
|
|
|
/*
|
|
|
TODO: somehow combine with parseRange?
|
|
|
Will return null if the start/end props were present but parsed invalidly.
|
|
|
*/
|
|
|
function parseOpenDateSpan(raw, dateEnv) {
|
|
|
var _a = refineProps(raw, STANDARD_PROPS), standardProps = _a.refined, extra = _a.extra;
|
|
|
var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
|
|
|
var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
|
|
|
var allDay = standardProps.allDay;
|
|
|
if (allDay == null) {
|
|
|
allDay = (startMeta && startMeta.isTimeUnspecified) &&
|
|
|
(!endMeta || endMeta.isTimeUnspecified);
|
|
|
}
|
|
|
return __assign({ range: {
|
|
|
start: startMeta ? startMeta.marker : null,
|
|
|
end: endMeta ? endMeta.marker : null,
|
|
|
}, allDay: allDay }, extra);
|
|
|
}
|
|
|
function buildDateSpanApi(span, dateEnv) {
|
|
|
return __assign(__assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });
|
|
|
}
|
|
|
function buildRangeApiWithTimeZone(range, dateEnv, omitTime) {
|
|
|
return __assign(__assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });
|
|
|
}
|
|
|
function buildRangeApi(range, dateEnv, omitTime) {
|
|
|
return {
|
|
|
start: dateEnv.toDate(range.start),
|
|
|
end: dateEnv.toDate(range.end),
|
|
|
startStr: dateEnv.formatIso(range.start, { omitTime: omitTime }),
|
|
|
endStr: dateEnv.formatIso(range.end, { omitTime: omitTime }),
|
|
|
};
|
|
|
}
|
|
|
function fabricateEventRange(dateSpan, eventUiBases, context) {
|
|
|
var res = refineEventDef({ editable: false }, context);
|
|
|
var def = parseEventDef(res.refined, res.extra, '', // sourceId
|
|
|
dateSpan.allDay, true, // hasEnd
|
|
|
context);
|
|
|
return {
|
|
|
def: def,
|
|
|
ui: compileEventUi(def, eventUiBases),
|
|
|
instance: createEventInstance(def.defId, dateSpan.range),
|
|
|
range: dateSpan.range,
|
|
|
isStart: true,
|
|
|
isEnd: true,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function triggerDateSelect(selection, pev, context) {
|
|
|
context.emitter.trigger('select', __assign(__assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));
|
|
|
}
|
|
|
function triggerDateUnselect(pev, context) {
|
|
|
context.emitter.trigger('unselect', {
|
|
|
jsEvent: pev ? pev.origEvent : null,
|
|
|
view: context.viewApi || context.calendarApi.view,
|
|
|
});
|
|
|
}
|
|
|
function buildDateSpanApiWithContext(dateSpan, context) {
|
|
|
var props = {};
|
|
|
for (var _i = 0, _a = context.pluginHooks.dateSpanTransforms; _i < _a.length; _i++) {
|
|
|
var transform = _a[_i];
|
|
|
__assign(props, transform(dateSpan, context));
|
|
|
}
|
|
|
__assign(props, buildDateSpanApi(dateSpan, context.dateEnv));
|
|
|
return props;
|
|
|
}
|
|
|
// Given an event's allDay status and start date, return what its fallback end date should be.
|
|
|
// TODO: rename to computeDefaultEventEnd
|
|
|
function getDefaultEventEnd(allDay, marker, context) {
|
|
|
var dateEnv = context.dateEnv, options = context.options;
|
|
|
var end = marker;
|
|
|
if (allDay) {
|
|
|
end = startOfDay(end);
|
|
|
end = dateEnv.add(end, options.defaultAllDayEventDuration);
|
|
|
}
|
|
|
else {
|
|
|
end = dateEnv.add(end, options.defaultTimedEventDuration);
|
|
|
}
|
|
|
return end;
|
|
|
}
|
|
|
|
|
|
// applies the mutation to ALL defs/instances within the event store
|
|
|
function applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {
|
|
|
var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
|
|
|
var dest = createEmptyEventStore();
|
|
|
for (var defId in eventStore.defs) {
|
|
|
var def = eventStore.defs[defId];
|
|
|
dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);
|
|
|
}
|
|
|
for (var instanceId in eventStore.instances) {
|
|
|
var instance = eventStore.instances[instanceId];
|
|
|
var def = dest.defs[instance.defId]; // important to grab the newly modified def
|
|
|
dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);
|
|
|
}
|
|
|
return dest;
|
|
|
}
|
|
|
function applyMutationToEventDef(eventDef, eventConfig, mutation, context) {
|
|
|
var standardProps = mutation.standardProps || {};
|
|
|
// if hasEnd has not been specified, guess a good value based on deltas.
|
|
|
// if duration will change, there's no way the default duration will persist,
|
|
|
// and thus, we need to mark the event as having a real end
|
|
|
if (standardProps.hasEnd == null &&
|
|
|
eventConfig.durationEditable &&
|
|
|
(mutation.startDelta || mutation.endDelta)) {
|
|
|
standardProps.hasEnd = true; // TODO: is this mutation okay?
|
|
|
}
|
|
|
var copy = __assign(__assign(__assign({}, eventDef), standardProps), { ui: __assign(__assign({}, eventDef.ui), standardProps.ui) });
|
|
|
if (mutation.extendedProps) {
|
|
|
copy.extendedProps = __assign(__assign({}, copy.extendedProps), mutation.extendedProps);
|
|
|
}
|
|
|
for (var _i = 0, _a = context.pluginHooks.eventDefMutationAppliers; _i < _a.length; _i++) {
|
|
|
var applier = _a[_i];
|
|
|
applier(copy, mutation, context);
|
|
|
}
|
|
|
if (!copy.hasEnd && context.options.forceEventDuration) {
|
|
|
copy.hasEnd = true;
|
|
|
}
|
|
|
return copy;
|
|
|
}
|
|
|
function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
|
|
|
eventConfig, mutation, context) {
|
|
|
var dateEnv = context.dateEnv;
|
|
|
var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
|
|
|
var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
|
|
|
var copy = __assign({}, eventInstance);
|
|
|
if (forceAllDay) {
|
|
|
copy.range = computeAlignedDayRange(copy.range);
|
|
|
}
|
|
|
if (mutation.datesDelta && eventConfig.startEditable) {
|
|
|
copy.range = {
|
|
|
start: dateEnv.add(copy.range.start, mutation.datesDelta),
|
|
|
end: dateEnv.add(copy.range.end, mutation.datesDelta),
|
|
|
};
|
|
|
}
|
|
|
if (mutation.startDelta && eventConfig.durationEditable) {
|
|
|
copy.range = {
|
|
|
start: dateEnv.add(copy.range.start, mutation.startDelta),
|
|
|
end: copy.range.end,
|
|
|
};
|
|
|
}
|
|
|
if (mutation.endDelta && eventConfig.durationEditable) {
|
|
|
copy.range = {
|
|
|
start: copy.range.start,
|
|
|
end: dateEnv.add(copy.range.end, mutation.endDelta),
|
|
|
};
|
|
|
}
|
|
|
if (clearEnd) {
|
|
|
copy.range = {
|
|
|
start: copy.range.start,
|
|
|
end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),
|
|
|
};
|
|
|
}
|
|
|
// in case event was all-day but the supplied deltas were not
|
|
|
// better util for this?
|
|
|
if (eventDef.allDay) {
|
|
|
copy.range = {
|
|
|
start: startOfDay(copy.range.start),
|
|
|
end: startOfDay(copy.range.end),
|
|
|
};
|
|
|
}
|
|
|
// handle invalid durations
|
|
|
if (copy.range.end < copy.range.start) {
|
|
|
copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);
|
|
|
}
|
|
|
return copy;
|
|
|
}
|
|
|
|
|
|
// no public types yet. when there are, export from:
|
|
|
// import {} from './api-type-deps'
|
|
|
var ViewApi = /** @class */ (function () {
|
|
|
function ViewApi(type, getCurrentData, dateEnv) {
|
|
|
this.type = type;
|
|
|
this.getCurrentData = getCurrentData;
|
|
|
this.dateEnv = dateEnv;
|
|
|
}
|
|
|
Object.defineProperty(ViewApi.prototype, "calendar", {
|
|
|
get: function () {
|
|
|
return this.getCurrentData().calendarApi;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(ViewApi.prototype, "title", {
|
|
|
get: function () {
|
|
|
return this.getCurrentData().viewTitle;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(ViewApi.prototype, "activeStart", {
|
|
|
get: function () {
|
|
|
return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(ViewApi.prototype, "activeEnd", {
|
|
|
get: function () {
|
|
|
return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(ViewApi.prototype, "currentStart", {
|
|
|
get: function () {
|
|
|
return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(ViewApi.prototype, "currentEnd", {
|
|
|
get: function () {
|
|
|
return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
ViewApi.prototype.getOption = function (name) {
|
|
|
return this.getCurrentData().options[name]; // are the view-specific options
|
|
|
};
|
|
|
return ViewApi;
|
|
|
}());
|
|
|
|
|
|
var EVENT_SOURCE_REFINERS = {
|
|
|
id: String,
|
|
|
defaultAllDay: Boolean,
|
|
|
url: String,
|
|
|
format: String,
|
|
|
events: identity,
|
|
|
eventDataTransform: identity,
|
|
|
// for any network-related sources
|
|
|
success: identity,
|
|
|
failure: identity,
|
|
|
};
|
|
|
function parseEventSource(raw, context, refiners) {
|
|
|
if (refiners === void 0) { refiners = buildEventSourceRefiners(context); }
|
|
|
var rawObj;
|
|
|
if (typeof raw === 'string') {
|
|
|
rawObj = { url: raw };
|
|
|
}
|
|
|
else if (typeof raw === 'function' || Array.isArray(raw)) {
|
|
|
rawObj = { events: raw };
|
|
|
}
|
|
|
else if (typeof raw === 'object' && raw) { // not null
|
|
|
rawObj = raw;
|
|
|
}
|
|
|
if (rawObj) {
|
|
|
var _a = refineProps(rawObj, refiners), refined = _a.refined, extra = _a.extra;
|
|
|
var metaRes = buildEventSourceMeta(refined, context);
|
|
|
if (metaRes) {
|
|
|
return {
|
|
|
_raw: raw,
|
|
|
isFetching: false,
|
|
|
latestFetchId: '',
|
|
|
fetchRange: null,
|
|
|
defaultAllDay: refined.defaultAllDay,
|
|
|
eventDataTransform: refined.eventDataTransform,
|
|
|
success: refined.success,
|
|
|
failure: refined.failure,
|
|
|
publicId: refined.id || '',
|
|
|
sourceId: guid(),
|
|
|
sourceDefId: metaRes.sourceDefId,
|
|
|
meta: metaRes.meta,
|
|
|
ui: createEventUi(refined, context),
|
|
|
extendedProps: extra,
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function buildEventSourceRefiners(context) {
|
|
|
return __assign(__assign(__assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);
|
|
|
}
|
|
|
function buildEventSourceMeta(raw, context) {
|
|
|
var defs = context.pluginHooks.eventSourceDefs;
|
|
|
for (var i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence
|
|
|
var def = defs[i];
|
|
|
var meta = def.parseMeta(raw);
|
|
|
if (meta) {
|
|
|
return { sourceDefId: i, meta: meta };
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function reduceCurrentDate(currentDate, action) {
|
|
|
switch (action.type) {
|
|
|
case 'CHANGE_DATE':
|
|
|
return action.dateMarker;
|
|
|
default:
|
|
|
return currentDate;
|
|
|
}
|
|
|
}
|
|
|
function getInitialDate(options, dateEnv) {
|
|
|
var initialDateInput = options.initialDate;
|
|
|
// compute the initial ambig-timezone date
|
|
|
if (initialDateInput != null) {
|
|
|
return dateEnv.createMarker(initialDateInput);
|
|
|
}
|
|
|
return getNow(options.now, dateEnv); // getNow already returns unzoned
|
|
|
}
|
|
|
function getNow(nowInput, dateEnv) {
|
|
|
if (typeof nowInput === 'function') {
|
|
|
nowInput = nowInput();
|
|
|
}
|
|
|
if (nowInput == null) {
|
|
|
return dateEnv.createNowMarker();
|
|
|
}
|
|
|
return dateEnv.createMarker(nowInput);
|
|
|
}
|
|
|
|
|
|
var CalendarApi = /** @class */ (function () {
|
|
|
function CalendarApi() {
|
|
|
}
|
|
|
CalendarApi.prototype.getCurrentData = function () {
|
|
|
return this.currentDataManager.getCurrentData();
|
|
|
};
|
|
|
CalendarApi.prototype.dispatch = function (action) {
|
|
|
return this.currentDataManager.dispatch(action);
|
|
|
};
|
|
|
Object.defineProperty(CalendarApi.prototype, "view", {
|
|
|
get: function () { return this.getCurrentData().viewApi; } // for public API
|
|
|
,
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
CalendarApi.prototype.batchRendering = function (callback) {
|
|
|
callback();
|
|
|
};
|
|
|
CalendarApi.prototype.updateSize = function () {
|
|
|
this.trigger('_resize', true);
|
|
|
};
|
|
|
// Options
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.setOption = function (name, val) {
|
|
|
this.dispatch({
|
|
|
type: 'SET_OPTION',
|
|
|
optionName: name,
|
|
|
rawOptionValue: val,
|
|
|
});
|
|
|
};
|
|
|
CalendarApi.prototype.getOption = function (name) {
|
|
|
return this.currentDataManager.currentCalendarOptionsInput[name];
|
|
|
};
|
|
|
CalendarApi.prototype.getAvailableLocaleCodes = function () {
|
|
|
return Object.keys(this.getCurrentData().availableRawLocales);
|
|
|
};
|
|
|
// Trigger
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.on = function (handlerName, handler) {
|
|
|
var currentDataManager = this.currentDataManager;
|
|
|
if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {
|
|
|
currentDataManager.emitter.on(handlerName, handler);
|
|
|
}
|
|
|
else {
|
|
|
console.warn("Unknown listener name '" + handlerName + "'");
|
|
|
}
|
|
|
};
|
|
|
CalendarApi.prototype.off = function (handlerName, handler) {
|
|
|
this.currentDataManager.emitter.off(handlerName, handler);
|
|
|
};
|
|
|
// not meant for public use
|
|
|
CalendarApi.prototype.trigger = function (handlerName) {
|
|
|
var _a;
|
|
|
var args = [];
|
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
|
args[_i - 1] = arguments[_i];
|
|
|
}
|
|
|
(_a = this.currentDataManager.emitter).trigger.apply(_a, __spreadArray([handlerName], args));
|
|
|
};
|
|
|
// View
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.changeView = function (viewType, dateOrRange) {
|
|
|
var _this = this;
|
|
|
this.batchRendering(function () {
|
|
|
_this.unselect();
|
|
|
if (dateOrRange) {
|
|
|
if (dateOrRange.start && dateOrRange.end) { // a range
|
|
|
_this.dispatch({
|
|
|
type: 'CHANGE_VIEW_TYPE',
|
|
|
viewType: viewType,
|
|
|
});
|
|
|
_this.dispatch({
|
|
|
type: 'SET_OPTION',
|
|
|
optionName: 'visibleRange',
|
|
|
rawOptionValue: dateOrRange,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
var dateEnv = _this.getCurrentData().dateEnv;
|
|
|
_this.dispatch({
|
|
|
type: 'CHANGE_VIEW_TYPE',
|
|
|
viewType: viewType,
|
|
|
dateMarker: dateEnv.createMarker(dateOrRange),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
_this.dispatch({
|
|
|
type: 'CHANGE_VIEW_TYPE',
|
|
|
viewType: viewType,
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
// Forces navigation to a view for the given date.
|
|
|
// `viewType` can be a specific view name or a generic one like "week" or "day".
|
|
|
// needs to change
|
|
|
CalendarApi.prototype.zoomTo = function (dateMarker, viewType) {
|
|
|
var state = this.getCurrentData();
|
|
|
var spec;
|
|
|
viewType = viewType || 'day'; // day is default zoom
|
|
|
spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);
|
|
|
this.unselect();
|
|
|
if (spec) {
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_VIEW_TYPE',
|
|
|
viewType: spec.type,
|
|
|
dateMarker: dateMarker,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: dateMarker,
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
// Given a duration singular unit, like "week" or "day", finds a matching view spec.
|
|
|
// Preference is given to views that have corresponding buttons.
|
|
|
CalendarApi.prototype.getUnitViewSpec = function (unit) {
|
|
|
var _a = this.getCurrentData(), viewSpecs = _a.viewSpecs, toolbarConfig = _a.toolbarConfig;
|
|
|
var viewTypes = [].concat(toolbarConfig.viewsWithButtons);
|
|
|
var i;
|
|
|
var spec;
|
|
|
for (var viewType in viewSpecs) {
|
|
|
viewTypes.push(viewType);
|
|
|
}
|
|
|
for (i = 0; i < viewTypes.length; i += 1) {
|
|
|
spec = viewSpecs[viewTypes[i]];
|
|
|
if (spec) {
|
|
|
if (spec.singleUnit === unit) {
|
|
|
return spec;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Current Date
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.prev = function () {
|
|
|
this.unselect();
|
|
|
this.dispatch({ type: 'PREV' });
|
|
|
};
|
|
|
CalendarApi.prototype.next = function () {
|
|
|
this.unselect();
|
|
|
this.dispatch({ type: 'NEXT' });
|
|
|
};
|
|
|
CalendarApi.prototype.prevYear = function () {
|
|
|
var state = this.getCurrentData();
|
|
|
this.unselect();
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: state.dateEnv.addYears(state.currentDate, -1),
|
|
|
});
|
|
|
};
|
|
|
CalendarApi.prototype.nextYear = function () {
|
|
|
var state = this.getCurrentData();
|
|
|
this.unselect();
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: state.dateEnv.addYears(state.currentDate, 1),
|
|
|
});
|
|
|
};
|
|
|
CalendarApi.prototype.today = function () {
|
|
|
var state = this.getCurrentData();
|
|
|
this.unselect();
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: getNow(state.calendarOptions.now, state.dateEnv),
|
|
|
});
|
|
|
};
|
|
|
CalendarApi.prototype.gotoDate = function (zonedDateInput) {
|
|
|
var state = this.getCurrentData();
|
|
|
this.unselect();
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: state.dateEnv.createMarker(zonedDateInput),
|
|
|
});
|
|
|
};
|
|
|
CalendarApi.prototype.incrementDate = function (deltaInput) {
|
|
|
var state = this.getCurrentData();
|
|
|
var delta = createDuration(deltaInput);
|
|
|
if (delta) { // else, warn about invalid input?
|
|
|
this.unselect();
|
|
|
this.dispatch({
|
|
|
type: 'CHANGE_DATE',
|
|
|
dateMarker: state.dateEnv.add(state.currentDate, delta),
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
// for external API
|
|
|
CalendarApi.prototype.getDate = function () {
|
|
|
var state = this.getCurrentData();
|
|
|
return state.dateEnv.toDate(state.currentDate);
|
|
|
};
|
|
|
// Date Formatting Utils
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.formatDate = function (d, formatter) {
|
|
|
var dateEnv = this.getCurrentData().dateEnv;
|
|
|
return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
|
|
|
};
|
|
|
// `settings` is for formatter AND isEndExclusive
|
|
|
CalendarApi.prototype.formatRange = function (d0, d1, settings) {
|
|
|
var dateEnv = this.getCurrentData().dateEnv;
|
|
|
return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);
|
|
|
};
|
|
|
CalendarApi.prototype.formatIso = function (d, omitTime) {
|
|
|
var dateEnv = this.getCurrentData().dateEnv;
|
|
|
return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime });
|
|
|
};
|
|
|
// Date Selection / Event Selection / DayClick
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
// this public method receives start/end dates in any format, with any timezone
|
|
|
// NOTE: args were changed from v3
|
|
|
CalendarApi.prototype.select = function (dateOrObj, endDate) {
|
|
|
var selectionInput;
|
|
|
if (endDate == null) {
|
|
|
if (dateOrObj.start != null) {
|
|
|
selectionInput = dateOrObj;
|
|
|
}
|
|
|
else {
|
|
|
selectionInput = {
|
|
|
start: dateOrObj,
|
|
|
end: null,
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
selectionInput = {
|
|
|
start: dateOrObj,
|
|
|
end: endDate,
|
|
|
};
|
|
|
}
|
|
|
var state = this.getCurrentData();
|
|
|
var selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));
|
|
|
if (selection) { // throw parse error otherwise?
|
|
|
this.dispatch({ type: 'SELECT_DATES', selection: selection });
|
|
|
triggerDateSelect(selection, null, state);
|
|
|
}
|
|
|
};
|
|
|
// public method
|
|
|
CalendarApi.prototype.unselect = function (pev) {
|
|
|
var state = this.getCurrentData();
|
|
|
if (state.dateSelection) {
|
|
|
this.dispatch({ type: 'UNSELECT_DATES' });
|
|
|
triggerDateUnselect(pev, state);
|
|
|
}
|
|
|
};
|
|
|
// Public Events API
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.addEvent = function (eventInput, sourceInput) {
|
|
|
if (eventInput instanceof EventApi) {
|
|
|
var def = eventInput._def;
|
|
|
var instance = eventInput._instance;
|
|
|
var currentData = this.getCurrentData();
|
|
|
// not already present? don't want to add an old snapshot
|
|
|
if (!currentData.eventStore.defs[def.defId]) {
|
|
|
this.dispatch({
|
|
|
type: 'ADD_EVENTS',
|
|
|
eventStore: eventTupleToStore({ def: def, instance: instance }), // TODO: better util for two args?
|
|
|
});
|
|
|
this.triggerEventAdd(eventInput);
|
|
|
}
|
|
|
return eventInput;
|
|
|
}
|
|
|
var state = this.getCurrentData();
|
|
|
var eventSource;
|
|
|
if (sourceInput instanceof EventSourceApi) {
|
|
|
eventSource = sourceInput.internalEventSource;
|
|
|
}
|
|
|
else if (typeof sourceInput === 'boolean') {
|
|
|
if (sourceInput) { // true. part of the first event source
|
|
|
eventSource = hashValuesToArray(state.eventSources)[0];
|
|
|
}
|
|
|
}
|
|
|
else if (sourceInput != null) { // an ID. accepts a number too
|
|
|
var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
|
|
|
if (!sourceApi) {
|
|
|
console.warn("Could not find an event source with ID \"" + sourceInput + "\""); // TODO: test
|
|
|
return null;
|
|
|
}
|
|
|
eventSource = sourceApi.internalEventSource;
|
|
|
}
|
|
|
var tuple = parseEvent(eventInput, eventSource, state, false);
|
|
|
if (tuple) {
|
|
|
var newEventApi = new EventApi(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
|
|
|
this.dispatch({
|
|
|
type: 'ADD_EVENTS',
|
|
|
eventStore: eventTupleToStore(tuple),
|
|
|
});
|
|
|
this.triggerEventAdd(newEventApi);
|
|
|
return newEventApi;
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
CalendarApi.prototype.triggerEventAdd = function (eventApi) {
|
|
|
var _this = this;
|
|
|
var emitter = this.getCurrentData().emitter;
|
|
|
emitter.trigger('eventAdd', {
|
|
|
event: eventApi,
|
|
|
relatedEvents: [],
|
|
|
revert: function () {
|
|
|
_this.dispatch({
|
|
|
type: 'REMOVE_EVENTS',
|
|
|
eventStore: eventApiToStore(eventApi),
|
|
|
});
|
|
|
},
|
|
|
});
|
|
|
};
|
|
|
// TODO: optimize
|
|
|
CalendarApi.prototype.getEventById = function (id) {
|
|
|
var state = this.getCurrentData();
|
|
|
var _a = state.eventStore, defs = _a.defs, instances = _a.instances;
|
|
|
id = String(id);
|
|
|
for (var defId in defs) {
|
|
|
var def = defs[defId];
|
|
|
if (def.publicId === id) {
|
|
|
if (def.recurringDef) {
|
|
|
return new EventApi(state, def, null);
|
|
|
}
|
|
|
for (var instanceId in instances) {
|
|
|
var instance = instances[instanceId];
|
|
|
if (instance.defId === def.defId) {
|
|
|
return new EventApi(state, def, instance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
CalendarApi.prototype.getEvents = function () {
|
|
|
var currentData = this.getCurrentData();
|
|
|
return buildEventApis(currentData.eventStore, currentData);
|
|
|
};
|
|
|
CalendarApi.prototype.removeAllEvents = function () {
|
|
|
this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
|
|
|
};
|
|
|
// Public Event Sources API
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.getEventSources = function () {
|
|
|
var state = this.getCurrentData();
|
|
|
var sourceHash = state.eventSources;
|
|
|
var sourceApis = [];
|
|
|
for (var internalId in sourceHash) {
|
|
|
sourceApis.push(new EventSourceApi(state, sourceHash[internalId]));
|
|
|
}
|
|
|
return sourceApis;
|
|
|
};
|
|
|
CalendarApi.prototype.getEventSourceById = function (id) {
|
|
|
var state = this.getCurrentData();
|
|
|
var sourceHash = state.eventSources;
|
|
|
id = String(id);
|
|
|
for (var sourceId in sourceHash) {
|
|
|
if (sourceHash[sourceId].publicId === id) {
|
|
|
return new EventSourceApi(state, sourceHash[sourceId]);
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
CalendarApi.prototype.addEventSource = function (sourceInput) {
|
|
|
var state = this.getCurrentData();
|
|
|
if (sourceInput instanceof EventSourceApi) {
|
|
|
// not already present? don't want to add an old snapshot
|
|
|
if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {
|
|
|
this.dispatch({
|
|
|
type: 'ADD_EVENT_SOURCES',
|
|
|
sources: [sourceInput.internalEventSource],
|
|
|
});
|
|
|
}
|
|
|
return sourceInput;
|
|
|
}
|
|
|
var eventSource = parseEventSource(sourceInput, state);
|
|
|
if (eventSource) { // TODO: error otherwise?
|
|
|
this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
|
|
|
return new EventSourceApi(state, eventSource);
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
CalendarApi.prototype.removeAllEventSources = function () {
|
|
|
this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
|
|
|
};
|
|
|
CalendarApi.prototype.refetchEvents = function () {
|
|
|
this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });
|
|
|
};
|
|
|
// Scroll
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
CalendarApi.prototype.scrollToTime = function (timeInput) {
|
|
|
var time = createDuration(timeInput);
|
|
|
if (time) {
|
|
|
this.trigger('_scrollRequest', { time: time });
|
|
|
}
|
|
|
};
|
|
|
return CalendarApi;
|
|
|
}());
|
|
|
|
|
|
var EventApi = /** @class */ (function () {
|
|
|
// instance will be null if expressing a recurring event that has no current instances,
|
|
|
// OR if trying to validate an incoming external event that has no dates assigned
|
|
|
function EventApi(context, def, instance) {
|
|
|
this._context = context;
|
|
|
this._def = def;
|
|
|
this._instance = instance || null;
|
|
|
}
|
|
|
/*
|
|
|
TODO: make event struct more responsible for this
|
|
|
*/
|
|
|
EventApi.prototype.setProp = function (name, val) {
|
|
|
var _a, _b;
|
|
|
if (name in EVENT_DATE_REFINERS) {
|
|
|
console.warn('Could not set date-related prop \'name\'. Use one of the date-related methods instead.');
|
|
|
// TODO: make proper aliasing system?
|
|
|
}
|
|
|
else if (name === 'id') {
|
|
|
val = EVENT_NON_DATE_REFINERS[name](val);
|
|
|
this.mutate({
|
|
|
standardProps: { publicId: val }, // hardcoded internal name
|
|
|
});
|
|
|
}
|
|
|
else if (name in EVENT_NON_DATE_REFINERS) {
|
|
|
val = EVENT_NON_DATE_REFINERS[name](val);
|
|
|
this.mutate({
|
|
|
standardProps: (_a = {}, _a[name] = val, _a),
|
|
|
});
|
|
|
}
|
|
|
else if (name in EVENT_UI_REFINERS) {
|
|
|
var ui = EVENT_UI_REFINERS[name](val);
|
|
|
if (name === 'color') {
|
|
|
ui = { backgroundColor: val, borderColor: val };
|
|
|
}
|
|
|
else if (name === 'editable') {
|
|
|
ui = { startEditable: val, durationEditable: val };
|
|
|
}
|
|
|
else {
|
|
|
ui = (_b = {}, _b[name] = val, _b);
|
|
|
}
|
|
|
this.mutate({
|
|
|
standardProps: { ui: ui },
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
console.warn("Could not set prop '" + name + "'. Use setExtendedProp instead.");
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.setExtendedProp = function (name, val) {
|
|
|
var _a;
|
|
|
this.mutate({
|
|
|
extendedProps: (_a = {}, _a[name] = val, _a),
|
|
|
});
|
|
|
};
|
|
|
EventApi.prototype.setStart = function (startInput, options) {
|
|
|
if (options === void 0) { options = {}; }
|
|
|
var dateEnv = this._context.dateEnv;
|
|
|
var start = dateEnv.createMarker(startInput);
|
|
|
if (start && this._instance) { // TODO: warning if parsed bad
|
|
|
var instanceRange = this._instance.range;
|
|
|
var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
|
|
|
if (options.maintainDuration) {
|
|
|
this.mutate({ datesDelta: startDelta });
|
|
|
}
|
|
|
else {
|
|
|
this.mutate({ startDelta: startDelta });
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.setEnd = function (endInput, options) {
|
|
|
if (options === void 0) { options = {}; }
|
|
|
var dateEnv = this._context.dateEnv;
|
|
|
var end;
|
|
|
if (endInput != null) {
|
|
|
end = dateEnv.createMarker(endInput);
|
|
|
if (!end) {
|
|
|
return; // TODO: warning if parsed bad
|
|
|
}
|
|
|
}
|
|
|
if (this._instance) {
|
|
|
if (end) {
|
|
|
var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
|
|
|
this.mutate({ endDelta: endDelta });
|
|
|
}
|
|
|
else {
|
|
|
this.mutate({ standardProps: { hasEnd: false } });
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.setDates = function (startInput, endInput, options) {
|
|
|
if (options === void 0) { options = {}; }
|
|
|
var dateEnv = this._context.dateEnv;
|
|
|
var standardProps = { allDay: options.allDay };
|
|
|
var start = dateEnv.createMarker(startInput);
|
|
|
var end;
|
|
|
if (!start) {
|
|
|
return; // TODO: warning if parsed bad
|
|
|
}
|
|
|
if (endInput != null) {
|
|
|
end = dateEnv.createMarker(endInput);
|
|
|
if (!end) { // TODO: warning if parsed bad
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
if (this._instance) {
|
|
|
var instanceRange = this._instance.range;
|
|
|
// when computing the diff for an event being converted to all-day,
|
|
|
// compute diff off of the all-day values the way event-mutation does.
|
|
|
if (options.allDay === true) {
|
|
|
instanceRange = computeAlignedDayRange(instanceRange);
|
|
|
}
|
|
|
var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
|
|
|
if (end) {
|
|
|
var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
|
|
|
if (durationsEqual(startDelta, endDelta)) {
|
|
|
this.mutate({ datesDelta: startDelta, standardProps: standardProps });
|
|
|
}
|
|
|
else {
|
|
|
this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
|
|
|
}
|
|
|
}
|
|
|
else { // means "clear the end"
|
|
|
standardProps.hasEnd = false;
|
|
|
this.mutate({ datesDelta: startDelta, standardProps: standardProps });
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.moveStart = function (deltaInput) {
|
|
|
var delta = createDuration(deltaInput);
|
|
|
if (delta) { // TODO: warning if parsed bad
|
|
|
this.mutate({ startDelta: delta });
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.moveEnd = function (deltaInput) {
|
|
|
var delta = createDuration(deltaInput);
|
|
|
if (delta) { // TODO: warning if parsed bad
|
|
|
this.mutate({ endDelta: delta });
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.moveDates = function (deltaInput) {
|
|
|
var delta = createDuration(deltaInput);
|
|
|
if (delta) { // TODO: warning if parsed bad
|
|
|
this.mutate({ datesDelta: delta });
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.setAllDay = function (allDay, options) {
|
|
|
if (options === void 0) { options = {}; }
|
|
|
var standardProps = { allDay: allDay };
|
|
|
var maintainDuration = options.maintainDuration;
|
|
|
if (maintainDuration == null) {
|
|
|
maintainDuration = this._context.options.allDayMaintainDuration;
|
|
|
}
|
|
|
if (this._def.allDay !== allDay) {
|
|
|
standardProps.hasEnd = maintainDuration;
|
|
|
}
|
|
|
this.mutate({ standardProps: standardProps });
|
|
|
};
|
|
|
EventApi.prototype.formatRange = function (formatInput) {
|
|
|
var dateEnv = this._context.dateEnv;
|
|
|
var instance = this._instance;
|
|
|
var formatter = createFormatter(formatInput);
|
|
|
if (this._def.hasEnd) {
|
|
|
return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
|
|
|
forcedStartTzo: instance.forcedStartTzo,
|
|
|
forcedEndTzo: instance.forcedEndTzo,
|
|
|
});
|
|
|
}
|
|
|
return dateEnv.format(instance.range.start, formatter, {
|
|
|
forcedTzo: instance.forcedStartTzo,
|
|
|
});
|
|
|
};
|
|
|
EventApi.prototype.mutate = function (mutation) {
|
|
|
var instance = this._instance;
|
|
|
if (instance) {
|
|
|
var def = this._def;
|
|
|
var context_1 = this._context;
|
|
|
var eventStore_1 = context_1.getCurrentData().eventStore;
|
|
|
var relevantEvents = getRelevantEvents(eventStore_1, instance.instanceId);
|
|
|
var eventConfigBase = {
|
|
|
'': {
|
|
|
display: '',
|
|
|
startEditable: true,
|
|
|
durationEditable: true,
|
|
|
constraints: [],
|
|
|
overlap: null,
|
|
|
allows: [],
|
|
|
backgroundColor: '',
|
|
|
borderColor: '',
|
|
|
textColor: '',
|
|
|
classNames: [],
|
|
|
},
|
|
|
};
|
|
|
relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context_1);
|
|
|
var oldEvent = new EventApi(context_1, def, instance); // snapshot
|
|
|
this._def = relevantEvents.defs[def.defId];
|
|
|
this._instance = relevantEvents.instances[instance.instanceId];
|
|
|
context_1.dispatch({
|
|
|
type: 'MERGE_EVENTS',
|
|
|
eventStore: relevantEvents,
|
|
|
});
|
|
|
context_1.emitter.trigger('eventChange', {
|
|
|
oldEvent: oldEvent,
|
|
|
event: this,
|
|
|
relatedEvents: buildEventApis(relevantEvents, context_1, instance),
|
|
|
revert: function () {
|
|
|
context_1.dispatch({
|
|
|
type: 'RESET_EVENTS',
|
|
|
eventStore: eventStore_1,
|
|
|
});
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
EventApi.prototype.remove = function () {
|
|
|
var context = this._context;
|
|
|
var asStore = eventApiToStore(this);
|
|
|
context.dispatch({
|
|
|
type: 'REMOVE_EVENTS',
|
|
|
eventStore: asStore,
|
|
|
});
|
|
|
context.emitter.trigger('eventRemove', {
|
|
|
event: this,
|
|
|
relatedEvents: [],
|
|
|
revert: function () {
|
|
|
context.dispatch({
|
|
|
type: 'MERGE_EVENTS',
|
|
|
eventStore: asStore,
|
|
|
});
|
|
|
},
|
|
|
});
|
|
|
};
|
|
|
Object.defineProperty(EventApi.prototype, "source", {
|
|
|
get: function () {
|
|
|
var sourceId = this._def.sourceId;
|
|
|
if (sourceId) {
|
|
|
return new EventSourceApi(this._context, this._context.getCurrentData().eventSources[sourceId]);
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "start", {
|
|
|
get: function () {
|
|
|
return this._instance ?
|
|
|
this._context.dateEnv.toDate(this._instance.range.start) :
|
|
|
null;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "end", {
|
|
|
get: function () {
|
|
|
return (this._instance && this._def.hasEnd) ?
|
|
|
this._context.dateEnv.toDate(this._instance.range.end) :
|
|
|
null;
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "startStr", {
|
|
|
get: function () {
|
|
|
var instance = this._instance;
|
|
|
if (instance) {
|
|
|
return this._context.dateEnv.formatIso(instance.range.start, {
|
|
|
omitTime: this._def.allDay,
|
|
|
forcedTzo: instance.forcedStartTzo,
|
|
|
});
|
|
|
}
|
|
|
return '';
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "endStr", {
|
|
|
get: function () {
|
|
|
var instance = this._instance;
|
|
|
if (instance && this._def.hasEnd) {
|
|
|
return this._context.dateEnv.formatIso(instance.range.end, {
|
|
|
omitTime: this._def.allDay,
|
|
|
forcedTzo: instance.forcedEndTzo,
|
|
|
});
|
|
|
}
|
|
|
return '';
|
|
|
},
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "id", {
|
|
|
// computable props that all access the def
|
|
|
// TODO: find a TypeScript-compatible way to do this at scale
|
|
|
get: function () { return this._def.publicId; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "groupId", {
|
|
|
get: function () { return this._def.groupId; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "allDay", {
|
|
|
get: function () { return this._def.allDay; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "title", {
|
|
|
get: function () { return this._def.title; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "url", {
|
|
|
get: function () { return this._def.url; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "display", {
|
|
|
get: function () { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier
|
|
|
,
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "startEditable", {
|
|
|
get: function () { return this._def.ui.startEditable; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "durationEditable", {
|
|
|
get: function () { return this._def.ui.durationEditable; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "constraint", {
|
|
|
get: function () { return this._def.ui.constraints[0] || null; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "overlap", {
|
|
|
get: function () { return this._def.ui.overlap; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "allow", {
|
|
|
get: function () { return this._def.ui.allows[0] || null; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "backgroundColor", {
|
|
|
get: function () { return this._def.ui.backgroundColor; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "borderColor", {
|
|
|
get: function () { return this._def.ui.borderColor; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "textColor", {
|
|
|
get: function () { return this._def.ui.textColor; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "classNames", {
|
|
|
// NOTE: user can't modify these because Object.freeze was called in event-def parsing
|
|
|
get: function () { return this._def.ui.classNames; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Object.defineProperty(EventApi.prototype, "extendedProps", {
|
|
|
get: function () { return this._def.extendedProps; },
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
EventApi.prototype.toPlainObject = function (settings) {
|
|
|
if (settings === void 0) { settings = {}; }
|
|
|
var def = this._def;
|
|
|
var ui = def.ui;
|
|
|
var _a = this, startStr = _a.startStr, endStr = _a.endStr;
|
|
|
var res = {};
|
|
|
if (def.title) {
|
|
|
res.title = def.title;
|
|
|
}
|
|
|
if (startStr) {
|
|
|
res.start = startStr;
|
|
|
}
|
|
|
if (endStr) {
|
|
|
res.end = endStr;
|
|
|
}
|
|
|
if (def.publicId) {
|
|
|
res.id = def.publicId;
|
|
|
}
|
|
|
if (def.groupId) {
|
|
|
res.groupId = def.groupId;
|
|
|
}
|
|
|
if (def.url) {
|
|
|
res.url = def.url;
|
|
|
}
|
|
|
if (ui.display && ui.display !== 'auto') {
|
|
|
res.display = ui.display;
|
|
|
}
|
|
|
// TODO: what about recurring-event properties???
|
|
|
// TODO: include startEditable/durationEditable/constraint/overlap/allow
|
|
|
if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {
|
|
|
res.color = ui.backgroundColor;
|
|
|
}
|
|
|
else {
|
|
|
if (ui.backgroundColor) {
|
|
|
res.backgroundColor = ui.backgroundColor;
|
|
|
}
|
|
|
if (ui.borderColor) {
|
|
|
res.borderColor = ui.borderColor;
|
|
|
}
|
|
|
}
|
|
|
if (ui.textColor) {
|
|
|
res.textColor = ui.textColor;
|
|
|
}
|
|
|
if (ui.classNames.length) {
|
|
|
res.classNames = ui.classNames;
|
|
|
}
|
|
|
if (Object.keys(def.extendedProps).length) {
|
|
|
if (settings.collapseExtendedProps) {
|
|
|
__assign(res, def.extendedProps);
|
|
|
}
|
|
|
else {
|
|
|
res.extendedProps = def.extendedProps;
|
|
|
}
|
|
|
}
|
|
|
return res;
|
|
|
};
|
|
|
EventApi.prototype.toJSON = function () {
|
|
|
return this.toPlainObject();
|
|
|
};
|
|
|
return EventApi;
|
|
|
}());
|
|
|
function eventApiToStore(eventApi) {
|
|
|
var _a, _b;
|
|
|
var def = eventApi._def;
|
|
|
var instance = eventApi._instance;
|
|
|
return {
|
|
|
defs: (_a = {}, _a[def.defId] = def, _a),
|
|
|
instances: instance
|
|
|
? (_b = {}, _b[instance.instanceId] = instance, _b) : {},
|
|
|
};
|
|
|
}
|
|
|
function buildEventApis(eventStore, context, excludeInstance) {
|
|
|
var defs = eventStore.defs, instances = eventStore.instances;
|
|
|
var eventApis = [];
|
|
|
var excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';
|
|
|
for (var id in instances) {
|
|
|
var instance = instances[id];
|
|
|
var def = defs[instance.defId];
|
|
|
if (instance.instanceId !== excludeInstanceId) {
|
|
|
eventApis.push(new EventApi(context, def, instance));
|
|
|
}
|
|
|
}
|
|
|
return eventApis;
|
|
|
}
|
|
|
|
|
|
var calendarSystemClassMap = {};
|
|
|
function registerCalendarSystem(name, theClass) {
|
|
|
calendarSystemClassMap[name] = theClass;
|
|
|
}
|
|
|
function createCalendarSystem(name) {
|
|
|
return new calendarSystemClassMap[name]();
|
|
|
}
|
|
|
var GregorianCalendarSystem = /** @class */ (function () {
|
|
|
function GregorianCalendarSystem() {
|
|
|
}
|
|
|
GregorianCalendarSystem.prototype.getMarkerYear = function (d) {
|
|
|
return d.getUTCFullYear();
|
|
|
};
|
|
|
GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {
|
|
|
return d.getUTCMonth();
|
|
|
};
|
|
|
GregorianCalendarSystem.prototype.getMarkerDay = function (d) {
|
|
|
return d.getUTCDate();
|
|
|
};
|
|
|
GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {
|
|
|
return arrayToUtcDate(arr);
|
|
|
};
|
|
|
GregorianCalendarSystem.prototype.markerToArray = function (marker) {
|
|
|
return dateToUtcArray(marker);
|
|
|
};
|
|
|
return GregorianCalendarSystem;
|
|
|
}());
|
|
|
registerCalendarSystem('gregory', GregorianCalendarSystem);
|
|
|
|
|
|
var ISO_RE = /^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
|
|
|
function parse(str) {
|
|
|
var m = ISO_RE.exec(str);
|
|
|
if (m) {
|
|
|
var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number("0." + m[12]) * 1000 : 0));
|
|
|
if (isValidDate(marker)) {
|
|
|
var timeZoneOffset = null;
|
|
|
if (m[13]) {
|
|
|
timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
|
|
|
Number(m[18] || 0));
|
|
|
}
|
|
|
return {
|
|
|
marker: marker,
|
|
|
isTimeUnspecified: !m[6],
|
|
|
timeZoneOffset: timeZoneOffset,
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var DateEnv = /** @class */ (function () {
|
|
|
function DateEnv(settings) {
|
|
|
var timeZone = this.timeZone = settings.timeZone;
|
|
|
var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
|
|
|
if (settings.namedTimeZoneImpl && isNamedTimeZone) {
|
|
|
this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
|
|
|
}
|
|
|
this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
|
|
|
this.calendarSystem = createCalendarSystem(settings.calendarSystem);
|
|
|
this.locale = settings.locale;
|
|
|
this.weekDow = settings.locale.week.dow;
|
|
|
this.weekDoy = settings.locale.week.doy;
|
|
|
if (settings.weekNumberCalculation === 'ISO') {
|
|
|
this.weekDow = 1;
|
|
|
this.weekDoy = 4;
|
|
|
}
|
|
|
if (typeof settings.firstDay === 'number') {
|
|
|
this.weekDow = settings.firstDay;
|
|
|
}
|
|
|
if (typeof settings.weekNumberCalculation === 'function') {
|
|
|
this.weekNumberFunc = settings.weekNumberCalculation;
|
|
|
}
|
|
|
this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
|
|
|
this.cmdFormatter = settings.cmdFormatter;
|
|
|
this.defaultSeparator = settings.defaultSeparator;
|
|
|
}
|
|
|
// Creating / Parsing
|
|
|
DateEnv.prototype.createMarker = function (input) {
|
|
|
var meta = this.createMarkerMeta(input);
|
|
|
if (meta === null) {
|
|
|
return null;
|
|
|
}
|
|
|
return meta.marker;
|
|
|
};
|
|
|
DateEnv.prototype.createNowMarker = function () {
|
|
|
if (this.canComputeOffset) {
|
|
|
return this.timestampToMarker(new Date().valueOf());
|
|
|
}
|
|
|
// if we can't compute the current date val for a timezone,
|
|
|
// better to give the current local date vals than UTC
|
|
|
return arrayToUtcDate(dateToLocalArray(new Date()));
|
|
|
};
|
|
|
DateEnv.prototype.createMarkerMeta = function (input) {
|
|
|
if (typeof input === 'string') {
|
|
|
return this.parse(input);
|
|
|
}
|
|
|
var marker = null;
|
|
|
if (typeof input === 'number') {
|
|
|
marker = this.timestampToMarker(input);
|
|
|
}
|
|
|
else if (input instanceof Date) {
|
|
|
input = input.valueOf();
|
|
|
if (!isNaN(input)) {
|
|
|
marker = this.timestampToMarker(input);
|
|
|
}
|
|
|
}
|
|
|
else if (Array.isArray(input)) {
|
|
|
marker = arrayToUtcDate(input);
|
|
|
}
|
|
|
if (marker === null || !isValidDate(marker)) {
|
|
|
return null;
|
|
|
}
|
|
|
return { marker: marker, isTimeUnspecified: false, forcedTzo: null };
|
|
|
};
|
|
|
DateEnv.prototype.parse = function (s) {
|
|
|
var parts = parse(s);
|
|
|
if (parts === null) {
|
|
|
return null;
|
|
|
}
|
|
|
var marker = parts.marker;
|
|
|
var forcedTzo = null;
|
|
|
if (parts.timeZoneOffset !== null) {
|
|
|
if (this.canComputeOffset) {
|
|
|
marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
|
|
|
}
|
|
|
else {
|
|
|
forcedTzo = parts.timeZoneOffset;
|
|
|
}
|
|
|
}
|
|
|
return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo };
|
|
|
};
|
|
|
// Accessors
|
|
|
DateEnv.prototype.getYear = function (marker) {
|
|
|
return this.calendarSystem.getMarkerYear(marker);
|
|
|
};
|
|
|
DateEnv.prototype.getMonth = function (marker) {
|
|
|
return this.calendarSystem.getMarkerMonth(marker);
|
|
|
};
|
|
|
// Adding / Subtracting
|
|
|
DateEnv.prototype.add = function (marker, dur) {
|
|
|
var a = this.calendarSystem.markerToArray(marker);
|
|
|
a[0] += dur.years;
|
|
|
a[1] += dur.months;
|
|
|
a[2] += dur.days;
|
|
|
a[6] += dur.milliseconds;
|
|
|
return this.calendarSystem.arrayToMarker(a);
|
|
|
};
|
|
|
DateEnv.prototype.subtract = function (marker, dur) {
|
|
|
var a = this.calendarSystem.markerToArray(marker);
|
|
|
a[0] -= dur.years;
|
|
|
a[1] -= dur.months;
|
|
|
a[2] -= dur.days;
|
|
|
a[6] -= dur.milliseconds;
|
|
|
return this.calendarSystem.arrayToMarker(a);
|
|
|
};
|
|
|
DateEnv.prototype.addYears = function (marker, n) {
|
|
|
var a = this.calendarSystem.markerToArray(marker);
|
|
|
a[0] += n;
|
|
|
return this.calendarSystem.arrayToMarker(a);
|
|
|
};
|
|
|
DateEnv.prototype.addMonths = function (marker, n) {
|
|
|
var a = this.calendarSystem.markerToArray(marker);
|
|
|
a[1] += n;
|
|
|
return this.calendarSystem.arrayToMarker(a);
|
|
|
};
|
|
|
// Diffing Whole Units
|
|
|
DateEnv.prototype.diffWholeYears = function (m0, m1) {
|
|
|
var calendarSystem = this.calendarSystem;
|
|
|
if (timeAsMs(m0) === timeAsMs(m1) &&
|
|
|
calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
|
|
|
calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
|
|
|
return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
DateEnv.prototype.diffWholeMonths = function (m0, m1) {
|
|
|
var calendarSystem = this.calendarSystem;
|
|
|
if (timeAsMs(m0) === timeAsMs(m1) &&
|
|
|
calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
|
|
|
return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
|
|
|
(calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Range / Duration
|
|
|
DateEnv.prototype.greatestWholeUnit = function (m0, m1) {
|
|
|
var n = this.diffWholeYears(m0, m1);
|
|
|
if (n !== null) {
|
|
|
return { unit: 'year', value: n };
|
|
|
}
|
|
|
n = this.diffWholeMonths(m0, m1);
|
|
|
if (n !== null) {
|
|
|
return { unit: 'month', value: n };
|
|
|
}
|
|
|
n = diffWholeWeeks(m0, m1);
|
|
|
if (n !== null) {
|
|
|
return { unit: 'week', value: n };
|
|
|
}
|
|
|
n = diffWholeDays(m0, m1);
|
|
|
if (n !== null) {
|
|
|
return { unit: 'day', value: n };
|
|
|
}
|
|
|
n = diffHours(m0, m1);
|
|
|
if (isInt(n)) {
|
|
|
return { unit: 'hour', value: n };
|
|
|
}
|
|
|
n = diffMinutes(m0, m1);
|
|
|
if (isInt(n)) {
|
|
|
return { unit: 'minute', value: n };
|
|
|
}
|
|
|
n = diffSeconds(m0, m1);
|
|
|
if (isInt(n)) {
|
|
|
return { unit: 'second', value: n };
|
|
|
}
|
|
|
return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
|
|
|
};
|
|
|
DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {
|
|
|
// TODO: can use greatestWholeUnit
|
|
|
var diff;
|
|
|
if (d.years) {
|
|
|
diff = this.diffWholeYears(m0, m1);
|
|
|
if (diff !== null) {
|
|
|
return diff / asRoughYears(d);
|
|
|
}
|
|
|
}
|
|
|
if (d.months) {
|
|
|
diff = this.diffWholeMonths(m0, m1);
|
|
|
if (diff !== null) {
|
|
|
return diff / asRoughMonths(d);
|
|
|
}
|
|
|
}
|
|
|
if (d.days) {
|
|
|
diff = diffWholeDays(m0, m1);
|
|
|
if (diff !== null) {
|
|
|
return diff / asRoughDays(d);
|
|
|
}
|
|
|
}
|
|
|
return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
|
|
|
};
|
|
|
// Start-Of
|
|
|
// these DON'T return zoned-dates. only UTC start-of dates
|
|
|
DateEnv.prototype.startOf = function (m, unit) {
|
|
|
if (unit === 'year') {
|
|
|
return this.startOfYear(m);
|
|
|
}
|
|
|
if (unit === 'month') {
|
|
|
return this.startOfMonth(m);
|
|
|
}
|
|
|
if (unit === 'week') {
|
|
|
return this.startOfWeek(m);
|
|
|
}
|
|
|
if (unit === 'day') {
|
|
|
return startOfDay(m);
|
|
|
}
|
|
|
if (unit === 'hour') {
|
|
|
return startOfHour(m);
|
|
|
}
|
|
|
if (unit === 'minute') {
|
|
|
return startOfMinute(m);
|
|
|
}
|
|
|
if (unit === 'second') {
|
|
|
return startOfSecond(m);
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
DateEnv.prototype.startOfYear = function (m) {
|
|
|
return this.calendarSystem.arrayToMarker([
|
|
|
this.calendarSystem.getMarkerYear(m),
|
|
|
]);
|
|
|
};
|
|
|
DateEnv.prototype.startOfMonth = function (m) {
|
|
|
return this.calendarSystem.arrayToMarker([
|
|
|
this.calendarSystem.getMarkerYear(m),
|
|
|
this.calendarSystem.getMarkerMonth(m),
|
|
|
]);
|
|
|
};
|
|
|
DateEnv.prototype.startOfWeek = function (m) {
|
|
|
return this.calendarSystem.arrayToMarker([
|
|
|
this.calendarSystem.getMarkerYear(m),
|
|
|
this.calendarSystem.getMarkerMonth(m),
|
|
|
m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),
|
|
|
]);
|
|
|
};
|
|
|
// Week Number
|
|
|
DateEnv.prototype.computeWeekNumber = function (marker) {
|
|
|
if (this.weekNumberFunc) {
|
|
|
return this.weekNumberFunc(this.toDate(marker));
|
|
|
}
|
|
|
return weekOfYear(marker, this.weekDow, this.weekDoy);
|
|
|
};
|
|
|
// TODO: choke on timeZoneName: long
|
|
|
DateEnv.prototype.format = function (marker, formatter, dateOptions) {
|
|
|
if (dateOptions === void 0) { dateOptions = {}; }
|
|
|
return formatter.format({
|
|
|
marker: marker,
|
|
|
timeZoneOffset: dateOptions.forcedTzo != null ?
|
|
|
dateOptions.forcedTzo :
|
|
|
this.offsetForMarker(marker),
|
|
|
}, this);
|
|
|
};
|
|
|
DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {
|
|
|
if (dateOptions === void 0) { dateOptions = {}; }
|
|
|
if (dateOptions.isEndExclusive) {
|
|
|
end = addMs(end, -1);
|
|
|
}
|
|
|
return formatter.formatRange({
|
|
|
marker: start,
|
|
|
timeZoneOffset: dateOptions.forcedStartTzo != null ?
|
|
|
dateOptions.forcedStartTzo :
|
|
|
this.offsetForMarker(start),
|
|
|
}, {
|
|
|
marker: end,
|
|
|
timeZoneOffset: dateOptions.forcedEndTzo != null ?
|
|
|
dateOptions.forcedEndTzo :
|
|
|
this.offsetForMarker(end),
|
|
|
}, this, dateOptions.defaultSeparator);
|
|
|
};
|
|
|
/*
|
|
|
DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,
|
|
|
might as well use buildIsoString or some other util directly
|
|
|
*/
|
|
|
DateEnv.prototype.formatIso = function (marker, extraOptions) {
|
|
|
if (extraOptions === void 0) { extraOptions = {}; }
|
|
|
var timeZoneOffset = null;
|
|
|
if (!extraOptions.omitTimeZoneOffset) {
|
|
|
if (extraOptions.forcedTzo != null) {
|
|
|
timeZoneOffset = extraOptions.forcedTzo;
|
|
|
}
|
|
|
else {
|
|
|
timeZoneOffset = this.offsetForMarker(marker);
|
|
|
}
|
|
|
}
|
|
|
return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
|
|
|
};
|
|
|
// TimeZone
|
|
|
DateEnv.prototype.timestampToMarker = function (ms) {
|
|
|
if (this.timeZone === 'local') {
|
|
|
return arrayToUtcDate(dateToLocalArray(new Date(ms)));
|
|
|
}
|
|
|
if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
|
|
|
return new Date(ms);
|
|
|
}
|
|
|
return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
|
|
|
};
|
|
|
DateEnv.prototype.offsetForMarker = function (m) {
|
|
|
if (this.timeZone === 'local') {
|
|
|
return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
|
|
|
}
|
|
|
if (this.timeZone === 'UTC') {
|
|
|
return 0;
|
|
|
}
|
|
|
if (this.namedTimeZoneImpl) {
|
|
|
return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Conversion
|
|
|
DateEnv.prototype.toDate = function (m, forcedTzo) {
|
|
|
if (this.timeZone === 'local') {
|
|
|
return arrayToLocalDate(dateToUtcArray(m));
|
|
|
}
|
|
|
if (this.timeZone === 'UTC') {
|
|
|
return new Date(m.valueOf()); // make sure it's a copy
|
|
|
}
|
|
|
if (!this.namedTimeZoneImpl) {
|
|
|
return new Date(m.valueOf() - (forcedTzo || 0));
|
|
|
}
|
|
|
return new Date(m.valueOf() -
|
|
|
this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);
|
|
|
};
|
|
|
return DateEnv;
|
|
|
}());
|
|
|
|
|
|
var globalLocales = [];
|
|
|
|
|
|
var RAW_EN_LOCALE = {
|
|
|
code: 'en',
|
|
|
week: {
|
|
|
dow: 0,
|
|
|
doy: 4, // 4 days need to be within the year to be considered the first week
|
|
|
},
|
|
|
direction: 'ltr',
|
|
|
buttonText: {
|
|
|
prev: 'prev',
|
|
|
next: 'next',
|
|
|
prevYear: 'prev year',
|
|
|
nextYear: 'next year',
|
|
|
year: 'year',
|
|
|
today: 'today',
|
|
|
month: 'month',
|
|
|
week: 'week',
|
|
|
day: 'day',
|
|
|
list: 'list',
|
|
|
},
|
|
|
weekText: 'W',
|
|
|
allDayText: 'all-day',
|
|
|
moreLinkText: 'more',
|
|
|
noEventsText: 'No events to display',
|
|
|
};
|
|
|
function organizeRawLocales(explicitRawLocales) {
|
|
|
var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
|
|
|
var allRawLocales = globalLocales.concat(explicitRawLocales);
|
|
|
var rawLocaleMap = {
|
|
|
en: RAW_EN_LOCALE, // necessary?
|
|
|
};
|
|
|
for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {
|
|
|
var rawLocale = allRawLocales_1[_i];
|
|
|
rawLocaleMap[rawLocale.code] = rawLocale;
|
|
|
}
|
|
|
return {
|
|
|
map: rawLocaleMap,
|
|
|
defaultCode: defaultCode,
|
|
|
};
|
|
|
}
|
|
|
function buildLocale(inputSingular, available) {
|
|
|
if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
|
|
|
return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
|
|
|
}
|
|
|
return queryLocale(inputSingular, available);
|
|
|
}
|
|
|
function queryLocale(codeArg, available) {
|
|
|
var codes = [].concat(codeArg || []); // will convert to array
|
|
|
var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
|
|
|
return parseLocale(codeArg, codes, raw);
|
|
|
}
|
|
|
function queryRawLocale(codes, available) {
|
|
|
for (var i = 0; i < codes.length; i += 1) {
|
|
|
var parts = codes[i].toLocaleLowerCase().split('-');
|
|
|
for (var j = parts.length; j > 0; j -= 1) {
|
|
|
var simpleId = parts.slice(0, j).join('-');
|
|
|
if (available[simpleId]) {
|
|
|
return available[simpleId];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function parseLocale(codeArg, codes, raw) {
|
|
|
var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
|
|
|
delete merged.code; // don't want this part of the options
|
|
|
var week = merged.week;
|
|
|
delete merged.week;
|
|
|
return {
|
|
|
codeArg: codeArg,
|
|
|
codes: codes,
|
|
|
week: week,
|
|
|
simpleNumberFormat: new Intl.NumberFormat(codeArg),
|
|
|
options: merged,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var DEF_DEFAULTS = {
|
|
|
startTime: '09:00',
|
|
|
endTime: '17:00',
|
|
|
daysOfWeek: [1, 2, 3, 4, 5],
|
|
|
display: 'inverse-background',
|
|
|
classNames: 'fc-non-business',
|
|
|
groupId: '_businessHours', // so multiple defs get grouped
|
|
|
};
|
|
|
/*
|
|
|
TODO: pass around as EventDefHash!!!
|
|
|
*/
|
|
|
function parseBusinessHours(input, context) {
|
|
|
return parseEvents(refineInputs(input), null, context);
|
|
|
}
|
|
|
function refineInputs(input) {
|
|
|
var rawDefs;
|
|
|
if (input === true) {
|
|
|
rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
|
|
|
}
|
|
|
else if (Array.isArray(input)) {
|
|
|
// if specifying an array, every sub-definition NEEDS a day-of-week
|
|
|
rawDefs = input.filter(function (rawDef) { return rawDef.daysOfWeek; });
|
|
|
}
|
|
|
else if (typeof input === 'object' && input) { // non-null object
|
|
|
rawDefs = [input];
|
|
|
}
|
|
|
else { // is probably false
|
|
|
rawDefs = [];
|
|
|
}
|
|
|
rawDefs = rawDefs.map(function (rawDef) { return (__assign(__assign({}, DEF_DEFAULTS), rawDef)); });
|
|
|
return rawDefs;
|
|
|
}
|
|
|
// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
|
|
|
function intersectRects(rect1, rect2) {
|
|
|
var res = {
|
|
|
left: Math.max(rect1.left, rect2.left),
|
|
|
right: Math.min(rect1.right, rect2.right),
|
|
|
top: Math.max(rect1.top, rect2.top),
|
|
|
bottom: Math.min(rect1.bottom, rect2.bottom),
|
|
|
};
|
|
|
if (res.left < res.right && res.top < res.bottom) {
|
|
|
return res;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var canVGrowWithinCell;
|
|
|
function getCanVGrowWithinCell() {
|
|
|
if (canVGrowWithinCell == null) {
|
|
|
canVGrowWithinCell = computeCanVGrowWithinCell();
|
|
|
}
|
|
|
return canVGrowWithinCell;
|
|
|
}
|
|
|
function computeCanVGrowWithinCell() {
|
|
|
// for SSR, because this function is call immediately at top-level
|
|
|
// TODO: just make this logic execute top-level, immediately, instead of doing lazily
|
|
|
if (typeof document === 'undefined') {
|
|
|
return true;
|
|
|
}
|
|
|
var el = document.createElement('div');
|
|
|
el.style.position = 'absolute';
|
|
|
el.style.top = '0px';
|
|
|
el.style.left = '0px';
|
|
|
el.innerHTML = '<table><tr><td><div></div></td></tr></table>';
|
|
|
el.querySelector('table').style.height = '100px';
|
|
|
el.querySelector('div').style.height = '100%';
|
|
|
document.body.appendChild(el);
|
|
|
var div = el.querySelector('div');
|
|
|
var possible = div.offsetHeight > 0;
|
|
|
document.body.removeChild(el);
|
|
|
return possible;
|
|
|
}
|
|
|
|
|
|
var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
|
|
|
var Splitter = /** @class */ (function () {
|
|
|
function Splitter() {
|
|
|
this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
|
|
|
this.splitDateSelection = memoize(this._splitDateSpan);
|
|
|
this.splitEventStore = memoize(this._splitEventStore);
|
|
|
this.splitIndividualUi = memoize(this._splitIndividualUi);
|
|
|
this.splitEventDrag = memoize(this._splitInteraction);
|
|
|
this.splitEventResize = memoize(this._splitInteraction);
|
|
|
this.eventUiBuilders = {}; // TODO: typescript protection
|
|
|
}
|
|
|
Splitter.prototype.splitProps = function (props) {
|
|
|
var _this = this;
|
|
|
var keyInfos = this.getKeyInfo(props);
|
|
|
var defKeys = this.getKeysForEventDefs(props.eventStore);
|
|
|
var dateSelections = this.splitDateSelection(props.dateSelection);
|
|
|
var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
|
|
|
var eventStores = this.splitEventStore(props.eventStore, defKeys);
|
|
|
var eventDrags = this.splitEventDrag(props.eventDrag);
|
|
|
var eventResizes = this.splitEventResize(props.eventResize);
|
|
|
var splitProps = {};
|
|
|
this.eventUiBuilders = mapHash(keyInfos, function (info, key) { return _this.eventUiBuilders[key] || memoize(buildEventUiForKey); });
|
|
|
for (var key in keyInfos) {
|
|
|
var keyInfo = keyInfos[key];
|
|
|
var eventStore = eventStores[key] || EMPTY_EVENT_STORE;
|
|
|
var buildEventUi = this.eventUiBuilders[key];
|
|
|
splitProps[key] = {
|
|
|
businessHours: keyInfo.businessHours || props.businessHours,
|
|
|
dateSelection: dateSelections[key] || null,
|
|
|
eventStore: eventStore,
|
|
|
eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
|
|
|
eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
|
|
|
eventDrag: eventDrags[key] || null,
|
|
|
eventResize: eventResizes[key] || null,
|
|
|
};
|
|
|
}
|
|
|
return splitProps;
|
|
|
};
|
|
|
Splitter.prototype._splitDateSpan = function (dateSpan) {
|
|
|
var dateSpans = {};
|
|
|
if (dateSpan) {
|
|
|
var keys = this.getKeysForDateSpan(dateSpan);
|
|
|
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
|
var key = keys_1[_i];
|
|
|
dateSpans[key] = dateSpan;
|
|
|
}
|
|
|
}
|
|
|
return dateSpans;
|
|
|
};
|
|
|
Splitter.prototype._getKeysForEventDefs = function (eventStore) {
|
|
|
var _this = this;
|
|
|
return mapHash(eventStore.defs, function (eventDef) { return _this.getKeysForEventDef(eventDef); });
|
|
|
};
|
|
|
Splitter.prototype._splitEventStore = function (eventStore, defKeys) {
|
|
|
var defs = eventStore.defs, instances = eventStore.instances;
|
|
|
var splitStores = {};
|
|
|
for (var defId in defs) {
|
|
|
for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
|
|
|
var key = _a[_i];
|
|
|
if (!splitStores[key]) {
|
|
|
splitStores[key] = createEmptyEventStore();
|
|
|
}
|
|
|
splitStores[key].defs[defId] = defs[defId];
|
|
|
}
|
|
|
}
|
|
|
for (var instanceId in instances) {
|
|
|
var instance = instances[instanceId];
|
|
|
for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {
|
|
|
var key = _c[_b];
|
|
|
if (splitStores[key]) { // must have already been created
|
|
|
splitStores[key].instances[instanceId] = instance;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return splitStores;
|
|
|
};
|
|
|
Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {
|
|
|
var splitHashes = {};
|
|
|
for (var defId in eventUiBases) {
|
|
|
if (defId) { // not the '' key
|
|
|
for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
|
|
|
var key = _a[_i];
|
|
|
if (!splitHashes[key]) {
|
|
|
splitHashes[key] = {};
|
|
|
}
|
|
|
splitHashes[key][defId] = eventUiBases[defId];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return splitHashes;
|
|
|
};
|
|
|
Splitter.prototype._splitInteraction = function (interaction) {
|
|
|
var splitStates = {};
|
|
|
if (interaction) {
|
|
|
var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));
|
|
|
// can't rely on defKeys because event data is mutated
|
|
|
var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
|
|
|
var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
|
|
|
var populate = function (key) {
|
|
|
if (!splitStates[key]) {
|
|
|
splitStates[key] = {
|
|
|
affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,
|
|
|
mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,
|
|
|
isEvent: interaction.isEvent,
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
for (var key in affectedStores_1) {
|
|
|
populate(key);
|
|
|
}
|
|
|
for (var key in mutatedStores_1) {
|
|
|
populate(key);
|
|
|
}
|
|
|
}
|
|
|
return splitStates;
|
|
|
};
|
|
|
return Splitter;
|
|
|
}());
|
|
|
function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
|
|
|
var baseParts = [];
|
|
|
if (allUi) {
|
|
|
baseParts.push(allUi);
|
|
|
}
|
|
|
if (eventUiForKey) {
|
|
|
baseParts.push(eventUiForKey);
|
|
|
}
|
|
|
var stuff = {
|
|
|
'': combineEventUis(baseParts),
|
|
|
};
|
|
|
if (individualUi) {
|
|
|
__assign(stuff, individualUi);
|
|
|
}
|
|
|
return stuff;
|
|
|
}
|
|
|
|
|
|
function getDateMeta(date, todayRange, nowDate, dateProfile) {
|
|
|
return {
|
|
|
dow: date.getUTCDay(),
|
|
|
isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),
|
|
|
isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),
|
|
|
isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),
|
|
|
isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),
|
|
|
isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),
|
|
|
};
|
|
|
}
|
|
|
function getDayClassNames(meta, theme) {
|
|
|
var classNames = [
|
|
|
'fc-day',
|
|
|
"fc-day-" + DAY_IDS[meta.dow],
|
|
|
];
|
|
|
if (meta.isDisabled) {
|
|
|
classNames.push('fc-day-disabled');
|
|
|
}
|
|
|
else {
|
|
|
if (meta.isToday) {
|
|
|
classNames.push('fc-day-today');
|
|
|
classNames.push(theme.getClass('today'));
|
|
|
}
|
|
|
if (meta.isPast) {
|
|
|
classNames.push('fc-day-past');
|
|
|
}
|
|
|
if (meta.isFuture) {
|
|
|
classNames.push('fc-day-future');
|
|
|
}
|
|
|
if (meta.isOther) {
|
|
|
classNames.push('fc-day-other');
|
|
|
}
|
|
|
}
|
|
|
return classNames;
|
|
|
}
|
|
|
|
|
|
function buildNavLinkData(date, type) {
|
|
|
if (type === void 0) { type = 'day'; }
|
|
|
return JSON.stringify({
|
|
|
date: formatDayString(date),
|
|
|
type: type,
|
|
|
});
|
|
|
}
|
|
|
|
|
|
var _scrollbarWidths;
|
|
|
function getScrollbarWidths() {
|
|
|
if (!_scrollbarWidths) {
|
|
|
_scrollbarWidths = computeScrollbarWidths();
|
|
|
}
|
|
|
return _scrollbarWidths;
|
|
|
}
|
|
|
function computeScrollbarWidths() {
|
|
|
var el = document.createElement('div');
|
|
|
el.style.overflow = 'scroll';
|
|
|
el.style.position = 'absolute';
|
|
|
el.style.top = '-9999px';
|
|
|
el.style.left = '-9999px';
|
|
|
document.body.appendChild(el);
|
|
|
var res = computeScrollbarWidthsForEl(el);
|
|
|
document.body.removeChild(el);
|
|
|
return res;
|
|
|
}
|
|
|
// WARNING: will include border
|
|
|
function computeScrollbarWidthsForEl(el) {
|
|
|
return {
|
|
|
x: el.offsetHeight - el.clientHeight,
|
|
|
y: el.offsetWidth - el.clientWidth,
|
|
|
};
|
|
|
}
|
|
|
function computeClippedClientRect(el) {
|
|
|
var clippingParents = getClippingParents(el);
|
|
|
var rect = el.getBoundingClientRect();
|
|
|
for (var _i = 0, clippingParents_1 = clippingParents; _i < clippingParents_1.length; _i++) {
|
|
|
var clippingParent = clippingParents_1[_i];
|
|
|
var intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
|
|
|
if (intersection) {
|
|
|
rect = intersection;
|
|
|
}
|
|
|
else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
return rect;
|
|
|
}
|
|
|
// does not return window
|
|
|
function getClippingParents(el) {
|
|
|
var parents = [];
|
|
|
while (el instanceof HTMLElement) { // will stop when gets to document or null
|
|
|
var computedStyle = window.getComputedStyle(el);
|
|
|
if (computedStyle.position === 'fixed') {
|
|
|
break;
|
|
|
}
|
|
|
if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
|
|
|
parents.push(el);
|
|
|
}
|
|
|
el = el.parentNode;
|
|
|
}
|
|
|
return parents;
|
|
|
}
|
|
|
|
|
|
// given a function that resolves a result asynchronously.
|
|
|
// the function can either call passed-in success and failure callbacks,
|
|
|
// or it can return a promise.
|
|
|
// if you need to pass additional params to func, bind them first.
|
|
|
function unpromisify(func, success, failure) {
|
|
|
// guard against success/failure callbacks being called more than once
|
|
|
// and guard against a promise AND callback being used together.
|
|
|
var isResolved = false;
|
|
|
var wrappedSuccess = function () {
|
|
|
if (!isResolved) {
|
|
|
isResolved = true;
|
|
|
success.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
|
|
}
|
|
|
};
|
|
|
var wrappedFailure = function () {
|
|
|
if (!isResolved) {
|
|
|
isResolved = true;
|
|
|
if (failure) {
|
|
|
failure.apply(this, arguments); // eslint-disable-line prefer-rest-params
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
var res = func(wrappedSuccess, wrappedFailure);
|
|
|
if (res && typeof res.then === 'function') {
|
|
|
res.then(wrappedSuccess, wrappedFailure);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var Emitter = /** @class */ (function () {
|
|
|
function Emitter() {
|
|
|
this.handlers = {};
|
|
|
this.thisContext = null;
|
|
|
}
|
|
|
Emitter.prototype.setThisContext = function (thisContext) {
|
|
|
this.thisContext = thisContext;
|
|
|
};
|
|
|
Emitter.prototype.setOptions = function (options) {
|
|
|
this.options = options;
|
|
|
};
|
|
|
Emitter.prototype.on = function (type, handler) {
|
|
|
addToHash(this.handlers, type, handler);
|
|
|
};
|
|
|
Emitter.prototype.off = function (type, handler) {
|
|
|
removeFromHash(this.handlers, type, handler);
|
|
|
};
|
|
|
Emitter.prototype.trigger = function (type) {
|
|
|
var args = [];
|
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
|
args[_i - 1] = arguments[_i];
|
|
|
}
|
|
|
var attachedHandlers = this.handlers[type] || [];
|
|
|
var optionHandler = this.options && this.options[type];
|
|
|
var handlers = [].concat(optionHandler || [], attachedHandlers);
|
|
|
for (var _a = 0, handlers_1 = handlers; _a < handlers_1.length; _a++) {
|
|
|
var handler = handlers_1[_a];
|
|
|
handler.apply(this.thisContext, args);
|
|
|
}
|
|
|
};
|
|
|
Emitter.prototype.hasHandlers = function (type) {
|
|
|
return (this.handlers[type] && this.handlers[type].length) ||
|
|
|
(this.options && this.options[type]);
|
|
|
};
|
|
|
return Emitter;
|
|
|
}());
|
|
|
function addToHash(hash, type, handler) {
|
|
|
(hash[type] || (hash[type] = []))
|
|
|
.push(handler);
|
|
|
}
|
|
|
function removeFromHash(hash, type, handler) {
|
|
|
if (handler) {
|
|
|
if (hash[type]) {
|
|
|
hash[type] = hash[type].filter(function (func) { return func !== handler; });
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
delete hash[type]; // remove all handler funcs for this type
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
Records offset information for a set of elements, relative to an origin element.
|
|
|
Can record the left/right OR the top/bottom OR both.
|
|
|
Provides methods for querying the cache by position.
|
|
|
*/
|
|
|
var PositionCache = /** @class */ (function () {
|
|
|
function PositionCache(originEl, els, isHorizontal, isVertical) {
|
|
|
this.els = els;
|
|
|
var originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left
|
|
|
if (isHorizontal) {
|
|
|
this.buildElHorizontals(originClientRect.left);
|
|
|
}
|
|
|
if (isVertical) {
|
|
|
this.buildElVerticals(originClientRect.top);
|
|
|
}
|
|
|
}
|
|
|
// Populates the left/right internal coordinate arrays
|
|
|
PositionCache.prototype.buildElHorizontals = function (originClientLeft) {
|
|
|
var lefts = [];
|
|
|
var rights = [];
|
|
|
for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
|
|
|
var el = _a[_i];
|
|
|
var rect = el.getBoundingClientRect();
|
|
|
lefts.push(rect.left - originClientLeft);
|
|
|
rights.push(rect.right - originClientLeft);
|
|
|
}
|
|
|
this.lefts = lefts;
|
|
|
this.rights = rights;
|
|
|
};
|
|
|
// Populates the top/bottom internal coordinate arrays
|
|
|
PositionCache.prototype.buildElVerticals = function (originClientTop) {
|
|
|
var tops = [];
|
|
|
var bottoms = [];
|
|
|
for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
|
|
|
var el = _a[_i];
|
|
|
var rect = el.getBoundingClientRect();
|
|
|
tops.push(rect.top - originClientTop);
|
|
|
bottoms.push(rect.bottom - originClientTop);
|
|
|
}
|
|
|
this.tops = tops;
|
|
|
this.bottoms = bottoms;
|
|
|
};
|
|
|
// Given a left offset (from document left), returns the index of the el that it horizontally intersects.
|
|
|
// If no intersection is made, returns undefined.
|
|
|
PositionCache.prototype.leftToIndex = function (leftPosition) {
|
|
|
var _a = this, lefts = _a.lefts, rights = _a.rights;
|
|
|
var len = lefts.length;
|
|
|
var i;
|
|
|
for (i = 0; i < len; i += 1) {
|
|
|
if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return undefined; // TODO: better
|
|
|
};
|
|
|
// Given a top offset (from document top), returns the index of the el that it vertically intersects.
|
|
|
// If no intersection is made, returns undefined.
|
|
|
PositionCache.prototype.topToIndex = function (topPosition) {
|
|
|
var _a = this, tops = _a.tops, bottoms = _a.bottoms;
|
|
|
var len = tops.length;
|
|
|
var i;
|
|
|
for (i = 0; i < len; i += 1) {
|
|
|
if (topPosition >= tops[i] && topPosition < bottoms[i]) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return undefined; // TODO: better
|
|
|
};
|
|
|
// Gets the width of the element at the given index
|
|
|
PositionCache.prototype.getWidth = function (leftIndex) {
|
|
|
return this.rights[leftIndex] - this.lefts[leftIndex];
|
|
|
};
|
|
|
// Gets the height of the element at the given index
|
|
|
PositionCache.prototype.getHeight = function (topIndex) {
|
|
|
return this.bottoms[topIndex] - this.tops[topIndex];
|
|
|
};
|
|
|
return PositionCache;
|
|
|
}());
|
|
|
|
|
|
/* eslint max-classes-per-file: "off" */
|
|
|
/*
|
|
|
An object for getting/setting scroll-related information for an element.
|
|
|
Internally, this is done very differently for window versus DOM element,
|
|
|
so this object serves as a common interface.
|
|
|
*/
|
|
|
var ScrollController = /** @class */ (function () {
|
|
|
function ScrollController() {
|
|
|
}
|
|
|
ScrollController.prototype.getMaxScrollTop = function () {
|
|
|
return this.getScrollHeight() - this.getClientHeight();
|
|
|
};
|
|
|
ScrollController.prototype.getMaxScrollLeft = function () {
|
|
|
return this.getScrollWidth() - this.getClientWidth();
|
|
|
};
|
|
|
ScrollController.prototype.canScrollVertically = function () {
|
|
|
return this.getMaxScrollTop() > 0;
|
|
|
};
|
|
|
ScrollController.prototype.canScrollHorizontally = function () {
|
|
|
return this.getMaxScrollLeft() > 0;
|
|
|
};
|
|
|
ScrollController.prototype.canScrollUp = function () {
|
|
|
return this.getScrollTop() > 0;
|
|
|
};
|
|
|
ScrollController.prototype.canScrollDown = function () {
|
|
|
return this.getScrollTop() < this.getMaxScrollTop();
|
|
|
};
|
|
|
ScrollController.prototype.canScrollLeft = function () {
|
|
|
return this.getScrollLeft() > 0;
|
|
|
};
|
|
|
ScrollController.prototype.canScrollRight = function () {
|
|
|
return this.getScrollLeft() < this.getMaxScrollLeft();
|
|
|
};
|
|
|
return ScrollController;
|
|
|
}());
|
|
|
/** @class */ ((function (_super) {
|
|
|
__extends(ElementScrollController, _super);
|
|
|
function ElementScrollController(el) {
|
|
|
var _this = _super.call(this) || this;
|
|
|
_this.el = el;
|
|
|
return _this;
|
|
|
}
|
|
|
ElementScrollController.prototype.getScrollTop = function () {
|
|
|
return this.el.scrollTop;
|
|
|
};
|
|
|
ElementScrollController.prototype.getScrollLeft = function () {
|
|
|
return this.el.scrollLeft;
|
|
|
};
|
|
|
ElementScrollController.prototype.setScrollTop = function (top) {
|
|
|
this.el.scrollTop = top;
|
|
|
};
|
|
|
ElementScrollController.prototype.setScrollLeft = function (left) {
|
|
|
this.el.scrollLeft = left;
|
|
|
};
|
|
|
ElementScrollController.prototype.getScrollWidth = function () {
|
|
|
return this.el.scrollWidth;
|
|
|
};
|
|
|
ElementScrollController.prototype.getScrollHeight = function () {
|
|
|
return this.el.scrollHeight;
|
|
|
};
|
|
|
ElementScrollController.prototype.getClientHeight = function () {
|
|
|
return this.el.clientHeight;
|
|
|
};
|
|
|
ElementScrollController.prototype.getClientWidth = function () {
|
|
|
return this.el.clientWidth;
|
|
|
};
|
|
|
return ElementScrollController;
|
|
|
})(ScrollController));
|
|
|
/** @class */ ((function (_super) {
|
|
|
__extends(WindowScrollController, _super);
|
|
|
function WindowScrollController() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
WindowScrollController.prototype.getScrollTop = function () {
|
|
|
return window.pageYOffset;
|
|
|
};
|
|
|
WindowScrollController.prototype.getScrollLeft = function () {
|
|
|
return window.pageXOffset;
|
|
|
};
|
|
|
WindowScrollController.prototype.setScrollTop = function (n) {
|
|
|
window.scroll(window.pageXOffset, n);
|
|
|
};
|
|
|
WindowScrollController.prototype.setScrollLeft = function (n) {
|
|
|
window.scroll(n, window.pageYOffset);
|
|
|
};
|
|
|
WindowScrollController.prototype.getScrollWidth = function () {
|
|
|
return document.documentElement.scrollWidth;
|
|
|
};
|
|
|
WindowScrollController.prototype.getScrollHeight = function () {
|
|
|
return document.documentElement.scrollHeight;
|
|
|
};
|
|
|
WindowScrollController.prototype.getClientHeight = function () {
|
|
|
return document.documentElement.clientHeight;
|
|
|
};
|
|
|
WindowScrollController.prototype.getClientWidth = function () {
|
|
|
return document.documentElement.clientWidth;
|
|
|
};
|
|
|
return WindowScrollController;
|
|
|
})(ScrollController));
|
|
|
|
|
|
var Theme = /** @class */ (function () {
|
|
|
function Theme(calendarOptions) {
|
|
|
if (this.iconOverrideOption) {
|
|
|
this.setIconOverride(calendarOptions[this.iconOverrideOption]);
|
|
|
}
|
|
|
}
|
|
|
Theme.prototype.setIconOverride = function (iconOverrideHash) {
|
|
|
var iconClassesCopy;
|
|
|
var buttonName;
|
|
|
if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
|
|
|
iconClassesCopy = __assign({}, this.iconClasses);
|
|
|
for (buttonName in iconOverrideHash) {
|
|
|
iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
|
|
|
}
|
|
|
this.iconClasses = iconClassesCopy;
|
|
|
}
|
|
|
else if (iconOverrideHash === false) {
|
|
|
this.iconClasses = {};
|
|
|
}
|
|
|
};
|
|
|
Theme.prototype.applyIconOverridePrefix = function (className) {
|
|
|
var prefix = this.iconOverridePrefix;
|
|
|
if (prefix && className.indexOf(prefix) !== 0) { // if not already present
|
|
|
className = prefix + className;
|
|
|
}
|
|
|
return className;
|
|
|
};
|
|
|
Theme.prototype.getClass = function (key) {
|
|
|
return this.classes[key] || '';
|
|
|
};
|
|
|
Theme.prototype.getIconClass = function (buttonName, isRtl) {
|
|
|
var className;
|
|
|
if (isRtl && this.rtlIconClasses) {
|
|
|
className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];
|
|
|
}
|
|
|
else {
|
|
|
className = this.iconClasses[buttonName];
|
|
|
}
|
|
|
if (className) {
|
|
|
return this.baseIconClass + " " + className;
|
|
|
}
|
|
|
return '';
|
|
|
};
|
|
|
Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {
|
|
|
var className;
|
|
|
if (this.iconOverrideCustomButtonOption) {
|
|
|
className = customButtonProps[this.iconOverrideCustomButtonOption];
|
|
|
if (className) {
|
|
|
return this.baseIconClass + " " + this.applyIconOverridePrefix(className);
|
|
|
}
|
|
|
}
|
|
|
return '';
|
|
|
};
|
|
|
return Theme;
|
|
|
}());
|
|
|
Theme.prototype.classes = {};
|
|
|
Theme.prototype.iconClasses = {};
|
|
|
Theme.prototype.baseIconClass = '';
|
|
|
Theme.prototype.iconOverridePrefix = '';
|
|
|
|
|
|
var ScrollResponder = /** @class */ (function () {
|
|
|
function ScrollResponder(execFunc, emitter, scrollTime, scrollTimeReset) {
|
|
|
var _this = this;
|
|
|
this.execFunc = execFunc;
|
|
|
this.emitter = emitter;
|
|
|
this.scrollTime = scrollTime;
|
|
|
this.scrollTimeReset = scrollTimeReset;
|
|
|
this.handleScrollRequest = function (request) {
|
|
|
_this.queuedRequest = __assign({}, _this.queuedRequest || {}, request);
|
|
|
_this.drain();
|
|
|
};
|
|
|
emitter.on('_scrollRequest', this.handleScrollRequest);
|
|
|
this.fireInitialScroll();
|
|
|
}
|
|
|
ScrollResponder.prototype.detach = function () {
|
|
|
this.emitter.off('_scrollRequest', this.handleScrollRequest);
|
|
|
};
|
|
|
ScrollResponder.prototype.update = function (isDatesNew) {
|
|
|
if (isDatesNew && this.scrollTimeReset) {
|
|
|
this.fireInitialScroll(); // will drain
|
|
|
}
|
|
|
else {
|
|
|
this.drain();
|
|
|
}
|
|
|
};
|
|
|
ScrollResponder.prototype.fireInitialScroll = function () {
|
|
|
this.handleScrollRequest({
|
|
|
time: this.scrollTime,
|
|
|
});
|
|
|
};
|
|
|
ScrollResponder.prototype.drain = function () {
|
|
|
if (this.queuedRequest && this.execFunc(this.queuedRequest)) {
|
|
|
this.queuedRequest = null;
|
|
|
}
|
|
|
};
|
|
|
return ScrollResponder;
|
|
|
}());
|
|
|
|
|
|
var ViewContextType = createContext({}); // for Components
|
|
|
function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
|
|
|
return {
|
|
|
dateEnv: dateEnv,
|
|
|
options: viewOptions,
|
|
|
pluginHooks: pluginHooks,
|
|
|
emitter: emitter,
|
|
|
dispatch: dispatch,
|
|
|
getCurrentData: getCurrentData,
|
|
|
calendarApi: calendarApi,
|
|
|
viewSpec: viewSpec,
|
|
|
viewApi: viewApi,
|
|
|
dateProfileGenerator: dateProfileGenerator,
|
|
|
theme: theme,
|
|
|
isRtl: viewOptions.direction === 'rtl',
|
|
|
addResizeHandler: function (handler) {
|
|
|
emitter.on('_resize', handler);
|
|
|
},
|
|
|
removeResizeHandler: function (handler) {
|
|
|
emitter.off('_resize', handler);
|
|
|
},
|
|
|
createScrollResponder: function (execFunc) {
|
|
|
return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
|
|
|
},
|
|
|
registerInteractiveComponent: registerInteractiveComponent,
|
|
|
unregisterInteractiveComponent: unregisterInteractiveComponent,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/* eslint max-classes-per-file: off */
|
|
|
var PureComponent = /** @class */ (function (_super) {
|
|
|
__extends(PureComponent, _super);
|
|
|
function PureComponent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
PureComponent.prototype.shouldComponentUpdate = function (nextProps, nextState) {
|
|
|
if (this.debug) {
|
|
|
// eslint-disable-next-line no-console
|
|
|
console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));
|
|
|
}
|
|
|
return !compareObjs(this.props, nextProps, this.propEquality) ||
|
|
|
!compareObjs(this.state, nextState, this.stateEquality);
|
|
|
};
|
|
|
PureComponent.addPropsEquality = addPropsEquality;
|
|
|
PureComponent.addStateEquality = addStateEquality;
|
|
|
PureComponent.contextType = ViewContextType;
|
|
|
return PureComponent;
|
|
|
}(Component));
|
|
|
PureComponent.prototype.propEquality = {};
|
|
|
PureComponent.prototype.stateEquality = {};
|
|
|
var BaseComponent = /** @class */ (function (_super) {
|
|
|
__extends(BaseComponent, _super);
|
|
|
function BaseComponent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
BaseComponent.contextType = ViewContextType;
|
|
|
return BaseComponent;
|
|
|
}(PureComponent));
|
|
|
function addPropsEquality(propEquality) {
|
|
|
var hash = Object.create(this.prototype.propEquality);
|
|
|
__assign(hash, propEquality);
|
|
|
this.prototype.propEquality = hash;
|
|
|
}
|
|
|
function addStateEquality(stateEquality) {
|
|
|
var hash = Object.create(this.prototype.stateEquality);
|
|
|
__assign(hash, stateEquality);
|
|
|
this.prototype.stateEquality = hash;
|
|
|
}
|
|
|
// use other one
|
|
|
function setRef(ref, current) {
|
|
|
if (typeof ref === 'function') {
|
|
|
ref(current);
|
|
|
}
|
|
|
else if (ref) {
|
|
|
// see https://github.com/facebook/react/issues/13029
|
|
|
ref.current = current;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
an INTERACTABLE date component
|
|
|
|
|
|
PURPOSES:
|
|
|
- hook up to fg, fill, and mirror renderers
|
|
|
- interface for dragging and hits
|
|
|
*/
|
|
|
var DateComponent = /** @class */ (function (_super) {
|
|
|
__extends(DateComponent, _super);
|
|
|
function DateComponent() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.uid = guid();
|
|
|
return _this;
|
|
|
}
|
|
|
// Hit System
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
DateComponent.prototype.prepareHits = function () {
|
|
|
};
|
|
|
DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
|
|
|
return null; // this should be abstract
|
|
|
};
|
|
|
// Pointer Interaction Utils
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
DateComponent.prototype.isValidSegDownEl = function (el) {
|
|
|
return !this.props.eventDrag && // HACK
|
|
|
!this.props.eventResize && // HACK
|
|
|
!elementClosest(el, '.fc-event-mirror');
|
|
|
};
|
|
|
DateComponent.prototype.isValidDateDownEl = function (el) {
|
|
|
return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
|
|
|
!elementClosest(el, '.fc-more-link') && // a "more.." link
|
|
|
!elementClosest(el, 'a[data-navlink]') && // a clickable nav link
|
|
|
!elementClosest(el, '.fc-popover'); // hack
|
|
|
};
|
|
|
return DateComponent;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
// TODO: easier way to add new hooks? need to update a million things
|
|
|
function createPlugin(input) {
|
|
|
return {
|
|
|
id: guid(),
|
|
|
deps: input.deps || [],
|
|
|
reducers: input.reducers || [],
|
|
|
isLoadingFuncs: input.isLoadingFuncs || [],
|
|
|
contextInit: [].concat(input.contextInit || []),
|
|
|
eventRefiners: input.eventRefiners || {},
|
|
|
eventDefMemberAdders: input.eventDefMemberAdders || [],
|
|
|
eventSourceRefiners: input.eventSourceRefiners || {},
|
|
|
isDraggableTransformers: input.isDraggableTransformers || [],
|
|
|
eventDragMutationMassagers: input.eventDragMutationMassagers || [],
|
|
|
eventDefMutationAppliers: input.eventDefMutationAppliers || [],
|
|
|
dateSelectionTransformers: input.dateSelectionTransformers || [],
|
|
|
datePointTransforms: input.datePointTransforms || [],
|
|
|
dateSpanTransforms: input.dateSpanTransforms || [],
|
|
|
views: input.views || {},
|
|
|
viewPropsTransformers: input.viewPropsTransformers || [],
|
|
|
isPropsValid: input.isPropsValid || null,
|
|
|
externalDefTransforms: input.externalDefTransforms || [],
|
|
|
viewContainerAppends: input.viewContainerAppends || [],
|
|
|
eventDropTransformers: input.eventDropTransformers || [],
|
|
|
componentInteractions: input.componentInteractions || [],
|
|
|
calendarInteractions: input.calendarInteractions || [],
|
|
|
themeClasses: input.themeClasses || {},
|
|
|
eventSourceDefs: input.eventSourceDefs || [],
|
|
|
cmdFormatter: input.cmdFormatter,
|
|
|
recurringTypes: input.recurringTypes || [],
|
|
|
namedTimeZonedImpl: input.namedTimeZonedImpl,
|
|
|
initialView: input.initialView || '',
|
|
|
elementDraggingImpl: input.elementDraggingImpl,
|
|
|
optionChangeHandlers: input.optionChangeHandlers || {},
|
|
|
scrollGridImpl: input.scrollGridImpl || null,
|
|
|
contentTypeHandlers: input.contentTypeHandlers || {},
|
|
|
listenerRefiners: input.listenerRefiners || {},
|
|
|
optionRefiners: input.optionRefiners || {},
|
|
|
propSetHandlers: input.propSetHandlers || {},
|
|
|
};
|
|
|
}
|
|
|
function buildPluginHooks(pluginDefs, globalDefs) {
|
|
|
var isAdded = {};
|
|
|
var hooks = {
|
|
|
reducers: [],
|
|
|
isLoadingFuncs: [],
|
|
|
contextInit: [],
|
|
|
eventRefiners: {},
|
|
|
eventDefMemberAdders: [],
|
|
|
eventSourceRefiners: {},
|
|
|
isDraggableTransformers: [],
|
|
|
eventDragMutationMassagers: [],
|
|
|
eventDefMutationAppliers: [],
|
|
|
dateSelectionTransformers: [],
|
|
|
datePointTransforms: [],
|
|
|
dateSpanTransforms: [],
|
|
|
views: {},
|
|
|
viewPropsTransformers: [],
|
|
|
isPropsValid: null,
|
|
|
externalDefTransforms: [],
|
|
|
viewContainerAppends: [],
|
|
|
eventDropTransformers: [],
|
|
|
componentInteractions: [],
|
|
|
calendarInteractions: [],
|
|
|
themeClasses: {},
|
|
|
eventSourceDefs: [],
|
|
|
cmdFormatter: null,
|
|
|
recurringTypes: [],
|
|
|
namedTimeZonedImpl: null,
|
|
|
initialView: '',
|
|
|
elementDraggingImpl: null,
|
|
|
optionChangeHandlers: {},
|
|
|
scrollGridImpl: null,
|
|
|
contentTypeHandlers: {},
|
|
|
listenerRefiners: {},
|
|
|
optionRefiners: {},
|
|
|
propSetHandlers: {},
|
|
|
};
|
|
|
function addDefs(defs) {
|
|
|
for (var _i = 0, defs_1 = defs; _i < defs_1.length; _i++) {
|
|
|
var def = defs_1[_i];
|
|
|
if (!isAdded[def.id]) {
|
|
|
isAdded[def.id] = true;
|
|
|
addDefs(def.deps);
|
|
|
hooks = combineHooks(hooks, def);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (pluginDefs) {
|
|
|
addDefs(pluginDefs);
|
|
|
}
|
|
|
addDefs(globalDefs);
|
|
|
return hooks;
|
|
|
}
|
|
|
function buildBuildPluginHooks() {
|
|
|
var currentOverrideDefs = [];
|
|
|
var currentGlobalDefs = [];
|
|
|
var currentHooks;
|
|
|
return function (overrideDefs, globalDefs) {
|
|
|
if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
|
|
|
currentHooks = buildPluginHooks(overrideDefs, globalDefs);
|
|
|
}
|
|
|
currentOverrideDefs = overrideDefs;
|
|
|
currentGlobalDefs = globalDefs;
|
|
|
return currentHooks;
|
|
|
};
|
|
|
}
|
|
|
function combineHooks(hooks0, hooks1) {
|
|
|
return {
|
|
|
reducers: hooks0.reducers.concat(hooks1.reducers),
|
|
|
isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
|
|
|
contextInit: hooks0.contextInit.concat(hooks1.contextInit),
|
|
|
eventRefiners: __assign(__assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
|
|
|
eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
|
|
|
eventSourceRefiners: __assign(__assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
|
|
|
isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
|
|
|
eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
|
|
|
eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
|
|
|
dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
|
|
|
datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
|
|
|
dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
|
|
|
views: __assign(__assign({}, hooks0.views), hooks1.views),
|
|
|
viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
|
|
|
isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
|
|
|
externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
|
|
|
viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
|
|
|
eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
|
|
|
calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
|
|
|
componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
|
|
|
themeClasses: __assign(__assign({}, hooks0.themeClasses), hooks1.themeClasses),
|
|
|
eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
|
|
|
cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
|
|
|
recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
|
|
|
namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
|
|
|
initialView: hooks0.initialView || hooks1.initialView,
|
|
|
elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
|
|
|
optionChangeHandlers: __assign(__assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
|
|
|
scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
|
|
|
contentTypeHandlers: __assign(__assign({}, hooks0.contentTypeHandlers), hooks1.contentTypeHandlers),
|
|
|
listenerRefiners: __assign(__assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
|
|
|
optionRefiners: __assign(__assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
|
|
|
propSetHandlers: __assign(__assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var StandardTheme = /** @class */ (function (_super) {
|
|
|
__extends(StandardTheme, _super);
|
|
|
function StandardTheme() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
return StandardTheme;
|
|
|
}(Theme));
|
|
|
StandardTheme.prototype.classes = {
|
|
|
root: 'fc-theme-standard',
|
|
|
tableCellShaded: 'fc-cell-shaded',
|
|
|
buttonGroup: 'fc-button-group',
|
|
|
button: 'fc-button fc-button-primary',
|
|
|
buttonActive: 'fc-button-active',
|
|
|
};
|
|
|
StandardTheme.prototype.baseIconClass = 'fc-icon';
|
|
|
StandardTheme.prototype.iconClasses = {
|
|
|
close: 'fc-icon-x',
|
|
|
prev: 'fc-icon-chevron-left',
|
|
|
next: 'fc-icon-chevron-right',
|
|
|
prevYear: 'fc-icon-chevrons-left',
|
|
|
nextYear: 'fc-icon-chevrons-right',
|
|
|
};
|
|
|
StandardTheme.prototype.rtlIconClasses = {
|
|
|
prev: 'fc-icon-chevron-right',
|
|
|
next: 'fc-icon-chevron-left',
|
|
|
prevYear: 'fc-icon-chevrons-right',
|
|
|
nextYear: 'fc-icon-chevrons-left',
|
|
|
};
|
|
|
StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
|
|
|
StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
|
|
|
StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
|
|
|
|
|
|
function compileViewDefs(defaultConfigs, overrideConfigs) {
|
|
|
var hash = {};
|
|
|
var viewType;
|
|
|
for (viewType in defaultConfigs) {
|
|
|
ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
|
|
|
}
|
|
|
for (viewType in overrideConfigs) {
|
|
|
ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
|
|
|
}
|
|
|
return hash;
|
|
|
}
|
|
|
function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
|
|
|
if (hash[viewType]) {
|
|
|
return hash[viewType];
|
|
|
}
|
|
|
var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
|
|
|
if (viewDef) {
|
|
|
hash[viewType] = viewDef;
|
|
|
}
|
|
|
return viewDef;
|
|
|
}
|
|
|
function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
|
|
|
var defaultConfig = defaultConfigs[viewType];
|
|
|
var overrideConfig = overrideConfigs[viewType];
|
|
|
var queryProp = function (name) { return ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
|
|
|
((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null)); };
|
|
|
var theComponent = queryProp('component');
|
|
|
var superType = queryProp('superType');
|
|
|
var superDef = null;
|
|
|
if (superType) {
|
|
|
if (superType === viewType) {
|
|
|
throw new Error('Can\'t have a custom view type that references itself');
|
|
|
}
|
|
|
superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
|
|
|
}
|
|
|
if (!theComponent && superDef) {
|
|
|
theComponent = superDef.component;
|
|
|
}
|
|
|
if (!theComponent) {
|
|
|
return null; // don't throw a warning, might be settings for a single-unit view
|
|
|
}
|
|
|
return {
|
|
|
type: viewType,
|
|
|
component: theComponent,
|
|
|
defaults: __assign(__assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),
|
|
|
overrides: __assign(__assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/* eslint max-classes-per-file: off */
|
|
|
// NOTE: in JSX, you should always use this class with <HookProps> arg. otherwise, will default to any???
|
|
|
var RenderHook = /** @class */ (function (_super) {
|
|
|
__extends(RenderHook, _super);
|
|
|
function RenderHook() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.handleRootEl = function (el) {
|
|
|
setRef(_this.rootElRef, el);
|
|
|
if (_this.props.elRef) {
|
|
|
setRef(_this.props.elRef, el);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
RenderHook.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var props = this.props;
|
|
|
var hookProps = props.hookProps;
|
|
|
return (createElement(MountHook, { hookProps: hookProps, didMount: props.didMount, willUnmount: props.willUnmount, elRef: this.handleRootEl }, function (rootElRef) { return (createElement(ContentHook, { hookProps: hookProps, content: props.content, defaultContent: props.defaultContent, backupElRef: _this.rootElRef }, function (innerElRef, innerContent) { return props.children(rootElRef, normalizeClassNames(props.classNames, hookProps), innerElRef, innerContent); })); }));
|
|
|
};
|
|
|
return RenderHook;
|
|
|
}(BaseComponent));
|
|
|
// TODO: rename to be about function, not default. use in above type
|
|
|
// for forcing rerender of components that use the ContentHook
|
|
|
var CustomContentRenderContext = createContext(0);
|
|
|
function ContentHook(props) {
|
|
|
return (createElement(CustomContentRenderContext.Consumer, null, function (renderId) { return (createElement(ContentHookInner, __assign({ renderId: renderId }, props))); }));
|
|
|
}
|
|
|
var ContentHookInner = /** @class */ (function (_super) {
|
|
|
__extends(ContentHookInner, _super);
|
|
|
function ContentHookInner() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.innerElRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
ContentHookInner.prototype.render = function () {
|
|
|
return this.props.children(this.innerElRef, this.renderInnerContent());
|
|
|
};
|
|
|
ContentHookInner.prototype.componentDidMount = function () {
|
|
|
this.updateCustomContent();
|
|
|
};
|
|
|
ContentHookInner.prototype.componentDidUpdate = function () {
|
|
|
this.updateCustomContent();
|
|
|
};
|
|
|
ContentHookInner.prototype.componentWillUnmount = function () {
|
|
|
if (this.customContentInfo && this.customContentInfo.destroy) {
|
|
|
this.customContentInfo.destroy();
|
|
|
}
|
|
|
};
|
|
|
ContentHookInner.prototype.renderInnerContent = function () {
|
|
|
var customContentInfo = this.customContentInfo; // only populated if using non-[p]react node(s)
|
|
|
var innerContent = this.getInnerContent();
|
|
|
var meta = this.getContentMeta(innerContent);
|
|
|
// initial run, or content-type changing? (from vue -> react for example)
|
|
|
if (!customContentInfo || customContentInfo.contentKey !== meta.contentKey) {
|
|
|
// clearing old value
|
|
|
if (customContentInfo) {
|
|
|
if (customContentInfo.destroy) {
|
|
|
customContentInfo.destroy();
|
|
|
}
|
|
|
customContentInfo = this.customContentInfo = null;
|
|
|
}
|
|
|
// assigning new value
|
|
|
if (meta.contentKey) {
|
|
|
customContentInfo = this.customContentInfo = __assign({ contentKey: meta.contentKey, contentVal: innerContent[meta.contentKey] }, meta.buildLifecycleFuncs());
|
|
|
}
|
|
|
// updating
|
|
|
}
|
|
|
else if (customContentInfo) {
|
|
|
customContentInfo.contentVal = innerContent[meta.contentKey];
|
|
|
}
|
|
|
return customContentInfo
|
|
|
? [] // signal that something was specified
|
|
|
: innerContent; // assume a [p]react vdom node. use it
|
|
|
};
|
|
|
ContentHookInner.prototype.getInnerContent = function () {
|
|
|
var props = this.props;
|
|
|
var innerContent = normalizeContent(props.content, props.hookProps);
|
|
|
if (innerContent === undefined) { // use the default
|
|
|
innerContent = normalizeContent(props.defaultContent, props.hookProps);
|
|
|
}
|
|
|
return innerContent == null ? null : innerContent; // convert undefined to null (better for React)
|
|
|
};
|
|
|
ContentHookInner.prototype.getContentMeta = function (innerContent) {
|
|
|
var contentTypeHandlers = this.context.pluginHooks.contentTypeHandlers;
|
|
|
var contentKey = '';
|
|
|
var buildLifecycleFuncs = null;
|
|
|
if (innerContent) { // allowed to be null, for convenience to caller
|
|
|
for (var searchKey in contentTypeHandlers) {
|
|
|
if (innerContent[searchKey] !== undefined) {
|
|
|
contentKey = searchKey;
|
|
|
buildLifecycleFuncs = contentTypeHandlers[searchKey];
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return { contentKey: contentKey, buildLifecycleFuncs: buildLifecycleFuncs };
|
|
|
};
|
|
|
ContentHookInner.prototype.updateCustomContent = function () {
|
|
|
if (this.customContentInfo) { // for non-[p]react
|
|
|
this.customContentInfo.render(this.innerElRef.current || this.props.backupElRef.current, // the element to render into
|
|
|
this.customContentInfo.contentVal);
|
|
|
}
|
|
|
};
|
|
|
return ContentHookInner;
|
|
|
}(BaseComponent));
|
|
|
var MountHook = /** @class */ (function (_super) {
|
|
|
__extends(MountHook, _super);
|
|
|
function MountHook() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.handleRootEl = function (rootEl) {
|
|
|
_this.rootEl = rootEl;
|
|
|
if (_this.props.elRef) {
|
|
|
setRef(_this.props.elRef, rootEl);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
MountHook.prototype.render = function () {
|
|
|
return this.props.children(this.handleRootEl);
|
|
|
};
|
|
|
MountHook.prototype.componentDidMount = function () {
|
|
|
var callback = this.props.didMount;
|
|
|
if (callback) {
|
|
|
callback(__assign(__assign({}, this.props.hookProps), { el: this.rootEl }));
|
|
|
}
|
|
|
};
|
|
|
MountHook.prototype.componentWillUnmount = function () {
|
|
|
var callback = this.props.willUnmount;
|
|
|
if (callback) {
|
|
|
callback(__assign(__assign({}, this.props.hookProps), { el: this.rootEl }));
|
|
|
}
|
|
|
};
|
|
|
return MountHook;
|
|
|
}(BaseComponent));
|
|
|
function buildClassNameNormalizer() {
|
|
|
var currentGenerator;
|
|
|
var currentHookProps;
|
|
|
var currentClassNames = [];
|
|
|
return function (generator, hookProps) {
|
|
|
if (!currentHookProps || !isPropsEqual(currentHookProps, hookProps) || generator !== currentGenerator) {
|
|
|
currentGenerator = generator;
|
|
|
currentHookProps = hookProps;
|
|
|
currentClassNames = normalizeClassNames(generator, hookProps);
|
|
|
}
|
|
|
return currentClassNames;
|
|
|
};
|
|
|
}
|
|
|
function normalizeClassNames(classNames, hookProps) {
|
|
|
if (typeof classNames === 'function') {
|
|
|
classNames = classNames(hookProps);
|
|
|
}
|
|
|
return parseClassNames(classNames);
|
|
|
}
|
|
|
function normalizeContent(input, hookProps) {
|
|
|
if (typeof input === 'function') {
|
|
|
return input(hookProps, createElement); // give the function the vdom-creation func
|
|
|
}
|
|
|
return input;
|
|
|
}
|
|
|
|
|
|
var ViewRoot = /** @class */ (function (_super) {
|
|
|
__extends(ViewRoot, _super);
|
|
|
function ViewRoot() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.normalizeClassNames = buildClassNameNormalizer();
|
|
|
return _this;
|
|
|
}
|
|
|
ViewRoot.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var hookProps = { view: context.viewApi };
|
|
|
var customClassNames = this.normalizeClassNames(options.viewClassNames, hookProps);
|
|
|
return (createElement(MountHook, { hookProps: hookProps, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount, elRef: props.elRef }, function (rootElRef) { return props.children(rootElRef, ["fc-" + props.viewSpec.type + "-view", 'fc-view'].concat(customClassNames)); }));
|
|
|
};
|
|
|
return ViewRoot;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
function parseViewConfigs(inputs) {
|
|
|
return mapHash(inputs, parseViewConfig);
|
|
|
}
|
|
|
function parseViewConfig(input) {
|
|
|
var rawOptions = typeof input === 'function' ?
|
|
|
{ component: input } :
|
|
|
input;
|
|
|
var component = rawOptions.component;
|
|
|
if (rawOptions.content) {
|
|
|
component = createViewHookComponent(rawOptions);
|
|
|
// TODO: remove content/classNames/didMount/etc from options?
|
|
|
}
|
|
|
return {
|
|
|
superType: rawOptions.type,
|
|
|
component: component,
|
|
|
rawOptions: rawOptions,
|
|
|
};
|
|
|
}
|
|
|
function createViewHookComponent(options) {
|
|
|
return function (viewProps) { return (createElement(ViewContextType.Consumer, null, function (context) { return (createElement(ViewRoot, { viewSpec: context.viewSpec }, function (viewElRef, viewClassNames) {
|
|
|
var hookProps = __assign(__assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold });
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.classNames, content: options.content, didMount: options.didMount, willUnmount: options.willUnmount, elRef: viewElRef }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("div", { className: viewClassNames.concat(customClassNames).join(' '), ref: rootElRef }, innerContent)); }));
|
|
|
})); })); };
|
|
|
}
|
|
|
|
|
|
function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
|
|
|
var defaultConfigs = parseViewConfigs(defaultInputs);
|
|
|
var overrideConfigs = parseViewConfigs(optionOverrides.views);
|
|
|
var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
|
|
|
return mapHash(viewDefs, function (viewDef) { return buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults); });
|
|
|
}
|
|
|
function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
|
|
|
var durationInput = viewDef.overrides.duration ||
|
|
|
viewDef.defaults.duration ||
|
|
|
dynamicOptionOverrides.duration ||
|
|
|
optionOverrides.duration;
|
|
|
var duration = null;
|
|
|
var durationUnit = '';
|
|
|
var singleUnit = '';
|
|
|
var singleUnitOverrides = {};
|
|
|
if (durationInput) {
|
|
|
duration = createDurationCached(durationInput);
|
|
|
if (duration) { // valid?
|
|
|
var denom = greatestDurationDenominator(duration);
|
|
|
durationUnit = denom.unit;
|
|
|
if (denom.value === 1) {
|
|
|
singleUnit = durationUnit;
|
|
|
singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
var queryButtonText = function (optionsSubset) {
|
|
|
var buttonTextMap = optionsSubset.buttonText || {};
|
|
|
var buttonTextKey = viewDef.defaults.buttonTextKey;
|
|
|
if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
|
|
|
return buttonTextMap[buttonTextKey];
|
|
|
}
|
|
|
if (buttonTextMap[viewDef.type] != null) {
|
|
|
return buttonTextMap[viewDef.type];
|
|
|
}
|
|
|
if (buttonTextMap[singleUnit] != null) {
|
|
|
return buttonTextMap[singleUnit];
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
return {
|
|
|
type: viewDef.type,
|
|
|
component: viewDef.component,
|
|
|
duration: duration,
|
|
|
durationUnit: durationUnit,
|
|
|
singleUnit: singleUnit,
|
|
|
optionDefaults: viewDef.defaults,
|
|
|
optionOverrides: __assign(__assign({}, singleUnitOverrides), viewDef.overrides),
|
|
|
buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||
|
|
|
queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence
|
|
|
viewDef.overrides.buttonText,
|
|
|
buttonTextDefault: queryButtonText(localeDefaults) ||
|
|
|
viewDef.defaults.buttonText ||
|
|
|
queryButtonText(BASE_OPTION_DEFAULTS) ||
|
|
|
viewDef.type, // fall back to given view name
|
|
|
};
|
|
|
}
|
|
|
// hack to get memoization working
|
|
|
var durationInputMap = {};
|
|
|
function createDurationCached(durationInput) {
|
|
|
var json = JSON.stringify(durationInput);
|
|
|
var res = durationInputMap[json];
|
|
|
if (res === undefined) {
|
|
|
res = createDuration(durationInput);
|
|
|
durationInputMap[json] = res;
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
|
|
|
var DateProfileGenerator = /** @class */ (function () {
|
|
|
function DateProfileGenerator(props) {
|
|
|
this.props = props;
|
|
|
this.nowDate = getNow(props.nowInput, props.dateEnv);
|
|
|
this.initHiddenDays();
|
|
|
}
|
|
|
/* Date Range Computation
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
// Builds a structure with info about what the dates/ranges will be for the "prev" view.
|
|
|
DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate, forceToValid) {
|
|
|
var dateEnv = this.props.dateEnv;
|
|
|
var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
|
|
|
currentDateProfile.dateIncrement);
|
|
|
return this.build(prevDate, -1, forceToValid);
|
|
|
};
|
|
|
// Builds a structure with info about what the dates/ranges will be for the "next" view.
|
|
|
DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate, forceToValid) {
|
|
|
var dateEnv = this.props.dateEnv;
|
|
|
var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
|
|
|
currentDateProfile.dateIncrement);
|
|
|
return this.build(nextDate, 1, forceToValid);
|
|
|
};
|
|
|
// Builds a structure holding dates/ranges for rendering around the given date.
|
|
|
// Optional direction param indicates whether the date is being incremented/decremented
|
|
|
// from its previous value. decremented = -1, incremented = 1 (default).
|
|
|
DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {
|
|
|
if (forceToValid === void 0) { forceToValid = true; }
|
|
|
var props = this.props;
|
|
|
var validRange;
|
|
|
var currentInfo;
|
|
|
var isRangeAllDay;
|
|
|
var renderRange;
|
|
|
var activeRange;
|
|
|
var isValid;
|
|
|
validRange = this.buildValidRange();
|
|
|
validRange = this.trimHiddenDays(validRange);
|
|
|
if (forceToValid) {
|
|
|
currentDate = constrainMarkerToRange(currentDate, validRange);
|
|
|
}
|
|
|
currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
|
|
|
isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
|
|
|
renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
|
|
|
renderRange = this.trimHiddenDays(renderRange);
|
|
|
activeRange = renderRange;
|
|
|
if (!props.showNonCurrentDates) {
|
|
|
activeRange = intersectRanges(activeRange, currentInfo.range);
|
|
|
}
|
|
|
activeRange = this.adjustActiveRange(activeRange);
|
|
|
activeRange = intersectRanges(activeRange, validRange); // might return null
|
|
|
// it's invalid if the originally requested date is not contained,
|
|
|
// or if the range is completely outside of the valid range.
|
|
|
isValid = rangesIntersect(currentInfo.range, validRange);
|
|
|
return {
|
|
|
// constraint for where prev/next operations can go and where events can be dragged/resized to.
|
|
|
// an object with optional start and end properties.
|
|
|
validRange: validRange,
|
|
|
// range the view is formally responsible for.
|
|
|
// for example, a month view might have 1st-31st, excluding padded dates
|
|
|
currentRange: currentInfo.range,
|
|
|
// name of largest unit being displayed, like "month" or "week"
|
|
|
currentRangeUnit: currentInfo.unit,
|
|
|
isRangeAllDay: isRangeAllDay,
|
|
|
// dates that display events and accept drag-n-drop
|
|
|
// will be `null` if no dates accept events
|
|
|
activeRange: activeRange,
|
|
|
// date range with a rendered skeleton
|
|
|
// includes not-active days that need some sort of DOM
|
|
|
renderRange: renderRange,
|
|
|
// Duration object that denotes the first visible time of any given day
|
|
|
slotMinTime: props.slotMinTime,
|
|
|
// Duration object that denotes the exclusive visible end time of any given day
|
|
|
slotMaxTime: props.slotMaxTime,
|
|
|
isValid: isValid,
|
|
|
// how far the current date will move for a prev/next operation
|
|
|
dateIncrement: this.buildDateIncrement(currentInfo.duration),
|
|
|
// pass a fallback (might be null) ^
|
|
|
};
|
|
|
};
|
|
|
// Builds an object with optional start/end properties.
|
|
|
// Indicates the minimum/maximum dates to display.
|
|
|
// not responsible for trimming hidden days.
|
|
|
DateProfileGenerator.prototype.buildValidRange = function () {
|
|
|
var input = this.props.validRangeInput;
|
|
|
var simpleInput = typeof input === 'function'
|
|
|
? input.call(this.props.calendarApi, this.nowDate)
|
|
|
: input;
|
|
|
return this.refineRange(simpleInput) ||
|
|
|
{ start: null, end: null }; // completely open-ended
|
|
|
};
|
|
|
// Builds a structure with info about the "current" range, the range that is
|
|
|
// highlighted as being the current month for example.
|
|
|
// See build() for a description of `direction`.
|
|
|
// Guaranteed to have `range` and `unit` properties. `duration` is optional.
|
|
|
DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {
|
|
|
var props = this.props;
|
|
|
var duration = null;
|
|
|
var unit = null;
|
|
|
var range = null;
|
|
|
var dayCount;
|
|
|
if (props.duration) {
|
|
|
duration = props.duration;
|
|
|
unit = props.durationUnit;
|
|
|
range = this.buildRangeFromDuration(date, direction, duration, unit);
|
|
|
}
|
|
|
else if ((dayCount = this.props.dayCount)) {
|
|
|
unit = 'day';
|
|
|
range = this.buildRangeFromDayCount(date, direction, dayCount);
|
|
|
}
|
|
|
else if ((range = this.buildCustomVisibleRange(date))) {
|
|
|
unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;
|
|
|
}
|
|
|
else {
|
|
|
duration = this.getFallbackDuration();
|
|
|
unit = greatestDurationDenominator(duration).unit;
|
|
|
range = this.buildRangeFromDuration(date, direction, duration, unit);
|
|
|
}
|
|
|
return { duration: duration, unit: unit, range: range };
|
|
|
};
|
|
|
DateProfileGenerator.prototype.getFallbackDuration = function () {
|
|
|
return createDuration({ day: 1 });
|
|
|
};
|
|
|
// Returns a new activeRange to have time values (un-ambiguate)
|
|
|
// slotMinTime or slotMaxTime causes the range to expand.
|
|
|
DateProfileGenerator.prototype.adjustActiveRange = function (range) {
|
|
|
var _a = this.props, dateEnv = _a.dateEnv, usesMinMaxTime = _a.usesMinMaxTime, slotMinTime = _a.slotMinTime, slotMaxTime = _a.slotMaxTime;
|
|
|
var start = range.start, end = range.end;
|
|
|
if (usesMinMaxTime) {
|
|
|
// expand active range if slotMinTime is negative (why not when positive?)
|
|
|
if (asRoughDays(slotMinTime) < 0) {
|
|
|
start = startOfDay(start); // necessary?
|
|
|
start = dateEnv.add(start, slotMinTime);
|
|
|
}
|
|
|
// expand active range if slotMaxTime is beyond one day (why not when negative?)
|
|
|
if (asRoughDays(slotMaxTime) > 1) {
|
|
|
end = startOfDay(end); // necessary?
|
|
|
end = addDays(end, -1);
|
|
|
end = dateEnv.add(end, slotMaxTime);
|
|
|
}
|
|
|
}
|
|
|
return { start: start, end: end };
|
|
|
};
|
|
|
// Builds the "current" range when it is specified as an explicit duration.
|
|
|
// `unit` is the already-computed greatestDurationDenominator unit of duration.
|
|
|
DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {
|
|
|
var _a = this.props, dateEnv = _a.dateEnv, dateAlignment = _a.dateAlignment;
|
|
|
var start;
|
|
|
var end;
|
|
|
var res;
|
|
|
// compute what the alignment should be
|
|
|
if (!dateAlignment) {
|
|
|
var dateIncrement = this.props.dateIncrement;
|
|
|
if (dateIncrement) {
|
|
|
// use the smaller of the two units
|
|
|
if (asRoughMs(dateIncrement) < asRoughMs(duration)) {
|
|
|
dateAlignment = greatestDurationDenominator(dateIncrement).unit;
|
|
|
}
|
|
|
else {
|
|
|
dateAlignment = unit;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
dateAlignment = unit;
|
|
|
}
|
|
|
}
|
|
|
// if the view displays a single day or smaller
|
|
|
if (asRoughDays(duration) <= 1) {
|
|
|
if (this.isHiddenDay(start)) {
|
|
|
start = this.skipHiddenDays(start, direction);
|
|
|
start = startOfDay(start);
|
|
|
}
|
|
|
}
|
|
|
function computeRes() {
|
|
|
start = dateEnv.startOf(date, dateAlignment);
|
|
|
end = dateEnv.add(start, duration);
|
|
|
res = { start: start, end: end };
|
|
|
}
|
|
|
computeRes();
|
|
|
// if range is completely enveloped by hidden days, go past the hidden days
|
|
|
if (!this.trimHiddenDays(res)) {
|
|
|
date = this.skipHiddenDays(date, direction);
|
|
|
computeRes();
|
|
|
}
|
|
|
return res;
|
|
|
};
|
|
|
// Builds the "current" range when a dayCount is specified.
|
|
|
DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {
|
|
|
var _a = this.props, dateEnv = _a.dateEnv, dateAlignment = _a.dateAlignment;
|
|
|
var runningCount = 0;
|
|
|
var start = date;
|
|
|
var end;
|
|
|
if (dateAlignment) {
|
|
|
start = dateEnv.startOf(start, dateAlignment);
|
|
|
}
|
|
|
start = startOfDay(start);
|
|
|
start = this.skipHiddenDays(start, direction);
|
|
|
end = start;
|
|
|
do {
|
|
|
end = addDays(end, 1);
|
|
|
if (!this.isHiddenDay(end)) {
|
|
|
runningCount += 1;
|
|
|
}
|
|
|
} while (runningCount < dayCount);
|
|
|
return { start: start, end: end };
|
|
|
};
|
|
|
// Builds a normalized range object for the "visible" range,
|
|
|
// which is a way to define the currentRange and activeRange at the same time.
|
|
|
DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {
|
|
|
var props = this.props;
|
|
|
var input = props.visibleRangeInput;
|
|
|
var simpleInput = typeof input === 'function'
|
|
|
? input.call(props.calendarApi, props.dateEnv.toDate(date))
|
|
|
: input;
|
|
|
var range = this.refineRange(simpleInput);
|
|
|
if (range && (range.start == null || range.end == null)) {
|
|
|
return null;
|
|
|
}
|
|
|
return range;
|
|
|
};
|
|
|
// Computes the range that will represent the element/cells for *rendering*,
|
|
|
// but which may have voided days/times.
|
|
|
// not responsible for trimming hidden days.
|
|
|
DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
|
|
|
return currentRange;
|
|
|
};
|
|
|
// Compute the duration value that should be added/substracted to the current date
|
|
|
// when a prev/next operation happens.
|
|
|
DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {
|
|
|
var dateIncrement = this.props.dateIncrement;
|
|
|
var customAlignment;
|
|
|
if (dateIncrement) {
|
|
|
return dateIncrement;
|
|
|
}
|
|
|
if ((customAlignment = this.props.dateAlignment)) {
|
|
|
return createDuration(1, customAlignment);
|
|
|
}
|
|
|
if (fallback) {
|
|
|
return fallback;
|
|
|
}
|
|
|
return createDuration({ days: 1 });
|
|
|
};
|
|
|
DateProfileGenerator.prototype.refineRange = function (rangeInput) {
|
|
|
if (rangeInput) {
|
|
|
var range = parseRange(rangeInput, this.props.dateEnv);
|
|
|
if (range) {
|
|
|
range = computeVisibleDayRange(range);
|
|
|
}
|
|
|
return range;
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
/* Hidden Days
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
// Initializes internal variables related to calculating hidden days-of-week
|
|
|
DateProfileGenerator.prototype.initHiddenDays = function () {
|
|
|
var hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden
|
|
|
var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
|
|
|
var dayCnt = 0;
|
|
|
var i;
|
|
|
if (this.props.weekends === false) {
|
|
|
hiddenDays.push(0, 6); // 0=sunday, 6=saturday
|
|
|
}
|
|
|
for (i = 0; i < 7; i += 1) {
|
|
|
if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
|
|
|
dayCnt += 1;
|
|
|
}
|
|
|
}
|
|
|
if (!dayCnt) {
|
|
|
throw new Error('invalid hiddenDays'); // all days were hidden? bad.
|
|
|
}
|
|
|
this.isHiddenDayHash = isHiddenDayHash;
|
|
|
};
|
|
|
// Remove days from the beginning and end of the range that are computed as hidden.
|
|
|
// If the whole range is trimmed off, returns null
|
|
|
DateProfileGenerator.prototype.trimHiddenDays = function (range) {
|
|
|
var start = range.start, end = range.end;
|
|
|
if (start) {
|
|
|
start = this.skipHiddenDays(start);
|
|
|
}
|
|
|
if (end) {
|
|
|
end = this.skipHiddenDays(end, -1, true);
|
|
|
}
|
|
|
if (start == null || end == null || start < end) {
|
|
|
return { start: start, end: end };
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Is the current day hidden?
|
|
|
// `day` is a day-of-week index (0-6), or a Date (used for UTC)
|
|
|
DateProfileGenerator.prototype.isHiddenDay = function (day) {
|
|
|
if (day instanceof Date) {
|
|
|
day = day.getUTCDay();
|
|
|
}
|
|
|
return this.isHiddenDayHash[day];
|
|
|
};
|
|
|
// Incrementing the current day until it is no longer a hidden day, returning a copy.
|
|
|
// DOES NOT CONSIDER validRange!
|
|
|
// If the initial value of `date` is not a hidden day, don't do anything.
|
|
|
// Pass `isExclusive` as `true` if you are dealing with an end date.
|
|
|
// `inc` defaults to `1` (increment one day forward each time)
|
|
|
DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {
|
|
|
if (inc === void 0) { inc = 1; }
|
|
|
if (isExclusive === void 0) { isExclusive = false; }
|
|
|
while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
|
|
|
date = addDays(date, inc);
|
|
|
}
|
|
|
return date;
|
|
|
};
|
|
|
return DateProfileGenerator;
|
|
|
}());
|
|
|
|
|
|
function reduceViewType(viewType, action) {
|
|
|
switch (action.type) {
|
|
|
case 'CHANGE_VIEW_TYPE':
|
|
|
viewType = action.viewType;
|
|
|
}
|
|
|
return viewType;
|
|
|
}
|
|
|
|
|
|
function reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {
|
|
|
var _a;
|
|
|
switch (action.type) {
|
|
|
case 'SET_OPTION':
|
|
|
return __assign(__assign({}, dynamicOptionOverrides), (_a = {}, _a[action.optionName] = action.rawOptionValue, _a));
|
|
|
default:
|
|
|
return dynamicOptionOverrides;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {
|
|
|
var dp;
|
|
|
switch (action.type) {
|
|
|
case 'CHANGE_VIEW_TYPE':
|
|
|
return dateProfileGenerator.build(action.dateMarker || currentDate);
|
|
|
case 'CHANGE_DATE':
|
|
|
return dateProfileGenerator.build(action.dateMarker);
|
|
|
case 'PREV':
|
|
|
dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
|
|
|
if (dp.isValid) {
|
|
|
return dp;
|
|
|
}
|
|
|
break;
|
|
|
case 'NEXT':
|
|
|
dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);
|
|
|
if (dp.isValid) {
|
|
|
return dp;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
return currentDateProfile;
|
|
|
}
|
|
|
|
|
|
function initEventSources(calendarOptions, dateProfile, context) {
|
|
|
var activeRange = dateProfile ? dateProfile.activeRange : null;
|
|
|
return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
|
|
|
}
|
|
|
function reduceEventSources(eventSources, action, dateProfile, context) {
|
|
|
var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
|
|
|
switch (action.type) {
|
|
|
case 'ADD_EVENT_SOURCES': // already parsed
|
|
|
return addSources(eventSources, action.sources, activeRange, context);
|
|
|
case 'REMOVE_EVENT_SOURCE':
|
|
|
return removeSource(eventSources, action.sourceId);
|
|
|
case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
|
|
|
case 'NEXT':
|
|
|
case 'CHANGE_DATE':
|
|
|
case 'CHANGE_VIEW_TYPE':
|
|
|
if (dateProfile) {
|
|
|
return fetchDirtySources(eventSources, activeRange, context);
|
|
|
}
|
|
|
return eventSources;
|
|
|
case 'FETCH_EVENT_SOURCES':
|
|
|
return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
|
|
|
arrayToHash(action.sourceIds) :
|
|
|
excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
|
|
|
case 'RECEIVE_EVENTS':
|
|
|
case 'RECEIVE_EVENT_ERROR':
|
|
|
return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
|
|
|
case 'REMOVE_ALL_EVENT_SOURCES':
|
|
|
return {};
|
|
|
default:
|
|
|
return eventSources;
|
|
|
}
|
|
|
}
|
|
|
function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
|
|
|
var activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
|
|
|
return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
|
|
|
}
|
|
|
function computeEventSourcesLoading(eventSources) {
|
|
|
for (var sourceId in eventSources) {
|
|
|
if (eventSources[sourceId].isFetching) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
function addSources(eventSourceHash, sources, fetchRange, context) {
|
|
|
var hash = {};
|
|
|
for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {
|
|
|
var source = sources_1[_i];
|
|
|
hash[source.sourceId] = source;
|
|
|
}
|
|
|
if (fetchRange) {
|
|
|
hash = fetchDirtySources(hash, fetchRange, context);
|
|
|
}
|
|
|
return __assign(__assign({}, eventSourceHash), hash);
|
|
|
}
|
|
|
function removeSource(eventSourceHash, sourceId) {
|
|
|
return filterHash(eventSourceHash, function (eventSource) { return eventSource.sourceId !== sourceId; });
|
|
|
}
|
|
|
function fetchDirtySources(sourceHash, fetchRange, context) {
|
|
|
return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) { return isSourceDirty(eventSource, fetchRange, context); }), fetchRange, false, context);
|
|
|
}
|
|
|
function isSourceDirty(eventSource, fetchRange, context) {
|
|
|
if (!doesSourceNeedRange(eventSource, context)) {
|
|
|
return !eventSource.latestFetchId;
|
|
|
}
|
|
|
return !context.options.lazyFetching ||
|
|
|
!eventSource.fetchRange ||
|
|
|
eventSource.isFetching || // always cancel outdated in-progress fetches
|
|
|
fetchRange.start < eventSource.fetchRange.start ||
|
|
|
fetchRange.end > eventSource.fetchRange.end;
|
|
|
}
|
|
|
function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
|
|
|
var nextSources = {};
|
|
|
for (var sourceId in prevSources) {
|
|
|
var source = prevSources[sourceId];
|
|
|
if (sourceIdHash[sourceId]) {
|
|
|
nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
|
|
|
}
|
|
|
else {
|
|
|
nextSources[sourceId] = source;
|
|
|
}
|
|
|
}
|
|
|
return nextSources;
|
|
|
}
|
|
|
function fetchSource(eventSource, fetchRange, isRefetch, context) {
|
|
|
var options = context.options, calendarApi = context.calendarApi;
|
|
|
var sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
|
|
|
var fetchId = guid();
|
|
|
sourceDef.fetch({
|
|
|
eventSource: eventSource,
|
|
|
range: fetchRange,
|
|
|
isRefetch: isRefetch,
|
|
|
context: context,
|
|
|
}, function (res) {
|
|
|
var rawEvents = res.rawEvents;
|
|
|
if (options.eventSourceSuccess) {
|
|
|
rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.xhr) || rawEvents;
|
|
|
}
|
|
|
if (eventSource.success) {
|
|
|
rawEvents = eventSource.success.call(calendarApi, rawEvents, res.xhr) || rawEvents;
|
|
|
}
|
|
|
context.dispatch({
|
|
|
type: 'RECEIVE_EVENTS',
|
|
|
sourceId: eventSource.sourceId,
|
|
|
fetchId: fetchId,
|
|
|
fetchRange: fetchRange,
|
|
|
rawEvents: rawEvents,
|
|
|
});
|
|
|
}, function (error) {
|
|
|
console.warn(error.message, error);
|
|
|
if (options.eventSourceFailure) {
|
|
|
options.eventSourceFailure.call(calendarApi, error);
|
|
|
}
|
|
|
if (eventSource.failure) {
|
|
|
eventSource.failure(error);
|
|
|
}
|
|
|
context.dispatch({
|
|
|
type: 'RECEIVE_EVENT_ERROR',
|
|
|
sourceId: eventSource.sourceId,
|
|
|
fetchId: fetchId,
|
|
|
fetchRange: fetchRange,
|
|
|
error: error,
|
|
|
});
|
|
|
});
|
|
|
return __assign(__assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
|
|
|
}
|
|
|
function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
|
|
|
var _a;
|
|
|
var eventSource = sourceHash[sourceId];
|
|
|
if (eventSource && // not already removed
|
|
|
fetchId === eventSource.latestFetchId) {
|
|
|
return __assign(__assign({}, sourceHash), (_a = {}, _a[sourceId] = __assign(__assign({}, eventSource), { isFetching: false, fetchRange: fetchRange }), _a));
|
|
|
}
|
|
|
return sourceHash;
|
|
|
}
|
|
|
function excludeStaticSources(eventSources, context) {
|
|
|
return filterHash(eventSources, function (eventSource) { return doesSourceNeedRange(eventSource, context); });
|
|
|
}
|
|
|
function parseInitialSources(rawOptions, context) {
|
|
|
var refiners = buildEventSourceRefiners(context);
|
|
|
var rawSources = [].concat(rawOptions.eventSources || []);
|
|
|
var sources = []; // parsed
|
|
|
if (rawOptions.initialEvents) {
|
|
|
rawSources.unshift(rawOptions.initialEvents);
|
|
|
}
|
|
|
if (rawOptions.events) {
|
|
|
rawSources.unshift(rawOptions.events);
|
|
|
}
|
|
|
for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
|
|
|
var rawSource = rawSources_1[_i];
|
|
|
var source = parseEventSource(rawSource, context, refiners);
|
|
|
if (source) {
|
|
|
sources.push(source);
|
|
|
}
|
|
|
}
|
|
|
return sources;
|
|
|
}
|
|
|
function doesSourceNeedRange(eventSource, context) {
|
|
|
var defs = context.pluginHooks.eventSourceDefs;
|
|
|
return !defs[eventSource.sourceDefId].ignoreRange;
|
|
|
}
|
|
|
|
|
|
function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
|
|
|
switch (action.type) {
|
|
|
case 'RECEIVE_EVENTS': // raw
|
|
|
return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
|
|
|
case 'ADD_EVENTS': // already parsed, but not expanded
|
|
|
return addEvent(eventStore, action.eventStore, // new ones
|
|
|
dateProfile ? dateProfile.activeRange : null, context);
|
|
|
case 'RESET_EVENTS':
|
|
|
return action.eventStore;
|
|
|
case 'MERGE_EVENTS': // already parsed and expanded
|
|
|
return mergeEventStores(eventStore, action.eventStore);
|
|
|
case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
|
|
|
case 'NEXT':
|
|
|
case 'CHANGE_DATE':
|
|
|
case 'CHANGE_VIEW_TYPE':
|
|
|
if (dateProfile) {
|
|
|
return expandRecurring(eventStore, dateProfile.activeRange, context);
|
|
|
}
|
|
|
return eventStore;
|
|
|
case 'REMOVE_EVENTS':
|
|
|
return excludeSubEventStore(eventStore, action.eventStore);
|
|
|
case 'REMOVE_EVENT_SOURCE':
|
|
|
return excludeEventsBySourceId(eventStore, action.sourceId);
|
|
|
case 'REMOVE_ALL_EVENT_SOURCES':
|
|
|
return filterEventStoreDefs(eventStore, function (eventDef) { return (!eventDef.sourceId // only keep events with no source id
|
|
|
); });
|
|
|
case 'REMOVE_ALL_EVENTS':
|
|
|
return createEmptyEventStore();
|
|
|
default:
|
|
|
return eventStore;
|
|
|
}
|
|
|
}
|
|
|
function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
|
|
|
if (eventSource && // not already removed
|
|
|
fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
|
|
|
) {
|
|
|
var subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
|
|
|
if (fetchRange) {
|
|
|
subset = expandRecurring(subset, fetchRange, context);
|
|
|
}
|
|
|
return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
|
|
|
}
|
|
|
return eventStore;
|
|
|
}
|
|
|
function transformRawEvents(rawEvents, eventSource, context) {
|
|
|
var calEachTransform = context.options.eventDataTransform;
|
|
|
var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
|
|
|
if (sourceEachTransform) {
|
|
|
rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
|
|
|
}
|
|
|
if (calEachTransform) {
|
|
|
rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
|
|
|
}
|
|
|
return rawEvents;
|
|
|
}
|
|
|
function transformEachRawEvent(rawEvents, func) {
|
|
|
var refinedEvents;
|
|
|
if (!func) {
|
|
|
refinedEvents = rawEvents;
|
|
|
}
|
|
|
else {
|
|
|
refinedEvents = [];
|
|
|
for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
|
|
|
var rawEvent = rawEvents_1[_i];
|
|
|
var refinedEvent = func(rawEvent);
|
|
|
if (refinedEvent) {
|
|
|
refinedEvents.push(refinedEvent);
|
|
|
}
|
|
|
else if (refinedEvent == null) {
|
|
|
refinedEvents.push(rawEvent);
|
|
|
} // if a different falsy value, do nothing
|
|
|
}
|
|
|
}
|
|
|
return refinedEvents;
|
|
|
}
|
|
|
function addEvent(eventStore, subset, expandRange, context) {
|
|
|
if (expandRange) {
|
|
|
subset = expandRecurring(subset, expandRange, context);
|
|
|
}
|
|
|
return mergeEventStores(eventStore, subset);
|
|
|
}
|
|
|
function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
|
|
|
var defs = eventStore.defs;
|
|
|
var instances = mapHash(eventStore.instances, function (instance) {
|
|
|
var def = defs[instance.defId];
|
|
|
if (def.allDay || def.recurringDef) {
|
|
|
return instance; // isn't dependent on timezone
|
|
|
}
|
|
|
return __assign(__assign({}, instance), { range: {
|
|
|
start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
|
|
|
end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
|
|
|
}, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
|
|
|
});
|
|
|
return { defs: defs, instances: instances };
|
|
|
}
|
|
|
function excludeEventsBySourceId(eventStore, sourceId) {
|
|
|
return filterEventStoreDefs(eventStore, function (eventDef) { return eventDef.sourceId !== sourceId; });
|
|
|
}
|
|
|
|
|
|
function reduceDateSelection(currentSelection, action) {
|
|
|
switch (action.type) {
|
|
|
case 'UNSELECT_DATES':
|
|
|
return null;
|
|
|
case 'SELECT_DATES':
|
|
|
return action.selection;
|
|
|
default:
|
|
|
return currentSelection;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reduceSelectedEvent(currentInstanceId, action) {
|
|
|
switch (action.type) {
|
|
|
case 'UNSELECT_EVENT':
|
|
|
return '';
|
|
|
case 'SELECT_EVENT':
|
|
|
return action.eventInstanceId;
|
|
|
default:
|
|
|
return currentInstanceId;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reduceEventDrag(currentDrag, action) {
|
|
|
var newDrag;
|
|
|
switch (action.type) {
|
|
|
case 'UNSET_EVENT_DRAG':
|
|
|
return null;
|
|
|
case 'SET_EVENT_DRAG':
|
|
|
newDrag = action.state;
|
|
|
return {
|
|
|
affectedEvents: newDrag.affectedEvents,
|
|
|
mutatedEvents: newDrag.mutatedEvents,
|
|
|
isEvent: newDrag.isEvent,
|
|
|
};
|
|
|
default:
|
|
|
return currentDrag;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reduceEventResize(currentResize, action) {
|
|
|
var newResize;
|
|
|
switch (action.type) {
|
|
|
case 'UNSET_EVENT_RESIZE':
|
|
|
return null;
|
|
|
case 'SET_EVENT_RESIZE':
|
|
|
newResize = action.state;
|
|
|
return {
|
|
|
affectedEvents: newResize.affectedEvents,
|
|
|
mutatedEvents: newResize.mutatedEvents,
|
|
|
isEvent: newResize.isEvent,
|
|
|
};
|
|
|
default:
|
|
|
return currentResize;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
|
|
|
var viewsWithButtons = [];
|
|
|
var headerToolbar = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
|
|
|
var footerToolbar = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) : null;
|
|
|
return { headerToolbar: headerToolbar, footerToolbar: footerToolbar, viewsWithButtons: viewsWithButtons };
|
|
|
}
|
|
|
function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
|
|
|
return mapHash(sectionStrHash, function (sectionStr) { return parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons); });
|
|
|
}
|
|
|
/*
|
|
|
BAD: querying icons and text here. should be done at render time
|
|
|
*/
|
|
|
function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi, viewsWithButtons) {
|
|
|
var isRtl = calendarOptions.direction === 'rtl';
|
|
|
var calendarCustomButtons = calendarOptions.customButtons || {};
|
|
|
var calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
|
|
|
var calendarButtonText = calendarOptions.buttonText || {};
|
|
|
var sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
|
|
|
return sectionSubstrs.map(function (buttonGroupStr) { return (buttonGroupStr.split(',').map(function (buttonName) {
|
|
|
if (buttonName === 'title') {
|
|
|
return { buttonName: buttonName };
|
|
|
}
|
|
|
var customButtonProps;
|
|
|
var viewSpec;
|
|
|
var buttonClick;
|
|
|
var buttonIcon; // only one of these will be set
|
|
|
var buttonText; // "
|
|
|
if ((customButtonProps = calendarCustomButtons[buttonName])) {
|
|
|
buttonClick = function (ev) {
|
|
|
if (customButtonProps.click) {
|
|
|
customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?
|
|
|
}
|
|
|
};
|
|
|
(buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
|
|
|
(buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
|
|
|
(buttonText = customButtonProps.text);
|
|
|
}
|
|
|
else if ((viewSpec = viewSpecs[buttonName])) {
|
|
|
viewsWithButtons.push(buttonName);
|
|
|
buttonClick = function () {
|
|
|
calendarApi.changeView(buttonName);
|
|
|
};
|
|
|
(buttonText = viewSpec.buttonTextOverride) ||
|
|
|
(buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
|
|
|
(buttonText = viewSpec.buttonTextDefault);
|
|
|
}
|
|
|
else if (calendarApi[buttonName]) { // a calendarApi method
|
|
|
buttonClick = function () {
|
|
|
calendarApi[buttonName]();
|
|
|
};
|
|
|
(buttonText = calendarButtonTextOverrides[buttonName]) ||
|
|
|
(buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
|
|
|
(buttonText = calendarButtonText[buttonName]);
|
|
|
// ^ everything else is considered default
|
|
|
}
|
|
|
return { buttonName: buttonName, buttonClick: buttonClick, buttonIcon: buttonIcon, buttonText: buttonText };
|
|
|
})); });
|
|
|
}
|
|
|
|
|
|
var eventSourceDef$2 = {
|
|
|
ignoreRange: true,
|
|
|
parseMeta: function (refined) {
|
|
|
if (Array.isArray(refined.events)) {
|
|
|
return refined.events;
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
fetch: function (arg, success) {
|
|
|
success({
|
|
|
rawEvents: arg.eventSource.meta,
|
|
|
});
|
|
|
},
|
|
|
};
|
|
|
var arrayEventSourcePlugin = createPlugin({
|
|
|
eventSourceDefs: [eventSourceDef$2],
|
|
|
});
|
|
|
|
|
|
var eventSourceDef$1 = {
|
|
|
parseMeta: function (refined) {
|
|
|
if (typeof refined.events === 'function') {
|
|
|
return refined.events;
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
fetch: function (arg, success, failure) {
|
|
|
var dateEnv = arg.context.dateEnv;
|
|
|
var func = arg.eventSource.meta;
|
|
|
unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), function (rawEvents) {
|
|
|
success({ rawEvents: rawEvents }); // needs an object response
|
|
|
}, failure);
|
|
|
},
|
|
|
};
|
|
|
var funcEventSourcePlugin = createPlugin({
|
|
|
eventSourceDefs: [eventSourceDef$1],
|
|
|
});
|
|
|
|
|
|
function requestJson(method, url, params, successCallback, failureCallback) {
|
|
|
method = method.toUpperCase();
|
|
|
var body = null;
|
|
|
if (method === 'GET') {
|
|
|
url = injectQueryStringParams(url, params);
|
|
|
}
|
|
|
else {
|
|
|
body = encodeParams(params);
|
|
|
}
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
xhr.open(method, url, true);
|
|
|
if (method !== 'GET') {
|
|
|
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
|
}
|
|
|
xhr.onload = function () {
|
|
|
if (xhr.status >= 200 && xhr.status < 400) {
|
|
|
var parsed = false;
|
|
|
var res = void 0;
|
|
|
try {
|
|
|
res = JSON.parse(xhr.responseText);
|
|
|
parsed = true;
|
|
|
}
|
|
|
catch (err) {
|
|
|
// will handle parsed=false
|
|
|
}
|
|
|
if (parsed) {
|
|
|
successCallback(res, xhr);
|
|
|
}
|
|
|
else {
|
|
|
failureCallback('Failure parsing JSON', xhr);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
failureCallback('Request failed', xhr);
|
|
|
}
|
|
|
};
|
|
|
xhr.onerror = function () {
|
|
|
failureCallback('Request failed', xhr);
|
|
|
};
|
|
|
xhr.send(body);
|
|
|
}
|
|
|
function injectQueryStringParams(url, params) {
|
|
|
return url +
|
|
|
(url.indexOf('?') === -1 ? '?' : '&') +
|
|
|
encodeParams(params);
|
|
|
}
|
|
|
function encodeParams(params) {
|
|
|
var parts = [];
|
|
|
for (var key in params) {
|
|
|
parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(params[key]));
|
|
|
}
|
|
|
return parts.join('&');
|
|
|
}
|
|
|
|
|
|
var JSON_FEED_EVENT_SOURCE_REFINERS = {
|
|
|
method: String,
|
|
|
extraParams: identity,
|
|
|
startParam: String,
|
|
|
endParam: String,
|
|
|
timeZoneParam: String,
|
|
|
};
|
|
|
|
|
|
var eventSourceDef = {
|
|
|
parseMeta: function (refined) {
|
|
|
if (refined.url && (refined.format === 'json' || !refined.format)) {
|
|
|
return {
|
|
|
url: refined.url,
|
|
|
format: 'json',
|
|
|
method: (refined.method || 'GET').toUpperCase(),
|
|
|
extraParams: refined.extraParams,
|
|
|
startParam: refined.startParam,
|
|
|
endParam: refined.endParam,
|
|
|
timeZoneParam: refined.timeZoneParam,
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
fetch: function (arg, success, failure) {
|
|
|
var meta = arg.eventSource.meta;
|
|
|
var requestParams = buildRequestParams(meta, arg.range, arg.context);
|
|
|
requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {
|
|
|
success({ rawEvents: rawEvents, xhr: xhr });
|
|
|
}, function (errorMessage, xhr) {
|
|
|
failure({ message: errorMessage, xhr: xhr });
|
|
|
});
|
|
|
},
|
|
|
};
|
|
|
var jsonFeedEventSourcePlugin = createPlugin({
|
|
|
eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
|
|
|
eventSourceDefs: [eventSourceDef],
|
|
|
});
|
|
|
function buildRequestParams(meta, range, context) {
|
|
|
var dateEnv = context.dateEnv, options = context.options;
|
|
|
var startParam;
|
|
|
var endParam;
|
|
|
var timeZoneParam;
|
|
|
var customRequestParams;
|
|
|
var params = {};
|
|
|
startParam = meta.startParam;
|
|
|
if (startParam == null) {
|
|
|
startParam = options.startParam;
|
|
|
}
|
|
|
endParam = meta.endParam;
|
|
|
if (endParam == null) {
|
|
|
endParam = options.endParam;
|
|
|
}
|
|
|
timeZoneParam = meta.timeZoneParam;
|
|
|
if (timeZoneParam == null) {
|
|
|
timeZoneParam = options.timeZoneParam;
|
|
|
}
|
|
|
// retrieve any outbound GET/POST data from the options
|
|
|
if (typeof meta.extraParams === 'function') {
|
|
|
// supplied as a function that returns a key/value object
|
|
|
customRequestParams = meta.extraParams();
|
|
|
}
|
|
|
else {
|
|
|
// probably supplied as a straight key/value object
|
|
|
customRequestParams = meta.extraParams || {};
|
|
|
}
|
|
|
__assign(params, customRequestParams);
|
|
|
params[startParam] = dateEnv.formatIso(range.start);
|
|
|
params[endParam] = dateEnv.formatIso(range.end);
|
|
|
if (dateEnv.timeZone !== 'local') {
|
|
|
params[timeZoneParam] = dateEnv.timeZone;
|
|
|
}
|
|
|
return params;
|
|
|
}
|
|
|
|
|
|
var SIMPLE_RECURRING_REFINERS = {
|
|
|
daysOfWeek: identity,
|
|
|
startTime: createDuration,
|
|
|
endTime: createDuration,
|
|
|
duration: createDuration,
|
|
|
startRecur: identity,
|
|
|
endRecur: identity,
|
|
|
};
|
|
|
|
|
|
var recurring = {
|
|
|
parse: function (refined, dateEnv) {
|
|
|
if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
|
|
|
var recurringData = {
|
|
|
daysOfWeek: refined.daysOfWeek || null,
|
|
|
startTime: refined.startTime || null,
|
|
|
endTime: refined.endTime || null,
|
|
|
startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
|
|
|
endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,
|
|
|
};
|
|
|
var duration = void 0;
|
|
|
if (refined.duration) {
|
|
|
duration = refined.duration;
|
|
|
}
|
|
|
if (!duration && refined.startTime && refined.endTime) {
|
|
|
duration = subtractDurations(refined.endTime, refined.startTime);
|
|
|
}
|
|
|
return {
|
|
|
allDayGuess: Boolean(!refined.startTime && !refined.endTime),
|
|
|
duration: duration,
|
|
|
typeData: recurringData, // doesn't need endTime anymore but oh well
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
},
|
|
|
expand: function (typeData, framingRange, dateEnv) {
|
|
|
var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
|
|
|
if (clippedFramingRange) {
|
|
|
return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
|
|
|
}
|
|
|
return [];
|
|
|
},
|
|
|
};
|
|
|
var simpleRecurringEventsPlugin = createPlugin({
|
|
|
recurringTypes: [recurring],
|
|
|
eventRefiners: SIMPLE_RECURRING_REFINERS,
|
|
|
});
|
|
|
function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
|
|
|
var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
|
|
|
var dayMarker = startOfDay(framingRange.start);
|
|
|
var endMarker = framingRange.end;
|
|
|
var instanceStarts = [];
|
|
|
while (dayMarker < endMarker) {
|
|
|
var instanceStart
|
|
|
// if everyday, or this particular day-of-week
|
|
|
= void 0;
|
|
|
// if everyday, or this particular day-of-week
|
|
|
if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
|
|
|
if (startTime) {
|
|
|
instanceStart = dateEnv.add(dayMarker, startTime);
|
|
|
}
|
|
|
else {
|
|
|
instanceStart = dayMarker;
|
|
|
}
|
|
|
instanceStarts.push(instanceStart);
|
|
|
}
|
|
|
dayMarker = addDays(dayMarker, 1);
|
|
|
}
|
|
|
return instanceStarts;
|
|
|
}
|
|
|
|
|
|
var changeHandlerPlugin = createPlugin({
|
|
|
optionChangeHandlers: {
|
|
|
events: function (events, context) {
|
|
|
handleEventSources([events], context);
|
|
|
},
|
|
|
eventSources: handleEventSources,
|
|
|
},
|
|
|
});
|
|
|
/*
|
|
|
BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
|
|
|
*/
|
|
|
function handleEventSources(inputs, context) {
|
|
|
var unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
|
|
|
var newInputs = [];
|
|
|
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
|
|
|
var input = inputs_1[_i];
|
|
|
var inputFound = false;
|
|
|
for (var i = 0; i < unfoundSources.length; i += 1) {
|
|
|
if (unfoundSources[i]._raw === input) {
|
|
|
unfoundSources.splice(i, 1); // delete
|
|
|
inputFound = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (!inputFound) {
|
|
|
newInputs.push(input);
|
|
|
}
|
|
|
}
|
|
|
for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {
|
|
|
var unfoundSource = unfoundSources_1[_a];
|
|
|
context.dispatch({
|
|
|
type: 'REMOVE_EVENT_SOURCE',
|
|
|
sourceId: unfoundSource.sourceId,
|
|
|
});
|
|
|
}
|
|
|
for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {
|
|
|
var newInput = newInputs_1[_b];
|
|
|
context.calendarApi.addEventSource(newInput);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleDateProfile(dateProfile, context) {
|
|
|
context.emitter.trigger('datesSet', __assign(__assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
|
|
|
}
|
|
|
|
|
|
function handleEventStore(eventStore, context) {
|
|
|
var emitter = context.emitter;
|
|
|
if (emitter.hasHandlers('eventsSet')) {
|
|
|
emitter.trigger('eventsSet', buildEventApis(eventStore, context));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
this array is exposed on the root namespace so that UMD plugins can add to it.
|
|
|
see the rollup-bundles script.
|
|
|
*/
|
|
|
var globalPlugins = [
|
|
|
arrayEventSourcePlugin,
|
|
|
funcEventSourcePlugin,
|
|
|
jsonFeedEventSourcePlugin,
|
|
|
simpleRecurringEventsPlugin,
|
|
|
changeHandlerPlugin,
|
|
|
createPlugin({
|
|
|
isLoadingFuncs: [
|
|
|
function (state) { return computeEventSourcesLoading(state.eventSources); },
|
|
|
],
|
|
|
contentTypeHandlers: {
|
|
|
html: function () { return ({ render: injectHtml }); },
|
|
|
domNodes: function () { return ({ render: injectDomNodes }); },
|
|
|
},
|
|
|
propSetHandlers: {
|
|
|
dateProfile: handleDateProfile,
|
|
|
eventStore: handleEventStore,
|
|
|
},
|
|
|
}),
|
|
|
];
|
|
|
function injectHtml(el, html) {
|
|
|
el.innerHTML = html;
|
|
|
}
|
|
|
function injectDomNodes(el, domNodes) {
|
|
|
var oldNodes = Array.prototype.slice.call(el.childNodes); // TODO: use array util
|
|
|
var newNodes = Array.prototype.slice.call(domNodes); // TODO: use array util
|
|
|
if (!isArraysEqual(oldNodes, newNodes)) {
|
|
|
for (var _i = 0, newNodes_1 = newNodes; _i < newNodes_1.length; _i++) {
|
|
|
var newNode = newNodes_1[_i];
|
|
|
el.appendChild(newNode);
|
|
|
}
|
|
|
oldNodes.forEach(removeElement);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var DelayedRunner = /** @class */ (function () {
|
|
|
function DelayedRunner(drainedOption) {
|
|
|
this.drainedOption = drainedOption;
|
|
|
this.isRunning = false;
|
|
|
this.isDirty = false;
|
|
|
this.pauseDepths = {};
|
|
|
this.timeoutId = 0;
|
|
|
}
|
|
|
DelayedRunner.prototype.request = function (delay) {
|
|
|
this.isDirty = true;
|
|
|
if (!this.isPaused()) {
|
|
|
this.clearTimeout();
|
|
|
if (delay == null) {
|
|
|
this.tryDrain();
|
|
|
}
|
|
|
else {
|
|
|
this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce
|
|
|
this.tryDrain.bind(this), delay);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
DelayedRunner.prototype.pause = function (scope) {
|
|
|
if (scope === void 0) { scope = ''; }
|
|
|
var pauseDepths = this.pauseDepths;
|
|
|
pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;
|
|
|
this.clearTimeout();
|
|
|
};
|
|
|
DelayedRunner.prototype.resume = function (scope, force) {
|
|
|
if (scope === void 0) { scope = ''; }
|
|
|
var pauseDepths = this.pauseDepths;
|
|
|
if (scope in pauseDepths) {
|
|
|
if (force) {
|
|
|
delete pauseDepths[scope];
|
|
|
}
|
|
|
else {
|
|
|
pauseDepths[scope] -= 1;
|
|
|
var depth = pauseDepths[scope];
|
|
|
if (depth <= 0) {
|
|
|
delete pauseDepths[scope];
|
|
|
}
|
|
|
}
|
|
|
this.tryDrain();
|
|
|
}
|
|
|
};
|
|
|
DelayedRunner.prototype.isPaused = function () {
|
|
|
return Object.keys(this.pauseDepths).length;
|
|
|
};
|
|
|
DelayedRunner.prototype.tryDrain = function () {
|
|
|
if (!this.isRunning && !this.isPaused()) {
|
|
|
this.isRunning = true;
|
|
|
while (this.isDirty) {
|
|
|
this.isDirty = false;
|
|
|
this.drained(); // might set isDirty to true again
|
|
|
}
|
|
|
this.isRunning = false;
|
|
|
}
|
|
|
};
|
|
|
DelayedRunner.prototype.clear = function () {
|
|
|
this.clearTimeout();
|
|
|
this.isDirty = false;
|
|
|
this.pauseDepths = {};
|
|
|
};
|
|
|
DelayedRunner.prototype.clearTimeout = function () {
|
|
|
if (this.timeoutId) {
|
|
|
clearTimeout(this.timeoutId);
|
|
|
this.timeoutId = 0;
|
|
|
}
|
|
|
};
|
|
|
DelayedRunner.prototype.drained = function () {
|
|
|
if (this.drainedOption) {
|
|
|
this.drainedOption();
|
|
|
}
|
|
|
};
|
|
|
return DelayedRunner;
|
|
|
}());
|
|
|
|
|
|
var TaskRunner = /** @class */ (function () {
|
|
|
function TaskRunner(runTaskOption, drainedOption) {
|
|
|
this.runTaskOption = runTaskOption;
|
|
|
this.drainedOption = drainedOption;
|
|
|
this.queue = [];
|
|
|
this.delayedRunner = new DelayedRunner(this.drain.bind(this));
|
|
|
}
|
|
|
TaskRunner.prototype.request = function (task, delay) {
|
|
|
this.queue.push(task);
|
|
|
this.delayedRunner.request(delay);
|
|
|
};
|
|
|
TaskRunner.prototype.pause = function (scope) {
|
|
|
this.delayedRunner.pause(scope);
|
|
|
};
|
|
|
TaskRunner.prototype.resume = function (scope, force) {
|
|
|
this.delayedRunner.resume(scope, force);
|
|
|
};
|
|
|
TaskRunner.prototype.drain = function () {
|
|
|
var queue = this.queue;
|
|
|
while (queue.length) {
|
|
|
var completedTasks = [];
|
|
|
var task = void 0;
|
|
|
while ((task = queue.shift())) {
|
|
|
this.runTask(task);
|
|
|
completedTasks.push(task);
|
|
|
}
|
|
|
this.drained(completedTasks);
|
|
|
} // keep going, in case new tasks were added in the drained handler
|
|
|
};
|
|
|
TaskRunner.prototype.runTask = function (task) {
|
|
|
if (this.runTaskOption) {
|
|
|
this.runTaskOption(task);
|
|
|
}
|
|
|
};
|
|
|
TaskRunner.prototype.drained = function (completedTasks) {
|
|
|
if (this.drainedOption) {
|
|
|
this.drainedOption(completedTasks);
|
|
|
}
|
|
|
};
|
|
|
return TaskRunner;
|
|
|
}());
|
|
|
|
|
|
// Computes what the title at the top of the calendarApi should be for this view
|
|
|
function buildTitle(dateProfile, viewOptions, dateEnv) {
|
|
|
var range;
|
|
|
// for views that span a large unit of time, show the proper interval, ignoring stray days before and after
|
|
|
if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
|
|
|
range = dateProfile.currentRange;
|
|
|
}
|
|
|
else { // for day units or smaller, use the actual day range
|
|
|
range = dateProfile.activeRange;
|
|
|
}
|
|
|
return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
|
|
|
isEndExclusive: dateProfile.isRangeAllDay,
|
|
|
defaultSeparator: viewOptions.titleRangeSeparator,
|
|
|
});
|
|
|
}
|
|
|
// Generates the format string that should be used to generate the title for the current date range.
|
|
|
// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
|
|
|
function buildTitleFormat(dateProfile) {
|
|
|
var currentRangeUnit = dateProfile.currentRangeUnit;
|
|
|
if (currentRangeUnit === 'year') {
|
|
|
return { year: 'numeric' };
|
|
|
}
|
|
|
if (currentRangeUnit === 'month') {
|
|
|
return { year: 'numeric', month: 'long' }; // like "September 2014"
|
|
|
}
|
|
|
var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
|
|
|
if (days !== null && days > 1) {
|
|
|
// multi-day range. shorter, like "Sep 9 - 10 2014"
|
|
|
return { year: 'numeric', month: 'short', day: 'numeric' };
|
|
|
}
|
|
|
// one day. longer, like "September 9 2014"
|
|
|
return { year: 'numeric', month: 'long', day: 'numeric' };
|
|
|
}
|
|
|
|
|
|
// in future refactor, do the redux-style function(state=initial) for initial-state
|
|
|
// also, whatever is happening in constructor, have it happen in action queue too
|
|
|
var CalendarDataManager = /** @class */ (function () {
|
|
|
function CalendarDataManager(props) {
|
|
|
var _this = this;
|
|
|
this.computeOptionsData = memoize(this._computeOptionsData);
|
|
|
this.computeCurrentViewData = memoize(this._computeCurrentViewData);
|
|
|
this.organizeRawLocales = memoize(organizeRawLocales);
|
|
|
this.buildLocale = memoize(buildLocale);
|
|
|
this.buildPluginHooks = buildBuildPluginHooks();
|
|
|
this.buildDateEnv = memoize(buildDateEnv);
|
|
|
this.buildTheme = memoize(buildTheme);
|
|
|
this.parseToolbars = memoize(parseToolbars);
|
|
|
this.buildViewSpecs = memoize(buildViewSpecs);
|
|
|
this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
|
|
|
this.buildViewApi = memoize(buildViewApi);
|
|
|
this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
|
|
|
this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
|
|
|
this.buildEventUiBases = memoize(buildEventUiBases);
|
|
|
this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
|
|
|
this.buildTitle = memoize(buildTitle);
|
|
|
this.emitter = new Emitter();
|
|
|
this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
|
|
|
this.currentCalendarOptionsInput = {};
|
|
|
this.currentCalendarOptionsRefined = {};
|
|
|
this.currentViewOptionsInput = {};
|
|
|
this.currentViewOptionsRefined = {};
|
|
|
this.currentCalendarOptionsRefiners = {};
|
|
|
this.getCurrentData = function () { return _this.data; };
|
|
|
this.dispatch = function (action) {
|
|
|
_this.actionRunner.request(action); // protects against recursive calls to _handleAction
|
|
|
};
|
|
|
this.props = props;
|
|
|
this.actionRunner.pause();
|
|
|
var dynamicOptionOverrides = {};
|
|
|
var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
|
|
|
var currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;
|
|
|
var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
|
|
|
// wire things up
|
|
|
// TODO: not DRY
|
|
|
props.calendarApi.currentDataManager = this;
|
|
|
this.emitter.setThisContext(props.calendarApi);
|
|
|
this.emitter.setOptions(currentViewData.options);
|
|
|
var currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
|
|
|
var dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
|
|
|
if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
|
|
|
currentDate = dateProfile.currentRange.start;
|
|
|
}
|
|
|
var calendarContext = {
|
|
|
dateEnv: optionsData.dateEnv,
|
|
|
options: optionsData.calendarOptions,
|
|
|
pluginHooks: optionsData.pluginHooks,
|
|
|
calendarApi: props.calendarApi,
|
|
|
dispatch: this.dispatch,
|
|
|
emitter: this.emitter,
|
|
|
getCurrentData: this.getCurrentData,
|
|
|
};
|
|
|
// needs to be after setThisContext
|
|
|
for (var _i = 0, _a = optionsData.pluginHooks.contextInit; _i < _a.length; _i++) {
|
|
|
var callback = _a[_i];
|
|
|
callback(calendarContext);
|
|
|
}
|
|
|
// NOT DRY
|
|
|
var eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
|
|
|
var initialState = {
|
|
|
dynamicOptionOverrides: dynamicOptionOverrides,
|
|
|
currentViewType: currentViewType,
|
|
|
currentDate: currentDate,
|
|
|
dateProfile: dateProfile,
|
|
|
businessHours: this.parseContextBusinessHours(calendarContext),
|
|
|
eventSources: eventSources,
|
|
|
eventUiBases: {},
|
|
|
eventStore: createEmptyEventStore(),
|
|
|
renderableEventStore: createEmptyEventStore(),
|
|
|
dateSelection: null,
|
|
|
eventSelection: '',
|
|
|
eventDrag: null,
|
|
|
eventResize: null,
|
|
|
selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,
|
|
|
};
|
|
|
var contextAndState = __assign(__assign({}, calendarContext), initialState);
|
|
|
for (var _b = 0, _c = optionsData.pluginHooks.reducers; _b < _c.length; _b++) {
|
|
|
var reducer = _c[_b];
|
|
|
__assign(initialState, reducer(null, null, contextAndState));
|
|
|
}
|
|
|
if (computeIsLoading(initialState, calendarContext)) {
|
|
|
this.emitter.trigger('loading', true); // NOT DRY
|
|
|
}
|
|
|
this.state = initialState;
|
|
|
this.updateData();
|
|
|
this.actionRunner.resume();
|
|
|
}
|
|
|
CalendarDataManager.prototype.resetOptions = function (optionOverrides, append) {
|
|
|
var props = this.props;
|
|
|
props.optionOverrides = append
|
|
|
? __assign(__assign({}, props.optionOverrides), optionOverrides) : optionOverrides;
|
|
|
this.actionRunner.request({
|
|
|
type: 'NOTHING',
|
|
|
});
|
|
|
};
|
|
|
CalendarDataManager.prototype._handleAction = function (action) {
|
|
|
var _a = this, props = _a.props, state = _a.state, emitter = _a.emitter;
|
|
|
var dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);
|
|
|
var optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
|
|
|
var currentViewType = reduceViewType(state.currentViewType, action);
|
|
|
var currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
|
|
|
// wire things up
|
|
|
// TODO: not DRY
|
|
|
props.calendarApi.currentDataManager = this;
|
|
|
emitter.setThisContext(props.calendarApi);
|
|
|
emitter.setOptions(currentViewData.options);
|
|
|
var calendarContext = {
|
|
|
dateEnv: optionsData.dateEnv,
|
|
|
options: optionsData.calendarOptions,
|
|
|
pluginHooks: optionsData.pluginHooks,
|
|
|
calendarApi: props.calendarApi,
|
|
|
dispatch: this.dispatch,
|
|
|
emitter: emitter,
|
|
|
getCurrentData: this.getCurrentData,
|
|
|
};
|
|
|
var currentDate = state.currentDate, dateProfile = state.dateProfile;
|
|
|
if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack
|
|
|
dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
|
|
|
}
|
|
|
currentDate = reduceCurrentDate(currentDate, action);
|
|
|
dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
|
|
|
if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
|
|
|
action.type === 'NEXT' || // "
|
|
|
!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
|
|
|
currentDate = dateProfile.currentRange.start;
|
|
|
}
|
|
|
var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
|
|
|
var eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
|
|
|
var isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
|
|
|
var renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
|
|
|
(state.renderableEventStore || eventStore) : // try from previous state
|
|
|
eventStore;
|
|
|
var _b = this.buildViewUiProps(calendarContext), eventUiSingleBase = _b.eventUiSingleBase, selectionConfig = _b.selectionConfig; // will memoize obj
|
|
|
var eventUiBySource = this.buildEventUiBySource(eventSources);
|
|
|
var eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
|
|
|
var newState = {
|
|
|
dynamicOptionOverrides: dynamicOptionOverrides,
|
|
|
currentViewType: currentViewType,
|
|
|
currentDate: currentDate,
|
|
|
dateProfile: dateProfile,
|
|
|
eventSources: eventSources,
|
|
|
eventStore: eventStore,
|
|
|
renderableEventStore: renderableEventStore,
|
|
|
selectionConfig: selectionConfig,
|
|
|
eventUiBases: eventUiBases,
|
|
|
businessHours: this.parseContextBusinessHours(calendarContext),
|
|
|
dateSelection: reduceDateSelection(state.dateSelection, action),
|
|
|
eventSelection: reduceSelectedEvent(state.eventSelection, action),
|
|
|
eventDrag: reduceEventDrag(state.eventDrag, action),
|
|
|
eventResize: reduceEventResize(state.eventResize, action),
|
|
|
};
|
|
|
var contextAndState = __assign(__assign({}, calendarContext), newState);
|
|
|
for (var _i = 0, _c = optionsData.pluginHooks.reducers; _i < _c.length; _i++) {
|
|
|
var reducer = _c[_i];
|
|
|
__assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
|
|
|
}
|
|
|
var wasLoading = computeIsLoading(state, calendarContext);
|
|
|
var isLoading = computeIsLoading(newState, calendarContext);
|
|
|
// TODO: use propSetHandlers in plugin system
|
|
|
if (!wasLoading && isLoading) {
|
|
|
emitter.trigger('loading', true);
|
|
|
}
|
|
|
else if (wasLoading && !isLoading) {
|
|
|
emitter.trigger('loading', false);
|
|
|
}
|
|
|
this.state = newState;
|
|
|
if (props.onAction) {
|
|
|
props.onAction(action);
|
|
|
}
|
|
|
};
|
|
|
CalendarDataManager.prototype.updateData = function () {
|
|
|
var _a = this, props = _a.props, state = _a.state;
|
|
|
var oldData = this.data;
|
|
|
var optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);
|
|
|
var currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);
|
|
|
var data = this.data = __assign(__assign(__assign({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);
|
|
|
var changeHandlers = optionsData.pluginHooks.optionChangeHandlers;
|
|
|
var oldCalendarOptions = oldData && oldData.calendarOptions;
|
|
|
var newCalendarOptions = optionsData.calendarOptions;
|
|
|
if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
|
|
|
if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
|
|
|
// hack
|
|
|
state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
|
|
|
state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
|
|
|
}
|
|
|
for (var optionName in changeHandlers) {
|
|
|
if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
|
|
|
changeHandlers[optionName](newCalendarOptions[optionName], data);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (props.onData) {
|
|
|
props.onData(data);
|
|
|
}
|
|
|
};
|
|
|
CalendarDataManager.prototype._computeOptionsData = function (optionOverrides, dynamicOptionOverrides, calendarApi) {
|
|
|
// TODO: blacklist options that are handled by optionChangeHandlers
|
|
|
var _a = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides), refinedOptions = _a.refinedOptions, pluginHooks = _a.pluginHooks, localeDefaults = _a.localeDefaults, availableLocaleData = _a.availableLocaleData, extra = _a.extra;
|
|
|
warnUnknownOptions(extra);
|
|
|
var dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
|
|
|
var viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults);
|
|
|
var theme = this.buildTheme(refinedOptions, pluginHooks);
|
|
|
var toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi);
|
|
|
return {
|
|
|
calendarOptions: refinedOptions,
|
|
|
pluginHooks: pluginHooks,
|
|
|
dateEnv: dateEnv,
|
|
|
viewSpecs: viewSpecs,
|
|
|
theme: theme,
|
|
|
toolbarConfig: toolbarConfig,
|
|
|
localeDefaults: localeDefaults,
|
|
|
availableRawLocales: availableLocaleData.map,
|
|
|
};
|
|
|
};
|
|
|
// always called from behind a memoizer
|
|
|
CalendarDataManager.prototype.processRawCalendarOptions = function (optionOverrides, dynamicOptionOverrides) {
|
|
|
var _a = mergeRawOptions([
|
|
|
BASE_OPTION_DEFAULTS,
|
|
|
optionOverrides,
|
|
|
dynamicOptionOverrides,
|
|
|
]), locales = _a.locales, locale = _a.locale;
|
|
|
var availableLocaleData = this.organizeRawLocales(locales);
|
|
|
var availableRawLocales = availableLocaleData.map;
|
|
|
var localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
|
|
|
var pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
|
|
|
var refiners = this.currentCalendarOptionsRefiners = __assign(__assign(__assign(__assign(__assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
|
|
|
var extra = {};
|
|
|
var raw = mergeRawOptions([
|
|
|
BASE_OPTION_DEFAULTS,
|
|
|
localeDefaults,
|
|
|
optionOverrides,
|
|
|
dynamicOptionOverrides,
|
|
|
]);
|
|
|
var refined = {};
|
|
|
var currentRaw = this.currentCalendarOptionsInput;
|
|
|
var currentRefined = this.currentCalendarOptionsRefined;
|
|
|
var anyChanges = false;
|
|
|
for (var optionName in raw) {
|
|
|
if (optionName !== 'plugins') { // because plugins is special-cased
|
|
|
if (raw[optionName] === currentRaw[optionName] ||
|
|
|
(COMPLEX_OPTION_COMPARATORS[optionName] &&
|
|
|
(optionName in currentRaw) &&
|
|
|
COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
|
|
|
refined[optionName] = currentRefined[optionName];
|
|
|
}
|
|
|
else if (refiners[optionName]) {
|
|
|
refined[optionName] = refiners[optionName](raw[optionName]);
|
|
|
anyChanges = true;
|
|
|
}
|
|
|
else {
|
|
|
extra[optionName] = currentRaw[optionName];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (anyChanges) {
|
|
|
this.currentCalendarOptionsInput = raw;
|
|
|
this.currentCalendarOptionsRefined = refined;
|
|
|
}
|
|
|
return {
|
|
|
rawOptions: this.currentCalendarOptionsInput,
|
|
|
refinedOptions: this.currentCalendarOptionsRefined,
|
|
|
pluginHooks: pluginHooks,
|
|
|
availableLocaleData: availableLocaleData,
|
|
|
localeDefaults: localeDefaults,
|
|
|
extra: extra,
|
|
|
};
|
|
|
};
|
|
|
CalendarDataManager.prototype._computeCurrentViewData = function (viewType, optionsData, optionOverrides, dynamicOptionOverrides) {
|
|
|
var viewSpec = optionsData.viewSpecs[viewType];
|
|
|
if (!viewSpec) {
|
|
|
throw new Error("viewType \"" + viewType + "\" is not available. Please make sure you've loaded all neccessary plugins");
|
|
|
}
|
|
|
var _a = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides), refinedOptions = _a.refinedOptions, extra = _a.extra;
|
|
|
warnUnknownOptions(extra);
|
|
|
var dateProfileGenerator = this.buildDateProfileGenerator({
|
|
|
dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,
|
|
|
duration: viewSpec.duration,
|
|
|
durationUnit: viewSpec.durationUnit,
|
|
|
usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,
|
|
|
dateEnv: optionsData.dateEnv,
|
|
|
calendarApi: this.props.calendarApi,
|
|
|
slotMinTime: refinedOptions.slotMinTime,
|
|
|
slotMaxTime: refinedOptions.slotMaxTime,
|
|
|
showNonCurrentDates: refinedOptions.showNonCurrentDates,
|
|
|
dayCount: refinedOptions.dayCount,
|
|
|
dateAlignment: refinedOptions.dateAlignment,
|
|
|
dateIncrement: refinedOptions.dateIncrement,
|
|
|
hiddenDays: refinedOptions.hiddenDays,
|
|
|
weekends: refinedOptions.weekends,
|
|
|
nowInput: refinedOptions.now,
|
|
|
validRangeInput: refinedOptions.validRange,
|
|
|
visibleRangeInput: refinedOptions.visibleRange,
|
|
|
monthMode: refinedOptions.monthMode,
|
|
|
fixedWeekCount: refinedOptions.fixedWeekCount,
|
|
|
});
|
|
|
var viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
|
|
|
return { viewSpec: viewSpec, options: refinedOptions, dateProfileGenerator: dateProfileGenerator, viewApi: viewApi };
|
|
|
};
|
|
|
CalendarDataManager.prototype.processRawViewOptions = function (viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
|
|
|
var raw = mergeRawOptions([
|
|
|
BASE_OPTION_DEFAULTS,
|
|
|
viewSpec.optionDefaults,
|
|
|
localeDefaults,
|
|
|
optionOverrides,
|
|
|
viewSpec.optionOverrides,
|
|
|
dynamicOptionOverrides,
|
|
|
]);
|
|
|
var refiners = __assign(__assign(__assign(__assign(__assign(__assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
|
|
|
var refined = {};
|
|
|
var currentRaw = this.currentViewOptionsInput;
|
|
|
var currentRefined = this.currentViewOptionsRefined;
|
|
|
var anyChanges = false;
|
|
|
var extra = {};
|
|
|
for (var optionName in raw) {
|
|
|
if (raw[optionName] === currentRaw[optionName]) {
|
|
|
refined[optionName] = currentRefined[optionName];
|
|
|
}
|
|
|
else {
|
|
|
if (raw[optionName] === this.currentCalendarOptionsInput[optionName]) {
|
|
|
if (optionName in this.currentCalendarOptionsRefined) { // might be an "extra" prop
|
|
|
refined[optionName] = this.currentCalendarOptionsRefined[optionName];
|
|
|
}
|
|
|
}
|
|
|
else if (refiners[optionName]) {
|
|
|
refined[optionName] = refiners[optionName](raw[optionName]);
|
|
|
}
|
|
|
else {
|
|
|
extra[optionName] = raw[optionName];
|
|
|
}
|
|
|
anyChanges = true;
|
|
|
}
|
|
|
}
|
|
|
if (anyChanges) {
|
|
|
this.currentViewOptionsInput = raw;
|
|
|
this.currentViewOptionsRefined = refined;
|
|
|
}
|
|
|
return {
|
|
|
rawOptions: this.currentViewOptionsInput,
|
|
|
refinedOptions: this.currentViewOptionsRefined,
|
|
|
extra: extra,
|
|
|
};
|
|
|
};
|
|
|
return CalendarDataManager;
|
|
|
}());
|
|
|
function buildDateEnv(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
|
|
|
var locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
|
|
|
return new DateEnv({
|
|
|
calendarSystem: 'gregory',
|
|
|
timeZone: timeZone,
|
|
|
namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
|
|
|
locale: locale,
|
|
|
weekNumberCalculation: weekNumberCalculation,
|
|
|
firstDay: firstDay,
|
|
|
weekText: weekText,
|
|
|
cmdFormatter: pluginHooks.cmdFormatter,
|
|
|
defaultSeparator: defaultSeparator,
|
|
|
});
|
|
|
}
|
|
|
function buildTheme(options, pluginHooks) {
|
|
|
var ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;
|
|
|
return new ThemeClass(options);
|
|
|
}
|
|
|
function buildDateProfileGenerator(props) {
|
|
|
var DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
|
|
|
return new DateProfileGeneratorClass(props);
|
|
|
}
|
|
|
function buildViewApi(type, getCurrentData, dateEnv) {
|
|
|
return new ViewApi(type, getCurrentData, dateEnv);
|
|
|
}
|
|
|
function buildEventUiBySource(eventSources) {
|
|
|
return mapHash(eventSources, function (eventSource) { return eventSource.ui; });
|
|
|
}
|
|
|
function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
|
|
|
var eventUiBases = { '': eventUiSingleBase };
|
|
|
for (var defId in eventDefs) {
|
|
|
var def = eventDefs[defId];
|
|
|
if (def.sourceId && eventUiBySource[def.sourceId]) {
|
|
|
eventUiBases[defId] = eventUiBySource[def.sourceId];
|
|
|
}
|
|
|
}
|
|
|
return eventUiBases;
|
|
|
}
|
|
|
function buildViewUiProps(calendarContext) {
|
|
|
var options = calendarContext.options;
|
|
|
return {
|
|
|
eventUiSingleBase: createEventUi({
|
|
|
display: options.eventDisplay,
|
|
|
editable: options.editable,
|
|
|
startEditable: options.eventStartEditable,
|
|
|
durationEditable: options.eventDurationEditable,
|
|
|
constraint: options.eventConstraint,
|
|
|
overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
|
|
|
allow: options.eventAllow,
|
|
|
backgroundColor: options.eventBackgroundColor,
|
|
|
borderColor: options.eventBorderColor,
|
|
|
textColor: options.eventTextColor,
|
|
|
color: options.eventColor,
|
|
|
// classNames: options.eventClassNames // render hook will handle this
|
|
|
}, calendarContext),
|
|
|
selectionConfig: createEventUi({
|
|
|
constraint: options.selectConstraint,
|
|
|
overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
|
|
|
allow: options.selectAllow,
|
|
|
}, calendarContext),
|
|
|
};
|
|
|
}
|
|
|
function computeIsLoading(state, context) {
|
|
|
for (var _i = 0, _a = context.pluginHooks.isLoadingFuncs; _i < _a.length; _i++) {
|
|
|
var isLoadingFunc = _a[_i];
|
|
|
if (isLoadingFunc(state)) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
function parseContextBusinessHours(calendarContext) {
|
|
|
return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
|
|
|
}
|
|
|
function warnUnknownOptions(options, viewName) {
|
|
|
for (var optionName in options) {
|
|
|
console.warn("Unknown option '" + optionName + "'" +
|
|
|
(viewName ? " for view '" + viewName + "'" : ''));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// TODO: move this to react plugin?
|
|
|
/** @class */ ((function (_super) {
|
|
|
__extends(CalendarDataProvider, _super);
|
|
|
function CalendarDataProvider(props) {
|
|
|
var _this = _super.call(this, props) || this;
|
|
|
_this.handleData = function (data) {
|
|
|
if (!_this.dataManager) { // still within initial run, before assignment in constructor
|
|
|
// eslint-disable-next-line react/no-direct-mutation-state
|
|
|
_this.state = data; // can't use setState yet
|
|
|
}
|
|
|
else {
|
|
|
_this.setState(data);
|
|
|
}
|
|
|
};
|
|
|
_this.dataManager = new CalendarDataManager({
|
|
|
optionOverrides: props.optionOverrides,
|
|
|
calendarApi: props.calendarApi,
|
|
|
onData: _this.handleData,
|
|
|
});
|
|
|
return _this;
|
|
|
}
|
|
|
CalendarDataProvider.prototype.render = function () {
|
|
|
return this.props.children(this.state);
|
|
|
};
|
|
|
CalendarDataProvider.prototype.componentDidUpdate = function (prevProps) {
|
|
|
var newOptionOverrides = this.props.optionOverrides;
|
|
|
if (newOptionOverrides !== prevProps.optionOverrides) { // prevent recursive handleData
|
|
|
this.dataManager.resetOptions(newOptionOverrides);
|
|
|
}
|
|
|
};
|
|
|
return CalendarDataProvider;
|
|
|
})(Component));
|
|
|
|
|
|
var NamedTimeZoneImpl = /** @class */ (function () {
|
|
|
function NamedTimeZoneImpl(timeZoneName) {
|
|
|
this.timeZoneName = timeZoneName;
|
|
|
}
|
|
|
return NamedTimeZoneImpl;
|
|
|
}());
|
|
|
|
|
|
var SegHierarchy = /** @class */ (function () {
|
|
|
function SegHierarchy() {
|
|
|
// settings
|
|
|
this.strictOrder = false;
|
|
|
this.allowReslicing = false;
|
|
|
this.maxCoord = -1; // -1 means no max
|
|
|
this.maxStackCnt = -1; // -1 means no max
|
|
|
this.levelCoords = []; // ordered
|
|
|
this.entriesByLevel = []; // parallel with levelCoords
|
|
|
this.stackCnts = {}; // TODO: use better technique!?
|
|
|
}
|
|
|
SegHierarchy.prototype.addSegs = function (inputs) {
|
|
|
var hiddenEntries = [];
|
|
|
for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
|
|
|
var input = inputs_1[_i];
|
|
|
this.insertEntry(input, hiddenEntries);
|
|
|
}
|
|
|
return hiddenEntries;
|
|
|
};
|
|
|
SegHierarchy.prototype.insertEntry = function (entry, hiddenEntries) {
|
|
|
var insertion = this.findInsertion(entry);
|
|
|
if (this.isInsertionValid(insertion, entry)) {
|
|
|
this.insertEntryAt(entry, insertion);
|
|
|
return 1;
|
|
|
}
|
|
|
return this.handleInvalidInsertion(insertion, entry, hiddenEntries);
|
|
|
};
|
|
|
SegHierarchy.prototype.isInsertionValid = function (insertion, entry) {
|
|
|
return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&
|
|
|
(this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
|
|
|
};
|
|
|
// returns number of new entries inserted
|
|
|
SegHierarchy.prototype.handleInvalidInsertion = function (insertion, entry, hiddenEntries) {
|
|
|
if (this.allowReslicing && insertion.touchingEntry) {
|
|
|
return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
|
|
|
}
|
|
|
hiddenEntries.push(entry);
|
|
|
return 0;
|
|
|
};
|
|
|
SegHierarchy.prototype.splitEntry = function (entry, barrier, hiddenEntries) {
|
|
|
var partCnt = 0;
|
|
|
var splitHiddenEntries = [];
|
|
|
var entrySpan = entry.span;
|
|
|
var barrierSpan = barrier.span;
|
|
|
if (entrySpan.start < barrierSpan.start) {
|
|
|
partCnt += this.insertEntry({
|
|
|
index: entry.index,
|
|
|
thickness: entry.thickness,
|
|
|
span: { start: entrySpan.start, end: barrierSpan.start },
|
|
|
}, splitHiddenEntries);
|
|
|
}
|
|
|
if (entrySpan.end > barrierSpan.end) {
|
|
|
partCnt += this.insertEntry({
|
|
|
index: entry.index,
|
|
|
thickness: entry.thickness,
|
|
|
span: { start: barrierSpan.end, end: entrySpan.end },
|
|
|
}, splitHiddenEntries);
|
|
|
}
|
|
|
if (partCnt) {
|
|
|
hiddenEntries.push.apply(hiddenEntries, __spreadArray([{
|
|
|
index: entry.index,
|
|
|
thickness: entry.thickness,
|
|
|
span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect
|
|
|
}], splitHiddenEntries));
|
|
|
return partCnt;
|
|
|
}
|
|
|
hiddenEntries.push(entry);
|
|
|
return 0;
|
|
|
};
|
|
|
SegHierarchy.prototype.insertEntryAt = function (entry, insertion) {
|
|
|
var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
|
|
|
if (insertion.lateral === -1) {
|
|
|
// create a new level
|
|
|
insertAt(levelCoords, insertion.level, insertion.levelCoord);
|
|
|
insertAt(entriesByLevel, insertion.level, [entry]);
|
|
|
}
|
|
|
else {
|
|
|
// insert into existing level
|
|
|
insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
|
|
|
}
|
|
|
this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
|
|
|
};
|
|
|
SegHierarchy.prototype.findInsertion = function (newEntry) {
|
|
|
var _a = this, levelCoords = _a.levelCoords, entriesByLevel = _a.entriesByLevel, strictOrder = _a.strictOrder, stackCnts = _a.stackCnts;
|
|
|
var levelCnt = levelCoords.length;
|
|
|
var candidateCoord = 0;
|
|
|
var touchingLevel = -1;
|
|
|
var touchingLateral = -1;
|
|
|
var touchingEntry = null;
|
|
|
var stackCnt = 0;
|
|
|
for (var trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
|
|
|
var trackingCoord = levelCoords[trackingLevel];
|
|
|
// if the current level is past the placed entry, we have found a good empty space and can stop.
|
|
|
// if strictOrder, keep finding more lateral intersections.
|
|
|
if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {
|
|
|
break;
|
|
|
}
|
|
|
var trackingEntries = entriesByLevel[trackingLevel];
|
|
|
var trackingEntry = void 0;
|
|
|
var searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
|
|
|
var lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
|
|
|
while ( // loop through entries that horizontally intersect
|
|
|
(trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
|
|
|
trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
|
|
|
) {
|
|
|
var trackingEntryBottom = trackingCoord + trackingEntry.thickness;
|
|
|
// intersects into the top of the candidate?
|
|
|
if (trackingEntryBottom > candidateCoord) {
|
|
|
candidateCoord = trackingEntryBottom;
|
|
|
touchingEntry = trackingEntry;
|
|
|
touchingLevel = trackingLevel;
|
|
|
touchingLateral = lateralIndex;
|
|
|
}
|
|
|
// butts up against top of candidate? (will happen if just intersected as well)
|
|
|
if (trackingEntryBottom === candidateCoord) {
|
|
|
// accumulate the highest possible stackCnt of the trackingEntries that butt up
|
|
|
stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
|
|
|
}
|
|
|
lateralIndex += 1;
|
|
|
}
|
|
|
}
|
|
|
// the destination level will be after touchingEntry's level. find it
|
|
|
var destLevel = 0;
|
|
|
if (touchingEntry) {
|
|
|
destLevel = touchingLevel + 1;
|
|
|
while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
|
|
|
destLevel += 1;
|
|
|
}
|
|
|
}
|
|
|
// if adding to an existing level, find where to insert
|
|
|
var destLateral = -1;
|
|
|
if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
|
|
|
destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
|
|
|
}
|
|
|
return {
|
|
|
touchingLevel: touchingLevel,
|
|
|
touchingLateral: touchingLateral,
|
|
|
touchingEntry: touchingEntry,
|
|
|
stackCnt: stackCnt,
|
|
|
levelCoord: candidateCoord,
|
|
|
level: destLevel,
|
|
|
lateral: destLateral,
|
|
|
};
|
|
|
};
|
|
|
// sorted by levelCoord (lowest to highest)
|
|
|
SegHierarchy.prototype.toRects = function () {
|
|
|
var _a = this, entriesByLevel = _a.entriesByLevel, levelCoords = _a.levelCoords;
|
|
|
var levelCnt = entriesByLevel.length;
|
|
|
var rects = [];
|
|
|
for (var level = 0; level < levelCnt; level += 1) {
|
|
|
var entries = entriesByLevel[level];
|
|
|
var levelCoord = levelCoords[level];
|
|
|
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
|
|
|
var entry = entries_1[_i];
|
|
|
rects.push(__assign(__assign({}, entry), { levelCoord: levelCoord }));
|
|
|
}
|
|
|
}
|
|
|
return rects;
|
|
|
};
|
|
|
return SegHierarchy;
|
|
|
}());
|
|
|
function getEntrySpanEnd(entry) {
|
|
|
return entry.span.end;
|
|
|
}
|
|
|
function buildEntryKey(entry) {
|
|
|
return entry.index + ':' + entry.span.start;
|
|
|
}
|
|
|
// returns groups with entries sorted by input order
|
|
|
function groupIntersectingEntries(entries) {
|
|
|
var merges = [];
|
|
|
for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
|
|
|
var entry = entries_2[_i];
|
|
|
var filteredMerges = [];
|
|
|
var hungryMerge = {
|
|
|
span: entry.span,
|
|
|
entries: [entry],
|
|
|
};
|
|
|
for (var _a = 0, merges_1 = merges; _a < merges_1.length; _a++) {
|
|
|
var merge = merges_1[_a];
|
|
|
if (intersectSpans(merge.span, hungryMerge.span)) {
|
|
|
hungryMerge = {
|
|
|
entries: merge.entries.concat(hungryMerge.entries),
|
|
|
span: joinSpans(merge.span, hungryMerge.span),
|
|
|
};
|
|
|
}
|
|
|
else {
|
|
|
filteredMerges.push(merge);
|
|
|
}
|
|
|
}
|
|
|
filteredMerges.push(hungryMerge);
|
|
|
merges = filteredMerges;
|
|
|
}
|
|
|
return merges;
|
|
|
}
|
|
|
function joinSpans(span0, span1) {
|
|
|
return {
|
|
|
start: Math.min(span0.start, span1.start),
|
|
|
end: Math.max(span0.end, span1.end),
|
|
|
};
|
|
|
}
|
|
|
function intersectSpans(span0, span1) {
|
|
|
var start = Math.max(span0.start, span1.start);
|
|
|
var end = Math.min(span0.end, span1.end);
|
|
|
if (start < end) {
|
|
|
return { start: start, end: end };
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
// general util
|
|
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
|
function insertAt(arr, index, item) {
|
|
|
arr.splice(index, 0, item);
|
|
|
}
|
|
|
function binarySearch(a, searchVal, getItemVal) {
|
|
|
var startIndex = 0;
|
|
|
var endIndex = a.length; // exclusive
|
|
|
if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item
|
|
|
return [0, 0];
|
|
|
}
|
|
|
if (searchVal > getItemVal(a[endIndex - 1])) { // after last item
|
|
|
return [endIndex, 0];
|
|
|
}
|
|
|
while (startIndex < endIndex) {
|
|
|
var middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
|
|
|
var middleVal = getItemVal(a[middleIndex]);
|
|
|
if (searchVal < middleVal) {
|
|
|
endIndex = middleIndex;
|
|
|
}
|
|
|
else if (searchVal > middleVal) {
|
|
|
startIndex = middleIndex + 1;
|
|
|
}
|
|
|
else { // equal!
|
|
|
return [middleIndex, 1];
|
|
|
}
|
|
|
}
|
|
|
return [startIndex, 0];
|
|
|
}
|
|
|
|
|
|
var Interaction = /** @class */ (function () {
|
|
|
function Interaction(settings) {
|
|
|
this.component = settings.component;
|
|
|
this.isHitComboAllowed = settings.isHitComboAllowed || null;
|
|
|
}
|
|
|
Interaction.prototype.destroy = function () {
|
|
|
};
|
|
|
return Interaction;
|
|
|
}());
|
|
|
function parseInteractionSettings(component, input) {
|
|
|
return {
|
|
|
component: component,
|
|
|
el: input.el,
|
|
|
useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
|
|
|
isHitComboAllowed: input.isHitComboAllowed || null,
|
|
|
};
|
|
|
}
|
|
|
// global state
|
|
|
var interactionSettingsStore = {};
|
|
|
|
|
|
var ToolbarSection = /** @class */ (function (_super) {
|
|
|
__extends(ToolbarSection, _super);
|
|
|
function ToolbarSection() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
ToolbarSection.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var children = this.props.widgetGroups.map(function (widgetGroup) { return _this.renderWidgetGroup(widgetGroup); });
|
|
|
return createElement.apply(void 0, __spreadArray(['div', { className: 'fc-toolbar-chunk' }], children));
|
|
|
};
|
|
|
ToolbarSection.prototype.renderWidgetGroup = function (widgetGroup) {
|
|
|
var props = this.props;
|
|
|
var theme = this.context.theme;
|
|
|
var children = [];
|
|
|
var isOnlyButtons = true;
|
|
|
for (var _i = 0, widgetGroup_1 = widgetGroup; _i < widgetGroup_1.length; _i++) {
|
|
|
var widget = widgetGroup_1[_i];
|
|
|
var buttonName = widget.buttonName, buttonClick = widget.buttonClick, buttonText = widget.buttonText, buttonIcon = widget.buttonIcon;
|
|
|
if (buttonName === 'title') {
|
|
|
isOnlyButtons = false;
|
|
|
children.push(createElement("h2", { className: "fc-toolbar-title" }, props.title));
|
|
|
}
|
|
|
else {
|
|
|
var ariaAttrs = buttonIcon ? { 'aria-label': buttonName } : {};
|
|
|
var buttonClasses = ["fc-" + buttonName + "-button", theme.getClass('button')];
|
|
|
if (buttonName === props.activeButton) {
|
|
|
buttonClasses.push(theme.getClass('buttonActive'));
|
|
|
}
|
|
|
var isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
|
|
|
(!props.isPrevEnabled && buttonName === 'prev') ||
|
|
|
(!props.isNextEnabled && buttonName === 'next');
|
|
|
children.push(createElement("button", __assign({ disabled: isDisabled, className: buttonClasses.join(' '), onClick: buttonClick, type: "button" }, ariaAttrs), buttonText || (buttonIcon ? createElement("span", { className: buttonIcon }) : '')));
|
|
|
}
|
|
|
}
|
|
|
if (children.length > 1) {
|
|
|
var groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
|
|
|
return createElement.apply(void 0, __spreadArray(['div', { className: groupClassName }], children));
|
|
|
}
|
|
|
return children[0];
|
|
|
};
|
|
|
return ToolbarSection;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var Toolbar = /** @class */ (function (_super) {
|
|
|
__extends(Toolbar, _super);
|
|
|
function Toolbar() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
Toolbar.prototype.render = function () {
|
|
|
var _a = this.props, model = _a.model, extraClassName = _a.extraClassName;
|
|
|
var forceLtr = false;
|
|
|
var startContent;
|
|
|
var endContent;
|
|
|
var centerContent = model.center;
|
|
|
if (model.left) {
|
|
|
forceLtr = true;
|
|
|
startContent = model.left;
|
|
|
}
|
|
|
else {
|
|
|
startContent = model.start;
|
|
|
}
|
|
|
if (model.right) {
|
|
|
forceLtr = true;
|
|
|
endContent = model.right;
|
|
|
}
|
|
|
else {
|
|
|
endContent = model.end;
|
|
|
}
|
|
|
var classNames = [
|
|
|
extraClassName || '',
|
|
|
'fc-toolbar',
|
|
|
forceLtr ? 'fc-toolbar-ltr' : '',
|
|
|
];
|
|
|
return (createElement("div", { className: classNames.join(' ') },
|
|
|
this.renderSection('start', startContent || []),
|
|
|
this.renderSection('center', centerContent || []),
|
|
|
this.renderSection('end', endContent || [])));
|
|
|
};
|
|
|
Toolbar.prototype.renderSection = function (key, widgetGroups) {
|
|
|
var props = this.props;
|
|
|
return (createElement(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled }));
|
|
|
};
|
|
|
return Toolbar;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
// TODO: do function component?
|
|
|
var ViewContainer = /** @class */ (function (_super) {
|
|
|
__extends(ViewContainer, _super);
|
|
|
function ViewContainer() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.state = {
|
|
|
availableWidth: null,
|
|
|
};
|
|
|
_this.handleEl = function (el) {
|
|
|
_this.el = el;
|
|
|
setRef(_this.props.elRef, el);
|
|
|
_this.updateAvailableWidth();
|
|
|
};
|
|
|
_this.handleResize = function () {
|
|
|
_this.updateAvailableWidth();
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
ViewContainer.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, state = _a.state;
|
|
|
var aspectRatio = props.aspectRatio;
|
|
|
var classNames = [
|
|
|
'fc-view-harness',
|
|
|
(aspectRatio || props.liquid || props.height)
|
|
|
? 'fc-view-harness-active' // harness controls the height
|
|
|
: 'fc-view-harness-passive', // let the view do the height
|
|
|
];
|
|
|
var height = '';
|
|
|
var paddingBottom = '';
|
|
|
if (aspectRatio) {
|
|
|
if (state.availableWidth !== null) {
|
|
|
height = state.availableWidth / aspectRatio;
|
|
|
}
|
|
|
else {
|
|
|
// while waiting to know availableWidth, we can't set height to *zero*
|
|
|
// because will cause lots of unnecessary scrollbars within scrollgrid.
|
|
|
// BETTER: don't start rendering ANYTHING yet until we know container width
|
|
|
// NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)
|
|
|
paddingBottom = (1 / aspectRatio) * 100 + "%";
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
height = props.height || '';
|
|
|
}
|
|
|
return (createElement("div", { ref: this.handleEl, onClick: props.onClick, className: classNames.join(' '), style: { height: height, paddingBottom: paddingBottom } }, props.children));
|
|
|
};
|
|
|
ViewContainer.prototype.componentDidMount = function () {
|
|
|
this.context.addResizeHandler(this.handleResize);
|
|
|
};
|
|
|
ViewContainer.prototype.componentWillUnmount = function () {
|
|
|
this.context.removeResizeHandler(this.handleResize);
|
|
|
};
|
|
|
ViewContainer.prototype.updateAvailableWidth = function () {
|
|
|
if (this.el && // needed. but why?
|
|
|
this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth
|
|
|
) {
|
|
|
this.setState({ availableWidth: this.el.offsetWidth });
|
|
|
}
|
|
|
};
|
|
|
return ViewContainer;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
/*
|
|
|
Detects when the user clicks on an event within a DateComponent
|
|
|
*/
|
|
|
var EventClicking = /** @class */ (function (_super) {
|
|
|
__extends(EventClicking, _super);
|
|
|
function EventClicking(settings) {
|
|
|
var _this = _super.call(this, settings) || this;
|
|
|
_this.handleSegClick = function (ev, segEl) {
|
|
|
var component = _this.component;
|
|
|
var context = component.context;
|
|
|
var seg = getElSeg(segEl);
|
|
|
if (seg && // might be the <div> surrounding the more link
|
|
|
component.isValidSegDownEl(ev.target)) {
|
|
|
// our way to simulate a link click for elements that can't be <a> tags
|
|
|
// grab before trigger fired in case trigger trashes DOM thru rerendering
|
|
|
var hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
|
|
|
var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
|
|
|
context.emitter.trigger('eventClick', {
|
|
|
el: segEl,
|
|
|
event: new EventApi(component.context, seg.eventRange.def, seg.eventRange.instance),
|
|
|
jsEvent: ev,
|
|
|
view: context.viewApi,
|
|
|
});
|
|
|
if (url && !ev.defaultPrevented) {
|
|
|
window.location.href = url;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
_this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
|
|
|
_this.handleSegClick);
|
|
|
return _this;
|
|
|
}
|
|
|
return EventClicking;
|
|
|
}(Interaction));
|
|
|
|
|
|
/*
|
|
|
Triggers events and adds/removes core classNames when the user's pointer
|
|
|
enters/leaves event-elements of a component.
|
|
|
*/
|
|
|
var EventHovering = /** @class */ (function (_super) {
|
|
|
__extends(EventHovering, _super);
|
|
|
function EventHovering(settings) {
|
|
|
var _this = _super.call(this, settings) || this;
|
|
|
// for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
|
|
|
_this.handleEventElRemove = function (el) {
|
|
|
if (el === _this.currentSegEl) {
|
|
|
_this.handleSegLeave(null, _this.currentSegEl);
|
|
|
}
|
|
|
};
|
|
|
_this.handleSegEnter = function (ev, segEl) {
|
|
|
if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
|
|
|
_this.currentSegEl = segEl;
|
|
|
_this.triggerEvent('eventMouseEnter', ev, segEl);
|
|
|
}
|
|
|
};
|
|
|
_this.handleSegLeave = function (ev, segEl) {
|
|
|
if (_this.currentSegEl) {
|
|
|
_this.currentSegEl = null;
|
|
|
_this.triggerEvent('eventMouseLeave', ev, segEl);
|
|
|
}
|
|
|
};
|
|
|
_this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
|
|
|
_this.handleSegEnter, _this.handleSegLeave);
|
|
|
return _this;
|
|
|
}
|
|
|
EventHovering.prototype.destroy = function () {
|
|
|
this.removeHoverListeners();
|
|
|
};
|
|
|
EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
|
|
|
var component = this.component;
|
|
|
var context = component.context;
|
|
|
var seg = getElSeg(segEl);
|
|
|
if (!ev || component.isValidSegDownEl(ev.target)) {
|
|
|
context.emitter.trigger(publicEvName, {
|
|
|
el: segEl,
|
|
|
event: new EventApi(context, seg.eventRange.def, seg.eventRange.instance),
|
|
|
jsEvent: ev,
|
|
|
view: context.viewApi,
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
return EventHovering;
|
|
|
}(Interaction));
|
|
|
|
|
|
var CalendarContent = /** @class */ (function (_super) {
|
|
|
__extends(CalendarContent, _super);
|
|
|
function CalendarContent() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.buildViewContext = memoize(buildViewContext);
|
|
|
_this.buildViewPropTransformers = memoize(buildViewPropTransformers);
|
|
|
_this.buildToolbarProps = memoize(buildToolbarProps);
|
|
|
_this.handleNavLinkClick = buildDelegationHandler('a[data-navlink]', _this._handleNavLinkClick.bind(_this));
|
|
|
_this.headerRef = createRef();
|
|
|
_this.footerRef = createRef();
|
|
|
_this.interactionsStore = {};
|
|
|
// Component Registration
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
_this.registerInteractiveComponent = function (component, settingsInput) {
|
|
|
var settings = parseInteractionSettings(component, settingsInput);
|
|
|
var DEFAULT_INTERACTIONS = [
|
|
|
EventClicking,
|
|
|
EventHovering,
|
|
|
];
|
|
|
var interactionClasses = DEFAULT_INTERACTIONS.concat(_this.props.pluginHooks.componentInteractions);
|
|
|
var interactions = interactionClasses.map(function (TheInteractionClass) { return new TheInteractionClass(settings); });
|
|
|
_this.interactionsStore[component.uid] = interactions;
|
|
|
interactionSettingsStore[component.uid] = settings;
|
|
|
};
|
|
|
_this.unregisterInteractiveComponent = function (component) {
|
|
|
for (var _i = 0, _a = _this.interactionsStore[component.uid]; _i < _a.length; _i++) {
|
|
|
var listener = _a[_i];
|
|
|
listener.destroy();
|
|
|
}
|
|
|
delete _this.interactionsStore[component.uid];
|
|
|
delete interactionSettingsStore[component.uid];
|
|
|
};
|
|
|
// Resizing
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
_this.resizeRunner = new DelayedRunner(function () {
|
|
|
_this.props.emitter.trigger('_resize', true); // should window resizes be considered "forced" ?
|
|
|
_this.props.emitter.trigger('windowResize', { view: _this.props.viewApi });
|
|
|
});
|
|
|
_this.handleWindowResize = function (ev) {
|
|
|
var options = _this.props.options;
|
|
|
if (options.handleWindowResize &&
|
|
|
ev.target === window // avoid jqui events
|
|
|
) {
|
|
|
_this.resizeRunner.request(options.windowResizeDelay);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
/*
|
|
|
renders INSIDE of an outer div
|
|
|
*/
|
|
|
CalendarContent.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var toolbarConfig = props.toolbarConfig, options = props.options;
|
|
|
var toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
|
|
|
props.viewTitle);
|
|
|
var viewVGrow = false;
|
|
|
var viewHeight = '';
|
|
|
var viewAspectRatio;
|
|
|
if (props.isHeightAuto || props.forPrint) {
|
|
|
viewHeight = '';
|
|
|
}
|
|
|
else if (options.height != null) {
|
|
|
viewVGrow = true;
|
|
|
}
|
|
|
else if (options.contentHeight != null) {
|
|
|
viewHeight = options.contentHeight;
|
|
|
}
|
|
|
else {
|
|
|
viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
|
|
|
}
|
|
|
var viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
|
|
|
return (createElement(ViewContextType.Provider, { value: viewContext },
|
|
|
toolbarConfig.headerToolbar && (createElement(Toolbar, __assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.headerToolbar }, toolbarProps))),
|
|
|
createElement(ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, onClick: this.handleNavLinkClick },
|
|
|
this.renderView(props),
|
|
|
this.buildAppendContent()),
|
|
|
toolbarConfig.footerToolbar && (createElement(Toolbar, __assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footerToolbar }, toolbarProps)))));
|
|
|
};
|
|
|
CalendarContent.prototype.componentDidMount = function () {
|
|
|
var props = this.props;
|
|
|
this.calendarInteractions = props.pluginHooks.calendarInteractions
|
|
|
.map(function (CalendarInteractionClass) { return new CalendarInteractionClass(props); });
|
|
|
window.addEventListener('resize', this.handleWindowResize);
|
|
|
var propSetHandlers = props.pluginHooks.propSetHandlers;
|
|
|
for (var propName in propSetHandlers) {
|
|
|
propSetHandlers[propName](props[propName], props);
|
|
|
}
|
|
|
};
|
|
|
CalendarContent.prototype.componentDidUpdate = function (prevProps) {
|
|
|
var props = this.props;
|
|
|
var propSetHandlers = props.pluginHooks.propSetHandlers;
|
|
|
for (var propName in propSetHandlers) {
|
|
|
if (props[propName] !== prevProps[propName]) {
|
|
|
propSetHandlers[propName](props[propName], props);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
CalendarContent.prototype.componentWillUnmount = function () {
|
|
|
window.removeEventListener('resize', this.handleWindowResize);
|
|
|
this.resizeRunner.clear();
|
|
|
for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {
|
|
|
var interaction = _a[_i];
|
|
|
interaction.destroy();
|
|
|
}
|
|
|
this.props.emitter.trigger('_unmount');
|
|
|
};
|
|
|
CalendarContent.prototype._handleNavLinkClick = function (ev, anchorEl) {
|
|
|
var _a = this.props, dateEnv = _a.dateEnv, options = _a.options, calendarApi = _a.calendarApi;
|
|
|
var navLinkOptions = anchorEl.getAttribute('data-navlink');
|
|
|
navLinkOptions = navLinkOptions ? JSON.parse(navLinkOptions) : {};
|
|
|
var dateMarker = dateEnv.createMarker(navLinkOptions.date);
|
|
|
var viewType = navLinkOptions.type;
|
|
|
var customAction = viewType === 'day' ? options.navLinkDayClick :
|
|
|
viewType === 'week' ? options.navLinkWeekClick : null;
|
|
|
if (typeof customAction === 'function') {
|
|
|
customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
|
|
|
}
|
|
|
else {
|
|
|
if (typeof customAction === 'string') {
|
|
|
viewType = customAction;
|
|
|
}
|
|
|
calendarApi.zoomTo(dateMarker, viewType);
|
|
|
}
|
|
|
};
|
|
|
CalendarContent.prototype.buildAppendContent = function () {
|
|
|
var props = this.props;
|
|
|
var children = props.pluginHooks.viewContainerAppends.map(function (buildAppendContent) { return buildAppendContent(props); });
|
|
|
return createElement.apply(void 0, __spreadArray([Fragment, {}], children));
|
|
|
};
|
|
|
CalendarContent.prototype.renderView = function (props) {
|
|
|
var pluginHooks = props.pluginHooks;
|
|
|
var viewSpec = props.viewSpec;
|
|
|
var viewProps = {
|
|
|
dateProfile: props.dateProfile,
|
|
|
businessHours: props.businessHours,
|
|
|
eventStore: props.renderableEventStore,
|
|
|
eventUiBases: props.eventUiBases,
|
|
|
dateSelection: props.dateSelection,
|
|
|
eventSelection: props.eventSelection,
|
|
|
eventDrag: props.eventDrag,
|
|
|
eventResize: props.eventResize,
|
|
|
isHeightAuto: props.isHeightAuto,
|
|
|
forPrint: props.forPrint,
|
|
|
};
|
|
|
var transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
|
|
|
for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
|
|
|
var transformer = transformers_1[_i];
|
|
|
__assign(viewProps, transformer.transform(viewProps, props));
|
|
|
}
|
|
|
var ViewComponent = viewSpec.component;
|
|
|
return (createElement(ViewComponent, __assign({}, viewProps)));
|
|
|
};
|
|
|
return CalendarContent;
|
|
|
}(PureComponent));
|
|
|
function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {
|
|
|
// don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid
|
|
|
var todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason
|
|
|
var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);
|
|
|
var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);
|
|
|
return {
|
|
|
title: title,
|
|
|
activeButton: viewSpec.type,
|
|
|
isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
|
|
|
isPrevEnabled: prevInfo.isValid,
|
|
|
isNextEnabled: nextInfo.isValid,
|
|
|
};
|
|
|
}
|
|
|
// Plugin
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
function buildViewPropTransformers(theClasses) {
|
|
|
return theClasses.map(function (TheClass) { return new TheClass(); });
|
|
|
}
|
|
|
|
|
|
var CalendarRoot = /** @class */ (function (_super) {
|
|
|
__extends(CalendarRoot, _super);
|
|
|
function CalendarRoot() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.state = {
|
|
|
forPrint: false,
|
|
|
};
|
|
|
_this.handleBeforePrint = function () {
|
|
|
_this.setState({ forPrint: true });
|
|
|
};
|
|
|
_this.handleAfterPrint = function () {
|
|
|
_this.setState({ forPrint: false });
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
CalendarRoot.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var options = props.options;
|
|
|
var forPrint = this.state.forPrint;
|
|
|
var isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';
|
|
|
var height = (!isHeightAuto && options.height != null) ? options.height : '';
|
|
|
var classNames = [
|
|
|
'fc',
|
|
|
forPrint ? 'fc-media-print' : 'fc-media-screen',
|
|
|
"fc-direction-" + options.direction,
|
|
|
props.theme.getClass('root'),
|
|
|
];
|
|
|
if (!getCanVGrowWithinCell()) {
|
|
|
classNames.push('fc-liquid-hack');
|
|
|
}
|
|
|
return props.children(classNames, height, isHeightAuto, forPrint);
|
|
|
};
|
|
|
CalendarRoot.prototype.componentDidMount = function () {
|
|
|
var emitter = this.props.emitter;
|
|
|
emitter.on('_beforeprint', this.handleBeforePrint);
|
|
|
emitter.on('_afterprint', this.handleAfterPrint);
|
|
|
};
|
|
|
CalendarRoot.prototype.componentWillUnmount = function () {
|
|
|
var emitter = this.props.emitter;
|
|
|
emitter.off('_beforeprint', this.handleBeforePrint);
|
|
|
emitter.off('_afterprint', this.handleAfterPrint);
|
|
|
};
|
|
|
return CalendarRoot;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
// Computes a default column header formatting string if `colFormat` is not explicitly defined
|
|
|
function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
|
|
|
// if more than one week row, or if there are a lot of columns with not much space,
|
|
|
// put just the day numbers will be in each cell
|
|
|
if (!datesRepDistinctDays || dayCnt > 10) {
|
|
|
return createFormatter({ weekday: 'short' }); // "Sat"
|
|
|
}
|
|
|
if (dayCnt > 1) {
|
|
|
return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // "Sat 11/12"
|
|
|
}
|
|
|
return createFormatter({ weekday: 'long' }); // "Saturday"
|
|
|
}
|
|
|
|
|
|
var CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
|
|
|
function renderInner$1(hookProps) {
|
|
|
return hookProps.text;
|
|
|
}
|
|
|
|
|
|
var TableDateCell = /** @class */ (function (_super) {
|
|
|
__extends(TableDateCell, _super);
|
|
|
function TableDateCell() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TableDateCell.prototype.render = function () {
|
|
|
var _a = this.context, dateEnv = _a.dateEnv, options = _a.options, theme = _a.theme, viewApi = _a.viewApi;
|
|
|
var props = this.props;
|
|
|
var date = props.date, dateProfile = props.dateProfile;
|
|
|
var dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);
|
|
|
var classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
|
|
|
var text = dateEnv.format(date, props.dayHeaderFormat);
|
|
|
// if colCnt is 1, we are already in a day-view and don't need a navlink
|
|
|
var navLinkAttrs = (options.navLinks && !dayMeta.isDisabled && props.colCnt > 1)
|
|
|
? { 'data-navlink': buildNavLinkData(date), tabIndex: 0 }
|
|
|
: {};
|
|
|
var hookProps = __assign(__assign(__assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraHookProps), { text: text }), dayMeta);
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner$1, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-date": !dayMeta.isDisabled ? formatDayString(date) : undefined, colSpan: props.colSpan }, props.extraDataAttrs),
|
|
|
createElement("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && (createElement("a", __assign({ ref: innerElRef, className: [
|
|
|
'fc-col-header-cell-cushion',
|
|
|
props.isSticky ? 'fc-sticky' : '',
|
|
|
].join(' ') }, navLinkAttrs), innerContent))))); }));
|
|
|
};
|
|
|
return TableDateCell;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var TableDowCell = /** @class */ (function (_super) {
|
|
|
__extends(TableDowCell, _super);
|
|
|
function TableDowCell() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TableDowCell.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, viewApi = _a.viewApi, options = _a.options;
|
|
|
var date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT
|
|
|
var dateMeta = {
|
|
|
dow: props.dow,
|
|
|
isDisabled: false,
|
|
|
isFuture: false,
|
|
|
isPast: false,
|
|
|
isToday: false,
|
|
|
isOther: false,
|
|
|
};
|
|
|
var classNames = [CLASS_NAME].concat(getDayClassNames(dateMeta, theme), props.extraClassNames || []);
|
|
|
var text = dateEnv.format(date, props.dayHeaderFormat);
|
|
|
var hookProps = __assign(__assign(__assign(__assign({ // TODO: make this public?
|
|
|
date: date }, dateMeta), { view: viewApi }), props.extraHookProps), { text: text });
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInner$1, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("th", __assign({ ref: rootElRef, className: classNames.concat(customClassNames).join(' '), colSpan: props.colSpan }, props.extraDataAttrs),
|
|
|
createElement("div", { className: "fc-scrollgrid-sync-inner" },
|
|
|
createElement("a", { className: [
|
|
|
'fc-col-header-cell-cushion',
|
|
|
props.isSticky ? 'fc-sticky' : '',
|
|
|
].join(' '), ref: innerElRef }, innerContent)))); }));
|
|
|
};
|
|
|
return TableDowCell;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var NowTimer = /** @class */ (function (_super) {
|
|
|
__extends(NowTimer, _super);
|
|
|
function NowTimer(props, context) {
|
|
|
var _this = _super.call(this, props, context) || this;
|
|
|
_this.initialNowDate = getNow(context.options.now, context.dateEnv);
|
|
|
_this.initialNowQueriedMs = new Date().valueOf();
|
|
|
_this.state = _this.computeTiming().currentState;
|
|
|
return _this;
|
|
|
}
|
|
|
NowTimer.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, state = _a.state;
|
|
|
return props.children(state.nowDate, state.todayRange);
|
|
|
};
|
|
|
NowTimer.prototype.componentDidMount = function () {
|
|
|
this.setTimeout();
|
|
|
};
|
|
|
NowTimer.prototype.componentDidUpdate = function (prevProps) {
|
|
|
if (prevProps.unit !== this.props.unit) {
|
|
|
this.clearTimeout();
|
|
|
this.setTimeout();
|
|
|
}
|
|
|
};
|
|
|
NowTimer.prototype.componentWillUnmount = function () {
|
|
|
this.clearTimeout();
|
|
|
};
|
|
|
NowTimer.prototype.computeTiming = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);
|
|
|
var currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
|
|
|
var nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
|
|
|
var waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
|
|
|
// there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)
|
|
|
// ensure no longer than a day
|
|
|
waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);
|
|
|
return {
|
|
|
currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
|
|
|
nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
|
|
|
waitMs: waitMs,
|
|
|
};
|
|
|
};
|
|
|
NowTimer.prototype.setTimeout = function () {
|
|
|
var _this = this;
|
|
|
var _a = this.computeTiming(), nextState = _a.nextState, waitMs = _a.waitMs;
|
|
|
this.timeoutId = setTimeout(function () {
|
|
|
_this.setState(nextState, function () {
|
|
|
_this.setTimeout();
|
|
|
});
|
|
|
}, waitMs);
|
|
|
};
|
|
|
NowTimer.prototype.clearTimeout = function () {
|
|
|
if (this.timeoutId) {
|
|
|
clearTimeout(this.timeoutId);
|
|
|
}
|
|
|
};
|
|
|
NowTimer.contextType = ViewContextType;
|
|
|
return NowTimer;
|
|
|
}(Component));
|
|
|
function buildDayRange(date) {
|
|
|
var start = startOfDay(date);
|
|
|
var end = addDays(start, 1);
|
|
|
return { start: start, end: end };
|
|
|
}
|
|
|
|
|
|
var DayHeader = /** @class */ (function (_super) {
|
|
|
__extends(DayHeader, _super);
|
|
|
function DayHeader() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);
|
|
|
return _this;
|
|
|
}
|
|
|
DayHeader.prototype.render = function () {
|
|
|
var context = this.context;
|
|
|
var _a = this.props, dates = _a.dates, dateProfile = _a.dateProfile, datesRepDistinctDays = _a.datesRepDistinctDays, renderIntro = _a.renderIntro;
|
|
|
var dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
|
|
|
return (createElement(NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement("tr", null,
|
|
|
renderIntro && renderIntro('day'),
|
|
|
dates.map(function (date) { return (datesRepDistinctDays ? (createElement(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (createElement(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))); }))); }));
|
|
|
};
|
|
|
return DayHeader;
|
|
|
}(BaseComponent));
|
|
|
function createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {
|
|
|
return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);
|
|
|
}
|
|
|
|
|
|
var DaySeriesModel = /** @class */ (function () {
|
|
|
function DaySeriesModel(range, dateProfileGenerator) {
|
|
|
var date = range.start;
|
|
|
var end = range.end;
|
|
|
var indices = [];
|
|
|
var dates = [];
|
|
|
var dayIndex = -1;
|
|
|
while (date < end) { // loop each day from start to end
|
|
|
if (dateProfileGenerator.isHiddenDay(date)) {
|
|
|
indices.push(dayIndex + 0.5); // mark that it's between indices
|
|
|
}
|
|
|
else {
|
|
|
dayIndex += 1;
|
|
|
indices.push(dayIndex);
|
|
|
dates.push(date);
|
|
|
}
|
|
|
date = addDays(date, 1);
|
|
|
}
|
|
|
this.dates = dates;
|
|
|
this.indices = indices;
|
|
|
this.cnt = dates.length;
|
|
|
}
|
|
|
DaySeriesModel.prototype.sliceRange = function (range) {
|
|
|
var firstIndex = this.getDateDayIndex(range.start); // inclusive first index
|
|
|
var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
|
|
|
var clippedFirstIndex = Math.max(0, firstIndex);
|
|
|
var clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
|
|
|
// deal with in-between indices
|
|
|
clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
|
|
|
clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
|
|
|
if (clippedFirstIndex <= clippedLastIndex) {
|
|
|
return {
|
|
|
firstIndex: clippedFirstIndex,
|
|
|
lastIndex: clippedLastIndex,
|
|
|
isStart: firstIndex === clippedFirstIndex,
|
|
|
isEnd: lastIndex === clippedLastIndex,
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Given a date, returns its chronolocial cell-index from the first cell of the grid.
|
|
|
// If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
|
|
|
// If before the first offset, returns a negative number.
|
|
|
// If after the last offset, returns an offset past the last cell offset.
|
|
|
// Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
|
|
|
DaySeriesModel.prototype.getDateDayIndex = function (date) {
|
|
|
var indices = this.indices;
|
|
|
var dayOffset = Math.floor(diffDays(this.dates[0], date));
|
|
|
if (dayOffset < 0) {
|
|
|
return indices[0] - 1;
|
|
|
}
|
|
|
if (dayOffset >= indices.length) {
|
|
|
return indices[indices.length - 1] + 1;
|
|
|
}
|
|
|
return indices[dayOffset];
|
|
|
};
|
|
|
return DaySeriesModel;
|
|
|
}());
|
|
|
|
|
|
var DayTableModel = /** @class */ (function () {
|
|
|
function DayTableModel(daySeries, breakOnWeeks) {
|
|
|
var dates = daySeries.dates;
|
|
|
var daysPerRow;
|
|
|
var firstDay;
|
|
|
var rowCnt;
|
|
|
if (breakOnWeeks) {
|
|
|
// count columns until the day-of-week repeats
|
|
|
firstDay = dates[0].getUTCDay();
|
|
|
for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {
|
|
|
if (dates[daysPerRow].getUTCDay() === firstDay) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
rowCnt = Math.ceil(dates.length / daysPerRow);
|
|
|
}
|
|
|
else {
|
|
|
rowCnt = 1;
|
|
|
daysPerRow = dates.length;
|
|
|
}
|
|
|
this.rowCnt = rowCnt;
|
|
|
this.colCnt = daysPerRow;
|
|
|
this.daySeries = daySeries;
|
|
|
this.cells = this.buildCells();
|
|
|
this.headerDates = this.buildHeaderDates();
|
|
|
}
|
|
|
DayTableModel.prototype.buildCells = function () {
|
|
|
var rows = [];
|
|
|
for (var row = 0; row < this.rowCnt; row += 1) {
|
|
|
var cells = [];
|
|
|
for (var col = 0; col < this.colCnt; col += 1) {
|
|
|
cells.push(this.buildCell(row, col));
|
|
|
}
|
|
|
rows.push(cells);
|
|
|
}
|
|
|
return rows;
|
|
|
};
|
|
|
DayTableModel.prototype.buildCell = function (row, col) {
|
|
|
var date = this.daySeries.dates[row * this.colCnt + col];
|
|
|
return {
|
|
|
key: date.toISOString(),
|
|
|
date: date,
|
|
|
};
|
|
|
};
|
|
|
DayTableModel.prototype.buildHeaderDates = function () {
|
|
|
var dates = [];
|
|
|
for (var col = 0; col < this.colCnt; col += 1) {
|
|
|
dates.push(this.cells[0][col].date);
|
|
|
}
|
|
|
return dates;
|
|
|
};
|
|
|
DayTableModel.prototype.sliceRange = function (range) {
|
|
|
var colCnt = this.colCnt;
|
|
|
var seriesSeg = this.daySeries.sliceRange(range);
|
|
|
var segs = [];
|
|
|
if (seriesSeg) {
|
|
|
var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex;
|
|
|
var index = firstIndex;
|
|
|
while (index <= lastIndex) {
|
|
|
var row = Math.floor(index / colCnt);
|
|
|
var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
|
|
|
segs.push({
|
|
|
row: row,
|
|
|
firstCol: index % colCnt,
|
|
|
lastCol: (nextIndex - 1) % colCnt,
|
|
|
isStart: seriesSeg.isStart && index === firstIndex,
|
|
|
isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,
|
|
|
});
|
|
|
index = nextIndex;
|
|
|
}
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
return DayTableModel;
|
|
|
}());
|
|
|
|
|
|
var Slicer = /** @class */ (function () {
|
|
|
function Slicer() {
|
|
|
this.sliceBusinessHours = memoize(this._sliceBusinessHours);
|
|
|
this.sliceDateSelection = memoize(this._sliceDateSpan);
|
|
|
this.sliceEventStore = memoize(this._sliceEventStore);
|
|
|
this.sliceEventDrag = memoize(this._sliceInteraction);
|
|
|
this.sliceEventResize = memoize(this._sliceInteraction);
|
|
|
this.forceDayIfListItem = false; // hack
|
|
|
}
|
|
|
Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, context) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 4; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 4] = arguments[_i];
|
|
|
}
|
|
|
var eventUiBases = props.eventUiBases;
|
|
|
var eventSegs = this.sliceEventStore.apply(this, __spreadArray([props.eventStore, eventUiBases, dateProfile, nextDayThreshold], extraArgs));
|
|
|
return {
|
|
|
dateSelectionSegs: this.sliceDateSelection.apply(this, __spreadArray([props.dateSelection, eventUiBases, context], extraArgs)),
|
|
|
businessHourSegs: this.sliceBusinessHours.apply(this, __spreadArray([props.businessHours, dateProfile, nextDayThreshold, context], extraArgs)),
|
|
|
fgEventSegs: eventSegs.fg,
|
|
|
bgEventSegs: eventSegs.bg,
|
|
|
eventDrag: this.sliceEventDrag.apply(this, __spreadArray([props.eventDrag, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
|
|
|
eventResize: this.sliceEventResize.apply(this, __spreadArray([props.eventResize, eventUiBases, dateProfile, nextDayThreshold], extraArgs)),
|
|
|
eventSelection: props.eventSelection,
|
|
|
}; // TODO: give interactionSegs?
|
|
|
};
|
|
|
Slicer.prototype.sliceNowDate = function (// does not memoize
|
|
|
date, context) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 2] = arguments[_i];
|
|
|
}
|
|
|
return this._sliceDateSpan.apply(this, __spreadArray([{ range: { start: date, end: addMs(date, 1) }, allDay: false },
|
|
|
{},
|
|
|
context], extraArgs));
|
|
|
};
|
|
|
Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, context) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 4; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 4] = arguments[_i];
|
|
|
}
|
|
|
if (!businessHours) {
|
|
|
return [];
|
|
|
}
|
|
|
return this._sliceEventStore.apply(this, __spreadArray([expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context),
|
|
|
{},
|
|
|
dateProfile,
|
|
|
nextDayThreshold], extraArgs)).bg;
|
|
|
};
|
|
|
Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 4; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 4] = arguments[_i];
|
|
|
}
|
|
|
if (eventStore) {
|
|
|
var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
|
|
|
return {
|
|
|
bg: this.sliceEventRanges(rangeRes.bg, extraArgs),
|
|
|
fg: this.sliceEventRanges(rangeRes.fg, extraArgs),
|
|
|
};
|
|
|
}
|
|
|
return { bg: [], fg: [] };
|
|
|
};
|
|
|
Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 4; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 4] = arguments[_i];
|
|
|
}
|
|
|
if (!interaction) {
|
|
|
return null;
|
|
|
}
|
|
|
var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
|
|
|
return {
|
|
|
segs: this.sliceEventRanges(rangeRes.fg, extraArgs),
|
|
|
affectedInstances: interaction.affectedEvents.instances,
|
|
|
isEvent: interaction.isEvent,
|
|
|
};
|
|
|
};
|
|
|
Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, context) {
|
|
|
var extraArgs = [];
|
|
|
for (var _i = 3; _i < arguments.length; _i++) {
|
|
|
extraArgs[_i - 3] = arguments[_i];
|
|
|
}
|
|
|
if (!dateSpan) {
|
|
|
return [];
|
|
|
}
|
|
|
var eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
|
|
|
var segs = this.sliceRange.apply(this, __spreadArray([dateSpan.range], extraArgs));
|
|
|
for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
|
|
|
var seg = segs_1[_a];
|
|
|
seg.eventRange = eventRange;
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
/*
|
|
|
"complete" seg means it has component and eventRange
|
|
|
*/
|
|
|
Slicer.prototype.sliceEventRanges = function (eventRanges, extraArgs) {
|
|
|
var segs = [];
|
|
|
for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
|
|
|
var eventRange = eventRanges_1[_i];
|
|
|
segs.push.apply(segs, this.sliceEventRange(eventRange, extraArgs));
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
/*
|
|
|
"complete" seg means it has component and eventRange
|
|
|
*/
|
|
|
Slicer.prototype.sliceEventRange = function (eventRange, extraArgs) {
|
|
|
var dateRange = eventRange.range;
|
|
|
// hack to make multi-day events that are being force-displayed as list-items to take up only one day
|
|
|
if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
|
|
|
dateRange = {
|
|
|
start: dateRange.start,
|
|
|
end: addDays(dateRange.start, 1),
|
|
|
};
|
|
|
}
|
|
|
var segs = this.sliceRange.apply(this, __spreadArray([dateRange], extraArgs));
|
|
|
for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
|
|
|
var seg = segs_2[_i];
|
|
|
seg.eventRange = eventRange;
|
|
|
seg.isStart = eventRange.isStart && seg.isStart;
|
|
|
seg.isEnd = eventRange.isEnd && seg.isEnd;
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
return Slicer;
|
|
|
}());
|
|
|
/*
|
|
|
for incorporating slotMinTime/slotMaxTime if appropriate
|
|
|
TODO: should be part of DateProfile!
|
|
|
TimelineDateProfile already does this btw
|
|
|
*/
|
|
|
function computeActiveRange(dateProfile, isComponentAllDay) {
|
|
|
var range = dateProfile.activeRange;
|
|
|
if (isComponentAllDay) {
|
|
|
return range;
|
|
|
}
|
|
|
return {
|
|
|
start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
|
|
|
end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
|
|
|
var Scroller = /** @class */ (function (_super) {
|
|
|
__extends(Scroller, _super);
|
|
|
function Scroller() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.handleEl = function (el) {
|
|
|
_this.el = el;
|
|
|
setRef(_this.props.elRef, el);
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
Scroller.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var liquid = props.liquid, liquidIsAbsolute = props.liquidIsAbsolute;
|
|
|
var isAbsolute = liquid && liquidIsAbsolute;
|
|
|
var className = ['fc-scroller'];
|
|
|
if (liquid) {
|
|
|
if (liquidIsAbsolute) {
|
|
|
className.push('fc-scroller-liquid-absolute');
|
|
|
}
|
|
|
else {
|
|
|
className.push('fc-scroller-liquid');
|
|
|
}
|
|
|
}
|
|
|
return (createElement("div", { ref: this.handleEl, className: className.join(' '), style: {
|
|
|
overflowX: props.overflowX,
|
|
|
overflowY: props.overflowY,
|
|
|
left: (isAbsolute && -(props.overcomeLeft || 0)) || '',
|
|
|
right: (isAbsolute && -(props.overcomeRight || 0)) || '',
|
|
|
bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',
|
|
|
marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',
|
|
|
marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',
|
|
|
marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',
|
|
|
maxHeight: props.maxHeight || '',
|
|
|
} }, props.children));
|
|
|
};
|
|
|
Scroller.prototype.needsXScrolling = function () {
|
|
|
if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
|
|
|
return false;
|
|
|
}
|
|
|
// testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.
|
|
|
// much more reliable to see if children are taller than the scroller, even tho doesn't account for
|
|
|
// inner-child margins and absolute positioning
|
|
|
var el = this.el;
|
|
|
var realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();
|
|
|
var children = el.children;
|
|
|
for (var i = 0; i < children.length; i += 1) {
|
|
|
var childEl = children[i];
|
|
|
if (childEl.getBoundingClientRect().width > realClientWidth) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
};
|
|
|
Scroller.prototype.needsYScrolling = function () {
|
|
|
if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
|
|
|
return false;
|
|
|
}
|
|
|
// testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.
|
|
|
// much more reliable to see if children are taller than the scroller, even tho doesn't account for
|
|
|
// inner-child margins and absolute positioning
|
|
|
var el = this.el;
|
|
|
var realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();
|
|
|
var children = el.children;
|
|
|
for (var i = 0; i < children.length; i += 1) {
|
|
|
var childEl = children[i];
|
|
|
if (childEl.getBoundingClientRect().height > realClientHeight) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
};
|
|
|
Scroller.prototype.getXScrollbarWidth = function () {
|
|
|
if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
|
|
|
return 0;
|
|
|
}
|
|
|
return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?
|
|
|
};
|
|
|
Scroller.prototype.getYScrollbarWidth = function () {
|
|
|
if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
|
|
|
return 0;
|
|
|
}
|
|
|
return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?
|
|
|
};
|
|
|
return Scroller;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
/*
|
|
|
TODO: somehow infer OtherArgs from masterCallback?
|
|
|
TODO: infer RefType from masterCallback if provided
|
|
|
*/
|
|
|
var RefMap = /** @class */ (function () {
|
|
|
function RefMap(masterCallback) {
|
|
|
var _this = this;
|
|
|
this.masterCallback = masterCallback;
|
|
|
this.currentMap = {};
|
|
|
this.depths = {};
|
|
|
this.callbackMap = {};
|
|
|
this.handleValue = function (val, key) {
|
|
|
var _a = _this, depths = _a.depths, currentMap = _a.currentMap;
|
|
|
var removed = false;
|
|
|
var added = false;
|
|
|
if (val !== null) {
|
|
|
// for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore
|
|
|
removed = (key in currentMap);
|
|
|
currentMap[key] = val;
|
|
|
depths[key] = (depths[key] || 0) + 1;
|
|
|
added = true;
|
|
|
}
|
|
|
else {
|
|
|
depths[key] -= 1;
|
|
|
if (!depths[key]) {
|
|
|
delete currentMap[key];
|
|
|
delete _this.callbackMap[key];
|
|
|
removed = true;
|
|
|
}
|
|
|
}
|
|
|
if (_this.masterCallback) {
|
|
|
if (removed) {
|
|
|
_this.masterCallback(null, String(key));
|
|
|
}
|
|
|
if (added) {
|
|
|
_this.masterCallback(val, String(key));
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
RefMap.prototype.createRef = function (key) {
|
|
|
var _this = this;
|
|
|
var refCallback = this.callbackMap[key];
|
|
|
if (!refCallback) {
|
|
|
refCallback = this.callbackMap[key] = function (val) {
|
|
|
_this.handleValue(val, String(key));
|
|
|
};
|
|
|
}
|
|
|
return refCallback;
|
|
|
};
|
|
|
// TODO: check callers that don't care about order. should use getAll instead
|
|
|
// NOTE: this method has become less valuable now that we are encouraged to map order by some other index
|
|
|
// TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and "collect"
|
|
|
RefMap.prototype.collect = function (startIndex, endIndex, step) {
|
|
|
return collectFromHash(this.currentMap, startIndex, endIndex, step);
|
|
|
};
|
|
|
RefMap.prototype.getAll = function () {
|
|
|
return hashValuesToArray(this.currentMap);
|
|
|
};
|
|
|
return RefMap;
|
|
|
}());
|
|
|
|
|
|
function computeShrinkWidth(chunkEls) {
|
|
|
var shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');
|
|
|
var largestWidth = 0;
|
|
|
for (var _i = 0, shrinkCells_1 = shrinkCells; _i < shrinkCells_1.length; _i++) {
|
|
|
var shrinkCell = shrinkCells_1[_i];
|
|
|
largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));
|
|
|
}
|
|
|
return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits
|
|
|
}
|
|
|
function getSectionHasLiquidHeight(props, sectionConfig) {
|
|
|
return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)
|
|
|
}
|
|
|
function getAllowYScrolling(props, sectionConfig) {
|
|
|
return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars
|
|
|
getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
|
|
|
}
|
|
|
// TODO: ONLY use `arg`. force out internal function to use same API
|
|
|
function renderChunkContent(sectionConfig, chunkConfig, arg) {
|
|
|
var expandRows = arg.expandRows;
|
|
|
var content = typeof chunkConfig.content === 'function' ?
|
|
|
chunkConfig.content(arg) :
|
|
|
createElement('table', {
|
|
|
className: [
|
|
|
chunkConfig.tableClassName,
|
|
|
sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',
|
|
|
].join(' '),
|
|
|
style: {
|
|
|
minWidth: arg.tableMinWidth,
|
|
|
width: arg.clientWidth,
|
|
|
height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height
|
|
|
},
|
|
|
}, arg.tableColGroupNode, createElement('tbody', {}, typeof chunkConfig.rowContent === 'function' ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));
|
|
|
return content;
|
|
|
}
|
|
|
function isColPropsEqual(cols0, cols1) {
|
|
|
return isArraysEqual(cols0, cols1, isPropsEqual);
|
|
|
}
|
|
|
function renderMicroColGroup(cols, shrinkWidth) {
|
|
|
var colNodes = [];
|
|
|
/*
|
|
|
for ColProps with spans, it would have been great to make a single <col span="">
|
|
|
HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.
|
|
|
SOLUTION: making individual <col> elements makes Chrome behave.
|
|
|
*/
|
|
|
for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {
|
|
|
var colProps = cols_1[_i];
|
|
|
var span = colProps.span || 1;
|
|
|
for (var i = 0; i < span; i += 1) {
|
|
|
colNodes.push(createElement("col", { style: {
|
|
|
width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),
|
|
|
minWidth: colProps.minWidth || '',
|
|
|
} }));
|
|
|
}
|
|
|
}
|
|
|
return createElement.apply(void 0, __spreadArray(['colgroup', {}], colNodes));
|
|
|
}
|
|
|
function sanitizeShrinkWidth(shrinkWidth) {
|
|
|
/* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
|
|
|
4 accounts for 2 2-pixel borders. TODO: better solution? */
|
|
|
return shrinkWidth == null ? 4 : shrinkWidth;
|
|
|
}
|
|
|
function hasShrinkWidth(cols) {
|
|
|
for (var _i = 0, cols_2 = cols; _i < cols_2.length; _i++) {
|
|
|
var col = cols_2[_i];
|
|
|
if (col.width === 'shrink') {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
function getScrollGridClassNames(liquid, context) {
|
|
|
var classNames = [
|
|
|
'fc-scrollgrid',
|
|
|
context.theme.getClass('table'),
|
|
|
];
|
|
|
if (liquid) {
|
|
|
classNames.push('fc-scrollgrid-liquid');
|
|
|
}
|
|
|
return classNames;
|
|
|
}
|
|
|
function getSectionClassNames(sectionConfig, wholeTableVGrow) {
|
|
|
var classNames = [
|
|
|
'fc-scrollgrid-section',
|
|
|
"fc-scrollgrid-section-" + sectionConfig.type,
|
|
|
sectionConfig.className, // used?
|
|
|
];
|
|
|
if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
|
|
|
classNames.push('fc-scrollgrid-section-liquid');
|
|
|
}
|
|
|
if (sectionConfig.isSticky) {
|
|
|
classNames.push('fc-scrollgrid-section-sticky');
|
|
|
}
|
|
|
return classNames;
|
|
|
}
|
|
|
function renderScrollShim(arg) {
|
|
|
return (createElement("div", { className: "fc-scrollgrid-sticky-shim", style: {
|
|
|
width: arg.clientWidth,
|
|
|
minWidth: arg.tableMinWidth,
|
|
|
} }));
|
|
|
}
|
|
|
function getStickyHeaderDates(options) {
|
|
|
var stickyHeaderDates = options.stickyHeaderDates;
|
|
|
if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {
|
|
|
stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';
|
|
|
}
|
|
|
return stickyHeaderDates;
|
|
|
}
|
|
|
function getStickyFooterScrollbar(options) {
|
|
|
var stickyFooterScrollbar = options.stickyFooterScrollbar;
|
|
|
if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {
|
|
|
stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';
|
|
|
}
|
|
|
return stickyFooterScrollbar;
|
|
|
}
|
|
|
|
|
|
var SimpleScrollGrid = /** @class */ (function (_super) {
|
|
|
__extends(SimpleScrollGrid, _super);
|
|
|
function SimpleScrollGrid() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.processCols = memoize(function (a) { return a; }, isColPropsEqual); // so we get same `cols` props every time
|
|
|
// yucky to memoize VNodes, but much more efficient for consumers
|
|
|
_this.renderMicroColGroup = memoize(renderMicroColGroup);
|
|
|
_this.scrollerRefs = new RefMap();
|
|
|
_this.scrollerElRefs = new RefMap(_this._handleScrollerEl.bind(_this));
|
|
|
_this.state = {
|
|
|
shrinkWidth: null,
|
|
|
forceYScrollbars: false,
|
|
|
scrollerClientWidths: {},
|
|
|
scrollerClientHeights: {},
|
|
|
};
|
|
|
// TODO: can do a really simple print-view. dont need to join rows
|
|
|
_this.handleSizing = function () {
|
|
|
_this.setState(__assign({ shrinkWidth: _this.computeShrinkWidth() }, _this.computeScrollerDims()));
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
SimpleScrollGrid.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, state = _a.state, context = _a.context;
|
|
|
var sectionConfigs = props.sections || [];
|
|
|
var cols = this.processCols(props.cols);
|
|
|
var microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
|
|
|
var classNames = getScrollGridClassNames(props.liquid, context);
|
|
|
if (props.collapsibleWidth) {
|
|
|
classNames.push('fc-scrollgrid-collapsible');
|
|
|
}
|
|
|
// TODO: make DRY
|
|
|
var configCnt = sectionConfigs.length;
|
|
|
var configI = 0;
|
|
|
var currentConfig;
|
|
|
var headSectionNodes = [];
|
|
|
var bodySectionNodes = [];
|
|
|
var footSectionNodes = [];
|
|
|
while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
|
|
|
headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode));
|
|
|
configI += 1;
|
|
|
}
|
|
|
while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
|
|
|
bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode));
|
|
|
configI += 1;
|
|
|
}
|
|
|
while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
|
|
|
footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode));
|
|
|
configI += 1;
|
|
|
}
|
|
|
// firefox bug: when setting height on table and there is a thead or tfoot,
|
|
|
// the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)
|
|
|
// use getCanVGrowWithinCell as a way to detect table-stupid firefox.
|
|
|
// if so, use a simpler dom structure, jam everything into a lone tbody.
|
|
|
var isBuggy = !getCanVGrowWithinCell();
|
|
|
return createElement('table', {
|
|
|
className: classNames.join(' '),
|
|
|
style: { height: props.height },
|
|
|
}, Boolean(!isBuggy && headSectionNodes.length) && createElement.apply(void 0, __spreadArray(['thead', {}], headSectionNodes)), Boolean(!isBuggy && bodySectionNodes.length) && createElement.apply(void 0, __spreadArray(['tbody', {}], bodySectionNodes)), Boolean(!isBuggy && footSectionNodes.length) && createElement.apply(void 0, __spreadArray(['tfoot', {}], footSectionNodes)), isBuggy && createElement.apply(void 0, __spreadArray(__spreadArray(__spreadArray(['tbody', {}], headSectionNodes), bodySectionNodes), footSectionNodes)));
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.renderSection = function (sectionConfig, microColGroupNode) {
|
|
|
if ('outerContent' in sectionConfig) {
|
|
|
return (createElement(Fragment, { key: sectionConfig.key }, sectionConfig.outerContent));
|
|
|
}
|
|
|
return (createElement("tr", { key: sectionConfig.key, className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk)));
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.renderChunkTd = function (sectionConfig, microColGroupNode, chunkConfig) {
|
|
|
if ('outerContent' in chunkConfig) {
|
|
|
return chunkConfig.outerContent;
|
|
|
}
|
|
|
var props = this.props;
|
|
|
var _a = this.state, forceYScrollbars = _a.forceYScrollbars, scrollerClientWidths = _a.scrollerClientWidths, scrollerClientHeights = _a.scrollerClientHeights;
|
|
|
var needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?
|
|
|
var isLiquid = getSectionHasLiquidHeight(props, sectionConfig);
|
|
|
// for `!props.liquid` - is WHOLE scrollgrid natural height?
|
|
|
// TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars
|
|
|
var overflowY = !props.liquid ? 'visible' :
|
|
|
forceYScrollbars ? 'scroll' :
|
|
|
!needsYScrolling ? 'hidden' :
|
|
|
'auto';
|
|
|
var sectionKey = sectionConfig.key;
|
|
|
var content = renderChunkContent(sectionConfig, chunkConfig, {
|
|
|
tableColGroupNode: microColGroupNode,
|
|
|
tableMinWidth: '',
|
|
|
clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,
|
|
|
clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,
|
|
|
expandRows: sectionConfig.expandRows,
|
|
|
syncRowHeights: false,
|
|
|
rowSyncHeights: [],
|
|
|
reportRowHeightChange: function () { },
|
|
|
});
|
|
|
return (createElement("td", { ref: chunkConfig.elRef },
|
|
|
createElement("div", { className: "fc-scroller-harness" + (isLiquid ? ' fc-scroller-harness-liquid' : '') },
|
|
|
createElement(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness
|
|
|
: true }, content))));
|
|
|
};
|
|
|
SimpleScrollGrid.prototype._handleScrollerEl = function (scrollerEl, key) {
|
|
|
var section = getSectionByKey(this.props.sections, key);
|
|
|
if (section) {
|
|
|
setRef(section.chunk.scrollerElRef, scrollerEl);
|
|
|
}
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.componentDidMount = function () {
|
|
|
this.handleSizing();
|
|
|
this.context.addResizeHandler(this.handleSizing);
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.componentDidUpdate = function () {
|
|
|
// TODO: need better solution when state contains non-sizing things
|
|
|
this.handleSizing();
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.componentWillUnmount = function () {
|
|
|
this.context.removeResizeHandler(this.handleSizing);
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.computeShrinkWidth = function () {
|
|
|
return hasShrinkWidth(this.props.cols)
|
|
|
? computeShrinkWidth(this.scrollerElRefs.getAll())
|
|
|
: 0;
|
|
|
};
|
|
|
SimpleScrollGrid.prototype.computeScrollerDims = function () {
|
|
|
var scrollbarWidth = getScrollbarWidths();
|
|
|
var _a = this, scrollerRefs = _a.scrollerRefs, scrollerElRefs = _a.scrollerElRefs;
|
|
|
var forceYScrollbars = false;
|
|
|
var scrollerClientWidths = {};
|
|
|
var scrollerClientHeights = {};
|
|
|
for (var sectionKey in scrollerRefs.currentMap) {
|
|
|
var scroller = scrollerRefs.currentMap[sectionKey];
|
|
|
if (scroller && scroller.needsYScrolling()) {
|
|
|
forceYScrollbars = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
for (var _i = 0, _b = this.props.sections; _i < _b.length; _i++) {
|
|
|
var section = _b[_i];
|
|
|
var sectionKey = section.key;
|
|
|
var scrollerEl = scrollerElRefs.currentMap[sectionKey];
|
|
|
if (scrollerEl) {
|
|
|
var harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
|
|
|
scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
|
|
|
? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
|
|
|
: 0));
|
|
|
scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
|
|
|
}
|
|
|
}
|
|
|
return { forceYScrollbars: forceYScrollbars, scrollerClientWidths: scrollerClientWidths, scrollerClientHeights: scrollerClientHeights };
|
|
|
};
|
|
|
return SimpleScrollGrid;
|
|
|
}(BaseComponent));
|
|
|
SimpleScrollGrid.addStateEquality({
|
|
|
scrollerClientWidths: isPropsEqual,
|
|
|
scrollerClientHeights: isPropsEqual,
|
|
|
});
|
|
|
function getSectionByKey(sections, key) {
|
|
|
for (var _i = 0, sections_1 = sections; _i < sections_1.length; _i++) {
|
|
|
var section = sections_1[_i];
|
|
|
if (section.key === key) {
|
|
|
return section;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var EventRoot = /** @class */ (function (_super) {
|
|
|
__extends(EventRoot, _super);
|
|
|
function EventRoot() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.elRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
EventRoot.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var seg = props.seg;
|
|
|
var eventRange = seg.eventRange;
|
|
|
var ui = eventRange.ui;
|
|
|
var hookProps = {
|
|
|
event: new EventApi(context, eventRange.def, eventRange.instance),
|
|
|
view: context.viewApi,
|
|
|
timeText: props.timeText,
|
|
|
textColor: ui.textColor,
|
|
|
backgroundColor: ui.backgroundColor,
|
|
|
borderColor: ui.borderColor,
|
|
|
isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
|
|
|
isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
|
|
|
isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
|
|
|
isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
|
|
|
isStart: Boolean(seg.isStart),
|
|
|
isEnd: Boolean(seg.isEnd),
|
|
|
isPast: Boolean(props.isPast),
|
|
|
isFuture: Boolean(props.isFuture),
|
|
|
isToday: Boolean(props.isToday),
|
|
|
isSelected: Boolean(props.isSelected),
|
|
|
isDragging: Boolean(props.isDragging),
|
|
|
isResizing: Boolean(props.isResizing),
|
|
|
};
|
|
|
var standardClassNames = getEventClassNames(hookProps).concat(ui.classNames);
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.eventClassNames, content: options.eventContent, defaultContent: props.defaultContent, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount, elRef: this.elRef }, function (rootElRef, customClassNames, innerElRef, innerContent) { return props.children(rootElRef, standardClassNames.concat(customClassNames), innerElRef, innerContent, hookProps); }));
|
|
|
};
|
|
|
EventRoot.prototype.componentDidMount = function () {
|
|
|
setElSeg(this.elRef.current, this.props.seg);
|
|
|
};
|
|
|
/*
|
|
|
need to re-assign seg to the element if seg changes, even if the element is the same
|
|
|
*/
|
|
|
EventRoot.prototype.componentDidUpdate = function (prevProps) {
|
|
|
var seg = this.props.seg;
|
|
|
if (seg !== prevProps.seg) {
|
|
|
setElSeg(this.elRef.current, seg);
|
|
|
}
|
|
|
};
|
|
|
return EventRoot;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
// should not be a purecomponent
|
|
|
var StandardEvent = /** @class */ (function (_super) {
|
|
|
__extends(StandardEvent, _super);
|
|
|
function StandardEvent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
StandardEvent.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var seg = props.seg;
|
|
|
var timeFormat = context.options.eventTimeFormat || props.defaultTimeFormat;
|
|
|
var timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
|
|
|
return (createElement(EventRoot, { seg: seg, timeText: timeText, disableDragging: props.disableDragging, disableResizing: props.disableResizing, defaultContent: props.defaultContent || renderInnerContent$1$1, isDragging: props.isDragging, isResizing: props.isResizing, isDateSelecting: props.isDateSelecting, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("a", __assign({ className: props.extraClassNames.concat(classNames).join(' '), style: {
|
|
|
borderColor: hookProps.borderColor,
|
|
|
backgroundColor: hookProps.backgroundColor,
|
|
|
}, ref: rootElRef }, getSegAnchorAttrs$1(seg)),
|
|
|
createElement("div", { className: "fc-event-main", ref: innerElRef, style: { color: hookProps.textColor } }, innerContent),
|
|
|
hookProps.isStartResizable &&
|
|
|
createElement("div", { className: "fc-event-resizer fc-event-resizer-start" }),
|
|
|
hookProps.isEndResizable &&
|
|
|
createElement("div", { className: "fc-event-resizer fc-event-resizer-end" }))); }));
|
|
|
};
|
|
|
return StandardEvent;
|
|
|
}(BaseComponent));
|
|
|
function renderInnerContent$1$1(innerProps) {
|
|
|
return (createElement("div", { className: "fc-event-main-frame" },
|
|
|
innerProps.timeText && (createElement("div", { className: "fc-event-time" }, innerProps.timeText)),
|
|
|
createElement("div", { className: "fc-event-title-container" },
|
|
|
createElement("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || createElement(Fragment, null, "\u00A0")))));
|
|
|
}
|
|
|
function getSegAnchorAttrs$1(seg) {
|
|
|
var url = seg.eventRange.def.url;
|
|
|
return url ? { href: url } : {};
|
|
|
}
|
|
|
|
|
|
var NowIndicatorRoot = function (props) { return (createElement(ViewContextType.Consumer, null, function (context) {
|
|
|
var options = context.options;
|
|
|
var hookProps = {
|
|
|
isAxis: props.isAxis,
|
|
|
date: context.dateEnv.toDate(props.date),
|
|
|
view: context.viewApi,
|
|
|
};
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.nowIndicatorClassNames, content: options.nowIndicatorContent, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount }, props.children));
|
|
|
})); };
|
|
|
|
|
|
var DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
|
|
|
var DayCellContent = /** @class */ (function (_super) {
|
|
|
__extends(DayCellContent, _super);
|
|
|
function DayCellContent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
DayCellContent.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var hookProps = refineDayCellHookProps({
|
|
|
date: props.date,
|
|
|
dateProfile: props.dateProfile,
|
|
|
todayRange: props.todayRange,
|
|
|
showDayNumber: props.showDayNumber,
|
|
|
extraProps: props.extraHookProps,
|
|
|
viewApi: context.viewApi,
|
|
|
dateEnv: context.dateEnv,
|
|
|
});
|
|
|
return (createElement(ContentHook, { hookProps: hookProps, content: options.dayCellContent, defaultContent: props.defaultContent }, props.children));
|
|
|
};
|
|
|
return DayCellContent;
|
|
|
}(BaseComponent));
|
|
|
function refineDayCellHookProps(raw) {
|
|
|
var date = raw.date, dateEnv = raw.dateEnv;
|
|
|
var dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile);
|
|
|
return __assign(__assign(__assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '' }), raw.extraProps);
|
|
|
}
|
|
|
|
|
|
var DayCellRoot = /** @class */ (function (_super) {
|
|
|
__extends(DayCellRoot, _super);
|
|
|
function DayCellRoot() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.refineHookProps = memoizeObjArg(refineDayCellHookProps);
|
|
|
_this.normalizeClassNames = buildClassNameNormalizer();
|
|
|
return _this;
|
|
|
}
|
|
|
DayCellRoot.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var hookProps = this.refineHookProps({
|
|
|
date: props.date,
|
|
|
dateProfile: props.dateProfile,
|
|
|
todayRange: props.todayRange,
|
|
|
showDayNumber: props.showDayNumber,
|
|
|
extraProps: props.extraHookProps,
|
|
|
viewApi: context.viewApi,
|
|
|
dateEnv: context.dateEnv,
|
|
|
});
|
|
|
var classNames = getDayClassNames(hookProps, context.theme).concat(hookProps.isDisabled
|
|
|
? [] // don't use custom classNames if disabled
|
|
|
: this.normalizeClassNames(options.dayCellClassNames, hookProps));
|
|
|
var dataAttrs = hookProps.isDisabled ? {} : {
|
|
|
'data-date': formatDayString(props.date),
|
|
|
};
|
|
|
return (createElement(MountHook, { hookProps: hookProps, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount, elRef: props.elRef }, function (rootElRef) { return props.children(rootElRef, classNames, dataAttrs, hookProps.isDisabled); }));
|
|
|
};
|
|
|
return DayCellRoot;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
function renderFill(fillType) {
|
|
|
return (createElement("div", { className: "fc-" + fillType }));
|
|
|
}
|
|
|
var BgEvent = function (props) { return (createElement(EventRoot, { defaultContent: renderInnerContent$3, seg: props.seg /* uselesss i think */, timeText: "", disableDragging: true, disableResizing: true, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("div", { ref: rootElRef, className: ['fc-bg-event'].concat(classNames).join(' '), style: {
|
|
|
backgroundColor: hookProps.backgroundColor,
|
|
|
} }, innerContent)); })); };
|
|
|
function renderInnerContent$3(props) {
|
|
|
var title = props.event.title;
|
|
|
return title && (createElement("div", { className: "fc-event-title" }, props.event.title));
|
|
|
}
|
|
|
|
|
|
var WeekNumberRoot = function (props) { return (createElement(ViewContextType.Consumer, null, function (context) {
|
|
|
var dateEnv = context.dateEnv, options = context.options;
|
|
|
var date = props.date;
|
|
|
var format = options.weekNumberFormat || props.defaultFormat;
|
|
|
var num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
|
|
|
var text = dateEnv.format(date, format);
|
|
|
var hookProps = { num: num, text: text, date: date };
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.weekNumberClassNames, content: options.weekNumberContent, defaultContent: renderInner, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount }, props.children));
|
|
|
})); };
|
|
|
function renderInner(innerProps) {
|
|
|
return innerProps.text;
|
|
|
}
|
|
|
|
|
|
var PADDING_FROM_VIEWPORT = 10;
|
|
|
var Popover = /** @class */ (function (_super) {
|
|
|
__extends(Popover, _super);
|
|
|
function Popover() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.handleRootEl = function (el) {
|
|
|
_this.rootEl = el;
|
|
|
if (_this.props.elRef) {
|
|
|
setRef(_this.props.elRef, el);
|
|
|
}
|
|
|
};
|
|
|
// Triggered when the user clicks *anywhere* in the document, for the autoHide feature
|
|
|
_this.handleDocumentMousedown = function (ev) {
|
|
|
// only hide the popover if the click happened outside the popover
|
|
|
var target = getEventTargetViaRoot(ev);
|
|
|
if (!_this.rootEl.contains(target)) {
|
|
|
_this.handleCloseClick();
|
|
|
}
|
|
|
};
|
|
|
_this.handleCloseClick = function () {
|
|
|
var onClose = _this.props.onClose;
|
|
|
if (onClose) {
|
|
|
onClose();
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
Popover.prototype.render = function () {
|
|
|
var theme = this.context.theme;
|
|
|
var props = this.props;
|
|
|
var classNames = [
|
|
|
'fc-popover',
|
|
|
theme.getClass('popover'),
|
|
|
].concat(props.extraClassNames || []);
|
|
|
return createPortal(createElement("div", __assign({ className: classNames.join(' ') }, props.extraAttrs, { ref: this.handleRootEl }),
|
|
|
createElement("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
|
|
|
createElement("span", { className: "fc-popover-title" }, props.title),
|
|
|
createElement("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), onClick: this.handleCloseClick })),
|
|
|
createElement("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
|
|
|
};
|
|
|
Popover.prototype.componentDidMount = function () {
|
|
|
document.addEventListener('mousedown', this.handleDocumentMousedown);
|
|
|
this.updateSize();
|
|
|
};
|
|
|
Popover.prototype.componentWillUnmount = function () {
|
|
|
document.removeEventListener('mousedown', this.handleDocumentMousedown);
|
|
|
};
|
|
|
Popover.prototype.updateSize = function () {
|
|
|
var isRtl = this.context.isRtl;
|
|
|
var _a = this.props, alignmentEl = _a.alignmentEl, alignGridTop = _a.alignGridTop;
|
|
|
var rootEl = this.rootEl;
|
|
|
var alignmentRect = computeClippedClientRect(alignmentEl);
|
|
|
if (alignmentRect) {
|
|
|
var popoverDims = rootEl.getBoundingClientRect();
|
|
|
// position relative to viewport
|
|
|
var popoverTop = alignGridTop
|
|
|
? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top
|
|
|
: alignmentRect.top;
|
|
|
var popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
|
|
|
// constrain
|
|
|
popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
|
|
|
popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
|
|
|
popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
|
|
|
var origin_1 = rootEl.offsetParent.getBoundingClientRect();
|
|
|
applyStyle(rootEl, {
|
|
|
top: popoverTop - origin_1.top,
|
|
|
left: popoverLeft - origin_1.left,
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
return Popover;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var MorePopover = /** @class */ (function (_super) {
|
|
|
__extends(MorePopover, _super);
|
|
|
function MorePopover() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.handleRootEl = function (rootEl) {
|
|
|
_this.rootEl = rootEl;
|
|
|
if (rootEl) {
|
|
|
_this.context.registerInteractiveComponent(_this, {
|
|
|
el: rootEl,
|
|
|
useEventCenter: false,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
_this.context.unregisterInteractiveComponent(_this);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
MorePopover.prototype.render = function () {
|
|
|
var _a = this.context, options = _a.options, dateEnv = _a.dateEnv;
|
|
|
var props = this.props;
|
|
|
var startDate = props.startDate, todayRange = props.todayRange, dateProfile = props.dateProfile;
|
|
|
var title = dateEnv.format(startDate, options.dayPopoverFormat);
|
|
|
return (createElement(DayCellRoot, { date: startDate, dateProfile: dateProfile, todayRange: todayRange, elRef: this.handleRootEl }, function (rootElRef, dayClassNames, dataAttrs) { return (createElement(Popover, { elRef: rootElRef, title: title, extraClassNames: ['fc-more-popover'].concat(dayClassNames), extraAttrs: dataAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
|
|
|
createElement(DayCellContent, { date: startDate, dateProfile: dateProfile, todayRange: todayRange }, function (innerElRef, innerContent) { return (innerContent &&
|
|
|
createElement("div", { className: "fc-more-popover-misc", ref: innerElRef }, innerContent)); }),
|
|
|
props.children)); }));
|
|
|
};
|
|
|
MorePopover.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
|
|
|
var _a = this, rootEl = _a.rootEl, props = _a.props;
|
|
|
if (positionLeft >= 0 && positionLeft < elWidth &&
|
|
|
positionTop >= 0 && positionTop < elHeight) {
|
|
|
return {
|
|
|
dateProfile: props.dateProfile,
|
|
|
dateSpan: __assign({ allDay: true, range: {
|
|
|
start: props.startDate,
|
|
|
end: props.endDate,
|
|
|
} }, props.extraDateSpan),
|
|
|
dayEl: rootEl,
|
|
|
rect: {
|
|
|
left: 0,
|
|
|
top: 0,
|
|
|
right: elWidth,
|
|
|
bottom: elHeight,
|
|
|
},
|
|
|
layer: 1, // important when comparing with hits from other components
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
return MorePopover;
|
|
|
}(DateComponent));
|
|
|
|
|
|
var MoreLinkRoot = /** @class */ (function (_super) {
|
|
|
__extends(MoreLinkRoot, _super);
|
|
|
function MoreLinkRoot() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.linkElRef = createRef();
|
|
|
_this.state = {
|
|
|
isPopoverOpen: false,
|
|
|
};
|
|
|
_this.handleClick = function (ev) {
|
|
|
var _a = _this, props = _a.props, context = _a.context;
|
|
|
var moreLinkClick = context.options.moreLinkClick;
|
|
|
var date = computeRange(props).start;
|
|
|
function buildPublicSeg(seg) {
|
|
|
var _a = seg.eventRange, def = _a.def, instance = _a.instance, range = _a.range;
|
|
|
return {
|
|
|
event: new EventApi(context, def, instance),
|
|
|
start: context.dateEnv.toDate(range.start),
|
|
|
end: context.dateEnv.toDate(range.end),
|
|
|
isStart: seg.isStart,
|
|
|
isEnd: seg.isEnd,
|
|
|
};
|
|
|
}
|
|
|
if (typeof moreLinkClick === 'function') {
|
|
|
moreLinkClick = moreLinkClick({
|
|
|
date: date,
|
|
|
allDay: Boolean(props.allDayDate),
|
|
|
allSegs: props.allSegs.map(buildPublicSeg),
|
|
|
hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
|
|
|
jsEvent: ev,
|
|
|
view: context.viewApi,
|
|
|
});
|
|
|
}
|
|
|
if (!moreLinkClick || moreLinkClick === 'popover') {
|
|
|
_this.setState({ isPopoverOpen: true });
|
|
|
}
|
|
|
else if (typeof moreLinkClick === 'string') { // a view name
|
|
|
context.calendarApi.zoomTo(date, moreLinkClick);
|
|
|
}
|
|
|
};
|
|
|
_this.handlePopoverClose = function () {
|
|
|
_this.setState({ isPopoverOpen: false });
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
MoreLinkRoot.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var props = this.props;
|
|
|
return (createElement(ViewContextType.Consumer, null, function (context) {
|
|
|
var viewApi = context.viewApi, options = context.options, calendarApi = context.calendarApi;
|
|
|
var moreLinkText = options.moreLinkText;
|
|
|
var moreCnt = props.moreCnt;
|
|
|
var range = computeRange(props);
|
|
|
var hookProps = {
|
|
|
num: moreCnt,
|
|
|
shortText: "+" + moreCnt,
|
|
|
text: typeof moreLinkText === 'function'
|
|
|
? moreLinkText.call(calendarApi, moreCnt)
|
|
|
: "+" + moreCnt + " " + moreLinkText,
|
|
|
view: viewApi,
|
|
|
};
|
|
|
return (createElement(Fragment, null,
|
|
|
Boolean(props.moreCnt) && (createElement(RenderHook, { elRef: _this.linkElRef, hookProps: hookProps, classNames: options.moreLinkClassNames, content: options.moreLinkContent, defaultContent: props.defaultContent || renderMoreLinkInner$1, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return props.children(rootElRef, ['fc-more-link'].concat(customClassNames), innerElRef, innerContent, _this.handleClick); })),
|
|
|
_this.state.isPopoverOpen && (createElement(MorePopover, { startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: _this.parentEl, alignmentEl: props.alignmentElRef.current, alignGridTop: props.alignGridTop, onClose: _this.handlePopoverClose }, props.popoverContent()))));
|
|
|
}));
|
|
|
};
|
|
|
MoreLinkRoot.prototype.componentDidMount = function () {
|
|
|
this.updateParentEl();
|
|
|
};
|
|
|
MoreLinkRoot.prototype.componentDidUpdate = function () {
|
|
|
this.updateParentEl();
|
|
|
};
|
|
|
MoreLinkRoot.prototype.updateParentEl = function () {
|
|
|
if (this.linkElRef.current) {
|
|
|
this.parentEl = elementClosest(this.linkElRef.current, '.fc-view-harness');
|
|
|
}
|
|
|
};
|
|
|
return MoreLinkRoot;
|
|
|
}(BaseComponent));
|
|
|
function renderMoreLinkInner$1(props) {
|
|
|
return props.text;
|
|
|
}
|
|
|
function computeRange(props) {
|
|
|
if (props.allDayDate) {
|
|
|
return {
|
|
|
start: props.allDayDate,
|
|
|
end: addDays(props.allDayDate, 1),
|
|
|
};
|
|
|
}
|
|
|
var hiddenSegs = props.hiddenSegs;
|
|
|
return {
|
|
|
start: computeEarliestSegStart(hiddenSegs),
|
|
|
end: computeLatestSegEnd(hiddenSegs),
|
|
|
};
|
|
|
}
|
|
|
function computeEarliestSegStart(segs) {
|
|
|
return segs.reduce(pickEarliestStart).eventRange.range.start;
|
|
|
}
|
|
|
function pickEarliestStart(seg0, seg1) {
|
|
|
return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
|
|
|
}
|
|
|
function computeLatestSegEnd(segs) {
|
|
|
return segs.reduce(pickLatestEnd).eventRange.range.end;
|
|
|
}
|
|
|
function pickLatestEnd(seg0, seg1) {
|
|
|
return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
|
|
|
}
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
|
|
|
var Calendar = /** @class */ (function (_super) {
|
|
|
__extends(Calendar, _super);
|
|
|
function Calendar(el, optionOverrides) {
|
|
|
if (optionOverrides === void 0) { optionOverrides = {}; }
|
|
|
var _this = _super.call(this) || this;
|
|
|
_this.isRendering = false;
|
|
|
_this.isRendered = false;
|
|
|
_this.currentClassNames = [];
|
|
|
_this.customContentRenderId = 0; // will affect custom generated classNames?
|
|
|
_this.handleAction = function (action) {
|
|
|
// actions we know we want to render immediately
|
|
|
switch (action.type) {
|
|
|
case 'SET_EVENT_DRAG':
|
|
|
case 'SET_EVENT_RESIZE':
|
|
|
_this.renderRunner.tryDrain();
|
|
|
}
|
|
|
};
|
|
|
_this.handleData = function (data) {
|
|
|
_this.currentData = data;
|
|
|
_this.renderRunner.request(data.calendarOptions.rerenderDelay);
|
|
|
};
|
|
|
_this.handleRenderRequest = function () {
|
|
|
if (_this.isRendering) {
|
|
|
_this.isRendered = true;
|
|
|
var currentData_1 = _this.currentData;
|
|
|
render(createElement(CalendarRoot, { options: currentData_1.calendarOptions, theme: currentData_1.theme, emitter: currentData_1.emitter }, function (classNames, height, isHeightAuto, forPrint) {
|
|
|
_this.setClassNames(classNames);
|
|
|
_this.setHeight(height);
|
|
|
return (createElement(CustomContentRenderContext.Provider, { value: _this.customContentRenderId },
|
|
|
createElement(CalendarContent, __assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData_1))));
|
|
|
}), _this.el);
|
|
|
}
|
|
|
else if (_this.isRendered) {
|
|
|
_this.isRendered = false;
|
|
|
unmountComponentAtNode(_this.el);
|
|
|
_this.setClassNames([]);
|
|
|
_this.setHeight('');
|
|
|
}
|
|
|
flushToDom();
|
|
|
};
|
|
|
_this.el = el;
|
|
|
_this.renderRunner = new DelayedRunner(_this.handleRenderRequest);
|
|
|
new CalendarDataManager({
|
|
|
optionOverrides: optionOverrides,
|
|
|
calendarApi: _this,
|
|
|
onAction: _this.handleAction,
|
|
|
onData: _this.handleData,
|
|
|
});
|
|
|
return _this;
|
|
|
}
|
|
|
Object.defineProperty(Calendar.prototype, "view", {
|
|
|
get: function () { return this.currentData.viewApi; } // for public API
|
|
|
,
|
|
|
enumerable: false,
|
|
|
configurable: true
|
|
|
});
|
|
|
Calendar.prototype.render = function () {
|
|
|
var wasRendering = this.isRendering;
|
|
|
if (!wasRendering) {
|
|
|
this.isRendering = true;
|
|
|
}
|
|
|
else {
|
|
|
this.customContentRenderId += 1;
|
|
|
}
|
|
|
this.renderRunner.request();
|
|
|
if (wasRendering) {
|
|
|
this.updateSize();
|
|
|
}
|
|
|
};
|
|
|
Calendar.prototype.destroy = function () {
|
|
|
if (this.isRendering) {
|
|
|
this.isRendering = false;
|
|
|
this.renderRunner.request();
|
|
|
}
|
|
|
};
|
|
|
Calendar.prototype.updateSize = function () {
|
|
|
_super.prototype.updateSize.call(this);
|
|
|
flushToDom();
|
|
|
};
|
|
|
Calendar.prototype.batchRendering = function (func) {
|
|
|
this.renderRunner.pause('batchRendering');
|
|
|
func();
|
|
|
this.renderRunner.resume('batchRendering');
|
|
|
};
|
|
|
Calendar.prototype.pauseRendering = function () {
|
|
|
this.renderRunner.pause('pauseRendering');
|
|
|
};
|
|
|
Calendar.prototype.resumeRendering = function () {
|
|
|
this.renderRunner.resume('pauseRendering', true);
|
|
|
};
|
|
|
Calendar.prototype.resetOptions = function (optionOverrides, append) {
|
|
|
this.currentDataManager.resetOptions(optionOverrides, append);
|
|
|
};
|
|
|
Calendar.prototype.setClassNames = function (classNames) {
|
|
|
if (!isArraysEqual(classNames, this.currentClassNames)) {
|
|
|
var classList = this.el.classList;
|
|
|
for (var _i = 0, _a = this.currentClassNames; _i < _a.length; _i++) {
|
|
|
var className = _a[_i];
|
|
|
classList.remove(className);
|
|
|
}
|
|
|
for (var _b = 0, classNames_1 = classNames; _b < classNames_1.length; _b++) {
|
|
|
var className = classNames_1[_b];
|
|
|
classList.add(className);
|
|
|
}
|
|
|
this.currentClassNames = classNames;
|
|
|
}
|
|
|
};
|
|
|
Calendar.prototype.setHeight = function (height) {
|
|
|
applyStyleProp(this.el, 'height', height);
|
|
|
};
|
|
|
return Calendar;
|
|
|
}(CalendarApi));
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
|
|
|
/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
|
|
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
|
// It is a manager for a Table subcomponent, which does most of the heavy lifting.
|
|
|
// It is responsible for managing width/height.
|
|
|
var TableView = /** @class */ (function (_super) {
|
|
|
__extends(TableView, _super);
|
|
|
function TableView() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.headerElRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
TableView.prototype.renderSimpleLayout = function (headerRowContent, bodyContent) {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var sections = [];
|
|
|
var stickyHeaderDates = getStickyHeaderDates(context.options);
|
|
|
if (headerRowContent) {
|
|
|
sections.push({
|
|
|
type: 'header',
|
|
|
key: 'header',
|
|
|
isSticky: stickyHeaderDates,
|
|
|
chunk: {
|
|
|
elRef: this.headerElRef,
|
|
|
tableClassName: 'fc-col-header',
|
|
|
rowContent: headerRowContent,
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'body',
|
|
|
liquid: true,
|
|
|
chunk: { content: bodyContent },
|
|
|
});
|
|
|
return (createElement(ViewRoot, { viewSpec: context.viewSpec }, function (rootElRef, classNames) { return (createElement("div", { ref: rootElRef, className: ['fc-daygrid'].concat(classNames).join(' ') },
|
|
|
createElement(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [] /* TODO: make optional? */, sections: sections }))); }));
|
|
|
};
|
|
|
TableView.prototype.renderHScrollLayout = function (headerRowContent, bodyContent, colCnt, dayMinWidth) {
|
|
|
var ScrollGrid = this.context.pluginHooks.scrollGridImpl;
|
|
|
if (!ScrollGrid) {
|
|
|
throw new Error('No ScrollGrid implementation');
|
|
|
}
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
|
|
|
var stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
|
|
|
var sections = [];
|
|
|
if (headerRowContent) {
|
|
|
sections.push({
|
|
|
type: 'header',
|
|
|
key: 'header',
|
|
|
isSticky: stickyHeaderDates,
|
|
|
chunks: [{
|
|
|
key: 'main',
|
|
|
elRef: this.headerElRef,
|
|
|
tableClassName: 'fc-col-header',
|
|
|
rowContent: headerRowContent,
|
|
|
}],
|
|
|
});
|
|
|
}
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'body',
|
|
|
liquid: true,
|
|
|
chunks: [{
|
|
|
key: 'main',
|
|
|
content: bodyContent,
|
|
|
}],
|
|
|
});
|
|
|
if (stickyFooterScrollbar) {
|
|
|
sections.push({
|
|
|
type: 'footer',
|
|
|
key: 'footer',
|
|
|
isSticky: true,
|
|
|
chunks: [{
|
|
|
key: 'main',
|
|
|
content: renderScrollShim,
|
|
|
}],
|
|
|
});
|
|
|
}
|
|
|
return (createElement(ViewRoot, { viewSpec: context.viewSpec }, function (rootElRef, classNames) { return (createElement("div", { ref: rootElRef, className: ['fc-daygrid'].concat(classNames).join(' ') },
|
|
|
createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections }))); }));
|
|
|
};
|
|
|
return TableView;
|
|
|
}(DateComponent));
|
|
|
|
|
|
function splitSegsByRow(segs, rowCnt) {
|
|
|
var byRow = [];
|
|
|
for (var i = 0; i < rowCnt; i += 1) {
|
|
|
byRow[i] = [];
|
|
|
}
|
|
|
for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
|
|
|
var seg = segs_1[_i];
|
|
|
byRow[seg.row].push(seg);
|
|
|
}
|
|
|
return byRow;
|
|
|
}
|
|
|
function splitSegsByFirstCol(segs, colCnt) {
|
|
|
var byCol = [];
|
|
|
for (var i = 0; i < colCnt; i += 1) {
|
|
|
byCol[i] = [];
|
|
|
}
|
|
|
for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
|
|
|
var seg = segs_2[_i];
|
|
|
byCol[seg.firstCol].push(seg);
|
|
|
}
|
|
|
return byCol;
|
|
|
}
|
|
|
function splitInteractionByRow(ui, rowCnt) {
|
|
|
var byRow = [];
|
|
|
if (!ui) {
|
|
|
for (var i = 0; i < rowCnt; i += 1) {
|
|
|
byRow[i] = null;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
for (var i = 0; i < rowCnt; i += 1) {
|
|
|
byRow[i] = {
|
|
|
affectedInstances: ui.affectedInstances,
|
|
|
isEvent: ui.isEvent,
|
|
|
segs: [],
|
|
|
};
|
|
|
}
|
|
|
for (var _i = 0, _a = ui.segs; _i < _a.length; _i++) {
|
|
|
var seg = _a[_i];
|
|
|
byRow[seg.row].segs.push(seg);
|
|
|
}
|
|
|
}
|
|
|
return byRow;
|
|
|
}
|
|
|
|
|
|
var TableCellTop = /** @class */ (function (_super) {
|
|
|
__extends(TableCellTop, _super);
|
|
|
function TableCellTop() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TableCellTop.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var navLinkAttrs = this.context.options.navLinks
|
|
|
? { 'data-navlink': buildNavLinkData(props.date), tabIndex: 0 }
|
|
|
: {};
|
|
|
return (createElement(DayCellContent, { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraHookProps: props.extraHookProps, defaultContent: renderTopInner }, function (innerElRef, innerContent) { return ((innerContent || props.forceDayTop) && (createElement("div", { className: "fc-daygrid-day-top", ref: innerElRef },
|
|
|
createElement("a", __assign({ className: "fc-daygrid-day-number" }, navLinkAttrs), innerContent || createElement(Fragment, null, "\u00A0"))))); }));
|
|
|
};
|
|
|
return TableCellTop;
|
|
|
}(BaseComponent));
|
|
|
function renderTopInner(props) {
|
|
|
return props.dayNumberText;
|
|
|
}
|
|
|
|
|
|
var DEFAULT_TABLE_EVENT_TIME_FORMAT = createFormatter({
|
|
|
hour: 'numeric',
|
|
|
minute: '2-digit',
|
|
|
omitZeroMinute: true,
|
|
|
meridiem: 'narrow',
|
|
|
});
|
|
|
function hasListItemDisplay(seg) {
|
|
|
var display = seg.eventRange.ui.display;
|
|
|
return display === 'list-item' || (display === 'auto' &&
|
|
|
!seg.eventRange.def.allDay &&
|
|
|
seg.firstCol === seg.lastCol && // can't be multi-day
|
|
|
seg.isStart && // "
|
|
|
seg.isEnd // "
|
|
|
);
|
|
|
}
|
|
|
|
|
|
var TableBlockEvent = /** @class */ (function (_super) {
|
|
|
__extends(TableBlockEvent, _super);
|
|
|
function TableBlockEvent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TableBlockEvent.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
return (createElement(StandardEvent, __assign({}, props, { extraClassNames: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
|
|
|
};
|
|
|
return TableBlockEvent;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var TableListItemEvent = /** @class */ (function (_super) {
|
|
|
__extends(TableListItemEvent, _super);
|
|
|
function TableListItemEvent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TableListItemEvent.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var timeFormat = context.options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
|
|
|
var timeText = buildSegTimeText(props.seg, timeFormat, context, true, props.defaultDisplayEventEnd);
|
|
|
return (createElement(EventRoot, { seg: props.seg, timeText: timeText, defaultContent: renderInnerContent$2, isDragging: props.isDragging, isResizing: false, isDateSelecting: false, isSelected: props.isSelected, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday }, function (rootElRef, classNames, innerElRef, innerContent) { return ( // we don't use styles!
|
|
|
createElement("a", __assign({ className: ['fc-daygrid-event', 'fc-daygrid-dot-event'].concat(classNames).join(' '), ref: rootElRef }, getSegAnchorAttrs(props.seg)), innerContent)); }));
|
|
|
};
|
|
|
return TableListItemEvent;
|
|
|
}(BaseComponent));
|
|
|
function renderInnerContent$2(innerProps) {
|
|
|
return (createElement(Fragment, null,
|
|
|
createElement("div", { className: "fc-daygrid-event-dot", style: { borderColor: innerProps.borderColor || innerProps.backgroundColor } }),
|
|
|
innerProps.timeText && (createElement("div", { className: "fc-event-time" }, innerProps.timeText)),
|
|
|
createElement("div", { className: "fc-event-title" }, innerProps.event.title || createElement(Fragment, null, "\u00A0"))));
|
|
|
}
|
|
|
function getSegAnchorAttrs(seg) {
|
|
|
var url = seg.eventRange.def.url;
|
|
|
return url ? { href: url } : {};
|
|
|
}
|
|
|
|
|
|
var TableCellMoreLink = /** @class */ (function (_super) {
|
|
|
__extends(TableCellMoreLink, _super);
|
|
|
function TableCellMoreLink() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.compileSegs = memoize(compileSegs);
|
|
|
return _this;
|
|
|
}
|
|
|
TableCellMoreLink.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
var _a = this.compileSegs(props.singlePlacements), allSegs = _a.allSegs, invisibleSegs = _a.invisibleSegs;
|
|
|
return (createElement(MoreLinkRoot, { dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs: allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: function () {
|
|
|
var isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) ||
|
|
|
(props.eventResize ? props.eventResize.affectedInstances : null) ||
|
|
|
{};
|
|
|
return (createElement(Fragment, null, allSegs.map(function (seg) {
|
|
|
var instanceId = seg.eventRange.instance.instanceId;
|
|
|
return (createElement("div", { className: "fc-daygrid-event-harness", key: instanceId, style: {
|
|
|
visibility: isForcedInvisible[instanceId] ? 'hidden' : '',
|
|
|
} }, hasListItemDisplay(seg) ? (createElement(TableListItemEvent, __assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange)))) : (createElement(TableBlockEvent, __assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))))));
|
|
|
})));
|
|
|
} }, function (rootElRef, classNames, innerElRef, innerContent, handleClick) { return (createElement("a", { ref: rootElRef, className: ['fc-daygrid-more-link'].concat(classNames).join(' '), onClick: handleClick }, innerContent)); }));
|
|
|
};
|
|
|
return TableCellMoreLink;
|
|
|
}(BaseComponent));
|
|
|
function compileSegs(singlePlacements) {
|
|
|
var allSegs = [];
|
|
|
var invisibleSegs = [];
|
|
|
for (var _i = 0, singlePlacements_1 = singlePlacements; _i < singlePlacements_1.length; _i++) {
|
|
|
var placement = singlePlacements_1[_i];
|
|
|
allSegs.push(placement.seg);
|
|
|
if (!placement.isVisible) {
|
|
|
invisibleSegs.push(placement.seg);
|
|
|
}
|
|
|
}
|
|
|
return { allSegs: allSegs, invisibleSegs: invisibleSegs };
|
|
|
}
|
|
|
|
|
|
var DEFAULT_WEEK_NUM_FORMAT$1 = createFormatter({ week: 'narrow' });
|
|
|
var TableCell = /** @class */ (function (_super) {
|
|
|
__extends(TableCell, _super);
|
|
|
function TableCell() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.handleRootEl = function (el) {
|
|
|
setRef(_this.rootElRef, el);
|
|
|
setRef(_this.props.elRef, el);
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
TableCell.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context, rootElRef = _a.rootElRef;
|
|
|
var options = context.options;
|
|
|
var date = props.date, dateProfile = props.dateProfile;
|
|
|
var navLinkAttrs = options.navLinks
|
|
|
? { 'data-navlink': buildNavLinkData(date, 'week'), tabIndex: 0 }
|
|
|
: {};
|
|
|
return (createElement(DayCellRoot, { date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraHookProps: props.extraHookProps, elRef: this.handleRootEl }, function (dayElRef, dayClassNames, rootDataAttrs, isDisabled) { return (createElement("td", __assign({ ref: dayElRef, className: ['fc-daygrid-day'].concat(dayClassNames, props.extraClassNames || []).join(' ') }, rootDataAttrs, props.extraDataAttrs),
|
|
|
createElement("div", { className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", ref: props.innerElRef /* different from hook system! RENAME */ },
|
|
|
props.showWeekNumber && (createElement(WeekNumberRoot, { date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT$1 }, function (weekElRef, weekClassNames, innerElRef, innerContent) { return (createElement("a", __assign({ ref: weekElRef, className: ['fc-daygrid-week-number'].concat(weekClassNames).join(' ') }, navLinkAttrs), innerContent)); })),
|
|
|
!isDisabled && (createElement(TableCellTop, { date: date, dateProfile: dateProfile, showDayNumber: props.showDayNumber, forceDayTop: props.forceDayTop, todayRange: props.todayRange, extraHookProps: props.extraHookProps })),
|
|
|
createElement("div", { className: "fc-daygrid-day-events", ref: props.fgContentElRef },
|
|
|
props.fgContent,
|
|
|
createElement("div", { className: "fc-daygrid-day-bottom", style: { marginTop: props.moreMarginTop } },
|
|
|
createElement(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange }))),
|
|
|
createElement("div", { className: "fc-daygrid-day-bg" }, props.bgContent)))); }));
|
|
|
};
|
|
|
return TableCell;
|
|
|
}(DateComponent));
|
|
|
|
|
|
function computeFgSegPlacement(segs, // assumed already sorted
|
|
|
dayMaxEvents, dayMaxEventRows, strictOrder, eventInstanceHeights, maxContentHeight, cells) {
|
|
|
var hierarchy = new DayGridSegHierarchy();
|
|
|
hierarchy.allowReslicing = true;
|
|
|
hierarchy.strictOrder = strictOrder;
|
|
|
if (dayMaxEvents === true || dayMaxEventRows === true) {
|
|
|
hierarchy.maxCoord = maxContentHeight;
|
|
|
hierarchy.hiddenConsumes = true;
|
|
|
}
|
|
|
else if (typeof dayMaxEvents === 'number') {
|
|
|
hierarchy.maxStackCnt = dayMaxEvents;
|
|
|
}
|
|
|
else if (typeof dayMaxEventRows === 'number') {
|
|
|
hierarchy.maxStackCnt = dayMaxEventRows;
|
|
|
hierarchy.hiddenConsumes = true;
|
|
|
}
|
|
|
// create segInputs only for segs with known heights
|
|
|
var segInputs = [];
|
|
|
var unknownHeightSegs = [];
|
|
|
for (var i = 0; i < segs.length; i += 1) {
|
|
|
var seg = segs[i];
|
|
|
var instanceId = seg.eventRange.instance.instanceId;
|
|
|
var eventHeight = eventInstanceHeights[instanceId];
|
|
|
if (eventHeight != null) {
|
|
|
segInputs.push({
|
|
|
index: i,
|
|
|
thickness: eventHeight,
|
|
|
span: {
|
|
|
start: seg.firstCol,
|
|
|
end: seg.lastCol + 1,
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
unknownHeightSegs.push(seg);
|
|
|
}
|
|
|
}
|
|
|
var hiddenEntries = hierarchy.addSegs(segInputs);
|
|
|
var segRects = hierarchy.toRects();
|
|
|
var _a = placeRects(segRects, segs, cells), singleColPlacements = _a.singleColPlacements, multiColPlacements = _a.multiColPlacements, leftoverMargins = _a.leftoverMargins;
|
|
|
var moreCnts = [];
|
|
|
var moreMarginTops = [];
|
|
|
// add segs with unknown heights
|
|
|
for (var _i = 0, unknownHeightSegs_1 = unknownHeightSegs; _i < unknownHeightSegs_1.length; _i++) {
|
|
|
var seg = unknownHeightSegs_1[_i];
|
|
|
multiColPlacements[seg.firstCol].push({
|
|
|
seg: seg,
|
|
|
isVisible: false,
|
|
|
isAbsolute: true,
|
|
|
absoluteTop: 0,
|
|
|
marginTop: 0,
|
|
|
});
|
|
|
for (var col = seg.firstCol; col <= seg.lastCol; col += 1) {
|
|
|
singleColPlacements[col].push({
|
|
|
seg: resliceSeg(seg, col, col + 1, cells),
|
|
|
isVisible: false,
|
|
|
isAbsolute: false,
|
|
|
absoluteTop: 0,
|
|
|
marginTop: 0,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
// add the hidden entries
|
|
|
for (var col = 0; col < cells.length; col += 1) {
|
|
|
moreCnts.push(0);
|
|
|
}
|
|
|
for (var _b = 0, hiddenEntries_1 = hiddenEntries; _b < hiddenEntries_1.length; _b++) {
|
|
|
var hiddenEntry = hiddenEntries_1[_b];
|
|
|
var seg = segs[hiddenEntry.index];
|
|
|
var hiddenSpan = hiddenEntry.span;
|
|
|
multiColPlacements[hiddenSpan.start].push({
|
|
|
seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),
|
|
|
isVisible: false,
|
|
|
isAbsolute: true,
|
|
|
absoluteTop: 0,
|
|
|
marginTop: 0,
|
|
|
});
|
|
|
for (var col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {
|
|
|
moreCnts[col] += 1;
|
|
|
singleColPlacements[col].push({
|
|
|
seg: resliceSeg(seg, col, col + 1, cells),
|
|
|
isVisible: false,
|
|
|
isAbsolute: false,
|
|
|
absoluteTop: 0,
|
|
|
marginTop: 0,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
// deal with leftover margins
|
|
|
for (var col = 0; col < cells.length; col += 1) {
|
|
|
moreMarginTops.push(leftoverMargins[col]);
|
|
|
}
|
|
|
return { singleColPlacements: singleColPlacements, multiColPlacements: multiColPlacements, moreCnts: moreCnts, moreMarginTops: moreMarginTops };
|
|
|
}
|
|
|
// rects ordered by top coord, then left
|
|
|
function placeRects(allRects, segs, cells) {
|
|
|
var rectsByEachCol = groupRectsByEachCol(allRects, cells.length);
|
|
|
var singleColPlacements = [];
|
|
|
var multiColPlacements = [];
|
|
|
var leftoverMargins = [];
|
|
|
for (var col = 0; col < cells.length; col += 1) {
|
|
|
var rects = rectsByEachCol[col];
|
|
|
// compute all static segs in singlePlacements
|
|
|
var singlePlacements = [];
|
|
|
var currentHeight = 0;
|
|
|
var currentMarginTop = 0;
|
|
|
for (var _i = 0, rects_1 = rects; _i < rects_1.length; _i++) {
|
|
|
var rect = rects_1[_i];
|
|
|
var seg = segs[rect.index];
|
|
|
singlePlacements.push({
|
|
|
seg: resliceSeg(seg, col, col + 1, cells),
|
|
|
isVisible: true,
|
|
|
isAbsolute: false,
|
|
|
absoluteTop: rect.levelCoord,
|
|
|
marginTop: rect.levelCoord - currentHeight,
|
|
|
});
|
|
|
currentHeight = rect.levelCoord + rect.thickness;
|
|
|
}
|
|
|
// compute mixed static/absolute segs in multiPlacements
|
|
|
var multiPlacements = [];
|
|
|
currentHeight = 0;
|
|
|
currentMarginTop = 0;
|
|
|
for (var _a = 0, rects_2 = rects; _a < rects_2.length; _a++) {
|
|
|
var rect = rects_2[_a];
|
|
|
var seg = segs[rect.index];
|
|
|
var isAbsolute = rect.span.end - rect.span.start > 1; // multi-column?
|
|
|
var isFirstCol = rect.span.start === col;
|
|
|
currentMarginTop += rect.levelCoord - currentHeight; // amount of space since bottom of previous seg
|
|
|
currentHeight = rect.levelCoord + rect.thickness; // height will now be bottom of current seg
|
|
|
if (isAbsolute) {
|
|
|
currentMarginTop += rect.thickness;
|
|
|
if (isFirstCol) {
|
|
|
multiPlacements.push({
|
|
|
seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
|
|
|
isVisible: true,
|
|
|
isAbsolute: true,
|
|
|
absoluteTop: rect.levelCoord,
|
|
|
marginTop: 0,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
else if (isFirstCol) {
|
|
|
multiPlacements.push({
|
|
|
seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
|
|
|
isVisible: true,
|
|
|
isAbsolute: false,
|
|
|
absoluteTop: rect.levelCoord,
|
|
|
marginTop: currentMarginTop, // claim the margin
|
|
|
});
|
|
|
currentMarginTop = 0;
|
|
|
}
|
|
|
}
|
|
|
singleColPlacements.push(singlePlacements);
|
|
|
multiColPlacements.push(multiPlacements);
|
|
|
leftoverMargins.push(currentMarginTop);
|
|
|
}
|
|
|
return { singleColPlacements: singleColPlacements, multiColPlacements: multiColPlacements, leftoverMargins: leftoverMargins };
|
|
|
}
|
|
|
function groupRectsByEachCol(rects, colCnt) {
|
|
|
var rectsByEachCol = [];
|
|
|
for (var col = 0; col < colCnt; col += 1) {
|
|
|
rectsByEachCol.push([]);
|
|
|
}
|
|
|
for (var _i = 0, rects_3 = rects; _i < rects_3.length; _i++) {
|
|
|
var rect = rects_3[_i];
|
|
|
for (var col = rect.span.start; col < rect.span.end; col += 1) {
|
|
|
rectsByEachCol[col].push(rect);
|
|
|
}
|
|
|
}
|
|
|
return rectsByEachCol;
|
|
|
}
|
|
|
function resliceSeg(seg, spanStart, spanEnd, cells) {
|
|
|
if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {
|
|
|
return seg;
|
|
|
}
|
|
|
var eventRange = seg.eventRange;
|
|
|
var origRange = eventRange.range;
|
|
|
var slicedRange = intersectRanges(origRange, {
|
|
|
start: cells[spanStart].date,
|
|
|
end: addDays(cells[spanEnd - 1].date, 1),
|
|
|
});
|
|
|
return __assign(__assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {
|
|
|
def: eventRange.def,
|
|
|
ui: __assign(__assign({}, eventRange.ui), { durationEditable: false }),
|
|
|
instance: eventRange.instance,
|
|
|
range: slicedRange,
|
|
|
}, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });
|
|
|
}
|
|
|
var DayGridSegHierarchy = /** @class */ (function (_super) {
|
|
|
__extends(DayGridSegHierarchy, _super);
|
|
|
function DayGridSegHierarchy() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
// config
|
|
|
_this.hiddenConsumes = false;
|
|
|
// allows us to keep hidden entries in the hierarchy so they take up space
|
|
|
_this.forceHidden = {};
|
|
|
return _this;
|
|
|
}
|
|
|
DayGridSegHierarchy.prototype.addSegs = function (segInputs) {
|
|
|
var _this = this;
|
|
|
var hiddenSegs = _super.prototype.addSegs.call(this, segInputs);
|
|
|
var entriesByLevel = this.entriesByLevel;
|
|
|
var excludeHidden = function (entry) { return !_this.forceHidden[buildEntryKey(entry)]; };
|
|
|
// remove the forced-hidden segs
|
|
|
for (var level = 0; level < entriesByLevel.length; level += 1) {
|
|
|
entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);
|
|
|
}
|
|
|
return hiddenSegs;
|
|
|
};
|
|
|
DayGridSegHierarchy.prototype.handleInvalidInsertion = function (insertion, entry, hiddenEntries) {
|
|
|
var _a = this, entriesByLevel = _a.entriesByLevel, forceHidden = _a.forceHidden;
|
|
|
var touchingEntry = insertion.touchingEntry, touchingLevel = insertion.touchingLevel, touchingLateral = insertion.touchingLateral;
|
|
|
if (this.hiddenConsumes && touchingEntry) {
|
|
|
var touchingEntryId = buildEntryKey(touchingEntry);
|
|
|
// if not already hidden
|
|
|
if (!forceHidden[touchingEntryId]) {
|
|
|
if (this.allowReslicing) {
|
|
|
var placeholderEntry = __assign(__assign({}, touchingEntry), { span: intersectSpans(touchingEntry.span, entry.span) });
|
|
|
var placeholderEntryId = buildEntryKey(placeholderEntry);
|
|
|
forceHidden[placeholderEntryId] = true;
|
|
|
entriesByLevel[touchingLevel][touchingLateral] = placeholderEntry; // replace touchingEntry with our placeholder
|
|
|
this.splitEntry(touchingEntry, entry, hiddenEntries); // split up the touchingEntry, reinsert it
|
|
|
}
|
|
|
else {
|
|
|
forceHidden[touchingEntryId] = true;
|
|
|
hiddenEntries.push(touchingEntry);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return _super.prototype.handleInvalidInsertion.call(this, insertion, entry, hiddenEntries);
|
|
|
};
|
|
|
return DayGridSegHierarchy;
|
|
|
}(SegHierarchy));
|
|
|
|
|
|
var TableRow = /** @class */ (function (_super) {
|
|
|
__extends(TableRow, _super);
|
|
|
function TableRow() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.cellElRefs = new RefMap(); // the <td>
|
|
|
_this.frameElRefs = new RefMap(); // the fc-daygrid-day-frame
|
|
|
_this.fgElRefs = new RefMap(); // the fc-daygrid-day-events
|
|
|
_this.segHarnessRefs = new RefMap(); // indexed by "instanceId:firstCol"
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.state = {
|
|
|
framePositions: null,
|
|
|
maxContentHeight: null,
|
|
|
eventInstanceHeights: {},
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
TableRow.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this, props = _a.props, state = _a.state, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var colCnt = props.cells.length;
|
|
|
var businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);
|
|
|
var bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);
|
|
|
var highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);
|
|
|
var mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);
|
|
|
var _b = computeFgSegPlacement(sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.eventInstanceHeights, state.maxContentHeight, props.cells), singleColPlacements = _b.singleColPlacements, multiColPlacements = _b.multiColPlacements, moreCnts = _b.moreCnts, moreMarginTops = _b.moreMarginTops;
|
|
|
var isForcedInvisible = // TODO: messy way to compute this
|
|
|
(props.eventDrag && props.eventDrag.affectedInstances) ||
|
|
|
(props.eventResize && props.eventResize.affectedInstances) ||
|
|
|
{};
|
|
|
return (createElement("tr", { ref: this.rootElRef },
|
|
|
props.renderIntro && props.renderIntro(),
|
|
|
props.cells.map(function (cell, col) {
|
|
|
var normalFgNodes = _this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);
|
|
|
var mirrorFgNodes = _this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);
|
|
|
return (createElement(TableCell, { key: cell.key, elRef: _this.cellElRefs.createRef(cell.key), innerElRef: _this.frameElRefs.createRef(cell.key) /* FF <td> problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers /* even displaying weeknum for row, not necessarily day */, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraHookProps: cell.extraHookProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: _this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys
|
|
|
createElement(Fragment, null,
|
|
|
createElement(Fragment, null, normalFgNodes),
|
|
|
createElement(Fragment, null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys
|
|
|
createElement(Fragment, null,
|
|
|
_this.renderFillSegs(highlightSegsByCol[col], 'highlight'),
|
|
|
_this.renderFillSegs(businessHoursByCol[col], 'non-business'),
|
|
|
_this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))) }));
|
|
|
})));
|
|
|
};
|
|
|
TableRow.prototype.componentDidMount = function () {
|
|
|
this.updateSizing(true);
|
|
|
};
|
|
|
TableRow.prototype.componentDidUpdate = function (prevProps, prevState) {
|
|
|
var currentProps = this.props;
|
|
|
this.updateSizing(!isPropsEqual(prevProps, currentProps));
|
|
|
};
|
|
|
TableRow.prototype.getHighlightSegs = function () {
|
|
|
var props = this.props;
|
|
|
if (props.eventDrag && props.eventDrag.segs.length) { // messy check
|
|
|
return props.eventDrag.segs;
|
|
|
}
|
|
|
if (props.eventResize && props.eventResize.segs.length) { // messy check
|
|
|
return props.eventResize.segs;
|
|
|
}
|
|
|
return props.dateSelectionSegs;
|
|
|
};
|
|
|
TableRow.prototype.getMirrorSegs = function () {
|
|
|
var props = this.props;
|
|
|
if (props.eventResize && props.eventResize.segs.length) { // messy check
|
|
|
return props.eventResize.segs;
|
|
|
}
|
|
|
return [];
|
|
|
};
|
|
|
TableRow.prototype.renderFgSegs = function (col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {
|
|
|
var context = this.context;
|
|
|
var eventSelection = this.props.eventSelection;
|
|
|
var framePositions = this.state.framePositions;
|
|
|
var defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1
|
|
|
var isMirror = isDragging || isResizing || isDateSelecting;
|
|
|
var nodes = [];
|
|
|
if (framePositions) {
|
|
|
for (var _i = 0, segPlacements_1 = segPlacements; _i < segPlacements_1.length; _i++) {
|
|
|
var placement = segPlacements_1[_i];
|
|
|
var seg = placement.seg;
|
|
|
var instanceId = seg.eventRange.instance.instanceId;
|
|
|
var key = instanceId + ':' + col;
|
|
|
var isVisible = placement.isVisible && !isForcedInvisible[instanceId];
|
|
|
var isAbsolute = placement.isAbsolute;
|
|
|
var left = '';
|
|
|
var right = '';
|
|
|
if (isAbsolute) {
|
|
|
if (context.isRtl) {
|
|
|
right = 0;
|
|
|
left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];
|
|
|
}
|
|
|
else {
|
|
|
left = 0;
|
|
|
right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];
|
|
|
}
|
|
|
}
|
|
|
/*
|
|
|
known bug: events that are force to be list-item but span multiple days still take up space in later columns
|
|
|
todo: in print view, for multi-day events, don't display title within non-start/end segs
|
|
|
*/
|
|
|
nodes.push(createElement("div", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: key, ref: isMirror ? null : this.segHarnessRefs.createRef(key), style: {
|
|
|
visibility: isVisible ? '' : 'hidden',
|
|
|
marginTop: isAbsolute ? '' : placement.marginTop,
|
|
|
top: isAbsolute ? placement.absoluteTop : '',
|
|
|
left: left,
|
|
|
right: right,
|
|
|
} }, hasListItemDisplay(seg) ? (createElement(TableListItemEvent, __assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange)))) : (createElement(TableBlockEvent, __assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange))))));
|
|
|
}
|
|
|
}
|
|
|
return nodes;
|
|
|
};
|
|
|
TableRow.prototype.renderFillSegs = function (segs, fillType) {
|
|
|
var isRtl = this.context.isRtl;
|
|
|
var todayRange = this.props.todayRange;
|
|
|
var framePositions = this.state.framePositions;
|
|
|
var nodes = [];
|
|
|
if (framePositions) {
|
|
|
for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
|
|
|
var seg = segs_1[_i];
|
|
|
var leftRightCss = isRtl ? {
|
|
|
right: 0,
|
|
|
left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol],
|
|
|
} : {
|
|
|
left: 0,
|
|
|
right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],
|
|
|
};
|
|
|
nodes.push(createElement("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-daygrid-bg-harness", style: leftRightCss }, fillType === 'bg-event' ?
|
|
|
createElement(BgEvent, __assign({ seg: seg }, getSegMeta(seg, todayRange))) :
|
|
|
renderFill(fillType)));
|
|
|
}
|
|
|
}
|
|
|
return createElement.apply(void 0, __spreadArray([Fragment, {}], nodes));
|
|
|
};
|
|
|
TableRow.prototype.updateSizing = function (isExternalSizingChange) {
|
|
|
var _a = this, props = _a.props, frameElRefs = _a.frameElRefs;
|
|
|
if (!props.forPrint &&
|
|
|
props.clientWidth !== null // positioning ready?
|
|
|
) {
|
|
|
if (isExternalSizingChange) {
|
|
|
var frameEls = props.cells.map(function (cell) { return frameElRefs.currentMap[cell.key]; });
|
|
|
if (frameEls.length) {
|
|
|
var originEl = this.rootElRef.current;
|
|
|
this.setState({
|
|
|
framePositions: new PositionCache(originEl, frameEls, true, // isHorizontal
|
|
|
false),
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
var limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;
|
|
|
this.setState({
|
|
|
eventInstanceHeights: this.queryEventInstanceHeights(),
|
|
|
maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null,
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
TableRow.prototype.queryEventInstanceHeights = function () {
|
|
|
var segElMap = this.segHarnessRefs.currentMap;
|
|
|
var eventInstanceHeights = {};
|
|
|
// get the max height amongst instance segs
|
|
|
for (var key in segElMap) {
|
|
|
var height = Math.round(segElMap[key].getBoundingClientRect().height);
|
|
|
var instanceId = key.split(':')[0]; // deconstruct how renderFgSegs makes the key
|
|
|
eventInstanceHeights[instanceId] = Math.max(eventInstanceHeights[instanceId] || 0, height);
|
|
|
}
|
|
|
return eventInstanceHeights;
|
|
|
};
|
|
|
TableRow.prototype.computeMaxContentHeight = function () {
|
|
|
var firstKey = this.props.cells[0].key;
|
|
|
var cellEl = this.cellElRefs.currentMap[firstKey];
|
|
|
var fcContainerEl = this.fgElRefs.currentMap[firstKey];
|
|
|
return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;
|
|
|
};
|
|
|
TableRow.prototype.getCellEls = function () {
|
|
|
var elMap = this.cellElRefs.currentMap;
|
|
|
return this.props.cells.map(function (cell) { return elMap[cell.key]; });
|
|
|
};
|
|
|
return TableRow;
|
|
|
}(DateComponent));
|
|
|
TableRow.addStateEquality({
|
|
|
eventInstanceHeights: isPropsEqual,
|
|
|
});
|
|
|
function buildMirrorPlacements(mirrorSegs, colPlacements) {
|
|
|
if (!mirrorSegs.length) {
|
|
|
return [];
|
|
|
}
|
|
|
var topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?
|
|
|
return mirrorSegs.map(function (seg) { return ({
|
|
|
seg: seg,
|
|
|
isVisible: true,
|
|
|
isAbsolute: true,
|
|
|
absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],
|
|
|
marginTop: 0,
|
|
|
}); });
|
|
|
}
|
|
|
function buildAbsoluteTopHash(colPlacements) {
|
|
|
var topsByInstanceId = {};
|
|
|
for (var _i = 0, colPlacements_1 = colPlacements; _i < colPlacements_1.length; _i++) {
|
|
|
var placements = colPlacements_1[_i];
|
|
|
for (var _a = 0, placements_1 = placements; _a < placements_1.length; _a++) {
|
|
|
var placement = placements_1[_a];
|
|
|
topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;
|
|
|
}
|
|
|
}
|
|
|
return topsByInstanceId;
|
|
|
}
|
|
|
|
|
|
var Table = /** @class */ (function (_super) {
|
|
|
__extends(Table, _super);
|
|
|
function Table() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.splitBusinessHourSegs = memoize(splitSegsByRow);
|
|
|
_this.splitBgEventSegs = memoize(splitSegsByRow);
|
|
|
_this.splitFgEventSegs = memoize(splitSegsByRow);
|
|
|
_this.splitDateSelectionSegs = memoize(splitSegsByRow);
|
|
|
_this.splitEventDrag = memoize(splitInteractionByRow);
|
|
|
_this.splitEventResize = memoize(splitInteractionByRow);
|
|
|
_this.rowRefs = new RefMap();
|
|
|
_this.handleRootEl = function (rootEl) {
|
|
|
_this.rootEl = rootEl;
|
|
|
if (rootEl) {
|
|
|
_this.context.registerInteractiveComponent(_this, {
|
|
|
el: rootEl,
|
|
|
isHitComboAllowed: _this.props.isHitComboAllowed,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
_this.context.unregisterInteractiveComponent(_this);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
Table.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var props = this.props;
|
|
|
var dateProfile = props.dateProfile, dayMaxEventRows = props.dayMaxEventRows, dayMaxEvents = props.dayMaxEvents, expandRows = props.expandRows;
|
|
|
var rowCnt = props.cells.length;
|
|
|
var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);
|
|
|
var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);
|
|
|
var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);
|
|
|
var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);
|
|
|
var eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);
|
|
|
var eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
|
|
|
var limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;
|
|
|
// if rows can't expand to fill fixed height, can't do balanced-height event limit
|
|
|
// TODO: best place to normalize these options?
|
|
|
if (limitViaBalanced && !expandRows) {
|
|
|
limitViaBalanced = false;
|
|
|
dayMaxEventRows = null;
|
|
|
dayMaxEvents = null;
|
|
|
}
|
|
|
var classNames = [
|
|
|
'fc-daygrid-body',
|
|
|
limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',
|
|
|
expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others?
|
|
|
];
|
|
|
return (createElement("div", { className: classNames.join(' '), ref: this.handleRootEl, style: {
|
|
|
// these props are important to give this wrapper correct dimensions for interactions
|
|
|
// TODO: if we set it here, can we avoid giving to inner tables?
|
|
|
width: props.clientWidth,
|
|
|
minWidth: props.tableMinWidth,
|
|
|
} },
|
|
|
createElement(NowTimer, { unit: "day" }, function (nowDate, todayRange) { return (createElement(Fragment, null,
|
|
|
createElement("table", { className: "fc-scrollgrid-sync-table", style: {
|
|
|
width: props.clientWidth,
|
|
|
minWidth: props.tableMinWidth,
|
|
|
height: expandRows ? props.clientHeight : '',
|
|
|
} },
|
|
|
props.colGroupNode,
|
|
|
createElement("tbody", null, props.cells.map(function (cells, row) { return (createElement(TableRow, { ref: _this.rowRefs.createRef(row), key: cells.length
|
|
|
? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */
|
|
|
: row // in case there are no cells (like when resource view is loading)
|
|
|
, showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })); }))))); })));
|
|
|
};
|
|
|
// Hit System
|
|
|
// ----------------------------------------------------------------------------------------------------
|
|
|
Table.prototype.prepareHits = function () {
|
|
|
this.rowPositions = new PositionCache(this.rootEl, this.rowRefs.collect().map(function (rowObj) { return rowObj.getCellEls()[0]; }), // first cell el in each row. TODO: not optimal
|
|
|
false, true);
|
|
|
this.colPositions = new PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row
|
|
|
true, // horizontal
|
|
|
false);
|
|
|
};
|
|
|
Table.prototype.queryHit = function (positionLeft, positionTop) {
|
|
|
var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
|
|
|
var col = colPositions.leftToIndex(positionLeft);
|
|
|
var row = rowPositions.topToIndex(positionTop);
|
|
|
if (row != null && col != null) {
|
|
|
var cell = this.props.cells[row][col];
|
|
|
return {
|
|
|
dateProfile: this.props.dateProfile,
|
|
|
dateSpan: __assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),
|
|
|
dayEl: this.getCellEl(row, col),
|
|
|
rect: {
|
|
|
left: colPositions.lefts[col],
|
|
|
right: colPositions.rights[col],
|
|
|
top: rowPositions.tops[row],
|
|
|
bottom: rowPositions.bottoms[row],
|
|
|
},
|
|
|
layer: 0,
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
Table.prototype.getCellEl = function (row, col) {
|
|
|
return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal
|
|
|
};
|
|
|
Table.prototype.getCellRange = function (row, col) {
|
|
|
var start = this.props.cells[row][col].date;
|
|
|
var end = addDays(start, 1);
|
|
|
return { start: start, end: end };
|
|
|
};
|
|
|
return Table;
|
|
|
}(DateComponent));
|
|
|
function isSegAllDay(seg) {
|
|
|
return seg.eventRange.def.allDay;
|
|
|
}
|
|
|
|
|
|
var DayTableSlicer = /** @class */ (function (_super) {
|
|
|
__extends(DayTableSlicer, _super);
|
|
|
function DayTableSlicer() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.forceDayIfListItem = true;
|
|
|
return _this;
|
|
|
}
|
|
|
DayTableSlicer.prototype.sliceRange = function (dateRange, dayTableModel) {
|
|
|
return dayTableModel.sliceRange(dateRange);
|
|
|
};
|
|
|
return DayTableSlicer;
|
|
|
}(Slicer));
|
|
|
|
|
|
var DayTable = /** @class */ (function (_super) {
|
|
|
__extends(DayTable, _super);
|
|
|
function DayTable() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.slicer = new DayTableSlicer();
|
|
|
_this.tableRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
DayTable.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
return (createElement(Table, __assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));
|
|
|
};
|
|
|
return DayTable;
|
|
|
}(DateComponent));
|
|
|
|
|
|
var DayTableView = /** @class */ (function (_super) {
|
|
|
__extends(DayTableView, _super);
|
|
|
function DayTableView() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.buildDayTableModel = memoize(buildDayTableModel);
|
|
|
_this.headerRef = createRef();
|
|
|
_this.tableRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
DayTableView.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this.context, options = _a.options, dateProfileGenerator = _a.dateProfileGenerator;
|
|
|
var props = this.props;
|
|
|
var dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);
|
|
|
var headerContent = options.dayHeaders && (createElement(DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 }));
|
|
|
var bodyContent = function (contentArg) { return (createElement(DayTable, { ref: _this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: _this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint })); };
|
|
|
return options.dayMinWidth
|
|
|
? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)
|
|
|
: this.renderSimpleLayout(headerContent, bodyContent);
|
|
|
};
|
|
|
return DayTableView;
|
|
|
}(TableView));
|
|
|
function buildDayTableModel(dateProfile, dateProfileGenerator) {
|
|
|
var daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
|
|
|
return new DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
|
|
|
}
|
|
|
|
|
|
var TableDateProfileGenerator = /** @class */ (function (_super) {
|
|
|
__extends(TableDateProfileGenerator, _super);
|
|
|
function TableDateProfileGenerator() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
// Computes the date range that will be rendered.
|
|
|
TableDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
|
|
|
var dateEnv = this.props.dateEnv;
|
|
|
var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
|
|
|
var start = renderRange.start;
|
|
|
var end = renderRange.end;
|
|
|
var endOfWeek;
|
|
|
// year and month views should be aligned with weeks. this is already done for week
|
|
|
if (/^(year|month)$/.test(currentRangeUnit)) {
|
|
|
start = dateEnv.startOfWeek(start);
|
|
|
// make end-of-week if not already
|
|
|
endOfWeek = dateEnv.startOfWeek(end);
|
|
|
if (endOfWeek.valueOf() !== end.valueOf()) {
|
|
|
end = addWeeks(endOfWeek, 1);
|
|
|
}
|
|
|
}
|
|
|
// ensure 6 weeks
|
|
|
if (this.props.monthMode &&
|
|
|
this.props.fixedWeekCount) {
|
|
|
var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
|
|
|
diffWeeks(start, end));
|
|
|
end = addWeeks(end, 6 - rowCnt);
|
|
|
}
|
|
|
return { start: start, end: end };
|
|
|
};
|
|
|
return TableDateProfileGenerator;
|
|
|
}(DateProfileGenerator));
|
|
|
|
|
|
var main$3 = createPlugin({
|
|
|
initialView: 'dayGridMonth',
|
|
|
views: {
|
|
|
dayGrid: {
|
|
|
component: DayTableView,
|
|
|
dateProfileGeneratorClass: TableDateProfileGenerator,
|
|
|
},
|
|
|
dayGridDay: {
|
|
|
type: 'dayGrid',
|
|
|
duration: { days: 1 },
|
|
|
},
|
|
|
dayGridWeek: {
|
|
|
type: 'dayGrid',
|
|
|
duration: { weeks: 1 },
|
|
|
},
|
|
|
dayGridMonth: {
|
|
|
type: 'dayGrid',
|
|
|
duration: { months: 1 },
|
|
|
monthMode: true,
|
|
|
fixedWeekCount: true,
|
|
|
},
|
|
|
},
|
|
|
});
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
|
|
|
var AllDaySplitter = /** @class */ (function (_super) {
|
|
|
__extends(AllDaySplitter, _super);
|
|
|
function AllDaySplitter() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
AllDaySplitter.prototype.getKeyInfo = function () {
|
|
|
return {
|
|
|
allDay: {},
|
|
|
timed: {},
|
|
|
};
|
|
|
};
|
|
|
AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
|
|
|
if (dateSpan.allDay) {
|
|
|
return ['allDay'];
|
|
|
}
|
|
|
return ['timed'];
|
|
|
};
|
|
|
AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
|
|
|
if (!eventDef.allDay) {
|
|
|
return ['timed'];
|
|
|
}
|
|
|
if (hasBgRendering(eventDef)) {
|
|
|
return ['timed', 'allDay'];
|
|
|
}
|
|
|
return ['allDay'];
|
|
|
};
|
|
|
return AllDaySplitter;
|
|
|
}(Splitter));
|
|
|
|
|
|
var DEFAULT_SLAT_LABEL_FORMAT = createFormatter({
|
|
|
hour: 'numeric',
|
|
|
minute: '2-digit',
|
|
|
omitZeroMinute: true,
|
|
|
meridiem: 'short',
|
|
|
});
|
|
|
function TimeColsAxisCell(props) {
|
|
|
var classNames = [
|
|
|
'fc-timegrid-slot',
|
|
|
'fc-timegrid-slot-label',
|
|
|
props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor',
|
|
|
];
|
|
|
return (createElement(ViewContextType.Consumer, null, function (context) {
|
|
|
if (!props.isLabeled) {
|
|
|
return (createElement("td", { className: classNames.join(' '), "data-time": props.isoTimeStr }));
|
|
|
}
|
|
|
var dateEnv = context.dateEnv, options = context.options, viewApi = context.viewApi;
|
|
|
var labelFormat = // TODO: fully pre-parse
|
|
|
options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :
|
|
|
Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) :
|
|
|
createFormatter(options.slotLabelFormat);
|
|
|
var hookProps = {
|
|
|
level: 0,
|
|
|
time: props.time,
|
|
|
date: dateEnv.toDate(props.date),
|
|
|
view: viewApi,
|
|
|
text: dateEnv.format(props.date, labelFormat),
|
|
|
};
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.slotLabelClassNames, content: options.slotLabelContent, defaultContent: renderInnerContent$1, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("td", { ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-time": props.isoTimeStr },
|
|
|
createElement("div", { className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
|
|
|
createElement("div", { className: "fc-timegrid-slot-label-cushion fc-scrollgrid-shrink-cushion", ref: innerElRef }, innerContent)))); }));
|
|
|
}));
|
|
|
}
|
|
|
function renderInnerContent$1(props) {
|
|
|
return props.text;
|
|
|
}
|
|
|
|
|
|
var TimeBodyAxis = /** @class */ (function (_super) {
|
|
|
__extends(TimeBodyAxis, _super);
|
|
|
function TimeBodyAxis() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TimeBodyAxis.prototype.render = function () {
|
|
|
return this.props.slatMetas.map(function (slatMeta) { return (createElement("tr", { key: slatMeta.key },
|
|
|
createElement(TimeColsAxisCell, __assign({}, slatMeta)))); });
|
|
|
};
|
|
|
return TimeBodyAxis;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: 'short' });
|
|
|
var AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;
|
|
|
var TimeColsView = /** @class */ (function (_super) {
|
|
|
__extends(TimeColsView, _super);
|
|
|
function TimeColsView() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.allDaySplitter = new AllDaySplitter(); // for use by subclasses
|
|
|
_this.headerElRef = createRef();
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.scrollerElRef = createRef();
|
|
|
_this.state = {
|
|
|
slatCoords: null,
|
|
|
};
|
|
|
_this.handleScrollTopRequest = function (scrollTop) {
|
|
|
var scrollerEl = _this.scrollerElRef.current;
|
|
|
if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer
|
|
|
scrollerEl.scrollTop = scrollTop;
|
|
|
}
|
|
|
};
|
|
|
/* Header Render Methods
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
_this.renderHeadAxis = function (rowKey, frameHeight) {
|
|
|
if (frameHeight === void 0) { frameHeight = ''; }
|
|
|
var options = _this.context.options;
|
|
|
var dateProfile = _this.props.dateProfile;
|
|
|
var range = dateProfile.renderRange;
|
|
|
var dayCnt = diffDays(range.start, range.end);
|
|
|
var navLinkAttrs = (options.navLinks && dayCnt === 1) // only do in day views (to avoid doing in week views that dont need it)
|
|
|
? { 'data-navlink': buildNavLinkData(range.start, 'week'), tabIndex: 0 }
|
|
|
: {};
|
|
|
if (options.weekNumbers && rowKey === 'day') {
|
|
|
return (createElement(WeekNumberRoot, { date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("th", { ref: rootElRef, className: [
|
|
|
'fc-timegrid-axis',
|
|
|
'fc-scrollgrid-shrink',
|
|
|
].concat(classNames).join(' ') },
|
|
|
createElement("div", { className: "fc-timegrid-axis-frame fc-scrollgrid-shrink-frame fc-timegrid-axis-frame-liquid", style: { height: frameHeight } },
|
|
|
createElement("a", __assign({ ref: innerElRef, className: "fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner" }, navLinkAttrs), innerContent)))); }));
|
|
|
}
|
|
|
return (createElement("th", { className: "fc-timegrid-axis" },
|
|
|
createElement("div", { className: "fc-timegrid-axis-frame", style: { height: frameHeight } })));
|
|
|
};
|
|
|
/* Table Component Render Methods
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
// only a one-way height sync. we don't send the axis inner-content height to the DayGrid,
|
|
|
// but DayGrid still needs to have classNames on inner elements in order to measure.
|
|
|
_this.renderTableRowAxis = function (rowHeight) {
|
|
|
var _a = _this.context, options = _a.options, viewApi = _a.viewApi;
|
|
|
var hookProps = {
|
|
|
text: options.allDayText,
|
|
|
view: viewApi,
|
|
|
};
|
|
|
return (
|
|
|
// TODO: make reusable hook. used in list view too
|
|
|
createElement(RenderHook, { hookProps: hookProps, classNames: options.allDayClassNames, content: options.allDayContent, defaultContent: renderAllDayInner$1, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("td", { ref: rootElRef, className: [
|
|
|
'fc-timegrid-axis',
|
|
|
'fc-scrollgrid-shrink',
|
|
|
].concat(classNames).join(' ') },
|
|
|
createElement("div", { className: 'fc-timegrid-axis-frame fc-scrollgrid-shrink-frame' + (rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : ''), style: { height: rowHeight } },
|
|
|
createElement("span", { className: "fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner", ref: innerElRef }, innerContent)))); }));
|
|
|
};
|
|
|
_this.handleSlatCoords = function (slatCoords) {
|
|
|
_this.setState({ slatCoords: slatCoords });
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
// rendering
|
|
|
// ----------------------------------------------------------------------------------------------------
|
|
|
TimeColsView.prototype.renderSimpleLayout = function (headerRowContent, allDayContent, timeContent) {
|
|
|
var _a = this, context = _a.context, props = _a.props;
|
|
|
var sections = [];
|
|
|
var stickyHeaderDates = getStickyHeaderDates(context.options);
|
|
|
if (headerRowContent) {
|
|
|
sections.push({
|
|
|
type: 'header',
|
|
|
key: 'header',
|
|
|
isSticky: stickyHeaderDates,
|
|
|
chunk: {
|
|
|
elRef: this.headerElRef,
|
|
|
tableClassName: 'fc-col-header',
|
|
|
rowContent: headerRowContent,
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
if (allDayContent) {
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'all-day',
|
|
|
chunk: { content: allDayContent },
|
|
|
});
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'all-day-divider',
|
|
|
outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
|
|
|
createElement("tr", { className: "fc-scrollgrid-section" },
|
|
|
createElement("td", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
|
|
|
});
|
|
|
}
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'body',
|
|
|
liquid: true,
|
|
|
expandRows: Boolean(context.options.expandRows),
|
|
|
chunk: {
|
|
|
scrollerElRef: this.scrollerElRef,
|
|
|
content: timeContent,
|
|
|
},
|
|
|
});
|
|
|
return (createElement(ViewRoot, { viewSpec: context.viewSpec, elRef: this.rootElRef }, function (rootElRef, classNames) { return (createElement("div", { className: ['fc-timegrid'].concat(classNames).join(' '), ref: rootElRef },
|
|
|
createElement(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: 'shrink' }], sections: sections }))); }));
|
|
|
};
|
|
|
TimeColsView.prototype.renderHScrollLayout = function (headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {
|
|
|
var _this = this;
|
|
|
var ScrollGrid = this.context.pluginHooks.scrollGridImpl;
|
|
|
if (!ScrollGrid) {
|
|
|
throw new Error('No ScrollGrid implementation');
|
|
|
}
|
|
|
var _a = this, context = _a.context, props = _a.props;
|
|
|
var stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
|
|
|
var stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
|
|
|
var sections = [];
|
|
|
if (headerRowContent) {
|
|
|
sections.push({
|
|
|
type: 'header',
|
|
|
key: 'header',
|
|
|
isSticky: stickyHeaderDates,
|
|
|
syncRowHeights: true,
|
|
|
chunks: [
|
|
|
{
|
|
|
key: 'axis',
|
|
|
rowContent: function (arg) { return (createElement("tr", null, _this.renderHeadAxis('day', arg.rowSyncHeights[0]))); },
|
|
|
},
|
|
|
{
|
|
|
key: 'cols',
|
|
|
elRef: this.headerElRef,
|
|
|
tableClassName: 'fc-col-header',
|
|
|
rowContent: headerRowContent,
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
}
|
|
|
if (allDayContent) {
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'all-day',
|
|
|
syncRowHeights: true,
|
|
|
chunks: [
|
|
|
{
|
|
|
key: 'axis',
|
|
|
rowContent: function (contentArg) { return (createElement("tr", null, _this.renderTableRowAxis(contentArg.rowSyncHeights[0]))); },
|
|
|
},
|
|
|
{
|
|
|
key: 'cols',
|
|
|
content: allDayContent,
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
sections.push({
|
|
|
key: 'all-day-divider',
|
|
|
type: 'body',
|
|
|
outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
|
|
|
createElement("tr", { className: "fc-scrollgrid-section" },
|
|
|
createElement("td", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
|
|
|
});
|
|
|
}
|
|
|
var isNowIndicator = context.options.nowIndicator;
|
|
|
sections.push({
|
|
|
type: 'body',
|
|
|
key: 'body',
|
|
|
liquid: true,
|
|
|
expandRows: Boolean(context.options.expandRows),
|
|
|
chunks: [
|
|
|
{
|
|
|
key: 'axis',
|
|
|
content: function (arg) { return (
|
|
|
// TODO: make this now-indicator arrow more DRY with TimeColsContent
|
|
|
createElement("div", { className: "fc-timegrid-axis-chunk" },
|
|
|
createElement("table", { style: { height: arg.expandRows ? arg.clientHeight : '' } },
|
|
|
arg.tableColGroupNode,
|
|
|
createElement("tbody", null,
|
|
|
createElement(TimeBodyAxis, { slatMetas: slatMetas }))),
|
|
|
createElement("div", { className: "fc-timegrid-now-indicator-container" },
|
|
|
createElement(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, function (nowDate) {
|
|
|
var nowIndicatorTop = isNowIndicator &&
|
|
|
slatCoords &&
|
|
|
slatCoords.safeComputeTop(nowDate); // might return void
|
|
|
if (typeof nowIndicatorTop === 'number') {
|
|
|
return (createElement(NowIndicatorRoot, { isAxis: true, date: nowDate }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-arrow'].concat(classNames).join(' '), style: { top: nowIndicatorTop } }, innerContent)); }));
|
|
|
}
|
|
|
return null;
|
|
|
})))); },
|
|
|
},
|
|
|
{
|
|
|
key: 'cols',
|
|
|
scrollerElRef: this.scrollerElRef,
|
|
|
content: timeContent,
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
if (stickyFooterScrollbar) {
|
|
|
sections.push({
|
|
|
key: 'footer',
|
|
|
type: 'footer',
|
|
|
isSticky: true,
|
|
|
chunks: [
|
|
|
{
|
|
|
key: 'axis',
|
|
|
content: renderScrollShim,
|
|
|
},
|
|
|
{
|
|
|
key: 'cols',
|
|
|
content: renderScrollShim,
|
|
|
},
|
|
|
],
|
|
|
});
|
|
|
}
|
|
|
return (createElement(ViewRoot, { viewSpec: context.viewSpec, elRef: this.rootElRef }, function (rootElRef, classNames) { return (createElement("div", { className: ['fc-timegrid'].concat(classNames).join(' '), ref: rootElRef },
|
|
|
createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: false, colGroups: [
|
|
|
{ width: 'shrink', cols: [{ width: 'shrink' }] },
|
|
|
{ cols: [{ span: colCnt, minWidth: dayMinWidth }] },
|
|
|
], sections: sections }))); }));
|
|
|
};
|
|
|
/* Dimensions
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
TimeColsView.prototype.getAllDayMaxEventProps = function () {
|
|
|
var _a = this.context.options, dayMaxEvents = _a.dayMaxEvents, dayMaxEventRows = _a.dayMaxEventRows;
|
|
|
if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?
|
|
|
dayMaxEvents = undefined;
|
|
|
dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure "auto" goes to a real number
|
|
|
}
|
|
|
return { dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows };
|
|
|
};
|
|
|
return TimeColsView;
|
|
|
}(DateComponent));
|
|
|
function renderAllDayInner$1(hookProps) {
|
|
|
return hookProps.text;
|
|
|
}
|
|
|
|
|
|
var TimeColsSlatsCoords = /** @class */ (function () {
|
|
|
function TimeColsSlatsCoords(positions, dateProfile, slotDuration) {
|
|
|
this.positions = positions;
|
|
|
this.dateProfile = dateProfile;
|
|
|
this.slotDuration = slotDuration;
|
|
|
}
|
|
|
TimeColsSlatsCoords.prototype.safeComputeTop = function (date) {
|
|
|
var dateProfile = this.dateProfile;
|
|
|
if (rangeContainsMarker(dateProfile.currentRange, date)) {
|
|
|
var startOfDayDate = startOfDay(date);
|
|
|
var timeMs = date.valueOf() - startOfDayDate.valueOf();
|
|
|
if (timeMs >= asRoughMs(dateProfile.slotMinTime) &&
|
|
|
timeMs < asRoughMs(dateProfile.slotMaxTime)) {
|
|
|
return this.computeTimeTop(createDuration(timeMs));
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
// Computes the top coordinate, relative to the bounds of the grid, of the given date.
|
|
|
// A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
|
|
|
TimeColsSlatsCoords.prototype.computeDateTop = function (when, startOfDayDate) {
|
|
|
if (!startOfDayDate) {
|
|
|
startOfDayDate = startOfDay(when);
|
|
|
}
|
|
|
return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));
|
|
|
};
|
|
|
// Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
|
|
|
// This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.
|
|
|
// Eventually allow computation with arbirary slat dates.
|
|
|
TimeColsSlatsCoords.prototype.computeTimeTop = function (duration) {
|
|
|
var _a = this, positions = _a.positions, dateProfile = _a.dateProfile;
|
|
|
var len = positions.els.length;
|
|
|
// floating-point value of # of slots covered
|
|
|
var slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);
|
|
|
var slatIndex;
|
|
|
var slatRemainder;
|
|
|
// compute a floating-point number for how many slats should be progressed through.
|
|
|
// from 0 to number of slats (inclusive)
|
|
|
// constrained because slotMinTime/slotMaxTime might be customized.
|
|
|
slatCoverage = Math.max(0, slatCoverage);
|
|
|
slatCoverage = Math.min(len, slatCoverage);
|
|
|
// an integer index of the furthest whole slat
|
|
|
// from 0 to number slats (*exclusive*, so len-1)
|
|
|
slatIndex = Math.floor(slatCoverage);
|
|
|
slatIndex = Math.min(slatIndex, len - 1);
|
|
|
// how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
|
|
|
// could be 1.0 if slatCoverage is covering *all* the slots
|
|
|
slatRemainder = slatCoverage - slatIndex;
|
|
|
return positions.tops[slatIndex] +
|
|
|
positions.getHeight(slatIndex) * slatRemainder;
|
|
|
};
|
|
|
return TimeColsSlatsCoords;
|
|
|
}());
|
|
|
|
|
|
var TimeColsSlatsBody = /** @class */ (function (_super) {
|
|
|
__extends(TimeColsSlatsBody, _super);
|
|
|
function TimeColsSlatsBody() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TimeColsSlatsBody.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var options = context.options;
|
|
|
var slatElRefs = props.slatElRefs;
|
|
|
return (createElement("tbody", null, props.slatMetas.map(function (slatMeta, i) {
|
|
|
var hookProps = {
|
|
|
time: slatMeta.time,
|
|
|
date: context.dateEnv.toDate(slatMeta.date),
|
|
|
view: context.viewApi,
|
|
|
};
|
|
|
var classNames = [
|
|
|
'fc-timegrid-slot',
|
|
|
'fc-timegrid-slot-lane',
|
|
|
slatMeta.isLabeled ? '' : 'fc-timegrid-slot-minor',
|
|
|
];
|
|
|
return (createElement("tr", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },
|
|
|
props.axis && (createElement(TimeColsAxisCell, __assign({}, slatMeta))),
|
|
|
createElement(RenderHook, { hookProps: hookProps, classNames: options.slotLaneClassNames, content: options.slotLaneContent, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("td", { ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-time": slatMeta.isoTimeStr }, innerContent)); })));
|
|
|
})));
|
|
|
};
|
|
|
return TimeColsSlatsBody;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
/*
|
|
|
for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
|
|
|
*/
|
|
|
var TimeColsSlats = /** @class */ (function (_super) {
|
|
|
__extends(TimeColsSlats, _super);
|
|
|
function TimeColsSlats() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.slatElRefs = new RefMap();
|
|
|
return _this;
|
|
|
}
|
|
|
TimeColsSlats.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
return (createElement("div", { className: "fc-timegrid-slots", ref: this.rootElRef },
|
|
|
createElement("table", { className: context.theme.getClass('table'), style: {
|
|
|
minWidth: props.tableMinWidth,
|
|
|
width: props.clientWidth,
|
|
|
height: props.minHeight,
|
|
|
} },
|
|
|
props.tableColGroupNode /* relies on there only being a single <col> for the axis */,
|
|
|
createElement(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));
|
|
|
};
|
|
|
TimeColsSlats.prototype.componentDidMount = function () {
|
|
|
this.updateSizing();
|
|
|
};
|
|
|
TimeColsSlats.prototype.componentDidUpdate = function () {
|
|
|
this.updateSizing();
|
|
|
};
|
|
|
TimeColsSlats.prototype.componentWillUnmount = function () {
|
|
|
if (this.props.onCoords) {
|
|
|
this.props.onCoords(null);
|
|
|
}
|
|
|
};
|
|
|
TimeColsSlats.prototype.updateSizing = function () {
|
|
|
var _a = this, context = _a.context, props = _a.props;
|
|
|
if (props.onCoords &&
|
|
|
props.clientWidth !== null // means sizing has stabilized
|
|
|
) {
|
|
|
var rootEl = this.rootElRef.current;
|
|
|
if (rootEl.offsetHeight) { // not hidden by css
|
|
|
props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
return TimeColsSlats;
|
|
|
}(BaseComponent));
|
|
|
function collectSlatEls(elMap, slatMetas) {
|
|
|
return slatMetas.map(function (slatMeta) { return elMap[slatMeta.key]; });
|
|
|
}
|
|
|
|
|
|
function splitSegsByCol(segs, colCnt) {
|
|
|
var segsByCol = [];
|
|
|
var i;
|
|
|
for (i = 0; i < colCnt; i += 1) {
|
|
|
segsByCol.push([]);
|
|
|
}
|
|
|
if (segs) {
|
|
|
for (i = 0; i < segs.length; i += 1) {
|
|
|
segsByCol[segs[i].col].push(segs[i]);
|
|
|
}
|
|
|
}
|
|
|
return segsByCol;
|
|
|
}
|
|
|
function splitInteractionByCol(ui, colCnt) {
|
|
|
var byRow = [];
|
|
|
if (!ui) {
|
|
|
for (var i = 0; i < colCnt; i += 1) {
|
|
|
byRow[i] = null;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
for (var i = 0; i < colCnt; i += 1) {
|
|
|
byRow[i] = {
|
|
|
affectedInstances: ui.affectedInstances,
|
|
|
isEvent: ui.isEvent,
|
|
|
segs: [],
|
|
|
};
|
|
|
}
|
|
|
for (var _i = 0, _a = ui.segs; _i < _a.length; _i++) {
|
|
|
var seg = _a[_i];
|
|
|
byRow[seg.col].segs.push(seg);
|
|
|
}
|
|
|
}
|
|
|
return byRow;
|
|
|
}
|
|
|
|
|
|
var TimeColMoreLink = /** @class */ (function (_super) {
|
|
|
__extends(TimeColMoreLink, _super);
|
|
|
function TimeColMoreLink() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.rootElRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
TimeColMoreLink.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var props = this.props;
|
|
|
return (createElement(MoreLinkRoot, { allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, alignmentElRef: this.rootElRef, defaultContent: renderMoreLinkInner, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: function () { return renderPlainFgSegs(props.hiddenSegs, props); } }, function (rootElRef, classNames, innerElRef, innerContent, handleClick) { return (createElement("a", { ref: function (el) {
|
|
|
setRef(rootElRef, el);
|
|
|
setRef(_this.rootElRef, el);
|
|
|
}, className: ['fc-timegrid-more-link'].concat(classNames).join(' '), style: { top: props.top, bottom: props.bottom }, onClick: handleClick },
|
|
|
createElement("div", { ref: innerElRef, className: "fc-timegrid-more-link-inner fc-sticky" }, innerContent))); }));
|
|
|
};
|
|
|
return TimeColMoreLink;
|
|
|
}(BaseComponent));
|
|
|
function renderMoreLinkInner(props) {
|
|
|
return props.shortText;
|
|
|
}
|
|
|
|
|
|
// segInputs assumed sorted
|
|
|
function buildPositioning(segInputs, strictOrder, maxStackCnt) {
|
|
|
var hierarchy = new SegHierarchy();
|
|
|
if (strictOrder != null) {
|
|
|
hierarchy.strictOrder = strictOrder;
|
|
|
}
|
|
|
if (maxStackCnt != null) {
|
|
|
hierarchy.maxStackCnt = maxStackCnt;
|
|
|
}
|
|
|
var hiddenEntries = hierarchy.addSegs(segInputs);
|
|
|
var hiddenGroups = groupIntersectingEntries(hiddenEntries);
|
|
|
var web = buildWeb(hierarchy);
|
|
|
web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0
|
|
|
var segRects = webToRects(web);
|
|
|
return { segRects: segRects, hiddenGroups: hiddenGroups };
|
|
|
}
|
|
|
function buildWeb(hierarchy) {
|
|
|
var entriesByLevel = hierarchy.entriesByLevel;
|
|
|
var buildNode = cacheable(function (level, lateral) { return level + ':' + lateral; }, function (level, lateral) {
|
|
|
var siblingRange = findNextLevelSegs(hierarchy, level, lateral);
|
|
|
var nextLevelRes = buildNodes(siblingRange, buildNode);
|
|
|
var entry = entriesByLevel[level][lateral];
|
|
|
return [
|
|
|
__assign(__assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),
|
|
|
entry.thickness + nextLevelRes[1], // the pressure builds
|
|
|
];
|
|
|
});
|
|
|
return buildNodes(entriesByLevel.length
|
|
|
? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length }
|
|
|
: null, buildNode)[0];
|
|
|
}
|
|
|
function buildNodes(siblingRange, buildNode) {
|
|
|
if (!siblingRange) {
|
|
|
return [[], 0];
|
|
|
}
|
|
|
var level = siblingRange.level, lateralStart = siblingRange.lateralStart, lateralEnd = siblingRange.lateralEnd;
|
|
|
var lateral = lateralStart;
|
|
|
var pairs = [];
|
|
|
while (lateral < lateralEnd) {
|
|
|
pairs.push(buildNode(level, lateral));
|
|
|
lateral += 1;
|
|
|
}
|
|
|
pairs.sort(cmpDescPressures);
|
|
|
return [
|
|
|
pairs.map(extractNode),
|
|
|
pairs[0][1], // first item's pressure
|
|
|
];
|
|
|
}
|
|
|
function cmpDescPressures(a, b) {
|
|
|
return b[1] - a[1];
|
|
|
}
|
|
|
function extractNode(a) {
|
|
|
return a[0];
|
|
|
}
|
|
|
function findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {
|
|
|
var levelCoords = hierarchy.levelCoords, entriesByLevel = hierarchy.entriesByLevel;
|
|
|
var subjectEntry = entriesByLevel[subjectLevel][subjectLateral];
|
|
|
var afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;
|
|
|
var levelCnt = levelCoords.length;
|
|
|
var level = subjectLevel;
|
|
|
// skip past levels that are too high up
|
|
|
for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)
|
|
|
; // do nothing
|
|
|
for (; level < levelCnt; level += 1) {
|
|
|
var entries = entriesByLevel[level];
|
|
|
var entry = void 0;
|
|
|
var searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);
|
|
|
var lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one
|
|
|
var lateralEnd = lateralStart;
|
|
|
while ( // loop through entries that horizontally intersect
|
|
|
(entry = entries[lateralEnd]) && // but not past the whole seg list
|
|
|
entry.span.start < subjectEntry.span.end) {
|
|
|
lateralEnd += 1;
|
|
|
}
|
|
|
if (lateralStart < lateralEnd) {
|
|
|
return { level: level, lateralStart: lateralStart, lateralEnd: lateralEnd };
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function stretchWeb(topLevelNodes, totalThickness) {
|
|
|
var stretchNode = cacheable(function (node, startCoord, prevThickness) { return buildEntryKey(node); }, function (node, startCoord, prevThickness) {
|
|
|
var nextLevelNodes = node.nextLevelNodes, thickness = node.thickness;
|
|
|
var allThickness = thickness + prevThickness;
|
|
|
var thicknessFraction = thickness / allThickness;
|
|
|
var endCoord;
|
|
|
var newChildren = [];
|
|
|
if (!nextLevelNodes.length) {
|
|
|
endCoord = totalThickness;
|
|
|
}
|
|
|
else {
|
|
|
for (var _i = 0, nextLevelNodes_1 = nextLevelNodes; _i < nextLevelNodes_1.length; _i++) {
|
|
|
var childNode = nextLevelNodes_1[_i];
|
|
|
if (endCoord === undefined) {
|
|
|
var res = stretchNode(childNode, startCoord, allThickness);
|
|
|
endCoord = res[0];
|
|
|
newChildren.push(res[1]);
|
|
|
}
|
|
|
else {
|
|
|
var res = stretchNode(childNode, endCoord, 0);
|
|
|
newChildren.push(res[1]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
var newThickness = (endCoord - startCoord) * thicknessFraction;
|
|
|
return [endCoord - newThickness, __assign(__assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];
|
|
|
});
|
|
|
return topLevelNodes.map(function (node) { return stretchNode(node, 0, 0)[1]; });
|
|
|
}
|
|
|
// not sorted in any particular order
|
|
|
function webToRects(topLevelNodes) {
|
|
|
var rects = [];
|
|
|
var processNode = cacheable(function (node, levelCoord, stackDepth) { return buildEntryKey(node); }, function (node, levelCoord, stackDepth) {
|
|
|
var rect = __assign(__assign({}, node), { levelCoord: levelCoord,
|
|
|
stackDepth: stackDepth, stackForward: 0 });
|
|
|
rects.push(rect);
|
|
|
return (rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1);
|
|
|
});
|
|
|
function processNodes(nodes, levelCoord, stackDepth) {
|
|
|
var stackForward = 0;
|
|
|
for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) {
|
|
|
var node = nodes_1[_i];
|
|
|
stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);
|
|
|
}
|
|
|
return stackForward;
|
|
|
}
|
|
|
processNodes(topLevelNodes, 0, 0);
|
|
|
return rects; // TODO: sort rects by levelCoord to be consistent with toRects?
|
|
|
}
|
|
|
// TODO: move to general util
|
|
|
function cacheable(keyFunc, workFunc) {
|
|
|
var cache = {};
|
|
|
return function () {
|
|
|
var args = [];
|
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
|
args[_i] = arguments[_i];
|
|
|
}
|
|
|
var key = keyFunc.apply(void 0, args);
|
|
|
return (key in cache)
|
|
|
? cache[key]
|
|
|
: (cache[key] = workFunc.apply(void 0, args));
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function computeSegVCoords(segs, colDate, slatCoords, eventMinHeight) {
|
|
|
if (slatCoords === void 0) { slatCoords = null; }
|
|
|
if (eventMinHeight === void 0) { eventMinHeight = 0; }
|
|
|
var vcoords = [];
|
|
|
if (slatCoords) {
|
|
|
for (var i = 0; i < segs.length; i += 1) {
|
|
|
var seg = segs[i];
|
|
|
var spanStart = slatCoords.computeDateTop(seg.start, colDate);
|
|
|
var spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(
|
|
|
slatCoords.computeDateTop(seg.end, colDate));
|
|
|
vcoords.push({
|
|
|
start: Math.round(spanStart),
|
|
|
end: Math.round(spanEnd), //
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
return vcoords;
|
|
|
}
|
|
|
function computeFgSegPlacements(segs, segVCoords, // might not have for every seg
|
|
|
eventOrderStrict, eventMaxStack) {
|
|
|
var segInputs = [];
|
|
|
var dumbSegs = []; // segs without coords
|
|
|
for (var i = 0; i < segs.length; i += 1) {
|
|
|
var vcoords = segVCoords[i];
|
|
|
if (vcoords) {
|
|
|
segInputs.push({
|
|
|
index: i,
|
|
|
thickness: 1,
|
|
|
span: vcoords,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
dumbSegs.push(segs[i]);
|
|
|
}
|
|
|
}
|
|
|
var _a = buildPositioning(segInputs, eventOrderStrict, eventMaxStack), segRects = _a.segRects, hiddenGroups = _a.hiddenGroups;
|
|
|
var segPlacements = [];
|
|
|
for (var _i = 0, segRects_1 = segRects; _i < segRects_1.length; _i++) {
|
|
|
var segRect = segRects_1[_i];
|
|
|
segPlacements.push({
|
|
|
seg: segs[segRect.index],
|
|
|
rect: segRect,
|
|
|
});
|
|
|
}
|
|
|
for (var _b = 0, dumbSegs_1 = dumbSegs; _b < dumbSegs_1.length; _b++) {
|
|
|
var dumbSeg = dumbSegs_1[_b];
|
|
|
segPlacements.push({ seg: dumbSeg, rect: null });
|
|
|
}
|
|
|
return { segPlacements: segPlacements, hiddenGroups: hiddenGroups };
|
|
|
}
|
|
|
|
|
|
var DEFAULT_TIME_FORMAT$1 = createFormatter({
|
|
|
hour: 'numeric',
|
|
|
minute: '2-digit',
|
|
|
meridiem: false,
|
|
|
});
|
|
|
var TimeColEvent = /** @class */ (function (_super) {
|
|
|
__extends(TimeColEvent, _super);
|
|
|
function TimeColEvent() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TimeColEvent.prototype.render = function () {
|
|
|
var classNames = [
|
|
|
'fc-timegrid-event',
|
|
|
'fc-v-event',
|
|
|
];
|
|
|
if (this.props.isShort) {
|
|
|
classNames.push('fc-timegrid-event-short');
|
|
|
}
|
|
|
return (createElement(StandardEvent, __assign({}, this.props, { defaultTimeFormat: DEFAULT_TIME_FORMAT$1, extraClassNames: classNames })));
|
|
|
};
|
|
|
return TimeColEvent;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var TimeColMisc = /** @class */ (function (_super) {
|
|
|
__extends(TimeColMisc, _super);
|
|
|
function TimeColMisc() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
TimeColMisc.prototype.render = function () {
|
|
|
var props = this.props;
|
|
|
return (createElement(DayCellContent, { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps }, function (innerElRef, innerContent) { return (innerContent &&
|
|
|
createElement("div", { className: "fc-timegrid-col-misc", ref: innerElRef }, innerContent)); }));
|
|
|
};
|
|
|
return TimeColMisc;
|
|
|
}(BaseComponent));
|
|
|
|
|
|
var TimeCol = /** @class */ (function (_super) {
|
|
|
__extends(TimeCol, _super);
|
|
|
function TimeCol() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.sortEventSegs = memoize(sortEventSegs);
|
|
|
return _this;
|
|
|
}
|
|
|
// TODO: memoize event-placement?
|
|
|
TimeCol.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var isSelectMirror = context.options.selectMirror;
|
|
|
var mirrorSegs = (props.eventDrag && props.eventDrag.segs) ||
|
|
|
(props.eventResize && props.eventResize.segs) ||
|
|
|
(isSelectMirror && props.dateSelectionSegs) ||
|
|
|
[];
|
|
|
var interactionAffectedInstances = // TODO: messy way to compute this
|
|
|
(props.eventDrag && props.eventDrag.affectedInstances) ||
|
|
|
(props.eventResize && props.eventResize.affectedInstances) ||
|
|
|
{};
|
|
|
var sortedFgSegs = this.sortEventSegs(props.fgEventSegs, context.options.eventOrder);
|
|
|
return (createElement(DayCellRoot, { elRef: props.elRef, date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps }, function (rootElRef, classNames, dataAttrs) { return (createElement("td", __assign({ ref: rootElRef, className: ['fc-timegrid-col'].concat(classNames, props.extraClassNames || []).join(' ') }, dataAttrs, props.extraDataAttrs),
|
|
|
createElement("div", { className: "fc-timegrid-col-frame" },
|
|
|
createElement("div", { className: "fc-timegrid-col-bg" },
|
|
|
_this.renderFillSegs(props.businessHourSegs, 'non-business'),
|
|
|
_this.renderFillSegs(props.bgEventSegs, 'bg-event'),
|
|
|
_this.renderFillSegs(props.dateSelectionSegs, 'highlight')),
|
|
|
createElement("div", { className: "fc-timegrid-col-events" }, _this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),
|
|
|
createElement("div", { className: "fc-timegrid-col-events" }, _this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror))),
|
|
|
createElement("div", { className: "fc-timegrid-now-indicator-container" }, _this.renderNowIndicator(props.nowIndicatorSegs)),
|
|
|
createElement(TimeColMisc, { date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraHookProps: props.extraHookProps })))); }));
|
|
|
};
|
|
|
TimeCol.prototype.renderFgSegs = function (sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting) {
|
|
|
var props = this.props;
|
|
|
if (props.forPrint) {
|
|
|
return renderPlainFgSegs(sortedFgSegs, props);
|
|
|
}
|
|
|
return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting);
|
|
|
};
|
|
|
TimeCol.prototype.renderPositionedFgSegs = function (segs, // if not mirror, needs to be sorted
|
|
|
segIsInvisible, isDragging, isResizing, isDateSelecting) {
|
|
|
var _this = this;
|
|
|
var _a = this.context.options, eventMaxStack = _a.eventMaxStack, eventShortHeight = _a.eventShortHeight, eventOrderStrict = _a.eventOrderStrict, eventMinHeight = _a.eventMinHeight;
|
|
|
var _b = this.props, date = _b.date, slatCoords = _b.slatCoords, eventSelection = _b.eventSelection, todayRange = _b.todayRange, nowDate = _b.nowDate;
|
|
|
var isMirror = isDragging || isResizing || isDateSelecting;
|
|
|
var segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);
|
|
|
var _c = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack), segPlacements = _c.segPlacements, hiddenGroups = _c.hiddenGroups;
|
|
|
return (createElement(Fragment, null,
|
|
|
this.renderHiddenGroups(hiddenGroups, segs),
|
|
|
segPlacements.map(function (segPlacement) {
|
|
|
var seg = segPlacement.seg, rect = segPlacement.rect;
|
|
|
var instanceId = seg.eventRange.instance.instanceId;
|
|
|
var isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);
|
|
|
var vStyle = computeSegVStyle(rect && rect.span);
|
|
|
var hStyle = (!isMirror && rect) ? _this.computeSegHStyle(rect) : { left: 0, right: 0 };
|
|
|
var isInset = Boolean(rect) && rect.stackForward > 0;
|
|
|
var isShort = Boolean(rect) && (rect.span.end - rect.span.start) < eventShortHeight; // look at other places for this problem
|
|
|
return (createElement("div", { className: 'fc-timegrid-event-harness' +
|
|
|
(isInset ? ' fc-timegrid-event-harness-inset' : ''), key: instanceId, style: __assign(__assign({ visibility: isVisible ? '' : 'hidden' }, vStyle), hStyle) },
|
|
|
createElement(TimeColEvent, __assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, isShort: isShort }, getSegMeta(seg, todayRange, nowDate)))));
|
|
|
})));
|
|
|
};
|
|
|
// will already have eventMinHeight applied because segInputs already had it
|
|
|
TimeCol.prototype.renderHiddenGroups = function (hiddenGroups, segs) {
|
|
|
var _a = this.props, extraDateSpan = _a.extraDateSpan, dateProfile = _a.dateProfile, todayRange = _a.todayRange, nowDate = _a.nowDate, eventSelection = _a.eventSelection, eventDrag = _a.eventDrag, eventResize = _a.eventResize;
|
|
|
return (createElement(Fragment, null, hiddenGroups.map(function (hiddenGroup) {
|
|
|
var positionCss = computeSegVStyle(hiddenGroup.span);
|
|
|
var hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);
|
|
|
return (createElement(TimeColMoreLink, { key: buildIsoString(computeEarliestSegStart(hiddenSegs)), hiddenSegs: hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan: extraDateSpan, dateProfile: dateProfile, todayRange: todayRange, nowDate: nowDate, eventSelection: eventSelection, eventDrag: eventDrag, eventResize: eventResize }));
|
|
|
})));
|
|
|
};
|
|
|
TimeCol.prototype.renderFillSegs = function (segs, fillType) {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated
|
|
|
var children = segVCoords.map(function (vcoords, i) {
|
|
|
var seg = segs[i];
|
|
|
return (createElement("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-timegrid-bg-harness", style: computeSegVStyle(vcoords) }, fillType === 'bg-event' ?
|
|
|
createElement(BgEvent, __assign({ seg: seg }, getSegMeta(seg, props.todayRange, props.nowDate))) :
|
|
|
renderFill(fillType)));
|
|
|
});
|
|
|
return createElement(Fragment, null, children);
|
|
|
};
|
|
|
TimeCol.prototype.renderNowIndicator = function (segs) {
|
|
|
var _a = this.props, slatCoords = _a.slatCoords, date = _a.date;
|
|
|
if (!slatCoords) {
|
|
|
return null;
|
|
|
}
|
|
|
return segs.map(function (seg, i) { return (createElement(NowIndicatorRoot, { isAxis: false, date: date,
|
|
|
// key doesn't matter. will only ever be one
|
|
|
key: i }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-line'].concat(classNames).join(' '), style: { top: slatCoords.computeDateTop(seg.start, date) } }, innerContent)); })); });
|
|
|
};
|
|
|
TimeCol.prototype.computeSegHStyle = function (segHCoords) {
|
|
|
var _a = this.context, isRtl = _a.isRtl, options = _a.options;
|
|
|
var shouldOverlap = options.slotEventOverlap;
|
|
|
var nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point
|
|
|
var farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point
|
|
|
var left; // amount of space from left edge, a fraction of the total width
|
|
|
var right; // amount of space from right edge, a fraction of the total width
|
|
|
if (shouldOverlap) {
|
|
|
// double the width, but don't go beyond the maximum forward coordinate (1.0)
|
|
|
farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);
|
|
|
}
|
|
|
if (isRtl) {
|
|
|
left = 1 - farCoord;
|
|
|
right = nearCoord;
|
|
|
}
|
|
|
else {
|
|
|
left = nearCoord;
|
|
|
right = 1 - farCoord;
|
|
|
}
|
|
|
var props = {
|
|
|
zIndex: segHCoords.stackDepth + 1,
|
|
|
left: left * 100 + '%',
|
|
|
right: right * 100 + '%',
|
|
|
};
|
|
|
if (shouldOverlap && !segHCoords.stackForward) {
|
|
|
// add padding to the edge so that forward stacked events don't cover the resizer's icon
|
|
|
props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
|
|
|
}
|
|
|
return props;
|
|
|
};
|
|
|
return TimeCol;
|
|
|
}(BaseComponent));
|
|
|
function renderPlainFgSegs(sortedFgSegs, _a) {
|
|
|
var todayRange = _a.todayRange, nowDate = _a.nowDate, eventSelection = _a.eventSelection, eventDrag = _a.eventDrag, eventResize = _a.eventResize;
|
|
|
var hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) ||
|
|
|
(eventResize ? eventResize.affectedInstances : null) ||
|
|
|
{};
|
|
|
return (createElement(Fragment, null, sortedFgSegs.map(function (seg) {
|
|
|
var instanceId = seg.eventRange.instance.instanceId;
|
|
|
return (createElement("div", { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? 'hidden' : '' } },
|
|
|
createElement(TimeColEvent, __assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, getSegMeta(seg, todayRange, nowDate)))));
|
|
|
})));
|
|
|
}
|
|
|
function computeSegVStyle(segVCoords) {
|
|
|
if (!segVCoords) {
|
|
|
return { top: '', bottom: '' };
|
|
|
}
|
|
|
return {
|
|
|
top: segVCoords.start,
|
|
|
bottom: -segVCoords.end,
|
|
|
};
|
|
|
}
|
|
|
function compileSegsFromEntries(segEntries, allSegs) {
|
|
|
return segEntries.map(function (segEntry) { return allSegs[segEntry.index]; });
|
|
|
}
|
|
|
|
|
|
var TimeColsContent = /** @class */ (function (_super) {
|
|
|
__extends(TimeColsContent, _super);
|
|
|
function TimeColsContent() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.splitFgEventSegs = memoize(splitSegsByCol);
|
|
|
_this.splitBgEventSegs = memoize(splitSegsByCol);
|
|
|
_this.splitBusinessHourSegs = memoize(splitSegsByCol);
|
|
|
_this.splitNowIndicatorSegs = memoize(splitSegsByCol);
|
|
|
_this.splitDateSelectionSegs = memoize(splitSegsByCol);
|
|
|
_this.splitEventDrag = memoize(splitInteractionByCol);
|
|
|
_this.splitEventResize = memoize(splitInteractionByCol);
|
|
|
_this.rootElRef = createRef();
|
|
|
_this.cellElRefs = new RefMap();
|
|
|
return _this;
|
|
|
}
|
|
|
TimeColsContent.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var nowIndicatorTop = context.options.nowIndicator &&
|
|
|
props.slatCoords &&
|
|
|
props.slatCoords.safeComputeTop(props.nowDate); // might return void
|
|
|
var colCnt = props.cells.length;
|
|
|
var fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);
|
|
|
var bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);
|
|
|
var businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);
|
|
|
var nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);
|
|
|
var dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);
|
|
|
var eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);
|
|
|
var eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);
|
|
|
return (createElement("div", { className: "fc-timegrid-cols", ref: this.rootElRef },
|
|
|
createElement("table", { style: {
|
|
|
minWidth: props.tableMinWidth,
|
|
|
width: props.clientWidth,
|
|
|
} },
|
|
|
props.tableColGroupNode,
|
|
|
createElement("tbody", null,
|
|
|
createElement("tr", null,
|
|
|
props.axis && (createElement("td", { className: "fc-timegrid-col fc-timegrid-axis" },
|
|
|
createElement("div", { className: "fc-timegrid-col-frame" },
|
|
|
createElement("div", { className: "fc-timegrid-now-indicator-container" }, typeof nowIndicatorTop === 'number' && (createElement(NowIndicatorRoot, { isAxis: true, date: props.nowDate }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("div", { ref: rootElRef, className: ['fc-timegrid-now-indicator-arrow'].concat(classNames).join(' '), style: { top: nowIndicatorTop } }, innerContent)); })))))),
|
|
|
props.cells.map(function (cell, i) { return (createElement(TimeCol, { key: cell.key, elRef: _this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraHookProps: cell.extraHookProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint })); }))))));
|
|
|
};
|
|
|
TimeColsContent.prototype.componentDidMount = function () {
|
|
|
this.updateCoords();
|
|
|
};
|
|
|
TimeColsContent.prototype.componentDidUpdate = function () {
|
|
|
this.updateCoords();
|
|
|
};
|
|
|
TimeColsContent.prototype.updateCoords = function () {
|
|
|
var props = this.props;
|
|
|
if (props.onColCoords &&
|
|
|
props.clientWidth !== null // means sizing has stabilized
|
|
|
) {
|
|
|
props.onColCoords(new PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal
|
|
|
false));
|
|
|
}
|
|
|
};
|
|
|
return TimeColsContent;
|
|
|
}(BaseComponent));
|
|
|
function collectCellEls(elMap, cells) {
|
|
|
return cells.map(function (cell) { return elMap[cell.key]; });
|
|
|
}
|
|
|
|
|
|
/* A component that renders one or more columns of vertical time slots
|
|
|
----------------------------------------------------------------------------------------------------------------------*/
|
|
|
var TimeCols = /** @class */ (function (_super) {
|
|
|
__extends(TimeCols, _super);
|
|
|
function TimeCols() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.processSlotOptions = memoize(processSlotOptions);
|
|
|
_this.state = {
|
|
|
slatCoords: null,
|
|
|
};
|
|
|
_this.handleRootEl = function (el) {
|
|
|
if (el) {
|
|
|
_this.context.registerInteractiveComponent(_this, {
|
|
|
el: el,
|
|
|
isHitComboAllowed: _this.props.isHitComboAllowed,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
_this.context.unregisterInteractiveComponent(_this);
|
|
|
}
|
|
|
};
|
|
|
_this.handleScrollRequest = function (request) {
|
|
|
var onScrollTopRequest = _this.props.onScrollTopRequest;
|
|
|
var slatCoords = _this.state.slatCoords;
|
|
|
if (onScrollTopRequest && slatCoords) {
|
|
|
if (request.time) {
|
|
|
var top_1 = slatCoords.computeTimeTop(request.time);
|
|
|
top_1 = Math.ceil(top_1); // zoom can give weird floating-point values. rather scroll a little bit further
|
|
|
if (top_1) {
|
|
|
top_1 += 1; // to overcome top border that slots beyond the first have. looks better
|
|
|
}
|
|
|
onScrollTopRequest(top_1);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
};
|
|
|
_this.handleColCoords = function (colCoords) {
|
|
|
_this.colCoords = colCoords;
|
|
|
};
|
|
|
_this.handleSlatCoords = function (slatCoords) {
|
|
|
_this.setState({ slatCoords: slatCoords });
|
|
|
if (_this.props.onSlatCoords) {
|
|
|
_this.props.onSlatCoords(slatCoords);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
TimeCols.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, state = _a.state;
|
|
|
return (createElement("div", { className: "fc-timegrid-body", ref: this.handleRootEl, style: {
|
|
|
// these props are important to give this wrapper correct dimensions for interactions
|
|
|
// TODO: if we set it here, can we avoid giving to inner tables?
|
|
|
width: props.clientWidth,
|
|
|
minWidth: props.tableMinWidth,
|
|
|
} },
|
|
|
createElement(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),
|
|
|
createElement(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));
|
|
|
};
|
|
|
TimeCols.prototype.componentDidMount = function () {
|
|
|
this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
|
|
|
};
|
|
|
TimeCols.prototype.componentDidUpdate = function (prevProps) {
|
|
|
this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);
|
|
|
};
|
|
|
TimeCols.prototype.componentWillUnmount = function () {
|
|
|
this.scrollResponder.detach();
|
|
|
};
|
|
|
TimeCols.prototype.queryHit = function (positionLeft, positionTop) {
|
|
|
var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
|
|
|
var colCoords = this.colCoords;
|
|
|
var dateProfile = this.props.dateProfile;
|
|
|
var slatCoords = this.state.slatCoords;
|
|
|
var _b = this.processSlotOptions(this.props.slotDuration, options.snapDuration), snapDuration = _b.snapDuration, snapsPerSlot = _b.snapsPerSlot;
|
|
|
var colIndex = colCoords.leftToIndex(positionLeft);
|
|
|
var slatIndex = slatCoords.positions.topToIndex(positionTop);
|
|
|
if (colIndex != null && slatIndex != null) {
|
|
|
var cell = this.props.cells[colIndex];
|
|
|
var slatTop = slatCoords.positions.tops[slatIndex];
|
|
|
var slatHeight = slatCoords.positions.getHeight(slatIndex);
|
|
|
var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
|
|
|
var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
|
|
|
var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
|
|
|
var dayDate = this.props.cells[colIndex].date;
|
|
|
var time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));
|
|
|
var start = dateEnv.add(dayDate, time);
|
|
|
var end = dateEnv.add(start, snapDuration);
|
|
|
return {
|
|
|
dateProfile: dateProfile,
|
|
|
dateSpan: __assign({ range: { start: start, end: end }, allDay: false }, cell.extraDateSpan),
|
|
|
dayEl: colCoords.els[colIndex],
|
|
|
rect: {
|
|
|
left: colCoords.lefts[colIndex],
|
|
|
right: colCoords.rights[colIndex],
|
|
|
top: slatTop,
|
|
|
bottom: slatTop + slatHeight,
|
|
|
},
|
|
|
layer: 0,
|
|
|
};
|
|
|
}
|
|
|
return null;
|
|
|
};
|
|
|
return TimeCols;
|
|
|
}(DateComponent));
|
|
|
function processSlotOptions(slotDuration, snapDurationOverride) {
|
|
|
var snapDuration = snapDurationOverride || slotDuration;
|
|
|
var snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);
|
|
|
if (snapsPerSlot === null) {
|
|
|
snapDuration = slotDuration;
|
|
|
snapsPerSlot = 1;
|
|
|
// TODO: say warning?
|
|
|
}
|
|
|
return { snapDuration: snapDuration, snapsPerSlot: snapsPerSlot };
|
|
|
}
|
|
|
|
|
|
var DayTimeColsSlicer = /** @class */ (function (_super) {
|
|
|
__extends(DayTimeColsSlicer, _super);
|
|
|
function DayTimeColsSlicer() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
DayTimeColsSlicer.prototype.sliceRange = function (range, dayRanges) {
|
|
|
var segs = [];
|
|
|
for (var col = 0; col < dayRanges.length; col += 1) {
|
|
|
var segRange = intersectRanges(range, dayRanges[col]);
|
|
|
if (segRange) {
|
|
|
segs.push({
|
|
|
start: segRange.start,
|
|
|
end: segRange.end,
|
|
|
isStart: segRange.start.valueOf() === range.start.valueOf(),
|
|
|
isEnd: segRange.end.valueOf() === range.end.valueOf(),
|
|
|
col: col,
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
return DayTimeColsSlicer;
|
|
|
}(Slicer));
|
|
|
|
|
|
var DayTimeCols = /** @class */ (function (_super) {
|
|
|
__extends(DayTimeCols, _super);
|
|
|
function DayTimeCols() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.buildDayRanges = memoize(buildDayRanges);
|
|
|
_this.slicer = new DayTimeColsSlicer();
|
|
|
_this.timeColsRef = createRef();
|
|
|
return _this;
|
|
|
}
|
|
|
DayTimeCols.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var dateProfile = props.dateProfile, dayTableModel = props.dayTableModel;
|
|
|
var isNowIndicator = context.options.nowIndicator;
|
|
|
var dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);
|
|
|
// give it the first row of cells
|
|
|
// TODO: would move this further down hierarchy, but sliceNowDate needs it
|
|
|
return (createElement(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' }, function (nowDate, todayRange) { return (createElement(TimeCols, __assign({ ref: _this.timeColsRef }, _this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: isNowIndicator && _this.slicer.sliceNowDate(nowDate, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords }))); }));
|
|
|
};
|
|
|
return DayTimeCols;
|
|
|
}(DateComponent));
|
|
|
function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
|
|
|
var ranges = [];
|
|
|
for (var _i = 0, _a = dayTableModel.headerDates; _i < _a.length; _i++) {
|
|
|
var date = _a[_i];
|
|
|
ranges.push({
|
|
|
start: dateEnv.add(date, dateProfile.slotMinTime),
|
|
|
end: dateEnv.add(date, dateProfile.slotMaxTime),
|
|
|
});
|
|
|
}
|
|
|
return ranges;
|
|
|
}
|
|
|
|
|
|
// potential nice values for the slot-duration and interval-duration
|
|
|
// from largest to smallest
|
|
|
var STOCK_SUB_DURATIONS = [
|
|
|
{ hours: 1 },
|
|
|
{ minutes: 30 },
|
|
|
{ minutes: 15 },
|
|
|
{ seconds: 30 },
|
|
|
{ seconds: 15 },
|
|
|
];
|
|
|
function buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {
|
|
|
var dayStart = new Date(0);
|
|
|
var slatTime = slotMinTime;
|
|
|
var slatIterator = createDuration(0);
|
|
|
var labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);
|
|
|
var metas = [];
|
|
|
while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {
|
|
|
var date = dateEnv.add(dayStart, slatTime);
|
|
|
var isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;
|
|
|
metas.push({
|
|
|
date: date,
|
|
|
time: slatTime,
|
|
|
key: date.toISOString(),
|
|
|
isoTimeStr: formatIsoTimeString(date),
|
|
|
isLabeled: isLabeled,
|
|
|
});
|
|
|
slatTime = addDurations(slatTime, slotDuration);
|
|
|
slatIterator = addDurations(slatIterator, slotDuration);
|
|
|
}
|
|
|
return metas;
|
|
|
}
|
|
|
// Computes an automatic value for slotLabelInterval
|
|
|
function computeLabelInterval(slotDuration) {
|
|
|
var i;
|
|
|
var labelInterval;
|
|
|
var slotsPerLabel;
|
|
|
// find the smallest stock label interval that results in more than one slots-per-label
|
|
|
for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {
|
|
|
labelInterval = createDuration(STOCK_SUB_DURATIONS[i]);
|
|
|
slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);
|
|
|
if (slotsPerLabel !== null && slotsPerLabel > 1) {
|
|
|
return labelInterval;
|
|
|
}
|
|
|
}
|
|
|
return slotDuration; // fall back
|
|
|
}
|
|
|
|
|
|
var DayTimeColsView = /** @class */ (function (_super) {
|
|
|
__extends(DayTimeColsView, _super);
|
|
|
function DayTimeColsView() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.buildTimeColsModel = memoize(buildTimeColsModel);
|
|
|
_this.buildSlatMetas = memoize(buildSlatMetas);
|
|
|
return _this;
|
|
|
}
|
|
|
DayTimeColsView.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this.context, options = _a.options, dateEnv = _a.dateEnv, dateProfileGenerator = _a.dateProfileGenerator;
|
|
|
var props = this.props;
|
|
|
var dateProfile = props.dateProfile;
|
|
|
var dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);
|
|
|
var splitProps = this.allDaySplitter.splitProps(props);
|
|
|
var slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);
|
|
|
var dayMinWidth = options.dayMinWidth;
|
|
|
var hasAttachedAxis = !dayMinWidth;
|
|
|
var hasDetachedAxis = dayMinWidth;
|
|
|
var headerContent = options.dayHeaders && (createElement(DayHeader, { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null }));
|
|
|
var allDayContent = (options.allDaySlot !== false) && (function (contentArg) { return (createElement(DayTable, __assign({}, splitProps.allDay, { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? _this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: _this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, _this.getAllDayMaxEventProps()))); });
|
|
|
var timeGridContent = function (contentArg) { return (createElement(DayTimeCols, __assign({}, splitProps.timed, { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: _this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: _this.handleScrollTopRequest }))); };
|
|
|
return hasDetachedAxis
|
|
|
? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)
|
|
|
: this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);
|
|
|
};
|
|
|
return DayTimeColsView;
|
|
|
}(TimeColsView));
|
|
|
function buildTimeColsModel(dateProfile, dateProfileGenerator) {
|
|
|
var daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
|
|
|
return new DayTableModel(daySeries, false);
|
|
|
}
|
|
|
|
|
|
var OPTION_REFINERS$1 = {
|
|
|
allDaySlot: Boolean,
|
|
|
};
|
|
|
|
|
|
var main$2 = createPlugin({
|
|
|
initialView: 'timeGridWeek',
|
|
|
optionRefiners: OPTION_REFINERS$1,
|
|
|
views: {
|
|
|
timeGrid: {
|
|
|
component: DayTimeColsView,
|
|
|
usesMinMaxTime: true,
|
|
|
allDaySlot: true,
|
|
|
slotDuration: '00:30:00',
|
|
|
slotEventOverlap: true, // a bad name. confused with overlap/constraint system
|
|
|
},
|
|
|
timeGridDay: {
|
|
|
type: 'timeGrid',
|
|
|
duration: { days: 1 },
|
|
|
},
|
|
|
timeGridWeek: {
|
|
|
type: 'timeGrid',
|
|
|
duration: { weeks: 1 },
|
|
|
},
|
|
|
},
|
|
|
});
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
|
|
|
var ListViewHeaderRow = /** @class */ (function (_super) {
|
|
|
__extends(ListViewHeaderRow, _super);
|
|
|
function ListViewHeaderRow() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
ListViewHeaderRow.prototype.render = function () {
|
|
|
var _a = this.props, dayDate = _a.dayDate, todayRange = _a.todayRange;
|
|
|
var _b = this.context, theme = _b.theme, dateEnv = _b.dateEnv, options = _b.options, viewApi = _b.viewApi;
|
|
|
var dayMeta = getDateMeta(dayDate, todayRange);
|
|
|
// will ever be falsy?
|
|
|
var text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
|
|
|
// will ever be falsy? also, BAD NAME "alt"
|
|
|
var sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
|
|
|
var navLinkData = options.navLinks
|
|
|
? buildNavLinkData(dayDate)
|
|
|
: null;
|
|
|
var hookProps = __assign({ date: dateEnv.toDate(dayDate), view: viewApi, text: text,
|
|
|
sideText: sideText,
|
|
|
navLinkData: navLinkData }, dayMeta);
|
|
|
var classNames = ['fc-list-day'].concat(getDayClassNames(dayMeta, theme));
|
|
|
// TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.dayHeaderClassNames, content: options.dayHeaderContent, defaultContent: renderInnerContent, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, function (rootElRef, customClassNames, innerElRef, innerContent) { return (createElement("tr", { ref: rootElRef, className: classNames.concat(customClassNames).join(' '), "data-date": formatDayString(dayDate) },
|
|
|
createElement("th", { colSpan: 3 },
|
|
|
createElement("div", { className: 'fc-list-day-cushion ' + theme.getClass('tableCellShaded'), ref: innerElRef }, innerContent)))); }));
|
|
|
};
|
|
|
return ListViewHeaderRow;
|
|
|
}(BaseComponent));
|
|
|
function renderInnerContent(props) {
|
|
|
var navLinkAttrs = props.navLinkData // is there a type for this?
|
|
|
? { 'data-navlink': props.navLinkData, tabIndex: 0 }
|
|
|
: {};
|
|
|
return (createElement(Fragment, null,
|
|
|
props.text && (createElement("a", __assign({ className: "fc-list-day-text" }, navLinkAttrs), props.text)),
|
|
|
props.sideText && (createElement("a", __assign({ className: "fc-list-day-side-text" }, navLinkAttrs), props.sideText))));
|
|
|
}
|
|
|
|
|
|
var DEFAULT_TIME_FORMAT = createFormatter({
|
|
|
hour: 'numeric',
|
|
|
minute: '2-digit',
|
|
|
meridiem: 'short',
|
|
|
});
|
|
|
var ListViewEventRow = /** @class */ (function (_super) {
|
|
|
__extends(ListViewEventRow, _super);
|
|
|
function ListViewEventRow() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
ListViewEventRow.prototype.render = function () {
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var seg = props.seg;
|
|
|
var timeFormat = context.options.eventTimeFormat || DEFAULT_TIME_FORMAT;
|
|
|
return (createElement(EventRoot, { seg: seg, timeText: "" // BAD. because of all-day content
|
|
|
, disableDragging: true, disableResizing: true, defaultContent: renderEventInnerContent, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, isSelected: props.isSelected, isDragging: props.isDragging, isResizing: props.isResizing, isDateSelecting: props.isDateSelecting }, function (rootElRef, classNames, innerElRef, innerContent, hookProps) { return (createElement("tr", { className: ['fc-list-event', hookProps.event.url ? 'fc-event-forced-url' : ''].concat(classNames).join(' '), ref: rootElRef },
|
|
|
buildTimeContent(seg, timeFormat, context),
|
|
|
createElement("td", { className: "fc-list-event-graphic" },
|
|
|
createElement("span", { className: "fc-list-event-dot", style: { borderColor: hookProps.borderColor || hookProps.backgroundColor } })),
|
|
|
createElement("td", { className: "fc-list-event-title", ref: innerElRef }, innerContent))); }));
|
|
|
};
|
|
|
return ListViewEventRow;
|
|
|
}(BaseComponent));
|
|
|
function renderEventInnerContent(props) {
|
|
|
var event = props.event;
|
|
|
var url = event.url;
|
|
|
var anchorAttrs = url ? { href: url } : {};
|
|
|
return (createElement("a", __assign({}, anchorAttrs), event.title));
|
|
|
}
|
|
|
function buildTimeContent(seg, timeFormat, context) {
|
|
|
var options = context.options;
|
|
|
if (options.displayEventTime !== false) {
|
|
|
var eventDef = seg.eventRange.def;
|
|
|
var eventInstance = seg.eventRange.instance;
|
|
|
var doAllDay = false;
|
|
|
var timeText = void 0;
|
|
|
if (eventDef.allDay) {
|
|
|
doAllDay = true;
|
|
|
}
|
|
|
else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
|
|
|
if (seg.isStart) {
|
|
|
timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
|
|
|
}
|
|
|
else if (seg.isEnd) {
|
|
|
timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
|
|
|
}
|
|
|
else {
|
|
|
doAllDay = true;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
timeText = buildSegTimeText(seg, timeFormat, context);
|
|
|
}
|
|
|
if (doAllDay) {
|
|
|
var hookProps = {
|
|
|
text: context.options.allDayText,
|
|
|
view: context.viewApi,
|
|
|
};
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.allDayClassNames, content: options.allDayContent, defaultContent: renderAllDayInner, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("td", { className: ['fc-list-event-time'].concat(classNames).join(' '), ref: rootElRef }, innerContent)); }));
|
|
|
}
|
|
|
return (createElement("td", { className: "fc-list-event-time" }, timeText));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
function renderAllDayInner(hookProps) {
|
|
|
return hookProps.text;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
Responsible for the scroller, and forwarding event-related actions into the "grid".
|
|
|
*/
|
|
|
var ListView = /** @class */ (function (_super) {
|
|
|
__extends(ListView, _super);
|
|
|
function ListView() {
|
|
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
|
_this.computeDateVars = memoize(computeDateVars);
|
|
|
_this.eventStoreToSegs = memoize(_this._eventStoreToSegs);
|
|
|
_this.setRootEl = function (rootEl) {
|
|
|
if (rootEl) {
|
|
|
_this.context.registerInteractiveComponent(_this, {
|
|
|
el: rootEl,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
_this.context.unregisterInteractiveComponent(_this);
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
ListView.prototype.render = function () {
|
|
|
var _this = this;
|
|
|
var _a = this, props = _a.props, context = _a.context;
|
|
|
var extraClassNames = [
|
|
|
'fc-list',
|
|
|
context.theme.getClass('table'),
|
|
|
context.options.stickyHeaderDates !== false ? 'fc-list-sticky' : '',
|
|
|
];
|
|
|
var _b = this.computeDateVars(props.dateProfile), dayDates = _b.dayDates, dayRanges = _b.dayRanges;
|
|
|
var eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
|
|
|
return (createElement(ViewRoot, { viewSpec: context.viewSpec, elRef: this.setRootEl }, function (rootElRef, classNames) { return (createElement("div", { ref: rootElRef, className: extraClassNames.concat(classNames).join(' ') },
|
|
|
createElement(Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
|
|
|
_this.renderSegList(eventSegs, dayDates) :
|
|
|
_this.renderEmptyMessage()))); }));
|
|
|
};
|
|
|
ListView.prototype.renderEmptyMessage = function () {
|
|
|
var _a = this.context, options = _a.options, viewApi = _a.viewApi;
|
|
|
var hookProps = {
|
|
|
text: options.noEventsText,
|
|
|
view: viewApi,
|
|
|
};
|
|
|
return (createElement(RenderHook, { hookProps: hookProps, classNames: options.noEventsClassNames, content: options.noEventsContent, defaultContent: renderNoEventsInner, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, function (rootElRef, classNames, innerElRef, innerContent) { return (createElement("div", { className: ['fc-list-empty'].concat(classNames).join(' '), ref: rootElRef },
|
|
|
createElement("div", { className: "fc-list-empty-cushion", ref: innerElRef }, innerContent))); }));
|
|
|
};
|
|
|
ListView.prototype.renderSegList = function (allSegs, dayDates) {
|
|
|
var _a = this.context, theme = _a.theme, options = _a.options;
|
|
|
var segsByDay = groupSegsByDay(allSegs); // sparse array
|
|
|
return (createElement(NowTimer, { unit: "day" }, function (nowDate, todayRange) {
|
|
|
var innerNodes = [];
|
|
|
for (var dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
|
|
|
var daySegs = segsByDay[dayIndex];
|
|
|
if (daySegs) { // sparse array, so might be undefined
|
|
|
var dayStr = dayDates[dayIndex].toISOString();
|
|
|
// append a day header
|
|
|
innerNodes.push(createElement(ListViewHeaderRow, { key: dayStr, dayDate: dayDates[dayIndex], todayRange: todayRange }));
|
|
|
daySegs = sortEventSegs(daySegs, options.eventOrder);
|
|
|
for (var _i = 0, daySegs_1 = daySegs; _i < daySegs_1.length; _i++) {
|
|
|
var seg = daySegs_1[_i];
|
|
|
innerNodes.push(createElement(ListViewEventRow, __assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false }, getSegMeta(seg, todayRange, nowDate))));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return (createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
|
|
|
createElement("tbody", null, innerNodes)));
|
|
|
}));
|
|
|
};
|
|
|
ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) {
|
|
|
return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
|
|
|
};
|
|
|
ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) {
|
|
|
var segs = [];
|
|
|
for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
|
|
|
var eventRange = eventRanges_1[_i];
|
|
|
segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges));
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) {
|
|
|
var dateEnv = this.context.dateEnv;
|
|
|
var nextDayThreshold = this.context.options.nextDayThreshold;
|
|
|
var range = eventRange.range;
|
|
|
var allDay = eventRange.def.allDay;
|
|
|
var dayIndex;
|
|
|
var segRange;
|
|
|
var seg;
|
|
|
var segs = [];
|
|
|
for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
|
|
|
segRange = intersectRanges(range, dayRanges[dayIndex]);
|
|
|
if (segRange) {
|
|
|
seg = {
|
|
|
component: this,
|
|
|
eventRange: eventRange,
|
|
|
start: segRange.start,
|
|
|
end: segRange.end,
|
|
|
isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
|
|
|
isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
|
|
|
dayIndex: dayIndex,
|
|
|
};
|
|
|
segs.push(seg);
|
|
|
// detect when range won't go fully into the next day,
|
|
|
// and mutate the latest seg to the be the end.
|
|
|
if (!seg.isEnd && !allDay &&
|
|
|
dayIndex + 1 < dayRanges.length &&
|
|
|
range.end <
|
|
|
dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
|
|
|
seg.end = range.end;
|
|
|
seg.isEnd = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return segs;
|
|
|
};
|
|
|
return ListView;
|
|
|
}(DateComponent));
|
|
|
function renderNoEventsInner(hookProps) {
|
|
|
return hookProps.text;
|
|
|
}
|
|
|
function computeDateVars(dateProfile) {
|
|
|
var dayStart = startOfDay(dateProfile.renderRange.start);
|
|
|
var viewEnd = dateProfile.renderRange.end;
|
|
|
var dayDates = [];
|
|
|
var dayRanges = [];
|
|
|
while (dayStart < viewEnd) {
|
|
|
dayDates.push(dayStart);
|
|
|
dayRanges.push({
|
|
|
start: dayStart,
|
|
|
end: addDays(dayStart, 1),
|
|
|
});
|
|
|
dayStart = addDays(dayStart, 1);
|
|
|
}
|
|
|
return { dayDates: dayDates, dayRanges: dayRanges };
|
|
|
}
|
|
|
// Returns a sparse array of arrays, segs grouped by their dayIndex
|
|
|
function groupSegsByDay(segs) {
|
|
|
var segsByDay = []; // sparse array
|
|
|
var i;
|
|
|
var seg;
|
|
|
for (i = 0; i < segs.length; i += 1) {
|
|
|
seg = segs[i];
|
|
|
(segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
|
|
|
.push(seg);
|
|
|
}
|
|
|
return segsByDay;
|
|
|
}
|
|
|
|
|
|
var OPTION_REFINERS = {
|
|
|
listDayFormat: createFalsableFormatter,
|
|
|
listDaySideFormat: createFalsableFormatter,
|
|
|
noEventsClassNames: identity,
|
|
|
noEventsContent: identity,
|
|
|
noEventsDidMount: identity,
|
|
|
noEventsWillUnmount: identity,
|
|
|
// noEventsText is defined in base options
|
|
|
};
|
|
|
function createFalsableFormatter(input) {
|
|
|
return input === false ? null : createFormatter(input);
|
|
|
}
|
|
|
|
|
|
var main$1 = createPlugin({
|
|
|
optionRefiners: OPTION_REFINERS,
|
|
|
views: {
|
|
|
list: {
|
|
|
component: ListView,
|
|
|
buttonTextKey: 'list',
|
|
|
listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like "January 1, 2016"
|
|
|
},
|
|
|
listDay: {
|
|
|
type: 'list',
|
|
|
duration: { days: 1 },
|
|
|
listDayFormat: { weekday: 'long' }, // day-of-week is all we need. full date is probably in headerToolbar
|
|
|
},
|
|
|
listWeek: {
|
|
|
type: 'list',
|
|
|
duration: { weeks: 1 },
|
|
|
listDayFormat: { weekday: 'long' },
|
|
|
listDaySideFormat: { month: 'long', day: 'numeric', year: 'numeric' },
|
|
|
},
|
|
|
listMonth: {
|
|
|
type: 'list',
|
|
|
duration: { month: 1 },
|
|
|
listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
|
|
|
},
|
|
|
listYear: {
|
|
|
type: 'list',
|
|
|
duration: { year: 1 },
|
|
|
listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
|
|
|
},
|
|
|
},
|
|
|
});
|
|
|
|
|
|
/*!
|
|
|
FullCalendar v5.9.0
|
|
|
Docs & License: https://fullcalendar.io/
|
|
|
(c) 2021 Adam Shaw
|
|
|
*/
|
|
|
var LuxonNamedTimeZone = /** @class */ (function (_super) {
|
|
|
__extends(LuxonNamedTimeZone, _super);
|
|
|
function LuxonNamedTimeZone() {
|
|
|
return _super !== null && _super.apply(this, arguments) || this;
|
|
|
}
|
|
|
LuxonNamedTimeZone.prototype.offsetForArray = function (a) {
|
|
|
return arrayToLuxon(a, this.timeZoneName).offset;
|
|
|
};
|
|
|
LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {
|
|
|
return luxonToArray(DateTime_1.fromMillis(ms, {
|
|
|
zone: this.timeZoneName,
|
|
|
}));
|
|
|
};
|
|
|
return LuxonNamedTimeZone;
|
|
|
}(NamedTimeZoneImpl));
|
|
|
function formatWithCmdStr(cmdStr, arg) {
|
|
|
var cmd = parseCmdStr(cmdStr);
|
|
|
if (arg.end) {
|
|
|
var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
|
|
|
var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
|
|
|
return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.defaultSeparator);
|
|
|
}
|
|
|
return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
|
|
|
}
|
|
|
var main = createPlugin({
|
|
|
cmdFormatter: formatWithCmdStr,
|
|
|
namedTimeZonedImpl: LuxonNamedTimeZone,
|
|
|
});
|
|
|
function luxonToArray(datetime) {
|
|
|
return [
|
|
|
datetime.year,
|
|
|
datetime.month - 1,
|
|
|
datetime.day,
|
|
|
datetime.hour,
|
|
|
datetime.minute,
|
|
|
datetime.second,
|
|
|
datetime.millisecond,
|
|
|
];
|
|
|
}
|
|
|
function arrayToLuxon(arr, timeZone, locale) {
|
|
|
return DateTime_1.fromObject({
|
|
|
zone: timeZone,
|
|
|
locale: locale,
|
|
|
year: arr[0],
|
|
|
month: arr[1] + 1,
|
|
|
day: arr[2],
|
|
|
hour: arr[3],
|
|
|
minute: arr[4],
|
|
|
second: arr[5],
|
|
|
millisecond: arr[6],
|
|
|
});
|
|
|
}
|
|
|
function parseCmdStr(cmdStr) {
|
|
|
var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
|
|
|
if (parts) {
|
|
|
var middle = parseCmdStr(parts[2]);
|
|
|
return {
|
|
|
head: parts[1],
|
|
|
middle: middle,
|
|
|
tail: parts[3],
|
|
|
whole: parts[1] + middle.whole + parts[3],
|
|
|
};
|
|
|
}
|
|
|
return {
|
|
|
head: null,
|
|
|
middle: null,
|
|
|
tail: null,
|
|
|
whole: cmdStr,
|
|
|
};
|
|
|
}
|
|
|
function formatRange(cmd, formatStart, formatEnd, separator) {
|
|
|
if (cmd.middle) {
|
|
|
var startHead = formatStart(cmd.head);
|
|
|
var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
|
|
var startTail = formatStart(cmd.tail);
|
|
|
var endHead = formatEnd(cmd.head);
|
|
|
var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
|
|
|
var endTail = formatEnd(cmd.tail);
|
|
|
if (startHead === endHead && startTail === endTail) {
|
|
|
return startHead +
|
|
|
(startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
|
|
|
startTail;
|
|
|
}
|
|
|
}
|
|
|
var startWhole = formatStart(cmd.whole);
|
|
|
var endWhole = formatEnd(cmd.whole);
|
|
|
if (startWhole === endWhole) {
|
|
|
return startWhole;
|
|
|
}
|
|
|
return startWhole + separator + endWhole;
|
|
|
}
|
|
|
|
|
|
/* Jison generated parser */
|
|
|
var _parser = (function() {
|
|
|
var parser = {
|
|
|
trace: function trace() {},
|
|
|
yy: {},
|
|
|
symbols_: {
|
|
|
"error": 2,
|
|
|
"expressions": 3,
|
|
|
"e": 4,
|
|
|
"EOF": 5,
|
|
|
"+": 6,
|
|
|
"-": 7,
|
|
|
"*": 8,
|
|
|
"/": 9,
|
|
|
"%": 10,
|
|
|
"^": 11,
|
|
|
"and": 12,
|
|
|
"or": 13,
|
|
|
"not": 14,
|
|
|
"==": 15,
|
|
|
"!=": 16,
|
|
|
"~=": 17,
|
|
|
"<": 18,
|
|
|
"<=": 19,
|
|
|
">": 20,
|
|
|
">=": 21,
|
|
|
"?": 22,
|
|
|
":": 23,
|
|
|
"(": 24,
|
|
|
")": 25,
|
|
|
"array": 26,
|
|
|
",": 27,
|
|
|
"NUMBER": 28,
|
|
|
"STRING": 29,
|
|
|
"SYMBOL": 30,
|
|
|
"of": 31,
|
|
|
"argsList": 32,
|
|
|
"in": 33,
|
|
|
"inSet": 34,
|
|
|
"$accept": 0,
|
|
|
"$end": 1
|
|
|
},
|
|
|
terminals_: {
|
|
|
2: "error",
|
|
|
5: "EOF",
|
|
|
6: "+",
|
|
|
7: "-",
|
|
|
8: "*",
|
|
|
9: "/",
|
|
|
10: "%",
|
|
|
11: "^",
|
|
|
12: "and",
|
|
|
13: "or",
|
|
|
14: "not",
|
|
|
15: "==",
|
|
|
16: "!=",
|
|
|
17: "~=",
|
|
|
18: "<",
|
|
|
19: "<=",
|
|
|
20: ">",
|
|
|
21: ">=",
|
|
|
22: "?",
|
|
|
23: ":",
|
|
|
24: "(",
|
|
|
25: ")",
|
|
|
27: ",",
|
|
|
28: "NUMBER",
|
|
|
29: "STRING",
|
|
|
30: "SYMBOL",
|
|
|
31: "of",
|
|
|
33: "in"
|
|
|
},
|
|
|
productions_: [0, [3, 2],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 2],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 2],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 5],
|
|
|
[4, 3],
|
|
|
[4, 5],
|
|
|
[4, 1],
|
|
|
[4, 1],
|
|
|
[4, 1],
|
|
|
[4, 3],
|
|
|
[4, 3],
|
|
|
[4, 4],
|
|
|
[4, 3],
|
|
|
[4, 4],
|
|
|
[32, 1],
|
|
|
[32, 3],
|
|
|
[34, 1],
|
|
|
[34, 3],
|
|
|
[26, 1],
|
|
|
[26, 3]
|
|
|
],
|
|
|
performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
|
|
|
|
|
|
var $0 = $$.length - 1;
|
|
|
switch (yystate) {
|
|
|
case 1:
|
|
|
return $$[$0 - 1];
|
|
|
case 2:
|
|
|
this.$ = ["(", $$[$0 - 2], "+", $$[$0], ")"];
|
|
|
break;
|
|
|
case 3:
|
|
|
this.$ = ["(", $$[$0 - 2], "-", $$[$0], ")"];
|
|
|
break;
|
|
|
case 4:
|
|
|
this.$ = ["(", $$[$0 - 2], "*", $$[$0], ")"];
|
|
|
break;
|
|
|
case 5:
|
|
|
this.$ = ["(", $$[$0 - 2], "/", $$[$0], ")"];
|
|
|
break;
|
|
|
case 6:
|
|
|
this.$ = ["(", $$[$0 - 2], "%", $$[$0], ")"];
|
|
|
break;
|
|
|
case 7:
|
|
|
this.$ = ["(", "Math.pow(", $$[$0 - 2], ",", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 8:
|
|
|
this.$ = ["(", "-", $$[$0], ")"];
|
|
|
break;
|
|
|
case 9:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "&&", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 10:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "||", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 11:
|
|
|
this.$ = ["(", "Number(!", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 12:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "==", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 13:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "!=", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 14:
|
|
|
this.$ = ["(", "Number(RegExp(", $$[$0], ").test(", $$[$0 - 2], "))", ")"];
|
|
|
break;
|
|
|
case 15:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "<", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 16:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "<=", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 17:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], "> ", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 18:
|
|
|
this.$ = ["(", "Number(", $$[$0 - 2], ">=", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 19:
|
|
|
this.$ = ["(", $$[$0 - 4], "?", $$[$0 - 2], ":", $$[$0], ")"];
|
|
|
break;
|
|
|
case 20:
|
|
|
this.$ = ["(", $$[$0 - 1], ")"];
|
|
|
break;
|
|
|
case 21:
|
|
|
this.$ = ["(", "[", $$[$0 - 3], ",", $$[$0 - 1], "]", ")"];
|
|
|
break;
|
|
|
case 22:
|
|
|
this.$ = ["(", $$[$0], ")"];
|
|
|
break;
|
|
|
case 23:
|
|
|
this.$ = ["(", $$[$0], ")"];
|
|
|
break;
|
|
|
case 24:
|
|
|
this.$ = ["(", "prop(", $$[$0], ", data)", ")"];
|
|
|
break;
|
|
|
case 25:
|
|
|
this.$ = ["(", "prop(", $$[$0 - 2], ",", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 26:
|
|
|
this.$ = ["(", "(std.isfn(fns, ", $$[$0 - 2], ") ? fns[", $$[$0 - 2], "]() : std.unknown(", $$[$0 - 2], "))", ")"];
|
|
|
break;
|
|
|
case 27:
|
|
|
this.$ = ["(", "(std.isfn(fns, ", $$[$0 - 3], ") ? fns[", $$[$0 - 3], "](", $$[$0 - 1], ") : std.unknown(", $$[$0 - 3], "))", ")"];
|
|
|
break;
|
|
|
case 28:
|
|
|
this.$ = ["(", "std.isSubset(", $$[$0 - 2], ", ", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 29:
|
|
|
this.$ = ["(", "+!std.isSubset(", $$[$0 - 3], ", ", $$[$0], ")", ")"];
|
|
|
break;
|
|
|
case 30:
|
|
|
this.$ = [$$[$0]];
|
|
|
break;
|
|
|
case 31:
|
|
|
this.$ = [$$[$0 - 2], ",", $$[$0]];
|
|
|
break;
|
|
|
case 32:
|
|
|
this.$ = ["o ==", $$[$0]];
|
|
|
break;
|
|
|
case 33:
|
|
|
this.$ = [$$[$0 - 2], "|| o ==", $$[$0]];
|
|
|
break;
|
|
|
case 34:
|
|
|
this.$ = ["(", $$[$0], ")"];
|
|
|
break;
|
|
|
case 35:
|
|
|
this.$ = [$$[$0 - 2], ",", $$[$0]];
|
|
|
break;
|
|
|
}
|
|
|
},
|
|
|
table: [{
|
|
|
3: 1,
|
|
|
4: 2,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
1: [3]
|
|
|
}, {
|
|
|
5: [1, 9],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
4: 28,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 29,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 30,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
26: 31,
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
5: [2, 22],
|
|
|
6: [2, 22],
|
|
|
7: [2, 22],
|
|
|
8: [2, 22],
|
|
|
9: [2, 22],
|
|
|
10: [2, 22],
|
|
|
11: [2, 22],
|
|
|
12: [2, 22],
|
|
|
13: [2, 22],
|
|
|
14: [2, 22],
|
|
|
15: [2, 22],
|
|
|
16: [2, 22],
|
|
|
17: [2, 22],
|
|
|
18: [2, 22],
|
|
|
19: [2, 22],
|
|
|
20: [2, 22],
|
|
|
21: [2, 22],
|
|
|
22: [2, 22],
|
|
|
23: [2, 22],
|
|
|
25: [2, 22],
|
|
|
27: [2, 22],
|
|
|
33: [2, 22]
|
|
|
}, {
|
|
|
5: [2, 23],
|
|
|
6: [2, 23],
|
|
|
7: [2, 23],
|
|
|
8: [2, 23],
|
|
|
9: [2, 23],
|
|
|
10: [2, 23],
|
|
|
11: [2, 23],
|
|
|
12: [2, 23],
|
|
|
13: [2, 23],
|
|
|
14: [2, 23],
|
|
|
15: [2, 23],
|
|
|
16: [2, 23],
|
|
|
17: [2, 23],
|
|
|
18: [2, 23],
|
|
|
19: [2, 23],
|
|
|
20: [2, 23],
|
|
|
21: [2, 23],
|
|
|
22: [2, 23],
|
|
|
23: [2, 23],
|
|
|
25: [2, 23],
|
|
|
27: [2, 23],
|
|
|
33: [2, 23]
|
|
|
}, {
|
|
|
5: [2, 24],
|
|
|
6: [2, 24],
|
|
|
7: [2, 24],
|
|
|
8: [2, 24],
|
|
|
9: [2, 24],
|
|
|
10: [2, 24],
|
|
|
11: [2, 24],
|
|
|
12: [2, 24],
|
|
|
13: [2, 24],
|
|
|
14: [2, 24],
|
|
|
15: [2, 24],
|
|
|
16: [2, 24],
|
|
|
17: [2, 24],
|
|
|
18: [2, 24],
|
|
|
19: [2, 24],
|
|
|
20: [2, 24],
|
|
|
21: [2, 24],
|
|
|
22: [2, 24],
|
|
|
23: [2, 24],
|
|
|
24: [1, 33],
|
|
|
25: [2, 24],
|
|
|
27: [2, 24],
|
|
|
31: [1, 32],
|
|
|
33: [2, 24]
|
|
|
}, {
|
|
|
1: [2, 1]
|
|
|
}, {
|
|
|
4: 34,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 35,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 36,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 37,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 38,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 39,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 40,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 41,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 42,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 43,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 44,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 45,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 46,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 47,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 48,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 49,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 50,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
33: [1, 51]
|
|
|
}, {
|
|
|
5: [2, 8],
|
|
|
6: [2, 8],
|
|
|
7: [2, 8],
|
|
|
8: [2, 8],
|
|
|
9: [2, 8],
|
|
|
10: [2, 8],
|
|
|
11: [2, 8],
|
|
|
12: [2, 8],
|
|
|
13: [2, 8],
|
|
|
14: [2, 8],
|
|
|
15: [2, 8],
|
|
|
16: [2, 8],
|
|
|
17: [2, 8],
|
|
|
18: [2, 8],
|
|
|
19: [2, 8],
|
|
|
20: [2, 8],
|
|
|
21: [2, 8],
|
|
|
22: [2, 8],
|
|
|
23: [2, 8],
|
|
|
25: [2, 8],
|
|
|
27: [2, 8],
|
|
|
33: [2, 8]
|
|
|
}, {
|
|
|
5: [2, 11],
|
|
|
6: [2, 11],
|
|
|
7: [2, 11],
|
|
|
8: [2, 11],
|
|
|
9: [2, 11],
|
|
|
10: [2, 11],
|
|
|
11: [2, 11],
|
|
|
12: [2, 11],
|
|
|
13: [2, 11],
|
|
|
14: [2, 11],
|
|
|
15: [2, 11],
|
|
|
16: [2, 11],
|
|
|
17: [2, 11],
|
|
|
18: [2, 11],
|
|
|
19: [2, 11],
|
|
|
20: [2, 11],
|
|
|
21: [2, 11],
|
|
|
22: [2, 11],
|
|
|
23: [2, 11],
|
|
|
25: [2, 11],
|
|
|
27: [2, 11],
|
|
|
33: [2, 11]
|
|
|
}, {
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
25: [1, 52],
|
|
|
27: [2, 34],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
27: [1, 53]
|
|
|
}, {
|
|
|
4: 54,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
4: 57,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
25: [1, 55],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8],
|
|
|
32: 56
|
|
|
}, {
|
|
|
5: [2, 2],
|
|
|
6: [2, 2],
|
|
|
7: [2, 2],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 2],
|
|
|
13: [2, 2],
|
|
|
14: [1, 27],
|
|
|
15: [2, 2],
|
|
|
16: [2, 2],
|
|
|
17: [2, 2],
|
|
|
18: [2, 2],
|
|
|
19: [2, 2],
|
|
|
20: [2, 2],
|
|
|
21: [2, 2],
|
|
|
22: [2, 2],
|
|
|
23: [2, 2],
|
|
|
25: [2, 2],
|
|
|
27: [2, 2],
|
|
|
33: [2, 2]
|
|
|
}, {
|
|
|
5: [2, 3],
|
|
|
6: [2, 3],
|
|
|
7: [2, 3],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 3],
|
|
|
13: [2, 3],
|
|
|
14: [1, 27],
|
|
|
15: [2, 3],
|
|
|
16: [2, 3],
|
|
|
17: [2, 3],
|
|
|
18: [2, 3],
|
|
|
19: [2, 3],
|
|
|
20: [2, 3],
|
|
|
21: [2, 3],
|
|
|
22: [2, 3],
|
|
|
23: [2, 3],
|
|
|
25: [2, 3],
|
|
|
27: [2, 3],
|
|
|
33: [2, 3]
|
|
|
}, {
|
|
|
5: [2, 4],
|
|
|
6: [2, 4],
|
|
|
7: [2, 4],
|
|
|
8: [2, 4],
|
|
|
9: [2, 4],
|
|
|
10: [2, 4],
|
|
|
11: [1, 15],
|
|
|
12: [2, 4],
|
|
|
13: [2, 4],
|
|
|
14: [1, 27],
|
|
|
15: [2, 4],
|
|
|
16: [2, 4],
|
|
|
17: [2, 4],
|
|
|
18: [2, 4],
|
|
|
19: [2, 4],
|
|
|
20: [2, 4],
|
|
|
21: [2, 4],
|
|
|
22: [2, 4],
|
|
|
23: [2, 4],
|
|
|
25: [2, 4],
|
|
|
27: [2, 4],
|
|
|
33: [2, 4]
|
|
|
}, {
|
|
|
5: [2, 5],
|
|
|
6: [2, 5],
|
|
|
7: [2, 5],
|
|
|
8: [2, 5],
|
|
|
9: [2, 5],
|
|
|
10: [2, 5],
|
|
|
11: [1, 15],
|
|
|
12: [2, 5],
|
|
|
13: [2, 5],
|
|
|
14: [1, 27],
|
|
|
15: [2, 5],
|
|
|
16: [2, 5],
|
|
|
17: [2, 5],
|
|
|
18: [2, 5],
|
|
|
19: [2, 5],
|
|
|
20: [2, 5],
|
|
|
21: [2, 5],
|
|
|
22: [2, 5],
|
|
|
23: [2, 5],
|
|
|
25: [2, 5],
|
|
|
27: [2, 5],
|
|
|
33: [2, 5]
|
|
|
}, {
|
|
|
5: [2, 6],
|
|
|
6: [2, 6],
|
|
|
7: [2, 6],
|
|
|
8: [2, 6],
|
|
|
9: [2, 6],
|
|
|
10: [2, 6],
|
|
|
11: [1, 15],
|
|
|
12: [2, 6],
|
|
|
13: [2, 6],
|
|
|
14: [1, 27],
|
|
|
15: [2, 6],
|
|
|
16: [2, 6],
|
|
|
17: [2, 6],
|
|
|
18: [2, 6],
|
|
|
19: [2, 6],
|
|
|
20: [2, 6],
|
|
|
21: [2, 6],
|
|
|
22: [2, 6],
|
|
|
23: [2, 6],
|
|
|
25: [2, 6],
|
|
|
27: [2, 6],
|
|
|
33: [2, 6]
|
|
|
}, {
|
|
|
5: [2, 7],
|
|
|
6: [2, 7],
|
|
|
7: [2, 7],
|
|
|
8: [2, 7],
|
|
|
9: [2, 7],
|
|
|
10: [2, 7],
|
|
|
11: [2, 7],
|
|
|
12: [2, 7],
|
|
|
13: [2, 7],
|
|
|
14: [1, 27],
|
|
|
15: [2, 7],
|
|
|
16: [2, 7],
|
|
|
17: [2, 7],
|
|
|
18: [2, 7],
|
|
|
19: [2, 7],
|
|
|
20: [2, 7],
|
|
|
21: [2, 7],
|
|
|
22: [2, 7],
|
|
|
23: [2, 7],
|
|
|
25: [2, 7],
|
|
|
27: [2, 7],
|
|
|
33: [2, 7]
|
|
|
}, {
|
|
|
5: [2, 9],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 9],
|
|
|
13: [2, 9],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 9],
|
|
|
23: [2, 9],
|
|
|
25: [2, 9],
|
|
|
27: [2, 9],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
5: [2, 10],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [2, 10],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 10],
|
|
|
23: [2, 10],
|
|
|
25: [2, 10],
|
|
|
27: [2, 10],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
5: [2, 12],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 12],
|
|
|
13: [2, 12],
|
|
|
14: [1, 27],
|
|
|
15: [2, 12],
|
|
|
16: [2, 12],
|
|
|
17: [2, 12],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 12],
|
|
|
23: [2, 12],
|
|
|
25: [2, 12],
|
|
|
27: [2, 12],
|
|
|
33: [2, 12]
|
|
|
}, {
|
|
|
5: [2, 13],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 13],
|
|
|
13: [2, 13],
|
|
|
14: [1, 27],
|
|
|
15: [2, 13],
|
|
|
16: [2, 13],
|
|
|
17: [2, 13],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 13],
|
|
|
23: [2, 13],
|
|
|
25: [2, 13],
|
|
|
27: [2, 13],
|
|
|
33: [2, 13]
|
|
|
}, {
|
|
|
5: [2, 14],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 14],
|
|
|
13: [2, 14],
|
|
|
14: [1, 27],
|
|
|
15: [2, 14],
|
|
|
16: [2, 14],
|
|
|
17: [2, 14],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 14],
|
|
|
23: [2, 14],
|
|
|
25: [2, 14],
|
|
|
27: [2, 14],
|
|
|
33: [2, 14]
|
|
|
}, {
|
|
|
5: [2, 15],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 15],
|
|
|
13: [2, 15],
|
|
|
14: [1, 27],
|
|
|
15: [2, 15],
|
|
|
16: [2, 15],
|
|
|
17: [2, 15],
|
|
|
18: [2, 15],
|
|
|
19: [2, 15],
|
|
|
20: [2, 15],
|
|
|
21: [2, 15],
|
|
|
22: [2, 15],
|
|
|
23: [2, 15],
|
|
|
25: [2, 15],
|
|
|
27: [2, 15],
|
|
|
33: [2, 15]
|
|
|
}, {
|
|
|
5: [2, 16],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 16],
|
|
|
13: [2, 16],
|
|
|
14: [1, 27],
|
|
|
15: [2, 16],
|
|
|
16: [2, 16],
|
|
|
17: [2, 16],
|
|
|
18: [2, 16],
|
|
|
19: [2, 16],
|
|
|
20: [2, 16],
|
|
|
21: [2, 16],
|
|
|
22: [2, 16],
|
|
|
23: [2, 16],
|
|
|
25: [2, 16],
|
|
|
27: [2, 16],
|
|
|
33: [2, 16]
|
|
|
}, {
|
|
|
5: [2, 17],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 17],
|
|
|
13: [2, 17],
|
|
|
14: [1, 27],
|
|
|
15: [2, 17],
|
|
|
16: [2, 17],
|
|
|
17: [2, 17],
|
|
|
18: [2, 17],
|
|
|
19: [2, 17],
|
|
|
20: [2, 17],
|
|
|
21: [2, 17],
|
|
|
22: [2, 17],
|
|
|
23: [2, 17],
|
|
|
25: [2, 17],
|
|
|
27: [2, 17],
|
|
|
33: [2, 17]
|
|
|
}, {
|
|
|
5: [2, 18],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 18],
|
|
|
13: [2, 18],
|
|
|
14: [1, 27],
|
|
|
15: [2, 18],
|
|
|
16: [2, 18],
|
|
|
17: [2, 18],
|
|
|
18: [2, 18],
|
|
|
19: [2, 18],
|
|
|
20: [2, 18],
|
|
|
21: [2, 18],
|
|
|
22: [2, 18],
|
|
|
23: [2, 18],
|
|
|
25: [2, 18],
|
|
|
27: [2, 18],
|
|
|
33: [2, 18]
|
|
|
}, {
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
23: [1, 58],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
5: [2, 28],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [2, 28],
|
|
|
13: [2, 28],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 28],
|
|
|
23: [2, 28],
|
|
|
25: [2, 28],
|
|
|
27: [2, 28],
|
|
|
33: [2, 28]
|
|
|
}, {
|
|
|
4: 59,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
5: [2, 20],
|
|
|
6: [2, 20],
|
|
|
7: [2, 20],
|
|
|
8: [2, 20],
|
|
|
9: [2, 20],
|
|
|
10: [2, 20],
|
|
|
11: [2, 20],
|
|
|
12: [2, 20],
|
|
|
13: [2, 20],
|
|
|
14: [2, 20],
|
|
|
15: [2, 20],
|
|
|
16: [2, 20],
|
|
|
17: [2, 20],
|
|
|
18: [2, 20],
|
|
|
19: [2, 20],
|
|
|
20: [2, 20],
|
|
|
21: [2, 20],
|
|
|
22: [2, 20],
|
|
|
23: [2, 20],
|
|
|
25: [2, 20],
|
|
|
27: [2, 20],
|
|
|
33: [2, 20]
|
|
|
}, {
|
|
|
4: 60,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
5: [2, 25],
|
|
|
6: [2, 25],
|
|
|
7: [2, 25],
|
|
|
8: [2, 25],
|
|
|
9: [2, 25],
|
|
|
10: [2, 25],
|
|
|
11: [2, 25],
|
|
|
12: [2, 25],
|
|
|
13: [2, 25],
|
|
|
14: [2, 25],
|
|
|
15: [2, 25],
|
|
|
16: [2, 25],
|
|
|
17: [2, 25],
|
|
|
18: [2, 25],
|
|
|
19: [2, 25],
|
|
|
20: [2, 25],
|
|
|
21: [2, 25],
|
|
|
22: [2, 25],
|
|
|
23: [2, 25],
|
|
|
25: [2, 25],
|
|
|
27: [2, 25],
|
|
|
33: [2, 25]
|
|
|
}, {
|
|
|
5: [2, 26],
|
|
|
6: [2, 26],
|
|
|
7: [2, 26],
|
|
|
8: [2, 26],
|
|
|
9: [2, 26],
|
|
|
10: [2, 26],
|
|
|
11: [2, 26],
|
|
|
12: [2, 26],
|
|
|
13: [2, 26],
|
|
|
14: [2, 26],
|
|
|
15: [2, 26],
|
|
|
16: [2, 26],
|
|
|
17: [2, 26],
|
|
|
18: [2, 26],
|
|
|
19: [2, 26],
|
|
|
20: [2, 26],
|
|
|
21: [2, 26],
|
|
|
22: [2, 26],
|
|
|
23: [2, 26],
|
|
|
25: [2, 26],
|
|
|
27: [2, 26],
|
|
|
33: [2, 26]
|
|
|
}, {
|
|
|
25: [1, 61],
|
|
|
27: [1, 62]
|
|
|
}, {
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
25: [2, 30],
|
|
|
27: [2, 30],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
4: 63,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
5: [2, 29],
|
|
|
6: [2, 29],
|
|
|
7: [2, 29],
|
|
|
8: [2, 29],
|
|
|
9: [2, 29],
|
|
|
10: [2, 29],
|
|
|
11: [2, 29],
|
|
|
12: [2, 29],
|
|
|
13: [2, 29],
|
|
|
14: [2, 29],
|
|
|
15: [2, 29],
|
|
|
16: [2, 29],
|
|
|
17: [2, 29],
|
|
|
18: [2, 29],
|
|
|
19: [2, 29],
|
|
|
20: [2, 29],
|
|
|
21: [2, 29],
|
|
|
22: [2, 29],
|
|
|
23: [2, 29],
|
|
|
25: [2, 29],
|
|
|
27: [2, 29],
|
|
|
33: [2, 29]
|
|
|
}, {
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
25: [1, 64],
|
|
|
27: [2, 35],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
5: [2, 27],
|
|
|
6: [2, 27],
|
|
|
7: [2, 27],
|
|
|
8: [2, 27],
|
|
|
9: [2, 27],
|
|
|
10: [2, 27],
|
|
|
11: [2, 27],
|
|
|
12: [2, 27],
|
|
|
13: [2, 27],
|
|
|
14: [2, 27],
|
|
|
15: [2, 27],
|
|
|
16: [2, 27],
|
|
|
17: [2, 27],
|
|
|
18: [2, 27],
|
|
|
19: [2, 27],
|
|
|
20: [2, 27],
|
|
|
21: [2, 27],
|
|
|
22: [2, 27],
|
|
|
23: [2, 27],
|
|
|
25: [2, 27],
|
|
|
27: [2, 27],
|
|
|
33: [2, 27]
|
|
|
}, {
|
|
|
4: 65,
|
|
|
7: [1, 3],
|
|
|
14: [1, 4],
|
|
|
24: [1, 5],
|
|
|
28: [1, 6],
|
|
|
29: [1, 7],
|
|
|
30: [1, 8]
|
|
|
}, {
|
|
|
5: [2, 19],
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [2, 19],
|
|
|
23: [2, 19],
|
|
|
25: [2, 19],
|
|
|
27: [2, 19],
|
|
|
33: [1, 26]
|
|
|
}, {
|
|
|
5: [2, 21],
|
|
|
6: [2, 21],
|
|
|
7: [2, 21],
|
|
|
8: [2, 21],
|
|
|
9: [2, 21],
|
|
|
10: [2, 21],
|
|
|
11: [2, 21],
|
|
|
12: [2, 21],
|
|
|
13: [2, 21],
|
|
|
14: [2, 21],
|
|
|
15: [2, 21],
|
|
|
16: [2, 21],
|
|
|
17: [2, 21],
|
|
|
18: [2, 21],
|
|
|
19: [2, 21],
|
|
|
20: [2, 21],
|
|
|
21: [2, 21],
|
|
|
22: [2, 21],
|
|
|
23: [2, 21],
|
|
|
25: [2, 21],
|
|
|
27: [2, 21],
|
|
|
33: [2, 21]
|
|
|
}, {
|
|
|
6: [1, 10],
|
|
|
7: [1, 11],
|
|
|
8: [1, 12],
|
|
|
9: [1, 13],
|
|
|
10: [1, 14],
|
|
|
11: [1, 15],
|
|
|
12: [1, 16],
|
|
|
13: [1, 17],
|
|
|
14: [1, 27],
|
|
|
15: [1, 18],
|
|
|
16: [1, 19],
|
|
|
17: [1, 20],
|
|
|
18: [1, 21],
|
|
|
19: [1, 22],
|
|
|
20: [1, 23],
|
|
|
21: [1, 24],
|
|
|
22: [1, 25],
|
|
|
25: [2, 31],
|
|
|
27: [2, 31],
|
|
|
33: [1, 26]
|
|
|
}],
|
|
|
defaultActions: {
|
|
|
9: [2, 1]
|
|
|
},
|
|
|
parseError: function parseError(str, hash) {
|
|
|
throw new Error(str);
|
|
|
},
|
|
|
parse: function parse(input) {
|
|
|
var self = this,
|
|
|
stack = [0],
|
|
|
vstack = [null], // semantic value stack
|
|
|
lstack = [], // location stack
|
|
|
table = this.table,
|
|
|
yytext = '',
|
|
|
yylineno = 0,
|
|
|
yyleng = 0,
|
|
|
recovering = 0,
|
|
|
TERROR = 2,
|
|
|
EOF = 1;
|
|
|
|
|
|
//this.reductionCount = this.shiftCount = 0;
|
|
|
|
|
|
this.lexer.setInput(input);
|
|
|
this.lexer.yy = this.yy;
|
|
|
this.yy.lexer = this.lexer;
|
|
|
this.yy.parser = this;
|
|
|
if (typeof this.lexer.yylloc == 'undefined')
|
|
|
this.lexer.yylloc = {};
|
|
|
var yyloc = this.lexer.yylloc;
|
|
|
lstack.push(yyloc);
|
|
|
|
|
|
var ranges = this.lexer.options && this.lexer.options.ranges;
|
|
|
|
|
|
if (typeof this.yy.parseError === 'function')
|
|
|
this.parseError = this.yy.parseError;
|
|
|
|
|
|
function popStack(n) {
|
|
|
stack.length = stack.length - 2 * n;
|
|
|
vstack.length = vstack.length - n;
|
|
|
lstack.length = lstack.length - n;
|
|
|
}
|
|
|
|
|
|
function lex() {
|
|
|
var token;
|
|
|
token = self.lexer.lex() || 1; // $end = 1
|
|
|
// if token isn't its numeric value, convert
|
|
|
if (typeof token !== 'number') {
|
|
|
token = self.symbols_[token] || token;
|
|
|
}
|
|
|
return token;
|
|
|
}
|
|
|
|
|
|
var symbol, preErrorSymbol, state, action, r, yyval = {},
|
|
|
p, len, newState, expected;
|
|
|
while (true) {
|
|
|
// retreive state number from top of stack
|
|
|
state = stack[stack.length - 1];
|
|
|
|
|
|
// use default actions if available
|
|
|
if (this.defaultActions[state]) {
|
|
|
action = this.defaultActions[state];
|
|
|
} else {
|
|
|
if (symbol === null || typeof symbol == 'undefined') {
|
|
|
symbol = lex();
|
|
|
}
|
|
|
// read action for current state and first input
|
|
|
action = table[state] && table[state][symbol];
|
|
|
}
|
|
|
|
|
|
// handle parse error
|
|
|
if (typeof action === 'undefined' || !action.length || !action[0]) {
|
|
|
|
|
|
var errStr = '';
|
|
|
if (!recovering) {
|
|
|
// Report error
|
|
|
expected = [];
|
|
|
for (p in table[state])
|
|
|
if (this.terminals_[p] && p > 2) {
|
|
|
expected.push("'" + this.terminals_[p] + "'");
|
|
|
}
|
|
|
if (this.lexer.showPosition) {
|
|
|
errStr = 'Parse error on line ' + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(', ') + ", got '" + (this.terminals_[symbol] || symbol) + "'";
|
|
|
} else {
|
|
|
errStr = 'Parse error on line ' + (yylineno + 1) + ": Unexpected " +
|
|
|
(symbol == 1 /*EOF*/ ? "end of input" :
|
|
|
("'" + (this.terminals_[symbol] || symbol) + "'"));
|
|
|
}
|
|
|
this.parseError(errStr, {
|
|
|
text: this.lexer.match,
|
|
|
token: this.terminals_[symbol] || symbol,
|
|
|
line: this.lexer.yylineno,
|
|
|
loc: yyloc,
|
|
|
expected: expected
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// just recovered from another error
|
|
|
if (recovering == 3) {
|
|
|
if (symbol == EOF) {
|
|
|
throw new Error(errStr || 'Parsing halted.');
|
|
|
}
|
|
|
|
|
|
// discard current lookahead and grab another
|
|
|
yyleng = this.lexer.yyleng;
|
|
|
yytext = this.lexer.yytext;
|
|
|
yylineno = this.lexer.yylineno;
|
|
|
yyloc = this.lexer.yylloc;
|
|
|
symbol = lex();
|
|
|
}
|
|
|
|
|
|
// try to recover from error
|
|
|
while (1) {
|
|
|
// check for error recovery rule in this state
|
|
|
if ((TERROR.toString()) in table[state]) {
|
|
|
break;
|
|
|
}
|
|
|
if (state === 0) {
|
|
|
throw new Error(errStr || 'Parsing halted.');
|
|
|
}
|
|
|
popStack(1);
|
|
|
state = stack[stack.length - 1];
|
|
|
}
|
|
|
|
|
|
preErrorSymbol = symbol == 2 ? null : symbol; // save the lookahead token
|
|
|
symbol = TERROR; // insert generic error symbol as new lookahead
|
|
|
state = stack[stack.length - 1];
|
|
|
action = table[state] && table[state][TERROR];
|
|
|
recovering = 3; // allow 3 real symbols to be shifted before reporting a new error
|
|
|
}
|
|
|
|
|
|
// this shouldn't happen, unless resolve defaults are off
|
|
|
if (action[0] instanceof Array && action.length > 1) {
|
|
|
throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
|
|
|
}
|
|
|
|
|
|
switch (action[0]) {
|
|
|
|
|
|
case 1: // shift
|
|
|
//this.shiftCount++;
|
|
|
|
|
|
stack.push(symbol);
|
|
|
vstack.push(this.lexer.yytext);
|
|
|
lstack.push(this.lexer.yylloc);
|
|
|
stack.push(action[1]); // push state
|
|
|
symbol = null;
|
|
|
if (!preErrorSymbol) { // normal execution/no error
|
|
|
yyleng = this.lexer.yyleng;
|
|
|
yytext = this.lexer.yytext;
|
|
|
yylineno = this.lexer.yylineno;
|
|
|
yyloc = this.lexer.yylloc;
|
|
|
if (recovering > 0)
|
|
|
recovering--;
|
|
|
} else { // error just occurred, resume old lookahead f/ before error
|
|
|
symbol = preErrorSymbol;
|
|
|
preErrorSymbol = null;
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case 2: // reduce
|
|
|
//this.reductionCount++;
|
|
|
|
|
|
len = this.productions_[action[1]][1];
|
|
|
|
|
|
// perform semantic action
|
|
|
yyval.$ = vstack[vstack.length - len]; // default to $$ = $1
|
|
|
// default location, uses first token for firsts, last for lasts
|
|
|
yyval._$ = {
|
|
|
first_line: lstack[lstack.length - (len || 1)].first_line,
|
|
|
last_line: lstack[lstack.length - 1].last_line,
|
|
|
first_column: lstack[lstack.length - (len || 1)].first_column,
|
|
|
last_column: lstack[lstack.length - 1].last_column
|
|
|
};
|
|
|
if (ranges) {
|
|
|
yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
|
|
|
}
|
|
|
r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
|
|
|
|
|
|
if (typeof r !== 'undefined') {
|
|
|
return r;
|
|
|
}
|
|
|
|
|
|
// pop off stack
|
|
|
if (len) {
|
|
|
stack = stack.slice(0, -1 * len * 2);
|
|
|
vstack = vstack.slice(0, -1 * len);
|
|
|
lstack = lstack.slice(0, -1 * len);
|
|
|
}
|
|
|
|
|
|
stack.push(this.productions_[action[1]][0]); // push nonterminal (reduce)
|
|
|
vstack.push(yyval.$);
|
|
|
lstack.push(yyval._$);
|
|
|
// goto new state = table[STATE][NONTERMINAL]
|
|
|
newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
|
|
|
stack.push(newState);
|
|
|
break;
|
|
|
|
|
|
case 3: // accept
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
};
|
|
|
var lexer = (function() {
|
|
|
var lexer = ({
|
|
|
EOF: 1,
|
|
|
parseError: function parseError(str, hash) {
|
|
|
if (this.yy.parser) {
|
|
|
this.yy.parser.parseError(str, hash);
|
|
|
} else {
|
|
|
throw new Error(str);
|
|
|
}
|
|
|
},
|
|
|
setInput: function(input) {
|
|
|
this._input = input;
|
|
|
this._more = this._less = this.done = false;
|
|
|
this.yylineno = this.yyleng = 0;
|
|
|
this.yytext = this.matched = this.match = '';
|
|
|
this.conditionStack = ['INITIAL'];
|
|
|
this.yylloc = {
|
|
|
first_line: 1,
|
|
|
first_column: 0,
|
|
|
last_line: 1,
|
|
|
last_column: 0
|
|
|
};
|
|
|
if (this.options.ranges) this.yylloc.range = [0, 0];
|
|
|
this.offset = 0;
|
|
|
return this;
|
|
|
},
|
|
|
input: function() {
|
|
|
var ch = this._input[0];
|
|
|
this.yytext += ch;
|
|
|
this.yyleng++;
|
|
|
this.offset++;
|
|
|
this.match += ch;
|
|
|
this.matched += ch;
|
|
|
var lines = ch.match(/(?:\r\n?|\n).*/g);
|
|
|
if (lines) {
|
|
|
this.yylineno++;
|
|
|
this.yylloc.last_line++;
|
|
|
} else {
|
|
|
this.yylloc.last_column++;
|
|
|
}
|
|
|
if (this.options.ranges) this.yylloc.range[1]++;
|
|
|
|
|
|
this._input = this._input.slice(1);
|
|
|
return ch;
|
|
|
},
|
|
|
unput: function(ch) {
|
|
|
var len = ch.length;
|
|
|
var lines = ch.split(/(?:\r\n?|\n)/g);
|
|
|
|
|
|
this._input = ch + this._input;
|
|
|
this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
|
|
|
//this.yyleng -= len;
|
|
|
this.offset -= len;
|
|
|
var oldLines = this.match.split(/(?:\r\n?|\n)/g);
|
|
|
this.match = this.match.substr(0, this.match.length - 1);
|
|
|
this.matched = this.matched.substr(0, this.matched.length - 1);
|
|
|
|
|
|
if (lines.length - 1) this.yylineno -= lines.length - 1;
|
|
|
var r = this.yylloc.range;
|
|
|
|
|
|
this.yylloc = {
|
|
|
first_line: this.yylloc.first_line,
|
|
|
last_line: this.yylineno + 1,
|
|
|
first_column: this.yylloc.first_column,
|
|
|
last_column: lines ?
|
|
|
(lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
|
|
|
};
|
|
|
|
|
|
if (this.options.ranges) {
|
|
|
this.yylloc.range = [r[0], r[0] + this.yyleng - len];
|
|
|
}
|
|
|
return this;
|
|
|
},
|
|
|
more: function() {
|
|
|
this._more = true;
|
|
|
return this;
|
|
|
},
|
|
|
less: function(n) {
|
|
|
this.unput(this.match.slice(n));
|
|
|
},
|
|
|
pastInput: function() {
|
|
|
var past = this.matched.substr(0, this.matched.length - this.match.length);
|
|
|
return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, "");
|
|
|
},
|
|
|
upcomingInput: function() {
|
|
|
var next = this.match;
|
|
|
if (next.length < 20) {
|
|
|
next += this._input.substr(0, 20 - next.length);
|
|
|
}
|
|
|
return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
|
|
|
},
|
|
|
showPosition: function() {
|
|
|
var pre = this.pastInput();
|
|
|
var c = new Array(pre.length + 1).join("-");
|
|
|
return pre + this.upcomingInput() + "\n" + c + "^";
|
|
|
},
|
|
|
next: function() {
|
|
|
if (this.done) {
|
|
|
return this.EOF;
|
|
|
}
|
|
|
if (!this._input) this.done = true;
|
|
|
|
|
|
var token,
|
|
|
match,
|
|
|
tempMatch,
|
|
|
index,
|
|
|
lines;
|
|
|
if (!this._more) {
|
|
|
this.yytext = '';
|
|
|
this.match = '';
|
|
|
}
|
|
|
var rules = this._currentRules();
|
|
|
for (var i = 0; i < rules.length; i++) {
|
|
|
tempMatch = this._input.match(this.rules[rules[i]]);
|
|
|
if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
|
|
|
match = tempMatch;
|
|
|
index = i;
|
|
|
if (!this.options.flex) break;
|
|
|
}
|
|
|
}
|
|
|
if (match) {
|
|
|
lines = match[0].match(/(?:\r\n?|\n).*/g);
|
|
|
if (lines) this.yylineno += lines.length;
|
|
|
this.yylloc = {
|
|
|
first_line: this.yylloc.last_line,
|
|
|
last_line: this.yylineno + 1,
|
|
|
first_column: this.yylloc.last_column,
|
|
|
last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
|
|
|
};
|
|
|
this.yytext += match[0];
|
|
|
this.match += match[0];
|
|
|
this.matches = match;
|
|
|
this.yyleng = this.yytext.length;
|
|
|
if (this.options.ranges) {
|
|
|
this.yylloc.range = [this.offset, this.offset += this.yyleng];
|
|
|
}
|
|
|
this._more = false;
|
|
|
this._input = this._input.slice(match[0].length);
|
|
|
this.matched += match[0];
|
|
|
token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);
|
|
|
if (this.done && this._input) this.done = false;
|
|
|
if (token) return token;
|
|
|
else return;
|
|
|
}
|
|
|
if (this._input === "") {
|
|
|
return this.EOF;
|
|
|
} else {
|
|
|
return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
|
|
|
text: "",
|
|
|
token: null,
|
|
|
line: this.yylineno
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
lex: function lex() {
|
|
|
var r = this.next();
|
|
|
if (typeof r !== 'undefined') {
|
|
|
return r;
|
|
|
} else {
|
|
|
return this.lex();
|
|
|
}
|
|
|
},
|
|
|
begin: function begin(condition) {
|
|
|
this.conditionStack.push(condition);
|
|
|
},
|
|
|
popState: function popState() {
|
|
|
return this.conditionStack.pop();
|
|
|
},
|
|
|
_currentRules: function _currentRules() {
|
|
|
return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
|
|
|
},
|
|
|
topState: function() {
|
|
|
return this.conditionStack[this.conditionStack.length - 2];
|
|
|
},
|
|
|
pushState: function begin(condition) {
|
|
|
this.begin(condition);
|
|
|
}
|
|
|
});
|
|
|
lexer.options = {};
|
|
|
lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
|
|
|
switch ($avoiding_name_collisions) {
|
|
|
case 0:
|
|
|
return "*";
|
|
|
case 1:
|
|
|
return "/";
|
|
|
case 2:
|
|
|
return "-";
|
|
|
case 3:
|
|
|
return "+";
|
|
|
case 4:
|
|
|
return "^";
|
|
|
case 5:
|
|
|
return "%";
|
|
|
case 6:
|
|
|
return "(";
|
|
|
case 7:
|
|
|
return ")";
|
|
|
case 8:
|
|
|
return ",";
|
|
|
case 9:
|
|
|
return "==";
|
|
|
case 10:
|
|
|
return "!=";
|
|
|
case 11:
|
|
|
return "~=";
|
|
|
case 12:
|
|
|
return ">=";
|
|
|
case 13:
|
|
|
return "<=";
|
|
|
case 14:
|
|
|
return "<";
|
|
|
case 15:
|
|
|
return ">";
|
|
|
case 16:
|
|
|
return "?";
|
|
|
case 17:
|
|
|
return ":";
|
|
|
case 18:
|
|
|
return "and";
|
|
|
case 19:
|
|
|
return "or";
|
|
|
case 20:
|
|
|
return "not";
|
|
|
case 21:
|
|
|
return "in";
|
|
|
case 22:
|
|
|
return "of";
|
|
|
case 23:
|
|
|
break;
|
|
|
case 24:
|
|
|
return "NUMBER";
|
|
|
case 25:
|
|
|
yy_.yytext = JSON.stringify(yy_.yytext);
|
|
|
return "SYMBOL";
|
|
|
case 26:
|
|
|
yy_.yytext = yy.buildString("'", yy_.yytext);
|
|
|
return "SYMBOL";
|
|
|
case 27:
|
|
|
yy_.yytext = yy.buildString('"', yy_.yytext);
|
|
|
return "STRING";
|
|
|
case 28:
|
|
|
return "EOF";
|
|
|
}
|
|
|
};
|
|
|
lexer.rules = [/^(?:\*)/, /^(?:\/)/, /^(?:-)/, /^(?:\+)/, /^(?:\^)/, /^(?:\%)/, /^(?:\()/, /^(?:\))/, /^(?:\,)/, /^(?:==)/, /^(?:\!=)/, /^(?:\~=)/, /^(?:>=)/, /^(?:<=)/, /^(?:<)/, /^(?:>)/, /^(?:\?)/, /^(?:\:)/, /^(?:and[^\w])/, /^(?:or[^\w])/, /^(?:not[^\w])/, /^(?:in[^\w])/, /^(?:of[^\w])/, /^(?:\s+)/, /^(?:[0-9]+(?:\.[0-9]+)?\b)/, /^(?:[a-zA-Z$_][\.a-zA-Z0-9$_]*)/, /^(?:'(?:\\'|\\\\|[^'\\])*')/, /^(?:"(?:\\"|\\\\|[^"\\])*")/, /^(?:$)/];
|
|
|
lexer.conditions = {
|
|
|
"INITIAL": {
|
|
|
"rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
|
|
|
"inclusive": true
|
|
|
}
|
|
|
};
|
|
|
return lexer;
|
|
|
})();
|
|
|
parser.lexer = lexer;
|
|
|
|
|
|
function Parser() {
|
|
|
this.yy = {};
|
|
|
}
|
|
|
Parser.prototype = parser;
|
|
|
parser.Parser = Parser;
|
|
|
return new Parser;
|
|
|
})();
|
|
|
const parser = _parser;
|
|
|
_parser.Parser;
|
|
|
|
|
|
// the parser is dynamically generated from generateParser.js at compile time
|
|
|
|
|
|
// Shared utility functions
|
|
|
const std =
|
|
|
{
|
|
|
|
|
|
isfn: function(fns, funcName) {
|
|
|
return fns.hasOwnProperty(funcName) && typeof fns[funcName] === "function";
|
|
|
},
|
|
|
|
|
|
unknown: function(funcName) {
|
|
|
throw ReferenceError('Unknown function: ' + funcName + '()');
|
|
|
},
|
|
|
|
|
|
coerceArray: function(value) {
|
|
|
if (Array.isArray(value))
|
|
|
return value;
|
|
|
else
|
|
|
return [value];
|
|
|
},
|
|
|
|
|
|
coerceBoolean: function(value) {
|
|
|
if (typeof value === 'boolean')
|
|
|
return +value;
|
|
|
else
|
|
|
return value;
|
|
|
},
|
|
|
|
|
|
isSubset: function(a, b) {
|
|
|
const A = std.coerceArray(a);
|
|
|
const B = std.coerceArray(b);
|
|
|
return +A.every( val => B.includes(val) );
|
|
|
},
|
|
|
|
|
|
buildString: function(quote, literal)
|
|
|
{
|
|
|
quote = String(quote)[0];
|
|
|
literal = String(literal);
|
|
|
let built = '';
|
|
|
|
|
|
if (literal[0] !== quote || literal[literal.length-1] !== quote)
|
|
|
throw new Error(`Unexpected internal error: String literal doesn't begin/end with the right quotation mark.`);
|
|
|
|
|
|
for (let i = 1; i < literal.length - 1; i++)
|
|
|
{
|
|
|
if (literal[i] === "\\")
|
|
|
{
|
|
|
i++;
|
|
|
if (i >= literal.length - 1) throw new Error(`Unexpected internal error: Unescaped backslash at the end of string literal.`);
|
|
|
|
|
|
if (literal[i] === "\\") built += '\\';
|
|
|
else if (literal[i] === quote) built += quote;
|
|
|
else throw new Error(`Unexpected internal error: Invalid escaped character in string literal: ${literal[i]}`);
|
|
|
}
|
|
|
else if (literal[i] === quote)
|
|
|
{
|
|
|
throw new Error(`Unexpected internal error: String literal contains unescaped quotation mark.`);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
built += literal[i];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return JSON.stringify(built);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
parser.yy = Object.create(std);
|
|
|
|
|
|
/**
|
|
|
* Filtrex provides compileExpression() to compile user expressions to JavaScript.
|
|
|
*
|
|
|
* See https://github.com/joewalnes/filtrex for tutorial, reference and examples.
|
|
|
* MIT License.
|
|
|
*
|
|
|
* Includes Jison by Zachary Carter. See http://jison.org/
|
|
|
*
|
|
|
* -Joe Walnes
|
|
|
*/
|
|
|
function compileExpression(expression, options) {
|
|
|
|
|
|
// Check and coerce arguments
|
|
|
|
|
|
if (arguments.length > 2) throw new TypeError('Too many arguments.');
|
|
|
|
|
|
options = typeof options === "object" ? options : {};
|
|
|
let {extraFunctions, customProp} = options;
|
|
|
for (let key of Object.getOwnPropertyNames(options))
|
|
|
{
|
|
|
if (key !== "extraFunctions" && key !== "customProp") throw new TypeError(`Unknown option: ${key}`);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Functions available to the expression
|
|
|
|
|
|
let functions = {
|
|
|
abs: Math.abs,
|
|
|
ceil: Math.ceil,
|
|
|
floor: Math.floor,
|
|
|
log: Math.log,
|
|
|
max: Math.max,
|
|
|
min: Math.min,
|
|
|
random: Math.random,
|
|
|
round: Math.round,
|
|
|
sqrt: Math.sqrt,
|
|
|
};
|
|
|
|
|
|
if (extraFunctions) {
|
|
|
for (var name in extraFunctions) {
|
|
|
if (extraFunctions.hasOwnProperty(name)) {
|
|
|
functions[name] = extraFunctions[name];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Compile the expression
|
|
|
|
|
|
let tree = parser.parse(expression);
|
|
|
|
|
|
let js = [];
|
|
|
js.push('return ');
|
|
|
function toJs(node) {
|
|
|
if (Array.isArray(node)) {
|
|
|
node.forEach(toJs);
|
|
|
} else {
|
|
|
js.push(node);
|
|
|
}
|
|
|
}
|
|
|
tree.forEach(toJs);
|
|
|
js.push(';');
|
|
|
|
|
|
|
|
|
|
|
|
// Metaprogramming functions
|
|
|
|
|
|
function prop(name, obj) {
|
|
|
return Object.prototype.hasOwnProperty.call(obj||{}, name) ? obj[name] : undefined;
|
|
|
}
|
|
|
|
|
|
function safeGetter(obj) {
|
|
|
return function get(name) {
|
|
|
return Object.prototype.hasOwnProperty.call(obj||{}, name) ? obj[name] : undefined;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof customProp === 'function') {
|
|
|
prop = (name, obj) => std.coerceBoolean(customProp(name, safeGetter(obj), obj));
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Patch together and return
|
|
|
|
|
|
let func = new Function('fns', 'std', 'prop', 'data', js.join(''));
|
|
|
|
|
|
return function(data) {
|
|
|
try {
|
|
|
return func(functions, std, prop, data);
|
|
|
}
|
|
|
catch (e)
|
|
|
{
|
|
|
return e;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function getArrayForArrayOrObject(value) {
|
|
|
if (value === null || value === undefined) {
|
|
|
return [];
|
|
|
}
|
|
|
if (Array.isArray(value)) {
|
|
|
return value;
|
|
|
}
|
|
|
return [value];
|
|
|
}
|
|
|
|
|
|
class ItineraryRenderer extends obsidian.MarkdownRenderChild {
|
|
|
constructor(spec, sourcePaths, container) {
|
|
|
super(container);
|
|
|
this.spec = spec;
|
|
|
this.sourcePaths = sourcePaths;
|
|
|
this.container = container;
|
|
|
this.messages = [];
|
|
|
this.loaded = false;
|
|
|
this.compiledFilters = [];
|
|
|
this.sources = {};
|
|
|
for (const [idx, filter] of getArrayForArrayOrObject(this.spec.filter).entries()) {
|
|
|
this.compiledFilters.push(compileExpression(filter));
|
|
|
this.log(`Filter #${idx} '${filter}' compiled`);
|
|
|
}
|
|
|
}
|
|
|
onload() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.render();
|
|
|
this.loaded = true;
|
|
|
});
|
|
|
}
|
|
|
onunload() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
this.loaded = false;
|
|
|
});
|
|
|
}
|
|
|
isLoaded() {
|
|
|
return this.loaded;
|
|
|
}
|
|
|
/** Updates stored event information
|
|
|
*
|
|
|
* Returns `false` if source file is *not* an event source for
|
|
|
* this particular itinerary.
|
|
|
* Returns `true` if source file *is*.
|
|
|
*/
|
|
|
updateSource(source, events) {
|
|
|
if (this.sourcePaths.includes(source)) {
|
|
|
this.sources[source] = events;
|
|
|
this.render();
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
/** Returns whether selected event matches all provided filter specs. */
|
|
|
eventMatchesFilters(evt, filters) {
|
|
|
for (const [idx, filter] of filters.entries()) {
|
|
|
if (!filter(evt)) {
|
|
|
this.log(`Event '${evt.title}' failed filter #${idx}`);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
this.log(`Event '${evt.title}' passed all filters`);
|
|
|
return true;
|
|
|
}
|
|
|
log(message) {
|
|
|
if (this.spec.debug) {
|
|
|
console.log(message);
|
|
|
this.messages.push(message);
|
|
|
}
|
|
|
}
|
|
|
render() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
try {
|
|
|
const events = Object.values(this.sources)
|
|
|
.flat()
|
|
|
.filter((evt) => this.eventMatchesFilters(evt, this.compiledFilters));
|
|
|
if (!this.calendar) {
|
|
|
const calendarProps = Object.assign({}, this.spec);
|
|
|
// Our itinerary spec extends the CalendarOptions object used by
|
|
|
// @fullcalendar/core, but there are a handful of properties that
|
|
|
// are used only by obsidian-itinerary; we need to delete them
|
|
|
// or @fullcalendar/core will show a warning in the console.
|
|
|
delete calendarProps.source;
|
|
|
delete calendarProps.filter;
|
|
|
delete calendarProps.debug;
|
|
|
this.calendar = new Calendar(this.container, Object.assign({ plugins: [main$3, main$2, main$1, main] }, calendarProps));
|
|
|
}
|
|
|
this.calendar.removeAllEvents();
|
|
|
this.calendar.addEventSource(events);
|
|
|
this.calendar.render();
|
|
|
setTimeout(() => this.calendar.updateSize(), 250);
|
|
|
if (this.spec.debug) {
|
|
|
renderErrorPre(this.container, this.messages.join("\n"), "itinerary-debug");
|
|
|
this.messages = [];
|
|
|
}
|
|
|
}
|
|
|
catch (e) {
|
|
|
renderErrorPre(this.container, e);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
class EventRenderer extends obsidian.MarkdownRenderChild {
|
|
|
constructor(event, container) {
|
|
|
super(container);
|
|
|
this.event = event;
|
|
|
this.container = container;
|
|
|
}
|
|
|
onload() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
yield this.render();
|
|
|
});
|
|
|
}
|
|
|
render() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
try {
|
|
|
if (this.event.hidden) {
|
|
|
// Remove all child nodes (in case we rendered them before)
|
|
|
while (this.container.firstChild) {
|
|
|
this.container.removeChild(this.container.firstChild);
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
const element = this.container.createEl("div", {
|
|
|
cls: ["itinerary", "itinerary-event"],
|
|
|
});
|
|
|
const name = element.createEl("div", {
|
|
|
cls: ["name"],
|
|
|
});
|
|
|
name.style.backgroundColor = this.event.backgroundColor;
|
|
|
name.style.borderColor = this.event.borderColor;
|
|
|
name.style.color = this.event.textColor;
|
|
|
name.innerText = this.event.title;
|
|
|
const dateStr = element.createEl("div", {
|
|
|
cls: ["date"],
|
|
|
});
|
|
|
let start = null;
|
|
|
if (this.event.start) {
|
|
|
start = DateTime_1.fromISO(this.event.start);
|
|
|
}
|
|
|
let end = null;
|
|
|
if (this.event.end) {
|
|
|
end = DateTime_1.fromISO(this.event.end);
|
|
|
}
|
|
|
if (this.event.allDay) {
|
|
|
if (!end || end == start) {
|
|
|
dateStr.innerText = `${end.toLocaleString(DateTime_1.DATE_FULL)} (all day)`;
|
|
|
}
|
|
|
else {
|
|
|
dateStr.innerText = `${start.toLocaleString(DateTime_1.DATE_FULL)} - ${end.toLocaleString(DateTime_1.DATE_FULL)} (all day)`;
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
if (end) {
|
|
|
const zone = this.event.timeZone || this.event.endTimeZone;
|
|
|
if (zone) {
|
|
|
end = end.setZone(zone);
|
|
|
}
|
|
|
}
|
|
|
if (start) {
|
|
|
const zone = this.event.timeZone || this.event.startTimeZone;
|
|
|
if (zone) {
|
|
|
start = start.setZone(zone);
|
|
|
}
|
|
|
}
|
|
|
if (!end || end == start) {
|
|
|
dateStr.innerText = `${start.toLocaleString(DateTime_1.DATETIME_FULL)}`;
|
|
|
}
|
|
|
else {
|
|
|
dateStr.innerText = `${start.toLocaleString(DateTime_1.DATETIME_FULL)} - ${end.toLocaleString(DateTime_1.DATETIME_FULL)}`;
|
|
|
}
|
|
|
}
|
|
|
for (const tagName of getArrayForArrayOrObject(this.event.tag)) {
|
|
|
const tag = element.createEl("div", {
|
|
|
cls: ["tag"],
|
|
|
});
|
|
|
tag.innerText = tagName;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (e) {
|
|
|
renderErrorPre(this.container, e);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
function renderErrorPre(container, error, cls) {
|
|
|
const pre = container.createEl("pre", {
|
|
|
cls: ["itinerary", cls !== null && cls !== void 0 ? cls : "itinerary-error"],
|
|
|
});
|
|
|
pre.appendText(error);
|
|
|
return pre;
|
|
|
}
|
|
|
|
|
|
class Itinerary extends obsidian.Plugin {
|
|
|
constructor() {
|
|
|
super(...arguments);
|
|
|
/** Map of documents containing itineraries to pages their events
|
|
|
* are sourced from */
|
|
|
this.eventSources = {};
|
|
|
/** Map of documents containing itineraries to all itineraries
|
|
|
* rendered on that page */
|
|
|
this.itineraries = {};
|
|
|
/** Map of documents used as events ources to all the rendered
|
|
|
* events */
|
|
|
this.events = {};
|
|
|
/** Map of documents having a debounced refresn scheduled to the
|
|
|
* relevant setTimeout timer */
|
|
|
this.refreshDebouncers = {};
|
|
|
}
|
|
|
/** Receives incoming file change events (for updating events/itineraries) */
|
|
|
onFileChange(change) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
if (change instanceof obsidian.TFile) {
|
|
|
const documentPath = change.path;
|
|
|
// If this incoming change event was for a document that we're using
|
|
|
// as an event source, reload events from that source and instruct
|
|
|
// dependent itineraries to update themselves.
|
|
|
if (this.eventSources[documentPath]) {
|
|
|
yield this.loadEventsFromSource(documentPath);
|
|
|
this.refreshDependentItineraries(documentPath);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
/** Refreshes displayed itineraries when displayed events have changed.
|
|
|
*
|
|
|
* For a path on which an event was sourced (and possibly rendered),
|
|
|
* refresh any displayed itineraries that may have sourced events
|
|
|
* from said page. **/
|
|
|
refreshDependentItineraries(path) {
|
|
|
var _a;
|
|
|
for (const page of (_a = this.eventSources[path]) !== null && _a !== void 0 ? _a : []) {
|
|
|
if (this.refreshDebouncers[page]) {
|
|
|
clearTimeout(this.refreshDebouncers[page]);
|
|
|
}
|
|
|
this.refreshDebouncers[page] = setTimeout(() => {
|
|
|
var _a;
|
|
|
delete this.refreshDebouncers[page];
|
|
|
for (const itinerary of (_a = this.itineraries[page]) !== null && _a !== void 0 ? _a : []) {
|
|
|
if (!itinerary.isLoaded()) {
|
|
|
this.itineraries[page].remove(itinerary);
|
|
|
continue;
|
|
|
}
|
|
|
this.refreshItinerary(itinerary);
|
|
|
}
|
|
|
}, 5000);
|
|
|
}
|
|
|
}
|
|
|
/** Updates event content for a given itinerary (& re-render if changed) */
|
|
|
refreshItinerary(itinerary) {
|
|
|
let rerender = false;
|
|
|
for (const sourcePath in this.events) {
|
|
|
if (itinerary.updateSource(sourcePath, this.events[sourcePath])) {
|
|
|
rerender = true;
|
|
|
}
|
|
|
}
|
|
|
if (rerender) {
|
|
|
itinerary.render();
|
|
|
}
|
|
|
}
|
|
|
/** Loads file content to update cached set of events found in said file. */
|
|
|
loadEventsFromSource(sourcePath) {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
const file = this.app.vault.getAbstractFileByPath(sourcePath);
|
|
|
if (file instanceof obsidian.TFile) {
|
|
|
const fileContents = yield this.app.vault.cachedRead(file);
|
|
|
this.events[sourcePath] = getEventInformation(fileContents);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
onload() {
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
this.registerEvent(this.app.vault.on("modify", this.onFileChange.bind(this)));
|
|
|
this.registerMarkdownCodeBlockProcessor("itinerary", (itinerarySpecString, el, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
|
try {
|
|
|
let tableSpec = {};
|
|
|
try {
|
|
|
tableSpec = obsidian.parseYaml(itinerarySpecString) || {};
|
|
|
if (!(tableSpec instanceof Object)) {
|
|
|
throw new Error();
|
|
|
}
|
|
|
}
|
|
|
catch (e) {
|
|
|
throw new Error(`Could not parse itinerary spec: ${e.message}`);
|
|
|
}
|
|
|
// If no explicit sources were specified, *this* page is the
|
|
|
// event source
|
|
|
if (!tableSpec.source) {
|
|
|
tableSpec.source = [ctx.sourcePath];
|
|
|
}
|
|
|
// Update the plugin mapping between event sources and dependent
|
|
|
// itineraries so we can know which itineraries to refresh
|
|
|
// when page contents have changed
|
|
|
const eventSources = getArrayForArrayOrObject(tableSpec.source);
|
|
|
for (const source of eventSources) {
|
|
|
if (!this.eventSources[source]) {
|
|
|
this.eventSources[source] = [];
|
|
|
}
|
|
|
if (!this.eventSources[source].includes(ctx.sourcePath)) {
|
|
|
this.eventSources[source].push(ctx.sourcePath);
|
|
|
}
|
|
|
}
|
|
|
const itinerary = new ItineraryRenderer(tableSpec, eventSources, el);
|
|
|
// Store the ItineraryRenderer object so we can refresh it later
|
|
|
// if its events have been changed.
|
|
|
if (!this.itineraries[ctx.sourcePath]) {
|
|
|
this.itineraries[ctx.sourcePath] = [];
|
|
|
}
|
|
|
else {
|
|
|
// We might have stale itineraries in our list; let's remove
|
|
|
// the ones that are no longer rendered. We have to schedule
|
|
|
// this for the next event loop because it won't be unloaded
|
|
|
// until we return from this function.
|
|
|
setTimeout(() => {
|
|
|
for (const itinerary of this.itineraries[ctx.sourcePath]) {
|
|
|
if (!itinerary.isLoaded()) {
|
|
|
this.itineraries[ctx.sourcePath].remove(itinerary);
|
|
|
}
|
|
|
}
|
|
|
}, 1);
|
|
|
}
|
|
|
this.itineraries[ctx.sourcePath].push(itinerary);
|
|
|
ctx.addChild(itinerary);
|
|
|
// Load events from the sources that our itinerary depends upon
|
|
|
// (if those events aren't already loaded), and then ask tell
|
|
|
// our itinerary to update itself.
|
|
|
const loaderPromises = [];
|
|
|
for (const source of eventSources) {
|
|
|
if (!this.events[source]) {
|
|
|
loaderPromises.push(this.loadEventsFromSource(source));
|
|
|
}
|
|
|
}
|
|
|
Promise.all(loaderPromises).then(() => this.refreshItinerary(itinerary));
|
|
|
}
|
|
|
catch (e) {
|
|
|
renderErrorPre(el, e.message);
|
|
|
return;
|
|
|
}
|
|
|
}));
|
|
|
this.registerMarkdownCodeBlockProcessor("itinerary-event", (eventSpecString, el, ctx) => __awaiter(this, void 0, void 0, function* () {
|
|
|
try {
|
|
|
const evt = parseEventSpec(eventSpecString);
|
|
|
ctx.addChild(new EventRenderer(evt, el));
|
|
|
}
|
|
|
catch (e) {
|
|
|
renderErrorPre(el, e.message);
|
|
|
}
|
|
|
}));
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = Itinerary;
|
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9sdXhvbi9idWlsZC9janMtYnJvd3Nlci9sdXhvbi5qcyIsInNyYy9leHRyYWN0b3IudHMiLCJub2RlX21vZHVsZXMvcHJlYWN0L2Rpc3QvcHJlYWN0Lm1qcyIsIm5vZGVfbW9kdWxlcy9wcmVhY3QvaG9va3MvZGlzdC9ob29rcy5tanMiLCJub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9kaXN0L2NvbXBhdC5tanMiLCJub2RlX21vZHVsZXMvQGZ1bGxjYWxlbmRhci9jb3JlL3Zkb20uanMiLCJub2RlX21vZHVsZXMvQGZ1bGxjYWxlbmRhci9jb21tb24vdmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9AZnVsbGNhbGVuZGFyL2NvbW1vbi9tYWluLmpzIiwibm9kZV9tb2R1bGVzL0BmdWxsY2FsZW5kYXIvY29yZS9tYWluLmpzIiwibm9kZV9tb2R1bGVzL0BmdWxsY2FsZW5kYXIvZGF5Z3JpZC9tYWluLmpzIiwibm9kZV9tb2R1bGVzL0BmdWxsY2FsZW5kYXIvdGltZWdyaWQvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy9AZnVsbGNhbGVuZGFyL2xpc3QvbWFpbi5qcyIsIm5vZGVfbW9kdWxlcy9AZnVsbGNhbGVuZGFyL2x1eG9uL21haW4uanMiLCJub2RlX21vZHVsZXMvZmlsdHJleC9kaXN0L2VzbS9wYXJzZXIubWpzIiwibm9kZV9tb2R1bGVzL2ZpbHRyZXgvZGlzdC9lc20vZmlsdHJleC5tanMiLCJzcmMvdXRpbC50cyIsInNyYy9yZW5kZXIudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsibiIsInMiLCJsIiwiaGFzT3duUHJvcGVydHkiLCJwYWRTdGFydCIsInBhcnNlIiwicGFyc2VZYW1sIiwiRGF0ZVRpbWUiLCJyIiwiZiIsImUiLCJjIiwiYSIsInYiLCJiIiwiZyIsImoiLCJ6IiwidyIsIngiLCJQIiwiTSIsIkEiLCJDIiwiJCIsIlQiLCJJIiwiTyIsIkwiLCJTIiwiRCIsImgiLCJwIiwiZCIsInByZWFjdC5Db21wb25lbnQiLCJwcmVhY3QuY3JlYXRlRWxlbWVudCIsInByZWFjdC5yZW5kZXIiLCJwcmVhY3QuY3JlYXRlUmVmIiwicHJlYWN0LkZyYWdtZW50IiwiY3JlYXRlQ29udGV4dCIsInByZWFjdENvbXBhdC5jcmVhdGVQb3J0YWwiLCJmbHVzaFRvRG9tIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInByZWFjdC5vcHRpb25zIiwicHJlYWN0LmNyZWF0ZUNvbnRleHQiLCJyZW5kZXJJbm5lckNvbnRlbnQkMSIsImdldFNlZ0FuY2hvckF0dHJzIiwicmVuZGVySW5uZXJDb250ZW50IiwicmVuZGVyTW9yZUxpbmtJbm5lciIsIkRFRkFVTFRfV0VFS19OVU1fRk9STUFUIiwibWFpbiIsInJlbmRlckFsbERheUlubmVyIiwiREVGQVVMVF9USU1FX0ZPUk1BVCIsIk9QVElPTl9SRUZJTkVSUyIsIk1hcmtkb3duUmVuZGVyQ2hpbGQiLCJkYXlHcmlkUGx1Z2luIiwidGltZUdyaWRQbHVnaW4iLCJsaXN0UGx1Z2luIiwibHV4b25QbHVnaW4iLCJQbHVnaW4iLCJURmlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJ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QUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQXNGRDtBQUNPLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzlDLElBQUksSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekYsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNoQyxZQUFZLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FB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SUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUNELFNBQVNDLFVBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFO0FBQzVCLEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDbkMsRUFBRSxJQUFJLE1BQU0sR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMxQyxFQUFFLElBQUksTUFBTSxDQUFDO0FBQ2I7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDcEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxHQUFHLE1BQU07QUFDVCxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzdCLENBQUM7QUFDRCxTQUFTLFlBQVksQ0FBQyxNQUFNLEVBQUU7QUFDOUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDL0QsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixHQUFHLE1BQU07QUFDVCxJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoQyxHQUFHO0FBQ0gsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRTtB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LEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUN6SCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0RSxJQUFJLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDcEMsUUFBUSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsR0FBRztBQUN2QixFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ2pHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FB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QUNBLEVBQUUsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxpQkFBaUI7QUFDMUIsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzVELEtBQUs7QUFDTCxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0FBQ25CLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFN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SUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hDLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDMUMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMxRixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLEdBQUc7QUFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqRCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEtBQUssQ0FBQztBQUNwQyxJQUFJLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDN0Is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QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3pDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO0FBQ3pDLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLFNBQVMsWUFBWSxDQUFDLEtBQUss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LEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3RELEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekIsRUFBRSxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbkIsRUFBRSxJQUFJLFdBQVcsRUFBRSxTQUFTLENBQUM7QUFDN0I7QUFDQSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxPQUFPLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDbkUsSUFBSSxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxZQUFZLENBQUM7QUFDdkI7QUFDQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sU0FB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QUcsQ0FBQyxLQUFLLENBQUM7QUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztBQUNsRixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ3BDLElBQUksSUFBSSxFQUFFLElBQUk7QUFDZCxJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDMUcsR0FBRyxDQUFDO0FBQ0osTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUN4QyxJQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUM1QyxJQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNyRCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxJQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUM1QyxJQUFJLElBQUksRUFBRSxHQUFHLENB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QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7QUFDeEMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDeEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLFNBQVMsU0FBUyxHQUFHO0FBQzFDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMvQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLEdBQUc7QUFDcEMsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsU0FBUyxNQUFNLEdBQUc7QUFDcEMsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzVDLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FB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QUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2xELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDeEIsTUFBTSxPQUFPLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxTQUFTO0FBQ2xCLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7QUFDTCxJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUMvQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUNkLElBQUksR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3hCLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0wsSUFBSSxH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QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBU0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDQyxHQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBR1AsR0FBQyxFQUFFTyxHQUFDLEVBQUMsQ0FBQyxTQUFTQSxHQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDQSxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNILEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFSCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTSSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFUCxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFTixHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ1MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQ0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVNGLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBU0UsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVNGLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVNHLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBU0MsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQyxHQUFDLENBQUNDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0QsR0FBQyxDQUFDQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLHlCQUF5QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxTQUFTQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVNELEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsU0FBU1QsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUNXLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUNmLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUNBLEdBQUMsQ0FBQ0EsR0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQ1UsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVNYLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTVyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFbEIsR0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFDLENBQUMsR0FBR2EsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQ0wsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTRyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRUEsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsU0FBU00sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTRSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDYixHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDSCxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFSCxHQUFDLENBQUNBLEdBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQ08sR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBK08sU0FBU2EsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDckIsR0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDRSxHQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUF1RCxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQ0MsR0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUNBLEdBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFQSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQ0osR0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDTyxHQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ04sR0FBQyxDQUFDLENBQUM7O0FDQXgrUyxJQUFLLENBQUMsQ0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQ1QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDQSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxRQUEybkMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDZ0IsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDaEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUNBLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDZ0IsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFRLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRWdCLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDaEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUNBLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8scUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFNLENBQUMsU0FBU2dCLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQU07O0FDQTN2RCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFnVCxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSUosQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFxVixJQUEyTSxDQUFDLENBQUNBLENBQUMsQ0FBQyxJQUFJQSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNBLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQXFMLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUNBLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSW5CLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFWCxHQUFDLENBQUNZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQ1osR0FBQyxDQUFDWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQ21CLEdBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDQSxHQUFDLENBQUMvQixHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixHQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU9BLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJVyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUNxQixHQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLE9BQU8sTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLDJPQUEyTyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxNQUFNLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUErS3JCLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDQSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUNBLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUksSUFBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDLE1BQU1BLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLGNBQWMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDRSxHQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDQSxHQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0YsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFTLENBQUM7O0FDSTMrTixJQUFJLFNBQVMsR0FBRyxPQUFPLFVBQVUsS0FBSyxXQUFXLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUN4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QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZCxJQUFJLE9BQU8sY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFDRDtBQUNBO0FBQ0EsU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzQixJQUFJLE9BQU8sUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUNELFNBQVMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDMUIsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBQ0QsU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDN0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDN0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDaEQsQ0FBQztBQUNELFNBQVMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDaEMsSUFBSSxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsRUFBRSxD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QUksR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ3ZELFFBQVEsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDOUMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQztBQUtELFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSztBQUNyRixTQUFTLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFLRCxTQUFTLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDMUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLO0FBQ3ZELFNBQVMsS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUM3QyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDbkQsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDM0IsS0FBSztBQUNMLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtB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SSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxRQUFRLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQztBQUMvYyxZQUFZLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsK0NBQStDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVLDJDQUEyQztBQUMvSixnQkFBZ0IsS0FBSyxDQUFDLGNBQWMsS0FBSyxhQUFhLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUVBLHlCQUF1QixFQUFFLEVBQUUsVUFBVSxTQUFTLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsVyxnQkFBZ0IsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLFlBQVks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QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNULFFBQVEsYUFBYSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN6RjtBQUNBLFlBQVksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkMsWUFBWSxRQUFRLE9BQU87QUFDM0IsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRXRDLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkYsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEYsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEYsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0Ysb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xGLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEYsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0Usb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2SSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkosb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4RixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUYsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsb0JBQW9CLE1BQU07QUFDMUIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEIsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsRUFBRTtBQUNsQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLEVBQUU7QUFDakIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxFQUFFO0FBQ2xCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsRUFBRTtBQUNqQixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxFQUFFO0FBQ2pCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFNBQVMsRUFBRTtBQUNYLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixTQUFTLEVBQUU7QUFDWCxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsU0FBUyxFQUFFO0FBQ1gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN0QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdEIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN2QixZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDdkIs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
|