2018-12-14 05:41:57 +01:00
|
|
|
this["wp"] = this["wp"] || {}; this["wp"]["date"] =
|
|
|
|
/******/ (function(modules) { // webpackBootstrap
|
|
|
|
/******/ // The module cache
|
|
|
|
/******/ var installedModules = {};
|
|
|
|
/******/
|
|
|
|
/******/ // The require function
|
|
|
|
/******/ function __webpack_require__(moduleId) {
|
|
|
|
/******/
|
|
|
|
/******/ // Check if module is in cache
|
|
|
|
/******/ if(installedModules[moduleId]) {
|
|
|
|
/******/ return installedModules[moduleId].exports;
|
|
|
|
/******/ }
|
|
|
|
/******/ // Create a new module (and put it into the cache)
|
|
|
|
/******/ var module = installedModules[moduleId] = {
|
|
|
|
/******/ i: moduleId,
|
|
|
|
/******/ l: false,
|
|
|
|
/******/ exports: {}
|
|
|
|
/******/ };
|
|
|
|
/******/
|
|
|
|
/******/ // Execute the module function
|
|
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
|
|
/******/
|
|
|
|
/******/ // Flag the module as loaded
|
|
|
|
/******/ module.l = true;
|
|
|
|
/******/
|
|
|
|
/******/ // Return the exports of the module
|
|
|
|
/******/ return module.exports;
|
|
|
|
/******/ }
|
|
|
|
/******/
|
|
|
|
/******/
|
|
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
|
|
/******/ __webpack_require__.m = modules;
|
|
|
|
/******/
|
|
|
|
/******/ // expose the module cache
|
|
|
|
/******/ __webpack_require__.c = installedModules;
|
|
|
|
/******/
|
|
|
|
/******/ // define getter function for harmony exports
|
|
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
|
|
/******/ }
|
|
|
|
/******/ };
|
|
|
|
/******/
|
|
|
|
/******/ // define __esModule on exports
|
|
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
|
/******/ }
|
|
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
/******/ };
|
|
|
|
/******/
|
|
|
|
/******/ // create a fake namespace object
|
|
|
|
/******/ // mode & 1: value is a module id, require it
|
|
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
|
|
/******/ // mode & 4: return value when already ns object
|
|
|
|
/******/ // mode & 8|1: behave like require
|
|
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
|
|
/******/ if(mode & 8) return value;
|
|
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
|
|
/******/ var ns = Object.create(null);
|
|
|
|
/******/ __webpack_require__.r(ns);
|
|
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
|
|
/******/ return ns;
|
|
|
|
/******/ };
|
|
|
|
/******/
|
|
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
|
|
/******/ __webpack_require__.n = function(module) {
|
|
|
|
/******/ var getter = module && module.__esModule ?
|
|
|
|
/******/ function getDefault() { return module['default']; } :
|
|
|
|
/******/ function getModuleExports() { return module; };
|
|
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
|
|
/******/ return getter;
|
|
|
|
/******/ };
|
|
|
|
/******/
|
|
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
|
|
/******/
|
|
|
|
/******/ // __webpack_public_path__
|
|
|
|
/******/ __webpack_require__.p = "";
|
|
|
|
/******/
|
|
|
|
/******/
|
|
|
|
/******/ // Load entry module and return exports
|
2020-06-29 13:50:29 +02:00
|
|
|
/******/ return __webpack_require__(__webpack_require__.s = 411);
|
2018-12-14 05:41:57 +01:00
|
|
|
/******/ })
|
|
|
|
/************************************************************************/
|
|
|
|
/******/ ({
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
/***/ 247:
|
2018-12-18 04:14:52 +01:00
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//! moment-timezone.js
|
2020-06-26 15:33:47 +02:00
|
|
|
//! version : 0.5.31
|
2019-09-19 17:19:18 +02:00
|
|
|
//! Copyright (c) JS Foundation and other contributors
|
|
|
|
//! license : MIT
|
|
|
|
//! github.com/moment/moment-timezone
|
|
|
|
|
|
|
|
(function (root, factory) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
/*global define*/
|
|
|
|
if ( true && module.exports) {
|
2020-06-26 15:33:47 +02:00
|
|
|
module.exports = factory(__webpack_require__(43)); // Node
|
2019-09-19 17:19:18 +02:00
|
|
|
} else if (true) {
|
2020-06-26 15:33:47 +02:00
|
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(43)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
2018-12-14 05:41:57 +01:00
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
|
|
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
2019-09-19 17:19:18 +02:00
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // AMD
|
|
|
|
} else {}
|
|
|
|
}(this, function (moment) {
|
|
|
|
"use strict";
|
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
// Resolves es6 module loading issue
|
|
|
|
if (moment.version === undefined && moment.default) {
|
|
|
|
moment = moment.default;
|
|
|
|
}
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
// Do not load moment-timezone a second time.
|
|
|
|
// if (moment.tz !== undefined) {
|
|
|
|
// logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
|
|
|
|
// return moment;
|
|
|
|
// }
|
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
var VERSION = "0.5.31",
|
2019-09-19 17:19:18 +02:00
|
|
|
zones = {},
|
|
|
|
links = {},
|
2020-02-25 01:18:15 +01:00
|
|
|
countries = {},
|
2019-09-19 17:19:18 +02:00
|
|
|
names = {},
|
|
|
|
guesses = {},
|
|
|
|
cachedGuess;
|
|
|
|
|
|
|
|
if (!moment || typeof moment.version !== 'string') {
|
|
|
|
logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');
|
|
|
|
}
|
|
|
|
|
|
|
|
var momentVersion = moment.version.split('.'),
|
|
|
|
major = +momentVersion[0],
|
|
|
|
minor = +momentVersion[1];
|
|
|
|
|
|
|
|
// Moment.js version check
|
|
|
|
if (major < 2 || (major === 2 && minor < 6)) {
|
|
|
|
logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Unpacking
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function charCodeToInt(charCode) {
|
|
|
|
if (charCode > 96) {
|
|
|
|
return charCode - 87;
|
|
|
|
} else if (charCode > 64) {
|
|
|
|
return charCode - 29;
|
|
|
|
}
|
|
|
|
return charCode - 48;
|
|
|
|
}
|
|
|
|
|
|
|
|
function unpackBase60(string) {
|
|
|
|
var i = 0,
|
|
|
|
parts = string.split('.'),
|
|
|
|
whole = parts[0],
|
|
|
|
fractional = parts[1] || '',
|
|
|
|
multiplier = 1,
|
|
|
|
num,
|
|
|
|
out = 0,
|
|
|
|
sign = 1;
|
|
|
|
|
|
|
|
// handle negative numbers
|
|
|
|
if (string.charCodeAt(0) === 45) {
|
|
|
|
i = 1;
|
|
|
|
sign = -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// handle digits before the decimal
|
|
|
|
for (i; i < whole.length; i++) {
|
|
|
|
num = charCodeToInt(whole.charCodeAt(i));
|
|
|
|
out = 60 * out + num;
|
|
|
|
}
|
|
|
|
|
|
|
|
// handle digits after the decimal
|
|
|
|
for (i = 0; i < fractional.length; i++) {
|
|
|
|
multiplier = multiplier / 60;
|
|
|
|
num = charCodeToInt(fractional.charCodeAt(i));
|
|
|
|
out += num * multiplier;
|
|
|
|
}
|
|
|
|
|
|
|
|
return out * sign;
|
|
|
|
}
|
|
|
|
|
|
|
|
function arrayToInt (array) {
|
|
|
|
for (var i = 0; i < array.length; i++) {
|
|
|
|
array[i] = unpackBase60(array[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function intToUntil (array, length) {
|
|
|
|
for (var i = 0; i < length; i++) {
|
|
|
|
array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
|
|
|
|
}
|
|
|
|
|
|
|
|
array[length - 1] = Infinity;
|
|
|
|
}
|
|
|
|
|
|
|
|
function mapIndices (source, indices) {
|
|
|
|
var out = [], i;
|
|
|
|
|
|
|
|
for (i = 0; i < indices.length; i++) {
|
|
|
|
out[i] = source[indices[i]];
|
|
|
|
}
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
function unpack (string) {
|
|
|
|
var data = string.split('|'),
|
|
|
|
offsets = data[2].split(' '),
|
|
|
|
indices = data[3].split(''),
|
|
|
|
untils = data[4].split(' ');
|
|
|
|
|
|
|
|
arrayToInt(offsets);
|
|
|
|
arrayToInt(indices);
|
|
|
|
arrayToInt(untils);
|
|
|
|
|
|
|
|
intToUntil(untils, indices.length);
|
|
|
|
|
|
|
|
return {
|
|
|
|
name : data[0],
|
|
|
|
abbrs : mapIndices(data[1].split(' '), indices),
|
|
|
|
offsets : mapIndices(offsets, indices),
|
|
|
|
untils : untils,
|
|
|
|
population : data[5] | 0
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Zone object
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function Zone (packedString) {
|
|
|
|
if (packedString) {
|
|
|
|
this._set(unpack(packedString));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Zone.prototype = {
|
|
|
|
_set : function (unpacked) {
|
|
|
|
this.name = unpacked.name;
|
|
|
|
this.abbrs = unpacked.abbrs;
|
|
|
|
this.untils = unpacked.untils;
|
|
|
|
this.offsets = unpacked.offsets;
|
|
|
|
this.population = unpacked.population;
|
|
|
|
},
|
|
|
|
|
|
|
|
_index : function (timestamp) {
|
|
|
|
var target = +timestamp,
|
|
|
|
untils = this.untils,
|
|
|
|
i;
|
|
|
|
|
|
|
|
for (i = 0; i < untils.length; i++) {
|
|
|
|
if (target < untils[i]) {
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2020-02-25 01:18:15 +01:00
|
|
|
countries : function () {
|
|
|
|
var zone_name = this.name;
|
|
|
|
return Object.keys(countries).filter(function (country_code) {
|
|
|
|
return countries[country_code].zones.indexOf(zone_name) !== -1;
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
parse : function (timestamp) {
|
|
|
|
var target = +timestamp,
|
|
|
|
offsets = this.offsets,
|
|
|
|
untils = this.untils,
|
|
|
|
max = untils.length - 1,
|
|
|
|
offset, offsetNext, offsetPrev, i;
|
|
|
|
|
|
|
|
for (i = 0; i < max; i++) {
|
|
|
|
offset = offsets[i];
|
|
|
|
offsetNext = offsets[i + 1];
|
|
|
|
offsetPrev = offsets[i ? i - 1 : i];
|
|
|
|
|
|
|
|
if (offset < offsetNext && tz.moveAmbiguousForward) {
|
|
|
|
offset = offsetNext;
|
|
|
|
} else if (offset > offsetPrev && tz.moveInvalidForward) {
|
|
|
|
offset = offsetPrev;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (target < untils[i] - (offset * 60000)) {
|
|
|
|
return offsets[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return offsets[max];
|
|
|
|
},
|
|
|
|
|
|
|
|
abbr : function (mom) {
|
|
|
|
return this.abbrs[this._index(mom)];
|
|
|
|
},
|
|
|
|
|
|
|
|
offset : function (mom) {
|
|
|
|
logError("zone.offset has been deprecated in favor of zone.utcOffset");
|
|
|
|
return this.offsets[this._index(mom)];
|
|
|
|
},
|
|
|
|
|
|
|
|
utcOffset : function (mom) {
|
|
|
|
return this.offsets[this._index(mom)];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2020-02-25 01:18:15 +01:00
|
|
|
/************************************
|
|
|
|
Country object
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function Country (country_name, zone_names) {
|
|
|
|
this.name = country_name;
|
|
|
|
this.zones = zone_names;
|
|
|
|
}
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
/************************************
|
|
|
|
Current Timezone
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function OffsetAt(at) {
|
|
|
|
var timeString = at.toTimeString();
|
|
|
|
var abbr = timeString.match(/\([a-z ]+\)/i);
|
|
|
|
if (abbr && abbr[0]) {
|
|
|
|
// 17:56:31 GMT-0600 (CST)
|
|
|
|
// 17:56:31 GMT-0600 (Central Standard Time)
|
|
|
|
abbr = abbr[0].match(/[A-Z]/g);
|
|
|
|
abbr = abbr ? abbr.join('') : undefined;
|
|
|
|
} else {
|
|
|
|
// 17:56:31 CST
|
|
|
|
// 17:56:31 GMT+0800 (台北標準時間)
|
|
|
|
abbr = timeString.match(/[A-Z]{3,5}/g);
|
|
|
|
abbr = abbr ? abbr[0] : undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (abbr === 'GMT') {
|
|
|
|
abbr = undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.at = +at;
|
|
|
|
this.abbr = abbr;
|
|
|
|
this.offset = at.getTimezoneOffset();
|
|
|
|
}
|
|
|
|
|
|
|
|
function ZoneScore(zone) {
|
|
|
|
this.zone = zone;
|
|
|
|
this.offsetScore = 0;
|
|
|
|
this.abbrScore = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
|
|
|
|
this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
|
|
|
|
if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
|
|
|
|
this.abbrScore++;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function findChange(low, high) {
|
|
|
|
var mid, diff;
|
|
|
|
|
|
|
|
while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
|
|
|
|
mid = new OffsetAt(new Date(low.at + diff));
|
|
|
|
if (mid.offset === low.offset) {
|
|
|
|
low = mid;
|
|
|
|
} else {
|
|
|
|
high = mid;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return low;
|
|
|
|
}
|
|
|
|
|
|
|
|
function userOffsets() {
|
|
|
|
var startYear = new Date().getFullYear() - 2,
|
|
|
|
last = new OffsetAt(new Date(startYear, 0, 1)),
|
|
|
|
offsets = [last],
|
|
|
|
change, next, i;
|
|
|
|
|
|
|
|
for (i = 1; i < 48; i++) {
|
|
|
|
next = new OffsetAt(new Date(startYear, i, 1));
|
|
|
|
if (next.offset !== last.offset) {
|
|
|
|
change = findChange(last, next);
|
|
|
|
offsets.push(change);
|
|
|
|
offsets.push(new OffsetAt(new Date(change.at + 6e4)));
|
|
|
|
}
|
|
|
|
last = next;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++) {
|
|
|
|
offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
|
|
|
|
offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
|
|
|
|
}
|
|
|
|
|
|
|
|
return offsets;
|
|
|
|
}
|
|
|
|
|
|
|
|
function sortZoneScores (a, b) {
|
|
|
|
if (a.offsetScore !== b.offsetScore) {
|
|
|
|
return a.offsetScore - b.offsetScore;
|
|
|
|
}
|
|
|
|
if (a.abbrScore !== b.abbrScore) {
|
|
|
|
return a.abbrScore - b.abbrScore;
|
|
|
|
}
|
|
|
|
if (a.zone.population !== b.zone.population) {
|
|
|
|
return b.zone.population - a.zone.population;
|
|
|
|
}
|
|
|
|
return b.zone.name.localeCompare(a.zone.name);
|
|
|
|
}
|
|
|
|
|
|
|
|
function addToGuesses (name, offsets) {
|
|
|
|
var i, offset;
|
|
|
|
arrayToInt(offsets);
|
|
|
|
for (i = 0; i < offsets.length; i++) {
|
|
|
|
offset = offsets[i];
|
|
|
|
guesses[offset] = guesses[offset] || {};
|
|
|
|
guesses[offset][name] = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function guessesForUserOffsets (offsets) {
|
|
|
|
var offsetsLength = offsets.length,
|
|
|
|
filteredGuesses = {},
|
|
|
|
out = [],
|
|
|
|
i, j, guessesOffset;
|
|
|
|
|
|
|
|
for (i = 0; i < offsetsLength; i++) {
|
|
|
|
guessesOffset = guesses[offsets[i].offset] || {};
|
|
|
|
for (j in guessesOffset) {
|
|
|
|
if (guessesOffset.hasOwnProperty(j)) {
|
|
|
|
filteredGuesses[j] = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i in filteredGuesses) {
|
|
|
|
if (filteredGuesses.hasOwnProperty(i)) {
|
|
|
|
out.push(names[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
function rebuildGuess () {
|
|
|
|
|
|
|
|
// use Intl API when available and returning valid time zone
|
|
|
|
try {
|
|
|
|
var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
|
|
if (intlName && intlName.length > 3) {
|
|
|
|
var name = names[normalizeName(intlName)];
|
|
|
|
if (name) {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
// Intl unavailable, fall back to manual guessing.
|
|
|
|
}
|
|
|
|
|
|
|
|
var offsets = userOffsets(),
|
|
|
|
offsetsLength = offsets.length,
|
|
|
|
guesses = guessesForUserOffsets(offsets),
|
|
|
|
zoneScores = [],
|
|
|
|
zoneScore, i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < guesses.length; i++) {
|
|
|
|
zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
|
|
|
|
for (j = 0; j < offsetsLength; j++) {
|
|
|
|
zoneScore.scoreOffsetAt(offsets[j]);
|
|
|
|
}
|
|
|
|
zoneScores.push(zoneScore);
|
|
|
|
}
|
|
|
|
|
|
|
|
zoneScores.sort(sortZoneScores);
|
|
|
|
|
|
|
|
return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
|
|
|
|
}
|
|
|
|
|
|
|
|
function guess (ignoreCache) {
|
|
|
|
if (!cachedGuess || ignoreCache) {
|
|
|
|
cachedGuess = rebuildGuess();
|
|
|
|
}
|
|
|
|
return cachedGuess;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Global Methods
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function normalizeName (name) {
|
|
|
|
return (name || '').toLowerCase().replace(/\//g, '_');
|
|
|
|
}
|
|
|
|
|
|
|
|
function addZone (packed) {
|
|
|
|
var i, name, split, normalized;
|
|
|
|
|
|
|
|
if (typeof packed === "string") {
|
|
|
|
packed = [packed];
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < packed.length; i++) {
|
|
|
|
split = packed[i].split('|');
|
|
|
|
name = split[0];
|
|
|
|
normalized = normalizeName(name);
|
|
|
|
zones[normalized] = packed[i];
|
|
|
|
names[normalized] = name;
|
|
|
|
addToGuesses(normalized, split[2].split(' '));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getZone (name, caller) {
|
|
|
|
|
|
|
|
name = normalizeName(name);
|
|
|
|
|
|
|
|
var zone = zones[name];
|
|
|
|
var link;
|
|
|
|
|
|
|
|
if (zone instanceof Zone) {
|
|
|
|
return zone;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof zone === 'string') {
|
|
|
|
zone = new Zone(zone);
|
|
|
|
zones[name] = zone;
|
|
|
|
return zone;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Pass getZone to prevent recursion more than 1 level deep
|
|
|
|
if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
|
|
|
|
zone = zones[name] = new Zone();
|
|
|
|
zone._set(link);
|
|
|
|
zone.name = names[name];
|
|
|
|
return zone;
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
function getNames () {
|
|
|
|
var i, out = [];
|
|
|
|
|
|
|
|
for (i in names) {
|
|
|
|
if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
|
|
|
|
out.push(names[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return out.sort();
|
|
|
|
}
|
|
|
|
|
2020-02-25 01:18:15 +01:00
|
|
|
function getCountryNames () {
|
|
|
|
return Object.keys(countries);
|
|
|
|
}
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
function addLink (aliases) {
|
|
|
|
var i, alias, normal0, normal1;
|
|
|
|
|
|
|
|
if (typeof aliases === "string") {
|
|
|
|
aliases = [aliases];
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < aliases.length; i++) {
|
|
|
|
alias = aliases[i].split('|');
|
|
|
|
|
|
|
|
normal0 = normalizeName(alias[0]);
|
|
|
|
normal1 = normalizeName(alias[1]);
|
|
|
|
|
|
|
|
links[normal0] = normal1;
|
|
|
|
names[normal0] = alias[0];
|
|
|
|
|
|
|
|
links[normal1] = normal0;
|
|
|
|
names[normal1] = alias[1];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-02-25 01:18:15 +01:00
|
|
|
function addCountries (data) {
|
|
|
|
var i, country_code, country_zones, split;
|
|
|
|
if (!data || !data.length) return;
|
|
|
|
for (i = 0; i < data.length; i++) {
|
|
|
|
split = data[i].split('|');
|
|
|
|
country_code = split[0].toUpperCase();
|
|
|
|
country_zones = split[1].split(' ');
|
|
|
|
countries[country_code] = new Country(
|
|
|
|
country_code,
|
|
|
|
country_zones
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getCountry (name) {
|
|
|
|
name = name.toUpperCase();
|
|
|
|
return countries[name] || null;
|
|
|
|
}
|
|
|
|
|
|
|
|
function zonesForCountry(country, with_offset) {
|
|
|
|
country = getCountry(country);
|
|
|
|
|
|
|
|
if (!country) return null;
|
|
|
|
|
|
|
|
var zones = country.zones.sort();
|
|
|
|
|
|
|
|
if (with_offset) {
|
|
|
|
return zones.map(function (zone_name) {
|
|
|
|
var zone = getZone(zone_name);
|
|
|
|
return {
|
|
|
|
name: zone_name,
|
|
|
|
offset: zone.utcOffset(new Date())
|
|
|
|
};
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return zones;
|
|
|
|
}
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
function loadData (data) {
|
|
|
|
addZone(data.zones);
|
|
|
|
addLink(data.links);
|
2020-02-25 01:18:15 +01:00
|
|
|
addCountries(data.countries);
|
2019-09-19 17:19:18 +02:00
|
|
|
tz.dataVersion = data.version;
|
|
|
|
}
|
|
|
|
|
|
|
|
function zoneExists (name) {
|
|
|
|
if (!zoneExists.didShowError) {
|
|
|
|
zoneExists.didShowError = true;
|
|
|
|
logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
|
|
|
|
}
|
|
|
|
return !!getZone(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
function needsOffset (m) {
|
|
|
|
var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
|
|
|
|
return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
|
|
|
|
}
|
|
|
|
|
|
|
|
function logError (message) {
|
|
|
|
if (typeof console !== 'undefined' && typeof console.error === 'function') {
|
|
|
|
console.error(message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
moment.tz namespace
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function tz (input) {
|
|
|
|
var args = Array.prototype.slice.call(arguments, 0, -1),
|
|
|
|
name = arguments[arguments.length - 1],
|
|
|
|
zone = getZone(name),
|
|
|
|
out = moment.utc.apply(null, args);
|
|
|
|
|
|
|
|
if (zone && !moment.isMoment(input) && needsOffset(out)) {
|
|
|
|
out.add(zone.parse(out), 'minutes');
|
|
|
|
}
|
|
|
|
|
|
|
|
out.tz(name);
|
|
|
|
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
|
|
|
|
tz.version = VERSION;
|
|
|
|
tz.dataVersion = '';
|
|
|
|
tz._zones = zones;
|
|
|
|
tz._links = links;
|
|
|
|
tz._names = names;
|
2020-02-25 01:18:15 +01:00
|
|
|
tz._countries = countries;
|
2019-09-19 17:19:18 +02:00
|
|
|
tz.add = addZone;
|
|
|
|
tz.link = addLink;
|
|
|
|
tz.load = loadData;
|
|
|
|
tz.zone = getZone;
|
|
|
|
tz.zoneExists = zoneExists; // deprecated in 0.1.0
|
|
|
|
tz.guess = guess;
|
|
|
|
tz.names = getNames;
|
|
|
|
tz.Zone = Zone;
|
|
|
|
tz.unpack = unpack;
|
|
|
|
tz.unpackBase60 = unpackBase60;
|
|
|
|
tz.needsOffset = needsOffset;
|
|
|
|
tz.moveInvalidForward = true;
|
|
|
|
tz.moveAmbiguousForward = false;
|
2020-02-25 01:18:15 +01:00
|
|
|
tz.countries = getCountryNames;
|
|
|
|
tz.zonesForCountry = zonesForCountry;
|
2019-09-19 17:19:18 +02:00
|
|
|
|
|
|
|
/************************************
|
|
|
|
Interface with Moment.js
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
var fn = moment.fn;
|
|
|
|
|
|
|
|
moment.tz = tz;
|
|
|
|
|
|
|
|
moment.defaultZone = null;
|
|
|
|
|
|
|
|
moment.updateOffset = function (mom, keepTime) {
|
|
|
|
var zone = moment.defaultZone,
|
|
|
|
offset;
|
|
|
|
|
|
|
|
if (mom._z === undefined) {
|
|
|
|
if (zone && needsOffset(mom) && !mom._isUTC) {
|
|
|
|
mom._d = moment.utc(mom._a)._d;
|
|
|
|
mom.utc().add(zone.parse(mom), 'minutes');
|
|
|
|
}
|
|
|
|
mom._z = zone;
|
|
|
|
}
|
|
|
|
if (mom._z) {
|
|
|
|
offset = mom._z.utcOffset(mom);
|
|
|
|
if (Math.abs(offset) < 16) {
|
|
|
|
offset = offset / 60;
|
|
|
|
}
|
|
|
|
if (mom.utcOffset !== undefined) {
|
|
|
|
var z = mom._z;
|
|
|
|
mom.utcOffset(-offset, keepTime);
|
|
|
|
mom._z = z;
|
|
|
|
} else {
|
|
|
|
mom.zone(offset, keepTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
fn.tz = function (name, keepTime) {
|
|
|
|
if (name) {
|
|
|
|
if (typeof name !== 'string') {
|
|
|
|
throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');
|
|
|
|
}
|
|
|
|
this._z = getZone(name);
|
|
|
|
if (this._z) {
|
|
|
|
moment.updateOffset(this, keepTime);
|
|
|
|
} else {
|
|
|
|
logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
|
|
|
|
}
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
if (this._z) { return this._z.name; }
|
|
|
|
};
|
|
|
|
|
|
|
|
function abbrWrap (old) {
|
|
|
|
return function () {
|
|
|
|
if (this._z) { return this._z.abbr(this); }
|
|
|
|
return old.call(this);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function resetZoneWrap (old) {
|
|
|
|
return function () {
|
|
|
|
this._z = null;
|
|
|
|
return old.apply(this, arguments);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function resetZoneWrap2 (old) {
|
|
|
|
return function () {
|
|
|
|
if (arguments.length > 0) this._z = null;
|
|
|
|
return old.apply(this, arguments);
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
fn.zoneName = abbrWrap(fn.zoneName);
|
|
|
|
fn.zoneAbbr = abbrWrap(fn.zoneAbbr);
|
|
|
|
fn.utc = resetZoneWrap(fn.utc);
|
|
|
|
fn.local = resetZoneWrap(fn.local);
|
|
|
|
fn.utcOffset = resetZoneWrap2(fn.utcOffset);
|
|
|
|
|
|
|
|
moment.tz.setDefault = function(name) {
|
|
|
|
if (major < 2 || (major === 2 && minor < 9)) {
|
|
|
|
logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
|
|
|
|
}
|
|
|
|
moment.defaultZone = name ? getZone(name) : null;
|
|
|
|
return moment;
|
|
|
|
};
|
|
|
|
|
|
|
|
// Cloning a moment should include the _z property.
|
|
|
|
var momentProperties = moment.momentProperties;
|
|
|
|
if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
|
|
|
|
// moment 2.8.1+
|
|
|
|
momentProperties.push('_z');
|
|
|
|
momentProperties.push('_a');
|
|
|
|
} else if (momentProperties) {
|
|
|
|
// moment 2.7.0
|
|
|
|
momentProperties._z = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// INJECT DATA
|
|
|
|
|
|
|
|
return moment;
|
|
|
|
}));
|
2018-12-18 04:14:52 +01:00
|
|
|
|
|
|
|
|
2018-12-19 04:16:48 +01:00
|
|
|
/***/ }),
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
/***/ 411:
|
2018-12-19 04:16:48 +01:00
|
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
|
|
|
|
"use strict";
|
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSettings", function() { return setSettings; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__experimentalGetSettings", function() { return __experimentalGetSettings; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "date", function() { return date; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gmdate", function() { return gmdate; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateI18n", function() { return dateI18n; });
|
2020-06-26 15:33:47 +02:00
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "gmdateI18n", function() { return gmdateI18n; });
|
2018-12-19 04:16:48 +01:00
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInTheFuture", function() { return isInTheFuture; });
|
|
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDate", function() { return getDate; });
|
2020-06-26 15:33:47 +02:00
|
|
|
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43);
|
2018-12-19 04:16:48 +01:00
|
|
|
/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_0__);
|
2020-06-29 13:50:29 +02:00
|
|
|
/* harmony import */ var moment_timezone_moment_timezone__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(247);
|
2018-12-19 04:16:48 +01:00
|
|
|
/* harmony import */ var moment_timezone_moment_timezone__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment_timezone_moment_timezone__WEBPACK_IMPORTED_MODULE_1__);
|
2020-06-29 13:50:29 +02:00
|
|
|
/* harmony import */ var moment_timezone_moment_timezone_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(412);
|
2018-12-19 04:16:48 +01:00
|
|
|
/* harmony import */ var moment_timezone_moment_timezone_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(moment_timezone_moment_timezone_utils__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
|
/**
|
|
|
|
* External dependencies
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-08 12:57:23 +01:00
|
|
|
/** @typedef {import('moment').Moment} Moment */
|
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
var WP_ZONE = 'WP'; // This regular expression tests positive for UTC offsets as described in ISO 8601.
|
|
|
|
// See: https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
|
|
|
|
|
|
|
|
var VALID_UTC_OFFSET = /^[+-][0-1][0-9](:?[0-9][0-9])?$/; // Changes made here will likely need to be made in `lib/client-assets.php` as
|
2018-12-19 04:16:48 +01:00
|
|
|
// well because it uses the `setSettings()` function to change these settings.
|
|
|
|
|
|
|
|
var settings = {
|
|
|
|
l10n: {
|
2019-09-19 17:19:18 +02:00
|
|
|
locale: 'en',
|
2018-12-19 04:16:48 +01:00
|
|
|
months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
|
|
|
monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
|
|
|
weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
|
|
|
|
weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
|
|
meridiem: {
|
|
|
|
am: 'am',
|
|
|
|
pm: 'pm',
|
|
|
|
AM: 'AM',
|
|
|
|
PM: 'PM'
|
|
|
|
},
|
|
|
|
relative: {
|
2019-09-19 17:19:18 +02:00
|
|
|
future: '%s from now',
|
|
|
|
past: '%s ago',
|
|
|
|
s: 'a few seconds',
|
|
|
|
ss: '%d seconds',
|
|
|
|
m: 'a minute',
|
|
|
|
mm: '%d minutes',
|
|
|
|
h: 'an hour',
|
|
|
|
hh: '%d hours',
|
|
|
|
d: 'a day',
|
|
|
|
dd: '%d days',
|
|
|
|
M: 'a month',
|
|
|
|
MM: '%d months',
|
|
|
|
y: 'a year',
|
|
|
|
yy: '%d years'
|
2018-12-19 04:16:48 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
formats: {
|
|
|
|
time: 'g: i a',
|
|
|
|
date: 'F j, Y',
|
|
|
|
datetime: 'F j, Y g: i a',
|
|
|
|
datetimeAbbreviated: 'M j, Y g: i a'
|
|
|
|
},
|
|
|
|
timezone: {
|
|
|
|
offset: '0',
|
|
|
|
string: ''
|
|
|
|
}
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* Adds a locale to moment, using the format supplied by `wp_localize_script()`.
|
|
|
|
*
|
|
|
|
* @param {Object} dateSettings Settings, including locale data.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function setSettings(dateSettings) {
|
|
|
|
settings = dateSettings; // Backup and restore current locale.
|
|
|
|
|
|
|
|
var currentLocale = moment__WEBPACK_IMPORTED_MODULE_0___default.a.locale();
|
|
|
|
moment__WEBPACK_IMPORTED_MODULE_0___default.a.updateLocale(dateSettings.l10n.locale, {
|
|
|
|
// Inherit anything missing from the default locale.
|
|
|
|
parentLocale: currentLocale,
|
|
|
|
months: dateSettings.l10n.months,
|
|
|
|
monthsShort: dateSettings.l10n.monthsShort,
|
|
|
|
weekdays: dateSettings.l10n.weekdays,
|
|
|
|
weekdaysShort: dateSettings.l10n.weekdaysShort,
|
|
|
|
meridiem: function meridiem(hour, minute, isLowercase) {
|
|
|
|
if (hour < 12) {
|
|
|
|
return isLowercase ? dateSettings.l10n.meridiem.am : dateSettings.l10n.meridiem.AM;
|
|
|
|
}
|
|
|
|
|
|
|
|
return isLowercase ? dateSettings.l10n.meridiem.pm : dateSettings.l10n.meridiem.PM;
|
|
|
|
},
|
|
|
|
longDateFormat: {
|
|
|
|
LT: dateSettings.formats.time,
|
|
|
|
LTS: null,
|
|
|
|
L: null,
|
|
|
|
LL: dateSettings.formats.date,
|
|
|
|
LLL: dateSettings.formats.datetime,
|
|
|
|
LLLL: null
|
|
|
|
},
|
|
|
|
// From human_time_diff?
|
|
|
|
// Set to `(number, withoutSuffix, key, isFuture) => {}` instead.
|
2019-09-19 17:19:18 +02:00
|
|
|
relativeTime: dateSettings.l10n.relative
|
2018-12-19 04:16:48 +01:00
|
|
|
});
|
|
|
|
moment__WEBPACK_IMPORTED_MODULE_0___default.a.locale(currentLocale);
|
|
|
|
setupWPTimezone();
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Returns the currently defined date settings.
|
|
|
|
*
|
|
|
|
* @return {Object} Settings, including locale data.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function __experimentalGetSettings() {
|
|
|
|
return settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
function setupWPTimezone() {
|
|
|
|
// Create WP timezone based off dateSettings.
|
|
|
|
moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz.add(moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz.pack({
|
|
|
|
name: WP_ZONE,
|
|
|
|
abbrs: [WP_ZONE],
|
|
|
|
untils: [null],
|
|
|
|
offsets: [-settings.timezone.offset * 60 || 0]
|
|
|
|
}));
|
|
|
|
} // Date constants.
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Number of seconds in one minute.
|
|
|
|
*
|
2019-09-19 17:19:18 +02:00
|
|
|
* @type {number}
|
2018-12-19 04:16:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
var MINUTE_IN_SECONDS = 60;
|
|
|
|
/**
|
|
|
|
* Number of minutes in one hour.
|
|
|
|
*
|
2019-09-19 17:19:18 +02:00
|
|
|
* @type {number}
|
2018-12-19 04:16:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
var HOUR_IN_MINUTES = 60;
|
|
|
|
/**
|
|
|
|
* Number of seconds in one hour.
|
|
|
|
*
|
2019-09-19 17:19:18 +02:00
|
|
|
* @type {number}
|
2018-12-19 04:16:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
var HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS;
|
|
|
|
/**
|
|
|
|
* Map of PHP formats to Moment.js formats.
|
|
|
|
*
|
|
|
|
* These are used internally by {@link wp.date.format}, and are either
|
|
|
|
* a string representing the corresponding Moment.js format code, or a
|
|
|
|
* function which returns the formatted string.
|
|
|
|
*
|
|
|
|
* This should only be used through {@link wp.date.format}, not
|
|
|
|
* directly.
|
|
|
|
*
|
|
|
|
* @type {Object}
|
|
|
|
*/
|
|
|
|
|
|
|
|
var formatMap = {
|
|
|
|
// Day
|
|
|
|
d: 'DD',
|
|
|
|
D: 'ddd',
|
|
|
|
j: 'D',
|
|
|
|
l: 'dddd',
|
|
|
|
N: 'E',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the ordinal suffix.
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
S: function S(momentDate) {
|
|
|
|
// Do - D
|
|
|
|
var num = momentDate.format('D');
|
|
|
|
var withOrdinal = momentDate.format('Do');
|
|
|
|
return withOrdinal.replace(num, '');
|
|
|
|
},
|
|
|
|
w: 'd',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the day of the year (zero-indexed).
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
z: function z(momentDate) {
|
|
|
|
// DDD - 1
|
|
|
|
return '' + parseInt(momentDate.format('DDD'), 10) - 1;
|
|
|
|
},
|
|
|
|
// Week
|
|
|
|
W: 'W',
|
|
|
|
// Month
|
|
|
|
F: 'MMMM',
|
|
|
|
m: 'MM',
|
|
|
|
M: 'MMM',
|
|
|
|
n: 'M',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the days in the month.
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
t: function t(momentDate) {
|
|
|
|
return momentDate.daysInMonth();
|
|
|
|
},
|
|
|
|
// Year
|
2018-12-18 04:14:52 +01:00
|
|
|
|
2018-12-19 04:16:48 +01:00
|
|
|
/**
|
|
|
|
* Gets whether the current year is a leap year.
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
L: function L(momentDate) {
|
|
|
|
return momentDate.isLeapYear() ? '1' : '0';
|
|
|
|
},
|
|
|
|
o: 'GGGG',
|
|
|
|
Y: 'YYYY',
|
|
|
|
y: 'YY',
|
|
|
|
// Time
|
|
|
|
a: 'a',
|
|
|
|
A: 'A',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the current time in Swatch Internet Time (.beats).
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
B: function B(momentDate) {
|
|
|
|
var timezoned = moment__WEBPACK_IMPORTED_MODULE_0___default()(momentDate).utcOffset(60);
|
|
|
|
var seconds = parseInt(timezoned.format('s'), 10),
|
|
|
|
minutes = parseInt(timezoned.format('m'), 10),
|
|
|
|
hours = parseInt(timezoned.format('H'), 10);
|
|
|
|
return parseInt((seconds + minutes * MINUTE_IN_SECONDS + hours * HOUR_IN_SECONDS) / 86.4, 10);
|
|
|
|
},
|
|
|
|
g: 'h',
|
|
|
|
G: 'H',
|
|
|
|
h: 'hh',
|
|
|
|
H: 'HH',
|
|
|
|
i: 'mm',
|
|
|
|
s: 'ss',
|
|
|
|
u: 'SSSSSS',
|
|
|
|
v: 'SSS',
|
|
|
|
// Timezone
|
|
|
|
e: 'zz',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets whether the timezone is in DST currently.
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
I: function I(momentDate) {
|
|
|
|
return momentDate.isDST() ? '1' : '0';
|
|
|
|
},
|
|
|
|
O: 'ZZ',
|
|
|
|
P: 'Z',
|
|
|
|
T: 'z',
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the timezone offset in seconds.
|
|
|
|
*
|
2020-01-08 12:57:23 +01:00
|
|
|
* @param {Moment} momentDate Moment instance.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
Z: function Z(momentDate) {
|
|
|
|
// Timezone offset in seconds.
|
|
|
|
var offset = momentDate.format('Z');
|
|
|
|
var sign = offset[0] === '-' ? -1 : 1;
|
|
|
|
var parts = offset.substring(1).split(':');
|
|
|
|
return sign * (parts[0] * HOUR_IN_MINUTES + parts[1]) * MINUTE_IN_SECONDS;
|
|
|
|
},
|
|
|
|
// Full date/time
|
|
|
|
c: 'YYYY-MM-DDTHH:mm:ssZ',
|
|
|
|
// .toISOString
|
|
|
|
r: 'ddd, D MMM YYYY HH:mm:ss ZZ',
|
|
|
|
U: 'X'
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* Formats a date. Does not alter the date's timezone.
|
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @param {string} dateFormat PHP-style formatting string.
|
|
|
|
* See php.net/date.
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string,
|
|
|
|
* parsable by moment.js.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function format(dateFormat) {
|
|
|
|
var dateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
|
|
|
var i, char;
|
|
|
|
var newFormat = [];
|
|
|
|
var momentDate = moment__WEBPACK_IMPORTED_MODULE_0___default()(dateValue);
|
|
|
|
|
|
|
|
for (i = 0; i < dateFormat.length; i++) {
|
|
|
|
char = dateFormat[i]; // Is this an escape?
|
|
|
|
|
|
|
|
if ('\\' === char) {
|
|
|
|
// Add next character, then move on.
|
|
|
|
i++;
|
|
|
|
newFormat.push('[' + dateFormat[i] + ']');
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (char in formatMap) {
|
|
|
|
if (typeof formatMap[char] !== 'string') {
|
|
|
|
// If the format is a function, call it.
|
|
|
|
newFormat.push('[' + formatMap[char](momentDate) + ']');
|
|
|
|
} else {
|
|
|
|
// Otherwise, add as a formatting string.
|
|
|
|
newFormat.push(formatMap[char]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
newFormat.push('[' + char + ']');
|
|
|
|
}
|
|
|
|
} // Join with [] between to separate characters, and replace
|
|
|
|
// unneeded separators with static text.
|
|
|
|
|
|
|
|
|
|
|
|
newFormat = newFormat.join('[]');
|
|
|
|
return momentDate.format(newFormat);
|
|
|
|
}
|
|
|
|
/**
|
2020-06-26 15:33:47 +02:00
|
|
|
* Formats a date (like `date()` in PHP).
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @param {string} dateFormat PHP-style formatting string.
|
|
|
|
* See php.net/date.
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string, parsable
|
|
|
|
* by moment.js.
|
|
|
|
* @param {string|number|null} timezone Timezone to output result in or a
|
|
|
|
* UTC offset. Defaults to timezone from
|
|
|
|
* site.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
|
|
|
|
*
|
|
|
|
* @return {string} Formatted date in English.
|
2018-12-19 04:16:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
function date(dateFormat) {
|
|
|
|
var dateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
2020-06-26 15:33:47 +02:00
|
|
|
var timezone = arguments.length > 2 ? arguments[2] : undefined;
|
|
|
|
var dateMoment = buildMoment(dateValue, timezone);
|
2018-12-19 04:16:48 +01:00
|
|
|
return format(dateFormat, dateMoment);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Formats a date (like `date()` in PHP), in the UTC timezone.
|
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @param {string} dateFormat PHP-style formatting string.
|
|
|
|
* See php.net/date.
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string,
|
|
|
|
* parsable by moment.js.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @return {string} Formatted date in English.
|
2018-12-19 04:16:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
function gmdate(dateFormat) {
|
|
|
|
var dateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
|
|
|
var dateMoment = moment__WEBPACK_IMPORTED_MODULE_0___default()(dateValue).utc();
|
|
|
|
return format(dateFormat, dateMoment);
|
|
|
|
}
|
|
|
|
/**
|
2020-06-26 15:33:47 +02:00
|
|
|
* Formats a date (like `wp_date()` in PHP), translating it into site's locale.
|
|
|
|
*
|
|
|
|
* Backward Compatibility Notice: if `timezone` is set to `true`, the function
|
|
|
|
* behaves like `gmdateI18n`.
|
|
|
|
*
|
|
|
|
* @param {string} dateFormat PHP-style formatting string.
|
|
|
|
* See php.net/date.
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string, parsable by
|
|
|
|
* moment.js.
|
|
|
|
* @param {string|number|boolean|null} timezone Timezone to output result in or a
|
|
|
|
* UTC offset. Defaults to timezone from
|
|
|
|
* site. Notice: `boolean` is effectively
|
|
|
|
* deprecated, but still supported for
|
|
|
|
* backward compatibility reasons.
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
2020-06-26 15:33:47 +02:00
|
|
|
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
|
2018-12-19 04:16:48 +01:00
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function dateI18n(dateFormat) {
|
|
|
|
var dateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
2020-06-26 15:33:47 +02:00
|
|
|
var timezone = arguments.length > 2 ? arguments[2] : undefined;
|
2018-12-19 04:16:48 +01:00
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
if (true === timezone) {
|
|
|
|
return gmdateI18n(dateFormat, dateValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (false === timezone) {
|
|
|
|
timezone = undefined;
|
|
|
|
}
|
2018-12-19 04:16:48 +01:00
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
var dateMoment = buildMoment(dateValue, timezone);
|
|
|
|
dateMoment.locale(settings.l10n.locale);
|
|
|
|
return format(dateFormat, dateMoment);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Formats a date (like `wp_date()` in PHP), translating it into site's locale
|
|
|
|
* and using the UTC timezone.
|
|
|
|
*
|
|
|
|
* @param {string} dateFormat PHP-style formatting string.
|
|
|
|
* See php.net/date.
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string,
|
|
|
|
* parsable by moment.js.
|
|
|
|
*
|
|
|
|
* @return {string} Formatted date.
|
|
|
|
*/
|
2018-12-19 04:16:48 +01:00
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
function gmdateI18n(dateFormat) {
|
|
|
|
var dateValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();
|
|
|
|
var dateMoment = moment__WEBPACK_IMPORTED_MODULE_0___default()(dateValue).utc();
|
|
|
|
dateMoment.locale(settings.l10n.locale);
|
2018-12-19 04:16:48 +01:00
|
|
|
return format(dateFormat, dateMoment);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Check whether a date is considered in the future according to the WordPress settings.
|
|
|
|
*
|
|
|
|
* @param {string} dateValue Date String or Date object in the Defined WP Timezone.
|
|
|
|
*
|
|
|
|
* @return {boolean} Is in the future.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function isInTheFuture(dateValue) {
|
|
|
|
var now = moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz(WP_ZONE);
|
|
|
|
var momentObject = moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz(dateValue, WP_ZONE);
|
|
|
|
return momentObject.isAfter(now);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Create and return a JavaScript Date Object from a date string in the WP timezone.
|
|
|
|
*
|
|
|
|
* @param {string?} dateString Date formatted in the WP timezone.
|
|
|
|
*
|
|
|
|
* @return {Date} Date
|
|
|
|
*/
|
|
|
|
|
|
|
|
function getDate(dateString) {
|
|
|
|
if (!dateString) {
|
|
|
|
return moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz(WP_ZONE).toDate();
|
|
|
|
}
|
|
|
|
|
|
|
|
return moment__WEBPACK_IMPORTED_MODULE_0___default.a.tz(dateString, WP_ZONE).toDate();
|
|
|
|
}
|
2020-06-26 15:33:47 +02:00
|
|
|
/**
|
|
|
|
* Creates a moment instance using the given timezone or, if none is provided, using global settings.
|
|
|
|
*
|
|
|
|
* @param {Date|string|Moment|null} dateValue Date object or string, parsable
|
|
|
|
* by moment.js.
|
|
|
|
* @param {string|number|null} timezone Timezone to output result in or a
|
|
|
|
* UTC offset. Defaults to timezone from
|
|
|
|
* site.
|
|
|
|
*
|
|
|
|
* @see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
|
|
* @see https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
|
|
|
|
*
|
|
|
|
* @return {Moment} a moment instance.
|
|
|
|
*/
|
|
|
|
|
|
|
|
function buildMoment(dateValue) {
|
|
|
|
var timezone = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
|
|
var dateMoment = moment__WEBPACK_IMPORTED_MODULE_0___default()(dateValue);
|
|
|
|
|
|
|
|
if (timezone && !isUTCOffset(timezone)) {
|
|
|
|
return dateMoment.tz(timezone);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (timezone && isUTCOffset(timezone)) {
|
|
|
|
return dateMoment.utcOffset(timezone);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (settings.timezone.string) {
|
|
|
|
return dateMoment.tz(settings.timezone.string);
|
|
|
|
}
|
|
|
|
|
|
|
|
return dateMoment.utcOffset(settings.timezone.offset);
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* Returns whether a certain UTC offset is valid or not.
|
|
|
|
*
|
|
|
|
* @param {number|string} offset a UTC offset.
|
|
|
|
*
|
|
|
|
* @return {boolean} whether a certain UTC offset is valid or not.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
function isUTCOffset(offset) {
|
|
|
|
if ('number' === typeof offset) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return VALID_UTC_OFFSET.test(offset);
|
|
|
|
}
|
|
|
|
|
2018-12-19 04:16:48 +01:00
|
|
|
setupWPTimezone();
|
2018-12-18 04:14:52 +01:00
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
/***/ 412:
|
2018-12-18 04:14:52 +01:00
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//! moment-timezone-utils.js
|
2020-06-26 15:33:47 +02:00
|
|
|
//! version : 0.5.31
|
2019-09-19 17:19:18 +02:00
|
|
|
//! Copyright (c) JS Foundation and other contributors
|
|
|
|
//! license : MIT
|
|
|
|
//! github.com/moment/moment-timezone
|
|
|
|
|
|
|
|
(function (root, factory) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
/*global define*/
|
|
|
|
if ( true && module.exports) {
|
2020-06-29 13:50:29 +02:00
|
|
|
module.exports = factory(__webpack_require__(413)); // Node
|
2019-09-19 17:19:18 +02:00
|
|
|
} else if (true) {
|
2020-06-26 15:33:47 +02:00
|
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(43)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
2018-12-18 04:14:52 +01:00
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
|
|
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
2019-09-19 17:19:18 +02:00
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // AMD
|
|
|
|
} else {}
|
|
|
|
}(this, function (moment) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
if (!moment.tz) {
|
|
|
|
throw new Error("moment-timezone-utils.js must be loaded after moment-timezone.js");
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Pack Base 60
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
var BASE60 = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX',
|
|
|
|
EPSILON = 0.000001; // Used to fix floating point rounding errors
|
|
|
|
|
|
|
|
function packBase60Fraction(fraction, precision) {
|
|
|
|
var buffer = '.',
|
|
|
|
output = '',
|
|
|
|
current;
|
|
|
|
|
|
|
|
while (precision > 0) {
|
|
|
|
precision -= 1;
|
|
|
|
fraction *= 60;
|
|
|
|
current = Math.floor(fraction + EPSILON);
|
|
|
|
buffer += BASE60[current];
|
|
|
|
fraction -= current;
|
|
|
|
|
|
|
|
// Only add buffer to output once we have a non-zero value.
|
|
|
|
// This makes '.000' output '', and '.100' output '.1'
|
|
|
|
if (current) {
|
|
|
|
output += buffer;
|
|
|
|
buffer = '';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return output;
|
|
|
|
}
|
|
|
|
|
|
|
|
function packBase60(number, precision) {
|
|
|
|
var output = '',
|
|
|
|
absolute = Math.abs(number),
|
|
|
|
whole = Math.floor(absolute),
|
|
|
|
fraction = packBase60Fraction(absolute - whole, Math.min(~~precision, 10));
|
|
|
|
|
|
|
|
while (whole > 0) {
|
|
|
|
output = BASE60[whole % 60] + output;
|
|
|
|
whole = Math.floor(whole / 60);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (number < 0) {
|
|
|
|
output = '-' + output;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (output && fraction) {
|
|
|
|
return output + fraction;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!fraction && output === '-') {
|
|
|
|
return '0';
|
|
|
|
}
|
|
|
|
|
|
|
|
return output || fraction || '0';
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Pack
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function packUntils(untils) {
|
|
|
|
var out = [],
|
|
|
|
last = 0,
|
|
|
|
i;
|
|
|
|
|
|
|
|
for (i = 0; i < untils.length - 1; i++) {
|
|
|
|
out[i] = packBase60(Math.round((untils[i] - last) / 1000) / 60, 1);
|
|
|
|
last = untils[i];
|
|
|
|
}
|
|
|
|
|
|
|
|
return out.join(' ');
|
|
|
|
}
|
|
|
|
|
|
|
|
function packAbbrsAndOffsets(source) {
|
|
|
|
var index = 0,
|
|
|
|
abbrs = [],
|
|
|
|
offsets = [],
|
|
|
|
indices = [],
|
|
|
|
map = {},
|
|
|
|
i, key;
|
|
|
|
|
|
|
|
for (i = 0; i < source.abbrs.length; i++) {
|
|
|
|
key = source.abbrs[i] + '|' + source.offsets[i];
|
|
|
|
if (map[key] === undefined) {
|
|
|
|
map[key] = index;
|
|
|
|
abbrs[index] = source.abbrs[i];
|
|
|
|
offsets[index] = packBase60(Math.round(source.offsets[i] * 60) / 60, 1);
|
|
|
|
index++;
|
|
|
|
}
|
|
|
|
indices[i] = packBase60(map[key], 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return abbrs.join(' ') + '|' + offsets.join(' ') + '|' + indices.join('');
|
|
|
|
}
|
|
|
|
|
|
|
|
function packPopulation (number) {
|
|
|
|
if (!number) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
if (number < 1000) {
|
2020-02-25 01:18:15 +01:00
|
|
|
return number;
|
2019-09-19 17:19:18 +02:00
|
|
|
}
|
|
|
|
var exponent = String(number | 0).length - 2;
|
|
|
|
var precision = Math.round(number / Math.pow(10, exponent));
|
2020-02-25 01:18:15 +01:00
|
|
|
return precision + 'e' + exponent;
|
|
|
|
}
|
|
|
|
|
|
|
|
function packCountries (countries) {
|
|
|
|
if (!countries) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
return countries.join(' ');
|
2019-09-19 17:19:18 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function validatePackData (source) {
|
|
|
|
if (!source.name) { throw new Error("Missing name"); }
|
|
|
|
if (!source.abbrs) { throw new Error("Missing abbrs"); }
|
|
|
|
if (!source.untils) { throw new Error("Missing untils"); }
|
|
|
|
if (!source.offsets) { throw new Error("Missing offsets"); }
|
|
|
|
if (
|
|
|
|
source.offsets.length !== source.untils.length ||
|
|
|
|
source.offsets.length !== source.abbrs.length
|
|
|
|
) {
|
|
|
|
throw new Error("Mismatched array lengths");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function pack (source) {
|
|
|
|
validatePackData(source);
|
2020-02-25 01:18:15 +01:00
|
|
|
return [
|
|
|
|
source.name, // 0 - timezone name
|
|
|
|
packAbbrsAndOffsets(source), // 1 - abbrs, 2 - offsets, 3 - indices
|
|
|
|
packUntils(source.untils), // 4 - untils
|
|
|
|
packPopulation(source.population) // 5 - population
|
|
|
|
].join('|');
|
|
|
|
}
|
|
|
|
|
|
|
|
function packCountry (source) {
|
2019-09-19 17:19:18 +02:00
|
|
|
return [
|
|
|
|
source.name,
|
2020-02-25 01:18:15 +01:00
|
|
|
source.zones.join(' '),
|
2019-09-19 17:19:18 +02:00
|
|
|
].join('|');
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Create Links
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function arraysAreEqual(a, b) {
|
|
|
|
var i;
|
|
|
|
|
|
|
|
if (a.length !== b.length) { return false; }
|
|
|
|
|
|
|
|
for (i = 0; i < a.length; i++) {
|
|
|
|
if (a[i] !== b[i]) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
function zonesAreEqual(a, b) {
|
|
|
|
return arraysAreEqual(a.offsets, b.offsets) && arraysAreEqual(a.abbrs, b.abbrs) && arraysAreEqual(a.untils, b.untils);
|
|
|
|
}
|
|
|
|
|
|
|
|
function findAndCreateLinks (input, output, links, groupLeaders) {
|
|
|
|
var i, j, a, b, group, foundGroup, groups = [];
|
|
|
|
|
|
|
|
for (i = 0; i < input.length; i++) {
|
|
|
|
foundGroup = false;
|
|
|
|
a = input[i];
|
|
|
|
|
|
|
|
for (j = 0; j < groups.length; j++) {
|
|
|
|
group = groups[j];
|
|
|
|
b = group[0];
|
|
|
|
if (zonesAreEqual(a, b)) {
|
|
|
|
if (a.population > b.population) {
|
|
|
|
group.unshift(a);
|
|
|
|
} else if (a.population === b.population && groupLeaders && groupLeaders[a.name]) {
|
|
|
|
group.unshift(a);
|
|
|
|
} else {
|
|
|
|
group.push(a);
|
|
|
|
}
|
|
|
|
foundGroup = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!foundGroup) {
|
|
|
|
groups.push([a]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < groups.length; i++) {
|
|
|
|
group = groups[i];
|
|
|
|
output.push(group[0]);
|
|
|
|
for (j = 1; j < group.length; j++) {
|
|
|
|
links.push(group[0].name + '|' + group[j].name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function createLinks (source, groupLeaders) {
|
|
|
|
var zones = [],
|
|
|
|
links = [];
|
|
|
|
|
|
|
|
if (source.links) {
|
|
|
|
links = source.links.slice();
|
|
|
|
}
|
|
|
|
|
|
|
|
findAndCreateLinks(source.zones, zones, links, groupLeaders);
|
|
|
|
|
|
|
|
return {
|
2020-02-25 01:18:15 +01:00
|
|
|
version : source.version,
|
|
|
|
zones : zones,
|
|
|
|
links : links.sort()
|
2019-09-19 17:19:18 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Filter Years
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function findStartAndEndIndex (untils, start, end) {
|
|
|
|
var startI = 0,
|
|
|
|
endI = untils.length + 1,
|
|
|
|
untilYear,
|
|
|
|
i;
|
|
|
|
|
|
|
|
if (!end) {
|
|
|
|
end = start;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (start > end) {
|
|
|
|
i = start;
|
|
|
|
start = end;
|
|
|
|
end = i;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < untils.length; i++) {
|
|
|
|
if (untils[i] == null) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
untilYear = new Date(untils[i]).getUTCFullYear();
|
|
|
|
if (untilYear < start) {
|
|
|
|
startI = i + 1;
|
|
|
|
}
|
|
|
|
if (untilYear > end) {
|
|
|
|
endI = Math.min(endI, i + 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return [startI, endI];
|
|
|
|
}
|
|
|
|
|
|
|
|
function filterYears (source, start, end) {
|
|
|
|
var slice = Array.prototype.slice,
|
|
|
|
indices = findStartAndEndIndex(source.untils, start, end),
|
|
|
|
untils = slice.apply(source.untils, indices);
|
|
|
|
|
|
|
|
untils[untils.length - 1] = null;
|
|
|
|
|
|
|
|
return {
|
|
|
|
name : source.name,
|
|
|
|
abbrs : slice.apply(source.abbrs, indices),
|
|
|
|
untils : untils,
|
|
|
|
offsets : slice.apply(source.offsets, indices),
|
2020-02-25 01:18:15 +01:00
|
|
|
population : source.population,
|
|
|
|
countries : source.countries
|
2019-09-19 17:19:18 +02:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Filter, Link, and Pack
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
function filterLinkPack (input, start, end, groupLeaders) {
|
|
|
|
var i,
|
|
|
|
inputZones = input.zones,
|
|
|
|
outputZones = [],
|
|
|
|
output;
|
|
|
|
|
|
|
|
for (i = 0; i < inputZones.length; i++) {
|
|
|
|
outputZones[i] = filterYears(inputZones[i], start, end);
|
|
|
|
}
|
|
|
|
|
|
|
|
output = createLinks({
|
|
|
|
zones : outputZones,
|
|
|
|
links : input.links.slice(),
|
|
|
|
version : input.version
|
|
|
|
}, groupLeaders);
|
|
|
|
|
|
|
|
for (i = 0; i < output.zones.length; i++) {
|
|
|
|
output.zones[i] = pack(output.zones[i]);
|
|
|
|
}
|
|
|
|
|
2020-02-25 01:18:15 +01:00
|
|
|
output.countries = input.countries ? input.countries.map(function (unpacked) {
|
|
|
|
return packCountry(unpacked);
|
|
|
|
}) : [];
|
|
|
|
|
2019-09-19 17:19:18 +02:00
|
|
|
return output;
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
Exports
|
|
|
|
************************************/
|
|
|
|
|
|
|
|
moment.tz.pack = pack;
|
|
|
|
moment.tz.packBase60 = packBase60;
|
|
|
|
moment.tz.createLinks = createLinks;
|
|
|
|
moment.tz.filterYears = filterYears;
|
|
|
|
moment.tz.filterLinkPack = filterLinkPack;
|
2020-02-25 01:18:15 +01:00
|
|
|
moment.tz.packCountry = packCountry;
|
2019-09-19 17:19:18 +02:00
|
|
|
|
|
|
|
return moment;
|
|
|
|
}));
|
2018-12-14 05:41:57 +01:00
|
|
|
|
|
|
|
|
2018-12-19 04:16:48 +01:00
|
|
|
/***/ }),
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
/***/ 413:
|
2018-12-19 04:16:48 +01:00
|
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
var moment = module.exports = __webpack_require__(247);
|
|
|
|
moment.tz.load(__webpack_require__(414));
|
2018-12-19 04:16:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
2020-06-29 13:50:29 +02:00
|
|
|
/***/ 414:
|
2018-12-19 04:16:48 +01:00
|
|
|
/***/ (function(module) {
|
|
|
|
|
2020-06-26 15:33:47 +02:00
|
|
|
module.exports = JSON.parse("{\"version\":\"2020a\",\"zones\":[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5\",\"Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5\",\"Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6\",\"Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4\",\"Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5\",\"Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|32e5\",\"Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|20e4\",\"Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
|
|
/***/ 43:
|
|
|
|
/***/ (function(module, exports) {
|
|
|
|
|
|
|
|
(function() { module.exports = this["moment"]; }());
|
2018-12-19 04:16:48 +01:00
|
|
|
|
2018-12-14 05:41:57 +01:00
|
|
|
/***/ })
|
|
|
|
|
2018-12-18 04:14:52 +01:00
|
|
|
/******/ });
|