| 1 | require = function e(t, n, r) {
|
|---|
| 2 | function s(o, u) {
|
|---|
| 3 | if (!n[o]) {
|
|---|
| 4 | if (!t[o]) {
|
|---|
| 5 | var a = typeof require == "function" && require;
|
|---|
| 6 | if (!u && a)
|
|---|
| 7 | return a(o, !0);
|
|---|
| 8 | if (i)
|
|---|
| 9 | return i(o, !0);
|
|---|
| 10 | var f = new Error("Cannot find module '" + o + "'");
|
|---|
| 11 | throw f.code = "MODULE_NOT_FOUND", f
|
|---|
| 12 | }
|
|---|
| 13 | var l = n[o] = {
|
|---|
| 14 | exports: {}
|
|---|
| 15 | };
|
|---|
| 16 | t[o][0].call(l.exports, function (e) {
|
|---|
| 17 | var n = t[o][1][e];
|
|---|
| 18 | return s(n ? n : e)
|
|---|
| 19 | }, l, l.exports, e, t, n, r)
|
|---|
| 20 | }
|
|---|
| 21 | return n[o].exports
|
|---|
| 22 | }
|
|---|
| 23 | var i = typeof require == "function" && require;
|
|---|
| 24 | for (var o = 0; o < r.length; o++)
|
|---|
| 25 | s(r[o]);
|
|---|
| 26 | return s
|
|---|
| 27 | }({
|
|---|
| 28 | 1: [function (require, module, exports) {
|
|---|
| 29 | (function (root, factory) {
|
|---|
| 30 | "use strict";
|
|---|
| 31 | var opening_hours_resources = {
|
|---|
| 32 | en: {
|
|---|
| 33 | opening_hours: {
|
|---|
| 34 | pretty: {
|
|---|
| 35 | off: "closed",
|
|---|
| 36 | SH: "school holidays",
|
|---|
| 37 | PH: "public holidays"
|
|---|
| 38 | }
|
|---|
| 39 | }
|
|---|
| 40 | },
|
|---|
| 41 | de: {
|
|---|
| 42 | opening_hours: {
|
|---|
| 43 | texts: {
|
|---|
| 44 | "unexpected token": 'Unerwartetes Zeichen: "__token__" Das bedeutet, dass die Syntax an dieser Stelle nicht erkannt werden konnte.',
|
|---|
| 45 | "no string": "Der Wert (erster Parameter) ist kein String",
|
|---|
| 46 | nothing: "Der Wert enthält nichts, was ausgewertet werden könnte.",
|
|---|
| 47 | "nothing useful": "Diese Regel enthält nichts nützliches. Bitte entferne diese leere Regel.",
|
|---|
| 48 | "programmers joke": "Kann es sein, dass du ein Programmierer bist und das Hinzufügen eines Semikolons nach jedem Statement ist zwanghaft ;) ?" + " Es ist so, dass das Semikolon in der opening_hours-Syntax als Trenner für Regeln definiert ist." + " Bitte verzichte an dieser Stelle auf ein Semikolon.",
|
|---|
| 49 | "interpreted as year": "Die Zahl __number__ wird als Jahr interpretiert." + ' Vermutlich ist das nicht beabsichtigt. Uhrzeiten werden als "12:00" angegeben.',
|
|---|
| 50 | "rule before fallback empty": "Die Regel vor der Fallback-Regel enthält nichts nützliches",
|
|---|
| 51 | "hour min separator": 'Bitte benutze ":" als Stunden/Minuten-Trenner',
|
|---|
| 52 | "warnings severity": 'Der Parameter optional_conf_parm["warnings_severity"] muss eine ganze Zahl zwischen (einschließlich) 0 und (einschließlich) 7 sein.' + " Gegeben: __severity__ " + ", erwartet: Eine der Zahlen: __allowed__.",
|
|---|
| 53 | "optional conf parm type": "Der optional_conf_parm Parameter hat einen unbekannten Typ." + " Gegeben: __given__",
|
|---|
| 54 | "conf param tag key missing": 'Der optional_conf_parm["tag_key"] fehlt, ist aber notwendig wegen optional_conf_parm["map_value"].',
|
|---|
| 55 | "conf param mode invalid": 'Der optional_conf_parm["mode"]-Parameter ist eine ungültige Zahl.' + " Gegeben: __given__" + ", erwartet: Eine der Zahlen: __allowed__.",
|
|---|
| 56 | "conf param unkown type": 'Der optional_conf_parm["__key__"] Parameter hat einen unbekannten Typ.' + " Gegeben: __given__, erwartet: __expected__.",
|
|---|
| 57 | "library bug": 'Bei der Auswertung des Wertes "__value__" ist ein Fehler aufgetreten.' + " Bitte melde diesen Fehler oder korrigiere diesen mittels eines Pull Requests oder Patches: __url__.__message__",
|
|---|
| 58 | "library bug PR only": 'Bei der Auswertung des Wertes "__value__" ist ein Fehler aufgetreten.' + " Du kannst dies korrigieren, indem du das Problem löst und in Form eines Pull Requests oder Patches zum Projekt beiträgst: __url__.__message__",
|
|---|
| 59 | "use multi": 'Du hast __count__ __part2__ Einzelne Regeln können mit ";" getrennt werden.',
|
|---|
| 60 | "selector multi 2a": "__what__ in einer Regel benutzt. Du kannst nur einen davon je Regel verwenden",
|
|---|
| 61 | "selector multi 2b": "nicht verbundene __what__ in einer Regel benutzt. Das ist vermutlich ein Fehler." + " Gleiche Selektoren können (und sollten) immer zusammen und durch Kommas getrennt geschrieben werden." + ' Beispiel für Zeitspannen "12:00-13:00,15:00-18:00".' + ' Beispiel für Wochentage "Mo-We,Fr".',
|
|---|
| 62 | "selector state": "Status-Schlüsselwörter (offen, geschlossen)",
|
|---|
| 63 | comments: "Kommentare",
|
|---|
| 64 | months: "Monate",
|
|---|
| 65 | weekdays: "Wochentage",
|
|---|
| 66 | ranges: "Zeitspannen",
|
|---|
| 67 | "default state": "Diese Regel, welche den Standard-Status (d.h. geschlossen) für alle folgenden Regeln ändert, ist nicht die erste Regel." + " Diese Regel überschreibt alle vorherigen Regeln." + " Es kann legitim sein, den Standard-Status z.B. auf geöffnet festzulegen" + " und dann nur die Zeiten, zu denen geschlossen ist, anzugeben.",
|
|---|
| 68 | vague: "Diese Regel ist nicht sehr aussagekräftig, da keine Zeit angegeben wurde." + " Bitte füge eine Zeitangabe oder einen Kommentar hinzu, um dies zu verbessern.",
|
|---|
| 69 | "empty comment": "Du hast einen leeren Kommentar verwendet." + '" Bitte schreibe entweder einen Kommentar-Text oder benutze stattdessen das Schlüsselwort "unknown".',
|
|---|
| 70 | separator_for_readability: "Du hast das optionale Symbol <separator_for_readability> an der falschen Stelle benutzt." + " Bitte lies die Syntax-Spezifikation um zu sehen, wo es verwendet werden kann, oder entferne es.",
|
|---|
| 71 | "strange 24/7": 'Du hast 24/7 in einer Art verwendet, welche wahrscheinlich nicht als "24 Stunden, 7 Tage die Woche" interpretiert wird.' + ' Der Richtigkeit halber solltest du "open" oder "closed"' + " für diese Regel verwenden und dann die Ausnahmen angeben um das selbe Ziel zu erreichen. So ist es klarer –" + ' zum Beispiel "open; Mo 12:00-14:00 off".',
|
|---|
| 72 | "public holiday": 'Es wurde keine Regel für "PH" (feiertags) angegeben. Dies ist nicht sehr aussagekräftig.__part2__' + ' Bitte füge die Regel "PH off" an, wenn die Einrichtung an allen Feiertagen geschlossen ist' + ' oder schreibe "Sa,Su,PH 12:00-16:00" um auszudrücken, dass Samstags, Sonntags und feiertags von 12:00-16:00 geöffnet ist.' + ' Falls die Einrichtung täglich und an Feiertagen geöffnet ist, kann dies explizit mittels "Mo-Su,PH" ausgedrückt werden.' + " Wenn du dir im Unklaren bist, versuche die Öffnungszeit zu klären. Falls das nicht möglich ist, lass die Angabe weg und ignoriere diese Warnung.",
|
|---|
| 73 | "public holiday part2": ' Leider ist der "tag key" (beispielsweise "opening_hours", oder "lit") in opening_hours.js nicht bekannt.' + " Diese Warnung betrifft nur die Keys: __keys__. Falls deine Angabe nicht für einen dieser ist, ignoriere bitte folgenden Hinweis:",
|
|---|
| 74 | switched: 'Der Selektor "__first__" wurde für eine bessere Lesbarkeit und der Vollständigkeit halber mit' + ' "__second__" getauscht.',
|
|---|
| 75 | "no colon after": 'Bitte Benutze kein ":" nach dem Token __token__.',
|
|---|
| 76 | "number -5 to 5": "Zahl zwischen -5 und 5 (außer 0) erwartet.",
|
|---|
| 77 | "one weekday constraint": "Du kannst höchstens einen beschränkten Wochentag in einer Monats-Spanne verwenden",
|
|---|
| 78 | "range constrained weekdays": "Du kannst keine Wochentags-Spanne als Beschränkung in einer Monats-Spanne verwenden",
|
|---|
| 79 | expected: '"__symbol__" erwartet.',
|
|---|
| 80 | "range zero": 'Du kannst keine __type__-Spanne mit Periode "0" verwenden.',
|
|---|
| 81 | "period one year+": 'Bitte verwende keine __type__-Spannen mit Periode "1".' + ' Wenn du ausdrücken willst, das eine Einrichtung ab einem bestimmten Jahr immer offen ist, benutze bitte "<year>+".',
|
|---|
| 82 | "period one": 'Bitte verwende keine __type__-Spannen mit Periode "1".',
|
|---|
| 83 | "month 31": "Die Tagesangabe für __month__ muss zwischen 1 und 31 liegen.",
|
|---|
| 84 | "month 30": "Der Monat __month__ hat keine 31 Tage. Der letzte Tag von __month__ ist Tag 30.",
|
|---|
| 85 | "month feb": '"Der Monat __month__ hat entweder 28 oder 29 Tage (Schaltjahre)."',
|
|---|
| 86 | "point in time": "Erwarte Bindestrich (-) oder offenes Ende (+) in der Zeitspanne __calc__." + " Um mit Zeitpunkten zu arbeiten, muss der Modus für __libraryname__ umgestellt werden." + " Vielleicht falsches OSM-tag verwendet?",
|
|---|
| 87 | calculation: "Berechnung",
|
|---|
| 88 | "time range continue": "Die Zeitspanne geht nicht wie erwartet weiter",
|
|---|
| 89 | "period continue": 'Die Zeitspannen-Periode geht nicht wie erwartet weiter. Beispiel "/01:30".',
|
|---|
| 90 | "time range mode": '__libraryname__ wurde im "Zeitspannen-Modus" aufgerufen. Zeitpunkt gefunden.',
|
|---|
| 91 | "point in time mode": '__libraryname__ wurde im "Zeitpunkt-Modus" aufgerufen. Zeitspanne gefunden.',
|
|---|
| 92 | "outside current day": "Zeitspanne beginnt außerhalb des aktuellen Tages",
|
|---|
| 93 | "two midnights": "Zeitspanne welche mehrmals Mitternacht beinhaltet wird nicht unterstützt",
|
|---|
| 94 | "without minutes": "Zeitspanne ohne Minutenangabe angegeben. Das ist nicht sehr eindeutig!" + ' Bitte verwende stattdessen folgende Syntax "__syntax__".',
|
|---|
| 95 | "outside day": "Die Zeitspanne beginnt außerhalb des aktuellen Tages",
|
|---|
| 96 | "zero calculation": "Das Hinzufügen von 0 in einer variablen Zeitberechnung ändert die variable Zeit nicht." + ' Bitte entferne die Zeitberechnung (Beispiel: "sunrise-(sunset-00:00)").',
|
|---|
| 97 | "calculation syntax": "Berechnung mit variabler Zeit hat nicht die korrekte Syntax",
|
|---|
| 98 | missing: 'Fehlendes "__symbol__"',
|
|---|
| 99 | "(time)": "(Zeit)",
|
|---|
| 100 | "bad range": "Ungültige Zeitspanne: __from__-__to__",
|
|---|
| 101 | "] or more numbers": '"]" oder weitere Zahlen erwartet.',
|
|---|
| 102 | "additional rule no sense": 'Eine weitere Regel an dieser Stelle ergibt keinen Sinn. Benutze einfach ";" als Trenner für Regeln.' + " Siehe https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator",
|
|---|
| 103 | "unexpected token weekday range": "Unerwartes Token in Tages-Spanne: __token__",
|
|---|
| 104 | "max differ": "Es sollte keinen Grund geben, mehr als __maxdiffer__ Tage von einem __name__ abzuweichen. Wenn nötig, teile uns dies bitte mit …",
|
|---|
| 105 | "adding 0": "Addition von 0 verändert das Datum nicht. Bitte weglassen.",
|
|---|
| 106 | "unexpected token holiday": "Unerwarteter Token (in Feiertags-Auswertung): __token__",
|
|---|
| 107 | "no holiday definition": "__name__ ist für das Land __cc__ nicht definiert.",
|
|---|
| 108 | "no holiday definition state": "__name__ ist für das Land __cc__ und Bundesland __state__ nicht definiert.",
|
|---|
| 109 | "no country code": "Der Ländercode fehlt. Dieser wird benötigt um die korrekten Feiertage zu bestimmen (siehe in der README wie dieser anzugeben ist)",
|
|---|
| 110 | "movable no formula": "Der bewegliche Feiertag __name__ kann nicht berechnet werden." + " Bitte füge eine entsprechende Formel hinzu.",
|
|---|
| 111 | "movable not in year": "Der bewegliche Feiertag __name__ plus __days__" + " Tage befindet sich nicht mehr im selben Jahr. Aktuell nicht unterstützt.",
|
|---|
| 112 | "year range one year": "Eine Jahres-Spanne mit gleichem Jahr als Beginn und Ende ergibt keinen Sinn." + ' Bitte entferne das Ende-Jahr. zum Beispiel: "__year__ May 23"',
|
|---|
| 113 | "year range reverse": "Eine Jahres-Spanne mit Beginn größer als Ende ergibt keinen Sinn." + " Bitte umdrehen.",
|
|---|
| 114 | "year past": "Das Jahr liegt in der Vergangenheit.",
|
|---|
| 115 | "unexpected token year range": "Unerwartetes Token in der Jahres-Spanne: __token__",
|
|---|
| 116 | "week range reverse": "Du hast eine Wochen-Spanne in umgekehrter Reihenfolge oder mehrere Jahre umfassende angegeben. Dies ist aktuell nicht unterstützt.",
|
|---|
| 117 | "week negative": "Du hast eine Kalenderwoche kleiner 1 angegeben. Korrekte Angaben sind 1-53.",
|
|---|
| 118 | "week exceed": "Du hast eine Kalenderwoche größer als 53 angegeben. Korrekte Angaben sind 1-53.",
|
|---|
| 119 | "week period less than 2": "Du hast eine Wochenperiode kleiner 2 angegeben." + ' Wenn du die gesamte Spanne von __weekfrom__ bis __weekto__ angeben willst, lasse "/__period__" einfach weg.',
|
|---|
| 120 | "week period greater than 26": "Du hast eine Wochen-Periode größer als 26 angegeben." + " 26.5 ist die Hälfte des Maximums von 53 Wochen pro Jahr. Damit würde eine Periode größer als 26 nur einmal pro Jahr auftreten." + ' Bitte gibt den Wochen-Selektor als "week __weekfrom__" an, wenn es das ist, was du ausdrücken möchtest.',
|
|---|
| 121 | "unexpected token week range": "Unerwartetes Token in Wochen-Spanne: __token__",
|
|---|
| 122 | "unexpected token month range": "Unerwartetes Token in Monats-Spanne: __token__",
|
|---|
| 123 | "day range reverse": "Zeitspanne in falscher Reihenfolge. Beginn ist größer als Ende.",
|
|---|
| 124 | "open end": 'Angegeben als "open end". Schließzeit wurde geraten.',
|
|---|
| 125 | "date parameter needed": "Datumsparameter nötig."
|
|---|
| 126 | },
|
|---|
| 127 | pretty: {
|
|---|
| 128 | off: "geschlossen",
|
|---|
| 129 | SH: "Schulferien",
|
|---|
| 130 | PH: "Feiertags"
|
|---|
| 131 | }
|
|---|
| 132 | }
|
|---|
| 133 | }
|
|---|
| 134 | };
|
|---|
| 135 | if (typeof require === "function" && typeof module !== "undefined") {
|
|---|
| 136 | var i18n = require("i18next-client");
|
|---|
| 137 | factory(i18n, opening_hours_resources);
|
|---|
| 138 | module.exports = i18n
|
|---|
| 139 | } else if (typeof define === "function" && define.amd) {
|
|---|
| 140 | define(["i18next-client"], function (i18n) {
|
|---|
| 141 | factory(i18n, opening_hours_resources);
|
|---|
| 142 | return i18n
|
|---|
| 143 | })
|
|---|
| 144 | }
|
|---|
| 145 | })(this, function (i18n, opening_hours_resources) {
|
|---|
| 146 | if (!i18n.isInitialized()) {
|
|---|
| 147 | i18n.init({
|
|---|
| 148 | fallbackLng: "en",
|
|---|
| 149 | resStore: opening_hours_resources,
|
|---|
| 150 | getAsync: true,
|
|---|
| 151 | useCookie: true
|
|---|
| 152 | })
|
|---|
| 153 | } else {
|
|---|
| 154 | for (lang in opening_hours_resources) {
|
|---|
| 155 | i18n.addResourceBundle(lang, "opening_hours", opening_hours_resources[lang]["opening_hours"], true)
|
|---|
| 156 | }
|
|---|
| 157 | }
|
|---|
| 158 | })
|
|---|
| 159 | }, {
|
|---|
| 160 | "i18next-client": "i18next-client"
|
|---|
| 161 | }],
|
|---|
| 162 | 2: [function (require, module, exports) {
|
|---|
| 163 | /*
|
|---|
| 164 | (c) 2011-2015, Vladimir Agafonkin
|
|---|
| 165 | SunCalc is a JavaScript library for calculating sun/moon position and light phases.
|
|---|
| 166 | https://github.com/mourner/suncalc
|
|---|
| 167 | */
|
|---|
| 168 | (function () {
|
|---|
| 169 | "use strict";
|
|---|
| 170 | var PI = Math.PI,
|
|---|
| 171 | sin = Math.sin,
|
|---|
| 172 | cos = Math.cos,
|
|---|
| 173 | tan = Math.tan,
|
|---|
| 174 | asin = Math.asin,
|
|---|
| 175 | atan = Math.atan2,
|
|---|
| 176 | acos = Math.acos,
|
|---|
| 177 | rad = PI / 180;
|
|---|
| 178 | var dayMs = 1e3 * 60 * 60 * 24,
|
|---|
| 179 | J1970 = 2440588,
|
|---|
| 180 | J2000 = 2451545;
|
|---|
| 181 |
|
|---|
| 182 | function toJulian(date) {
|
|---|
| 183 | return date.valueOf() / dayMs - .5 + J1970
|
|---|
| 184 | }
|
|---|
| 185 |
|
|---|
| 186 | function fromJulian(j) {
|
|---|
| 187 | return new Date((j + .5 - J1970) * dayMs)
|
|---|
| 188 | }
|
|---|
| 189 |
|
|---|
| 190 | function toDays(date) {
|
|---|
| 191 | return toJulian(date) - J2000
|
|---|
| 192 | }
|
|---|
| 193 | var e = rad * 23.4397;
|
|---|
| 194 |
|
|---|
| 195 | function rightAscension(l, b) {
|
|---|
| 196 | return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l))
|
|---|
| 197 | }
|
|---|
| 198 |
|
|---|
| 199 | function declination(l, b) {
|
|---|
| 200 | return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l))
|
|---|
| 201 | }
|
|---|
| 202 |
|
|---|
| 203 | function azimuth(H, phi, dec) {
|
|---|
| 204 | return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi))
|
|---|
| 205 | }
|
|---|
| 206 |
|
|---|
| 207 | function altitude(H, phi, dec) {
|
|---|
| 208 | return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H))
|
|---|
| 209 | }
|
|---|
| 210 |
|
|---|
| 211 | function siderealTime(d, lw) {
|
|---|
| 212 | return rad * (280.16 + 360.9856235 * d) - lw
|
|---|
| 213 | }
|
|---|
| 214 |
|
|---|
| 215 | function astroRefraction(h) {
|
|---|
| 216 | if (h < 0)
|
|---|
| 217 | h = 0;
|
|---|
| 218 | return 2967e-7 / Math.tan(h + .00312536 / (h + .08901179))
|
|---|
| 219 | }
|
|---|
| 220 |
|
|---|
| 221 | function solarMeanAnomaly(d) {
|
|---|
| 222 | return rad * (357.5291 + .98560028 * d)
|
|---|
| 223 | }
|
|---|
| 224 |
|
|---|
| 225 | function eclipticLongitude(M) {
|
|---|
| 226 | var C = rad * (1.9148 * sin(M) + .02 * sin(2 * M) + 3e-4 * sin(3 * M)),
|
|---|
| 227 | P = rad * 102.9372;
|
|---|
| 228 | return M + C + P + PI
|
|---|
| 229 | }
|
|---|
| 230 |
|
|---|
| 231 | function sunCoords(d) {
|
|---|
| 232 | var M = solarMeanAnomaly(d),
|
|---|
| 233 | L = eclipticLongitude(M);
|
|---|
| 234 | return {
|
|---|
| 235 | dec: declination(L, 0),
|
|---|
| 236 | ra: rightAscension(L, 0)
|
|---|
| 237 | }
|
|---|
| 238 | }
|
|---|
| 239 | var SunCalc = {};
|
|---|
| 240 | SunCalc.getPosition = function (date, lat, lng) {
|
|---|
| 241 | var lw = rad * -lng,
|
|---|
| 242 | phi = rad * lat,
|
|---|
| 243 | d = toDays(date),
|
|---|
| 244 | c = sunCoords(d),
|
|---|
| 245 | H = siderealTime(d, lw) - c.ra;
|
|---|
| 246 | return {
|
|---|
| 247 | azimuth: azimuth(H, phi, c.dec),
|
|---|
| 248 | altitude: altitude(H, phi, c.dec)
|
|---|
| 249 | }
|
|---|
| 250 | };
|
|---|
| 251 | var times = SunCalc.times = [
|
|---|
| 252 | [-.833, "sunrise", "sunset"],
|
|---|
| 253 | [-.3, "sunriseEnd", "sunsetStart"],
|
|---|
| 254 | [-6, "dawn", "dusk"],
|
|---|
| 255 | [-12, "nauticalDawn", "nauticalDusk"],
|
|---|
| 256 | [-18, "nightEnd", "night"],
|
|---|
| 257 | [6, "goldenHourEnd", "goldenHour"]
|
|---|
| 258 | ];
|
|---|
| 259 | SunCalc.addTime = function (angle, riseName, setName) {
|
|---|
| 260 | times.push([angle, riseName, setName])
|
|---|
| 261 | };
|
|---|
| 262 | var J0 = 9e-4;
|
|---|
| 263 |
|
|---|
| 264 | function julianCycle(d, lw) {
|
|---|
| 265 | return Math.round(d - J0 - lw / (2 * PI))
|
|---|
| 266 | }
|
|---|
| 267 |
|
|---|
| 268 | function approxTransit(Ht, lw, n) {
|
|---|
| 269 | return J0 + (Ht + lw) / (2 * PI) + n
|
|---|
| 270 | }
|
|---|
| 271 |
|
|---|
| 272 | function solarTransitJ(ds, M, L) {
|
|---|
| 273 | return J2000 + ds + .0053 * sin(M) - .0069 * sin(2 * L)
|
|---|
| 274 | }
|
|---|
| 275 |
|
|---|
| 276 | function hourAngle(h, phi, d) {
|
|---|
| 277 | return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d)))
|
|---|
| 278 | }
|
|---|
| 279 |
|
|---|
| 280 | function getSetJ(h, lw, phi, dec, n, M, L) {
|
|---|
| 281 | var w = hourAngle(h, phi, dec),
|
|---|
| 282 | a = approxTransit(w, lw, n);
|
|---|
| 283 | return solarTransitJ(a, M, L)
|
|---|
| 284 | }
|
|---|
| 285 | SunCalc.getTimes = function (date, lat, lng) {
|
|---|
| 286 | var lw = rad * -lng,
|
|---|
| 287 | phi = rad * lat,
|
|---|
| 288 | d = toDays(date),
|
|---|
| 289 | n = julianCycle(d, lw),
|
|---|
| 290 | ds = approxTransit(0, lw, n),
|
|---|
| 291 | M = solarMeanAnomaly(ds),
|
|---|
| 292 | L = eclipticLongitude(M),
|
|---|
| 293 | dec = declination(L, 0),
|
|---|
| 294 | Jnoon = solarTransitJ(ds, M, L),
|
|---|
| 295 | i, len, time, Jset, Jrise;
|
|---|
| 296 | var result = {
|
|---|
| 297 | solarNoon: fromJulian(Jnoon),
|
|---|
| 298 | nadir: fromJulian(Jnoon - .5)
|
|---|
| 299 | };
|
|---|
| 300 | for (i = 0, len = times.length; i < len; i += 1) {
|
|---|
| 301 | time = times[i];
|
|---|
| 302 | Jset = getSetJ(time[0] * rad, lw, phi, dec, n, M, L);
|
|---|
| 303 | Jrise = Jnoon - (Jset - Jnoon);
|
|---|
| 304 | result[time[1]] = fromJulian(Jrise);
|
|---|
| 305 | result[time[2]] = fromJulian(Jset)
|
|---|
| 306 | }
|
|---|
| 307 | return result
|
|---|
| 308 | };
|
|---|
| 309 |
|
|---|
| 310 | function moonCoords(d) {
|
|---|
| 311 | var L = rad * (218.316 + 13.176396 * d),
|
|---|
| 312 | M = rad * (134.963 + 13.064993 * d),
|
|---|
| 313 | F = rad * (93.272 + 13.22935 * d),
|
|---|
| 314 | l = L + rad * 6.289 * sin(M),
|
|---|
| 315 | b = rad * 5.128 * sin(F),
|
|---|
| 316 | dt = 385001 - 20905 * cos(M);
|
|---|
| 317 | return {
|
|---|
| 318 | ra: rightAscension(l, b),
|
|---|
| 319 | dec: declination(l, b),
|
|---|
| 320 | dist: dt
|
|---|
| 321 | }
|
|---|
| 322 | }
|
|---|
| 323 | SunCalc.getMoonPosition = function (date, lat, lng) {
|
|---|
| 324 | var lw = rad * -lng,
|
|---|
| 325 | phi = rad * lat,
|
|---|
| 326 | d = toDays(date),
|
|---|
| 327 | c = moonCoords(d),
|
|---|
| 328 | H = siderealTime(d, lw) - c.ra,
|
|---|
| 329 | h = altitude(H, phi, c.dec),
|
|---|
| 330 | pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));
|
|---|
| 331 | h = h + astroRefraction(h);
|
|---|
| 332 | return {
|
|---|
| 333 | azimuth: azimuth(H, phi, c.dec),
|
|---|
| 334 | altitude: h,
|
|---|
| 335 | distance: c.dist,
|
|---|
| 336 | parallacticAngle: pa
|
|---|
| 337 | }
|
|---|
| 338 | };
|
|---|
| 339 | SunCalc.getMoonIllumination = function (date) {
|
|---|
| 340 | var d = toDays(date || new Date),
|
|---|
| 341 | s = sunCoords(d),
|
|---|
| 342 | m = moonCoords(d),
|
|---|
| 343 | sdist = 149598e3,
|
|---|
| 344 | phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)),
|
|---|
| 345 | inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)),
|
|---|
| 346 | angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));
|
|---|
| 347 | return {
|
|---|
| 348 | fraction: (1 + cos(inc)) / 2,
|
|---|
| 349 | phase: .5 + .5 * inc * (angle < 0 ? -1 : 1) / Math.PI,
|
|---|
| 350 | angle: angle
|
|---|
| 351 | }
|
|---|
| 352 | };
|
|---|
| 353 |
|
|---|
| 354 | function hoursLater(date, h) {
|
|---|
| 355 | return new Date(date.valueOf() + h * dayMs / 24)
|
|---|
| 356 | }
|
|---|
| 357 | SunCalc.getMoonTimes = function (date, lat, lng, inUTC) {
|
|---|
| 358 | var t = new Date(date);
|
|---|
| 359 | if (inUTC)
|
|---|
| 360 | t.setUTCHours(0, 0, 0, 0);
|
|---|
| 361 | else
|
|---|
| 362 | t.setHours(0, 0, 0, 0);
|
|---|
| 363 | var hc = .133 * rad,
|
|---|
| 364 | h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc,
|
|---|
| 365 | h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx;
|
|---|
| 366 | for (var i = 1; i <= 24; i += 2) {
|
|---|
| 367 | h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc;
|
|---|
| 368 | h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc;
|
|---|
| 369 | a = (h0 + h2) / 2 - h1;
|
|---|
| 370 | b = (h2 - h0) / 2;
|
|---|
| 371 | xe = -b / (2 * a);
|
|---|
| 372 | ye = (a * xe + b) * xe + h1;
|
|---|
| 373 | d = b * b - 4 * a * h1;
|
|---|
| 374 | roots = 0;
|
|---|
| 375 | if (d >= 0) {
|
|---|
| 376 | dx = Math.sqrt(d) / (Math.abs(a) * 2);
|
|---|
| 377 | x1 = xe - dx;
|
|---|
| 378 | x2 = xe + dx;
|
|---|
| 379 | if (Math.abs(x1) <= 1)
|
|---|
| 380 | roots++;
|
|---|
| 381 | if (Math.abs(x2) <= 1)
|
|---|
| 382 | roots++;
|
|---|
| 383 | if (x1 < -1)
|
|---|
| 384 | x1 = x2
|
|---|
| 385 | }
|
|---|
| 386 | if (roots === 1) {
|
|---|
| 387 | if (h0 < 0)
|
|---|
| 388 | rise = i + x1;
|
|---|
| 389 | else
|
|---|
| 390 | set = i + x1
|
|---|
| 391 | } else if (roots === 2) {
|
|---|
| 392 | rise = i + (ye < 0 ? x2 : x1);
|
|---|
| 393 | set = i + (ye < 0 ? x1 : x2)
|
|---|
| 394 | }
|
|---|
| 395 | if (rise && set)
|
|---|
| 396 | break;
|
|---|
| 397 | h0 = h2
|
|---|
| 398 | }
|
|---|
| 399 | var result = {};
|
|---|
| 400 | if (rise)
|
|---|
| 401 | result.rise = hoursLater(t, rise);
|
|---|
| 402 | if (set)
|
|---|
| 403 | result.set = hoursLater(t, set);
|
|---|
| 404 | if (!rise && !set)
|
|---|
| 405 | result[ye > 0 ? "alwaysUp" : "alwaysDown"] = true;
|
|---|
| 406 | return result
|
|---|
| 407 | };
|
|---|
| 408 | if (typeof exports === "object" && typeof module !== "undefined")
|
|---|
| 409 | module.exports = SunCalc;
|
|---|
| 410 | else if (typeof define === "function" && define.amd)
|
|---|
| 411 | define(SunCalc);
|
|---|
| 412 | else
|
|---|
| 413 | window.SunCalc = SunCalc
|
|---|
| 414 | })()
|
|---|
| 415 | }, {}],
|
|---|
| 416 | "i18next-client": [function (require, module, exports) {
|
|---|
| 417 | (function (root) {
|
|---|
| 418 | if (!Array.prototype.indexOf) {
|
|---|
| 419 | Array.prototype.indexOf = function (searchElement) {
|
|---|
| 420 | "use strict";
|
|---|
| 421 | if (this == null) {
|
|---|
| 422 | throw new TypeError
|
|---|
| 423 | }
|
|---|
| 424 | var t = Object(this);
|
|---|
| 425 | var len = t.length >>> 0;
|
|---|
| 426 | if (len === 0) {
|
|---|
| 427 | return -1
|
|---|
| 428 | }
|
|---|
| 429 | var n = 0;
|
|---|
| 430 | if (arguments.length > 0) {
|
|---|
| 431 | n = Number(arguments[1]);
|
|---|
| 432 | if (n != n) {
|
|---|
| 433 | n = 0
|
|---|
| 434 | } else if (n != 0 && n != Infinity && n != -Infinity) {
|
|---|
| 435 | n = (n > 0 || -1) * Math.floor(Math.abs(n))
|
|---|
| 436 | }
|
|---|
| 437 | }
|
|---|
| 438 | if (n >= len) {
|
|---|
| 439 | return -1
|
|---|
| 440 | }
|
|---|
| 441 | var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
|
|---|
| 442 | for (; k < len; k++) {
|
|---|
| 443 | if (k in t && t[k] === searchElement) {
|
|---|
| 444 | return k
|
|---|
| 445 | }
|
|---|
| 446 | }
|
|---|
| 447 | return -1
|
|---|
| 448 | }
|
|---|
| 449 | }
|
|---|
| 450 | if (!Array.prototype.lastIndexOf) {
|
|---|
| 451 | Array.prototype.lastIndexOf = function (searchElement) {
|
|---|
| 452 | "use strict";
|
|---|
| 453 | if (this == null) {
|
|---|
| 454 | throw new TypeError
|
|---|
| 455 | }
|
|---|
| 456 | var t = Object(this);
|
|---|
| 457 | var len = t.length >>> 0;
|
|---|
| 458 | if (len === 0) {
|
|---|
| 459 | return -1
|
|---|
| 460 | }
|
|---|
| 461 | var n = len;
|
|---|
| 462 | if (arguments.length > 1) {
|
|---|
| 463 | n = Number(arguments[1]);
|
|---|
| 464 | if (n != n) {
|
|---|
| 465 | n = 0
|
|---|
| 466 | } else if (n != 0 && n != 1 / 0 && n != -(1 / 0)) {
|
|---|
| 467 | n = (n > 0 || -1) * Math.floor(Math.abs(n))
|
|---|
| 468 | }
|
|---|
| 469 | }
|
|---|
| 470 | var k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n);
|
|---|
| 471 | for (; k >= 0; k--) {
|
|---|
| 472 | if (k in t && t[k] === searchElement) {
|
|---|
| 473 | return k
|
|---|
| 474 | }
|
|---|
| 475 | }
|
|---|
| 476 | return -1
|
|---|
| 477 | }
|
|---|
| 478 | }
|
|---|
| 479 | if (typeof String.prototype.trim !== "function") {
|
|---|
| 480 | String.prototype.trim = function () {
|
|---|
| 481 | return this.replace(/^\s+|\s+$/g, "")
|
|---|
| 482 | }
|
|---|
| 483 | }
|
|---|
| 484 | var $ = root.jQuery || root.Zepto,
|
|---|
| 485 | i18n = {},
|
|---|
| 486 | resStore = {},
|
|---|
| 487 | currentLng, replacementCounter = 0,
|
|---|
| 488 | languages = [],
|
|---|
| 489 | initialized = false,
|
|---|
| 490 | sync = {},
|
|---|
| 491 | conflictReference = null;
|
|---|
| 492 | if (typeof module !== "undefined" && module.exports) {
|
|---|
| 493 | module.exports = i18n
|
|---|
| 494 | } else {
|
|---|
| 495 | if ($) {
|
|---|
| 496 | $.i18n = $.i18n || i18n
|
|---|
| 497 | }
|
|---|
| 498 | if (root.i18n) {
|
|---|
| 499 | conflictReference = root.i18n
|
|---|
| 500 | }
|
|---|
| 501 | root.i18n = i18n
|
|---|
| 502 | }
|
|---|
| 503 | sync = {
|
|---|
| 504 | load: function (lngs, options, cb) {
|
|---|
| 505 | if (options.useLocalStorage) {
|
|---|
| 506 | sync._loadLocal(lngs, options, function (err, store) {
|
|---|
| 507 | var missingLngs = [];
|
|---|
| 508 | for (var i = 0, len = lngs.length; i < len; i++) {
|
|---|
| 509 | if (!store[lngs[i]])
|
|---|
| 510 | missingLngs.push(lngs[i])
|
|---|
| 511 | }
|
|---|
| 512 | if (missingLngs.length > 0) {
|
|---|
| 513 | sync._fetch(missingLngs, options, function (err, fetched) {
|
|---|
| 514 | f.extend(store, fetched);
|
|---|
| 515 | sync._storeLocal(fetched);
|
|---|
| 516 | cb(err, store)
|
|---|
| 517 | })
|
|---|
| 518 | } else {
|
|---|
| 519 | cb(err, store)
|
|---|
| 520 | }
|
|---|
| 521 | })
|
|---|
| 522 | } else {
|
|---|
| 523 | sync._fetch(lngs, options, function (err, store) {
|
|---|
| 524 | cb(err, store)
|
|---|
| 525 | })
|
|---|
| 526 | }
|
|---|
| 527 | },
|
|---|
| 528 | _loadLocal: function (lngs, options, cb) {
|
|---|
| 529 | var store = {},
|
|---|
| 530 | nowMS = (new Date).getTime();
|
|---|
| 531 | if (window.localStorage) {
|
|---|
| 532 | var todo = lngs.length;
|
|---|
| 533 | f.each(lngs, function (key, lng) {
|
|---|
| 534 | var local = f.localStorage.getItem("res_" + lng);
|
|---|
| 535 | if (local) {
|
|---|
| 536 | local = JSON.parse(local);
|
|---|
| 537 | if (local.i18nStamp && local.i18nStamp + options.localStorageExpirationTime > nowMS) {
|
|---|
| 538 | store[lng] = local
|
|---|
| 539 | }
|
|---|
| 540 | }
|
|---|
| 541 | todo--;
|
|---|
| 542 | if (todo === 0)
|
|---|
| 543 | cb(null, store)
|
|---|
| 544 | })
|
|---|
| 545 | }
|
|---|
| 546 | },
|
|---|
| 547 | _storeLocal: function (store) {
|
|---|
| 548 | if (window.localStorage) {
|
|---|
| 549 | for (var m in store) {
|
|---|
| 550 | store[m].i18nStamp = (new Date).getTime();
|
|---|
| 551 | f.localStorage.setItem("res_" + m, JSON.stringify(store[m]))
|
|---|
| 552 | }
|
|---|
| 553 | }
|
|---|
| 554 | return
|
|---|
| 555 | },
|
|---|
| 556 | _fetch: function (lngs, options, cb) {
|
|---|
| 557 | var ns = options.ns,
|
|---|
| 558 | store = {};
|
|---|
| 559 | if (!options.dynamicLoad) {
|
|---|
| 560 | var todo = ns.namespaces.length * lngs.length,
|
|---|
| 561 | errors;
|
|---|
| 562 | f.each(ns.namespaces, function (nsIndex, nsValue) {
|
|---|
| 563 | f.each(lngs, function (lngIndex, lngValue) {
|
|---|
| 564 | var loadComplete = function (err, data) {
|
|---|
| 565 | if (err) {
|
|---|
| 566 | errors = errors || [];
|
|---|
| 567 | errors.push(err)
|
|---|
| 568 | }
|
|---|
| 569 | store[lngValue] = store[lngValue] || {};
|
|---|
| 570 | store[lngValue][nsValue] = data;
|
|---|
| 571 | todo--;
|
|---|
| 572 | if (todo === 0)
|
|---|
| 573 | cb(errors, store)
|
|---|
| 574 | };
|
|---|
| 575 | if (typeof options.customLoad == "function") {
|
|---|
| 576 | options.customLoad(lngValue, nsValue, options, loadComplete)
|
|---|
| 577 | } else {
|
|---|
| 578 | sync._fetchOne(lngValue, nsValue, options, loadComplete)
|
|---|
| 579 | }
|
|---|
| 580 | })
|
|---|
| 581 | })
|
|---|
| 582 | } else {
|
|---|
| 583 | var loadComplete = function (err, data) {
|
|---|
| 584 | cb(err, data)
|
|---|
| 585 | };
|
|---|
| 586 | if (typeof options.customLoad == "function") {
|
|---|
| 587 | options.customLoad(lngs, ns.namespaces, options, loadComplete)
|
|---|
| 588 | } else {
|
|---|
| 589 | var url = applyReplacement(options.resGetPath, {
|
|---|
| 590 | lng: lngs.join("+"),
|
|---|
| 591 | ns: ns.namespaces.join("+")
|
|---|
| 592 | });
|
|---|
| 593 | f.ajax({
|
|---|
| 594 | url: url,
|
|---|
| 595 | cache: options.cache,
|
|---|
| 596 | success: function (data, status, xhr) {
|
|---|
| 597 | f.log("loaded: " + url);
|
|---|
| 598 | loadComplete(null, data)
|
|---|
| 599 | },
|
|---|
| 600 | error: function (xhr, status, error) {
|
|---|
| 601 | f.log("failed loading: " + url);
|
|---|
| 602 | loadComplete("failed loading resource.json error: " + error)
|
|---|
| 603 | },
|
|---|
| 604 | dataType: "json",
|
|---|
| 605 | async: options.getAsync,
|
|---|
| 606 | timeout: options.ajaxTimeout
|
|---|
| 607 | })
|
|---|
| 608 | }
|
|---|
| 609 | }
|
|---|
| 610 | },
|
|---|
| 611 | _fetchOne: function (lng, ns, options, done) {
|
|---|
| 612 | var url = applyReplacement(options.resGetPath, {
|
|---|
| 613 | lng: lng,
|
|---|
| 614 | ns: ns
|
|---|
| 615 | });
|
|---|
| 616 | f.ajax({
|
|---|
| 617 | url: url,
|
|---|
| 618 | cache: options.cache,
|
|---|
| 619 | success: function (data, status, xhr) {
|
|---|
| 620 | f.log("loaded: " + url);
|
|---|
| 621 | done(null, data)
|
|---|
| 622 | },
|
|---|
| 623 | error: function (xhr, status, error) {
|
|---|
| 624 | if (status && status == 200 || xhr && xhr.status && xhr.status == 200) {
|
|---|
| 625 | f.error("There is a typo in: " + url)
|
|---|
| 626 | } else if (status && status == 404 || xhr && xhr.status && xhr.status == 404) {
|
|---|
| 627 | f.log("Does not exist: " + url)
|
|---|
| 628 | } else {
|
|---|
| 629 | var theStatus = status ? status : xhr && xhr.status ? xhr.status : null;
|
|---|
| 630 | f.log(theStatus + " when loading " + url)
|
|---|
| 631 | }
|
|---|
| 632 | done(error, {})
|
|---|
| 633 | },
|
|---|
| 634 | dataType: "json",
|
|---|
| 635 | async: options.getAsync,
|
|---|
| 636 | timeout: options.ajaxTimeout,
|
|---|
| 637 | headers: options.headers
|
|---|
| 638 | })
|
|---|
| 639 | },
|
|---|
| 640 | postMissing: function (lng, ns, key, defaultValue, lngs) {
|
|---|
| 641 | var payload = {};
|
|---|
| 642 | payload[key] = defaultValue;
|
|---|
| 643 | var urls = [];
|
|---|
| 644 | if (o.sendMissingTo === "fallback" && o.fallbackLng[0] !== false) {
|
|---|
| 645 | for (var i = 0; i < o.fallbackLng.length; i++) {
|
|---|
| 646 | urls.push({
|
|---|
| 647 | lng: o.fallbackLng[i],
|
|---|
| 648 | url: applyReplacement(o.resPostPath, {
|
|---|
| 649 | lng: o.fallbackLng[i],
|
|---|
| 650 | ns: ns
|
|---|
| 651 | })
|
|---|
| 652 | })
|
|---|
| 653 | }
|
|---|
| 654 | } else if (o.sendMissingTo === "current" || o.sendMissingTo === "fallback" && o.fallbackLng[0] === false) {
|
|---|
| 655 | urls.push({
|
|---|
| 656 | lng: lng,
|
|---|
| 657 | url: applyReplacement(o.resPostPath, {
|
|---|
| 658 | lng: lng,
|
|---|
| 659 | ns: ns
|
|---|
| 660 | })
|
|---|
| 661 | })
|
|---|
| 662 | } else if (o.sendMissingTo === "all") {
|
|---|
| 663 | for (var i = 0, l = lngs.length; i < l; i++) {
|
|---|
| 664 | urls.push({
|
|---|
| 665 | lng: lngs[i],
|
|---|
| 666 | url: applyReplacement(o.resPostPath, {
|
|---|
| 667 | lng: lngs[i],
|
|---|
| 668 | ns: ns
|
|---|
| 669 | })
|
|---|
| 670 | })
|
|---|
| 671 | }
|
|---|
| 672 | }
|
|---|
| 673 | for (var y = 0, len = urls.length; y < len; y++) {
|
|---|
| 674 | var item = urls[y];
|
|---|
| 675 | f.ajax({
|
|---|
| 676 | url: item.url,
|
|---|
| 677 | type: o.sendType,
|
|---|
| 678 | data: payload,
|
|---|
| 679 | success: function (data, status, xhr) {
|
|---|
| 680 | f.log("posted missing key '" + key + "' to: " + item.url);
|
|---|
| 681 | var keys = key.split(".");
|
|---|
| 682 | var x = 0;
|
|---|
| 683 | var value = resStore[item.lng][ns];
|
|---|
| 684 | while (keys[x]) {
|
|---|
| 685 | if (x === keys.length - 1) {
|
|---|
| 686 | value = value[keys[x]] = defaultValue
|
|---|
| 687 | } else {
|
|---|
| 688 | value = value[keys[x]] = value[keys[x]] || {}
|
|---|
| 689 | }
|
|---|
| 690 | x++
|
|---|
| 691 | }
|
|---|
| 692 | },
|
|---|
| 693 | error: function (xhr, status, error) {
|
|---|
| 694 | f.log("failed posting missing key '" + key + "' to: " + item.url)
|
|---|
| 695 | },
|
|---|
| 696 | dataType: "json",
|
|---|
| 697 | async: o.postAsync,
|
|---|
| 698 | timeout: o.ajaxTimeout
|
|---|
| 699 | })
|
|---|
| 700 | }
|
|---|
| 701 | },
|
|---|
| 702 | reload: reload
|
|---|
| 703 | };
|
|---|
| 704 | var o = {
|
|---|
| 705 | lng: undefined,
|
|---|
| 706 | load: "all",
|
|---|
| 707 | preload: [],
|
|---|
| 708 | lowerCaseLng: false,
|
|---|
| 709 | returnObjectTrees: false,
|
|---|
| 710 | fallbackLng: ["dev"],
|
|---|
| 711 | fallbackNS: [],
|
|---|
| 712 | detectLngQS: "setLng",
|
|---|
| 713 | detectLngFromLocalStorage: false,
|
|---|
| 714 | ns: {
|
|---|
| 715 | namespaces: ["translation"],
|
|---|
| 716 | defaultNs: "translation"
|
|---|
| 717 | },
|
|---|
| 718 | fallbackOnNull: true,
|
|---|
| 719 | fallbackOnEmpty: false,
|
|---|
| 720 | fallbackToDefaultNS: false,
|
|---|
| 721 | showKeyIfEmpty: false,
|
|---|
| 722 | nsseparator: ":",
|
|---|
| 723 | keyseparator: ".",
|
|---|
| 724 | selectorAttr: "data-i18n",
|
|---|
| 725 | debug: false,
|
|---|
| 726 | resGetPath: "locales/__lng__/__ns__.json",
|
|---|
| 727 | resPostPath: "locales/add/__lng__/__ns__",
|
|---|
| 728 | getAsync: true,
|
|---|
| 729 | postAsync: true,
|
|---|
| 730 | resStore: undefined,
|
|---|
| 731 | useLocalStorage: false,
|
|---|
| 732 | localStorageExpirationTime: 7 * 24 * 60 * 60 * 1e3,
|
|---|
| 733 | dynamicLoad: false,
|
|---|
| 734 | sendMissing: false,
|
|---|
| 735 | sendMissingTo: "fallback",
|
|---|
| 736 | sendType: "POST",
|
|---|
| 737 | interpolationPrefix: "__",
|
|---|
| 738 | interpolationSuffix: "__",
|
|---|
| 739 | defaultVariables: false,
|
|---|
| 740 | reusePrefix: "$t(",
|
|---|
| 741 | reuseSuffix: ")",
|
|---|
| 742 | pluralSuffix: "_plural",
|
|---|
| 743 | pluralNotFound: ["plural_not_found", Math.random()].join(""),
|
|---|
| 744 | contextNotFound: ["context_not_found", Math.random()].join(""),
|
|---|
| 745 | escapeInterpolation: false,
|
|---|
| 746 | indefiniteSuffix: "_indefinite",
|
|---|
| 747 | indefiniteNotFound: ["indefinite_not_found", Math.random()].join(""),
|
|---|
| 748 | setJqueryExt: true,
|
|---|
| 749 | defaultValueFromContent: true,
|
|---|
| 750 | useDataAttrOptions: false,
|
|---|
| 751 | cookieExpirationTime: undefined,
|
|---|
| 752 | useCookie: true,
|
|---|
| 753 | cookieName: "i18next",
|
|---|
| 754 | cookieDomain: undefined,
|
|---|
| 755 | objectTreeKeyHandler: undefined,
|
|---|
| 756 | postProcess: undefined,
|
|---|
| 757 | parseMissingKey: undefined,
|
|---|
| 758 | missingKeyHandler: sync.postMissing,
|
|---|
| 759 | ajaxTimeout: 0,
|
|---|
| 760 | shortcutFunction: "sprintf"
|
|---|
| 761 | };
|
|---|
| 762 |
|
|---|
| 763 | function _extend(target, source) {
|
|---|
| 764 | if (!source || typeof source === "function") {
|
|---|
| 765 | return target
|
|---|
| 766 | }
|
|---|
| 767 | for (var attr in source) {
|
|---|
| 768 | target[attr] = source[attr]
|
|---|
| 769 | }
|
|---|
| 770 | return target
|
|---|
| 771 | }
|
|---|
| 772 |
|
|---|
| 773 | function _deepExtend(target, source, overwrite) {
|
|---|
| 774 | for (var prop in source)
|
|---|
| 775 | if (prop in target) {
|
|---|
| 776 | if (typeof target[prop] === "string" || target[prop] instanceof String || typeof source[prop] === "string" || source[prop] instanceof String) {
|
|---|
| 777 | if (overwrite) {
|
|---|
| 778 | target[prop] = source[prop]
|
|---|
| 779 | }
|
|---|
| 780 | } else {
|
|---|
| 781 | _deepExtend(target[prop], source[prop], overwrite)
|
|---|
| 782 | }
|
|---|
| 783 | } else {
|
|---|
| 784 | target[prop] = source[prop]
|
|---|
| 785 | }
|
|---|
| 786 | return target
|
|---|
| 787 | }
|
|---|
| 788 |
|
|---|
| 789 | function _each(object, callback, args) {
|
|---|
| 790 | var name, i = 0,
|
|---|
| 791 | length = object.length,
|
|---|
| 792 | isObj = length === undefined || Object.prototype.toString.apply(object) !== "[object Array]" || typeof object === "function";
|
|---|
| 793 | if (args) {
|
|---|
| 794 | if (isObj) {
|
|---|
| 795 | for (name in object) {
|
|---|
| 796 | if (callback.apply(object[name], args) === false) {
|
|---|
| 797 | break
|
|---|
| 798 | }
|
|---|
| 799 | }
|
|---|
| 800 | } else {
|
|---|
| 801 | for (; i < length; ) {
|
|---|
| 802 | if (callback.apply(object[i++], args) === false) {
|
|---|
| 803 | break
|
|---|
| 804 | }
|
|---|
| 805 | }
|
|---|
| 806 | }
|
|---|
| 807 | } else {
|
|---|
| 808 | if (isObj) {
|
|---|
| 809 | for (name in object) {
|
|---|
| 810 | if (callback.call(object[name], name, object[name]) === false) {
|
|---|
| 811 | break
|
|---|
| 812 | }
|
|---|
| 813 | }
|
|---|
| 814 | } else {
|
|---|
| 815 | for (; i < length; ) {
|
|---|
| 816 | if (callback.call(object[i], i, object[i++]) === false) {
|
|---|
| 817 | break
|
|---|
| 818 | }
|
|---|
| 819 | }
|
|---|
| 820 | }
|
|---|
| 821 | }
|
|---|
| 822 | return object
|
|---|
| 823 | }
|
|---|
| 824 | var _entityMap = {
|
|---|
| 825 | "&": "&",
|
|---|
| 826 | "<": "<",
|
|---|
| 827 | ">": ">",
|
|---|
| 828 | '"': """,
|
|---|
| 829 | "'": "'",
|
|---|
| 830 | "/": "/"
|
|---|
| 831 | };
|
|---|
| 832 |
|
|---|
| 833 | function _escape(data) {
|
|---|
| 834 | if (typeof data === "string") {
|
|---|
| 835 | return data.replace(/[&<>"'\/]/g, function (s) {
|
|---|
| 836 | return _entityMap[s]
|
|---|
| 837 | })
|
|---|
| 838 | } else {
|
|---|
| 839 | return data
|
|---|
| 840 | }
|
|---|
| 841 | }
|
|---|
| 842 |
|
|---|
| 843 | function _ajax(options) { // v0.5.0 of https://github.com/goloroden/http.js
|
|---|
| 844 | var getXhr = function (callback) {
|
|---|
| 845 | if (window.XMLHttpRequest) {
|
|---|
| 846 | return callback(null, new XMLHttpRequest)
|
|---|
| 847 | } else if (window.ActiveXObject) {
|
|---|
| 848 | try {
|
|---|
| 849 | return callback(null, new ActiveXObject("Msxml2.XMLHTTP"))
|
|---|
| 850 | } catch (e) {
|
|---|
| 851 | return callback(null, new ActiveXObject("Microsoft.XMLHTTP"))
|
|---|
| 852 | }
|
|---|
| 853 | }
|
|---|
| 854 | return callback(new Error)
|
|---|
| 855 | };
|
|---|
| 856 | var encodeUsingUrlEncoding = function (data) {
|
|---|
| 857 | if (typeof data === "string") {
|
|---|
| 858 | return data
|
|---|
| 859 | }
|
|---|
| 860 | var result = [];
|
|---|
| 861 | for (var dataItem in data) {
|
|---|
| 862 | if (data.hasOwnProperty(dataItem)) {
|
|---|
| 863 | result.push(encodeURIComponent(dataItem) + "=" + encodeURIComponent(data[dataItem]))
|
|---|
| 864 | }
|
|---|
| 865 | }
|
|---|
| 866 | return result.join("&")
|
|---|
| 867 | };
|
|---|
| 868 | var utf8 = function (text) {
|
|---|
| 869 | text = text.replace(/\r\n/g, "\n");
|
|---|
| 870 | var result = "";
|
|---|
| 871 | for (var i = 0; i < text.length; i++) {
|
|---|
| 872 | var c = text.charCodeAt(i);
|
|---|
| 873 | if (c < 128) {
|
|---|
| 874 | result += String.fromCharCode(c)
|
|---|
| 875 | } else if (c > 127 && c < 2048) {
|
|---|
| 876 | result += String.fromCharCode(c >> 6 | 192);
|
|---|
| 877 | result += String.fromCharCode(c & 63 | 128)
|
|---|
| 878 | } else {
|
|---|
| 879 | result += String.fromCharCode(c >> 12 | 224);
|
|---|
| 880 | result += String.fromCharCode(c >> 6 & 63 | 128);
|
|---|
| 881 | result += String.fromCharCode(c & 63 | 128)
|
|---|
| 882 | }
|
|---|
| 883 | }
|
|---|
| 884 | return result
|
|---|
| 885 | };
|
|---|
| 886 | var base64 = function (text) {
|
|---|
| 887 | var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|---|
| 888 | text = utf8(text);
|
|---|
| 889 | var result = "",
|
|---|
| 890 | chr1, chr2, chr3, enc1, enc2, enc3, enc4, i = 0;
|
|---|
| 891 | do {
|
|---|
| 892 | chr1 = text.charCodeAt(i++);
|
|---|
| 893 | chr2 = text.charCodeAt(i++);
|
|---|
| 894 | chr3 = text.charCodeAt(i++);
|
|---|
| 895 | enc1 = chr1 >> 2;
|
|---|
| 896 | enc2 = (chr1 & 3) << 4 | chr2 >> 4;
|
|---|
| 897 | enc3 = (chr2 & 15) << 2 | chr3 >> 6;
|
|---|
| 898 | enc4 = chr3 & 63;
|
|---|
| 899 | if (isNaN(chr2)) {
|
|---|
| 900 | enc3 = enc4 = 64
|
|---|
| 901 | } else if (isNaN(chr3)) {
|
|---|
| 902 | enc4 = 64
|
|---|
| 903 | }
|
|---|
| 904 | result += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
|
|---|
| 905 | chr1 = chr2 = chr3 = "";
|
|---|
| 906 | enc1 = enc2 = enc3 = enc4 = ""
|
|---|
| 907 | } while (i < text.length);
|
|---|
| 908 | return result
|
|---|
| 909 | };
|
|---|
| 910 | var mergeHeaders = function () {
|
|---|
| 911 | var result = arguments[0];
|
|---|
| 912 | for (var i = 1; i < arguments.length; i++) {
|
|---|
| 913 | var currentHeaders = arguments[i];
|
|---|
| 914 | for (var header in currentHeaders) {
|
|---|
| 915 | if (currentHeaders.hasOwnProperty(header)) {
|
|---|
| 916 | result[header] = currentHeaders[header]
|
|---|
| 917 | }
|
|---|
| 918 | }
|
|---|
| 919 | }
|
|---|
| 920 | return result
|
|---|
| 921 | };
|
|---|
| 922 | var ajax = function (method, url, options, callback) {
|
|---|
| 923 | if (typeof options === "function") {
|
|---|
| 924 | callback = options;
|
|---|
| 925 | options = {}
|
|---|
| 926 | }
|
|---|
| 927 | options.cache = options.cache || false;
|
|---|
| 928 | options.data = options.data || {};
|
|---|
| 929 | options.headers = options.headers || {};
|
|---|
| 930 | options.jsonp = options.jsonp || false;
|
|---|
| 931 | options.async = options.async === undefined ? true : options.async;
|
|---|
| 932 | var headers = mergeHeaders({
|
|---|
| 933 | accept: "*/*",
|
|---|
| 934 | "content-type": "application/x-www-form-urlencoded;charset=UTF-8"
|
|---|
| 935 | }, ajax.headers, options.headers);
|
|---|
| 936 | var payload;
|
|---|
| 937 | if (headers["content-type"] === "application/json") {
|
|---|
| 938 | payload = JSON.stringify(options.data)
|
|---|
| 939 | } else {
|
|---|
| 940 | payload = encodeUsingUrlEncoding(options.data)
|
|---|
| 941 | }
|
|---|
| 942 | if (method === "GET") {
|
|---|
| 943 | var queryString = [];
|
|---|
| 944 | if (payload) {
|
|---|
| 945 | queryString.push(payload);
|
|---|
| 946 | payload = null
|
|---|
| 947 | }
|
|---|
| 948 | if (!options.cache) {
|
|---|
| 949 | queryString.push("_=" + (new Date).getTime())
|
|---|
| 950 | }
|
|---|
| 951 | if (options.jsonp) {
|
|---|
| 952 | queryString.push("callback=" + options.jsonp);
|
|---|
| 953 | queryString.push("jsonp=" + options.jsonp)
|
|---|
| 954 | }
|
|---|
| 955 | queryString = queryString.join("&");
|
|---|
| 956 | if (queryString.length > 1) {
|
|---|
| 957 | if (url.indexOf("?") > -1) {
|
|---|
| 958 | url += "&" + queryString
|
|---|
| 959 | } else {
|
|---|
| 960 | url += "?" + queryString
|
|---|
| 961 | }
|
|---|
| 962 | }
|
|---|
| 963 | if (options.jsonp) {
|
|---|
| 964 | var head = document.getElementsByTagName("head")[0];
|
|---|
| 965 | var script = document.createElement("script");
|
|---|
| 966 | script.type = "text/javascript";
|
|---|
| 967 | script.src = url;
|
|---|
| 968 | head.appendChild(script);
|
|---|
| 969 | return
|
|---|
| 970 | }
|
|---|
| 971 | }
|
|---|
| 972 | getXhr(function (err, xhr) {
|
|---|
| 973 | if (err)
|
|---|
| 974 | return callback(err);
|
|---|
| 975 | xhr.open(method, url, options.async);
|
|---|
| 976 | for (var header in headers) {
|
|---|
| 977 | if (headers.hasOwnProperty(header)) {
|
|---|
| 978 | xhr.setRequestHeader(header, headers[header])
|
|---|
| 979 | }
|
|---|
| 980 | }
|
|---|
| 981 | xhr.onreadystatechange = function () {
|
|---|
| 982 | if (xhr.readyState === 4) {
|
|---|
| 983 | var data = xhr.responseText || "";
|
|---|
| 984 | if (!callback) {
|
|---|
| 985 | return
|
|---|
| 986 | }
|
|---|
| 987 | callback(xhr.status, {
|
|---|
| 988 | text: function () {
|
|---|
| 989 | return data
|
|---|
| 990 | },
|
|---|
| 991 | json: function () {
|
|---|
| 992 | try {
|
|---|
| 993 | return JSON.parse(data)
|
|---|
| 994 | } catch (e) {
|
|---|
| 995 | f.error("Can not parse JSON. URL: " + url);
|
|---|
| 996 | return {}
|
|---|
| 997 | }
|
|---|
| 998 | }
|
|---|
| 999 | })
|
|---|
| 1000 | }
|
|---|
| 1001 | };
|
|---|
| 1002 | xhr.send(payload)
|
|---|
| 1003 | })
|
|---|
| 1004 | };
|
|---|
| 1005 | var http = {
|
|---|
| 1006 | authBasic: function (username, password) {
|
|---|
| 1007 | ajax.headers["Authorization"] = "Basic " + base64(username + ":" + password)
|
|---|
| 1008 | },
|
|---|
| 1009 | connect: function (url, options, callback) {
|
|---|
| 1010 | return ajax("CONNECT", url, options, callback)
|
|---|
| 1011 | },
|
|---|
| 1012 | del: function (url, options, callback) {
|
|---|
| 1013 | return ajax("DELETE", url, options, callback)
|
|---|
| 1014 | },
|
|---|
| 1015 | get: function (url, options, callback) {
|
|---|
| 1016 | return ajax("GET", url, options, callback)
|
|---|
| 1017 | },
|
|---|
| 1018 | head: function (url, options, callback) {
|
|---|
| 1019 | return ajax("HEAD", url, options, callback)
|
|---|
| 1020 | },
|
|---|
| 1021 | headers: function (headers) {
|
|---|
| 1022 | ajax.headers = headers || {}
|
|---|
| 1023 | },
|
|---|
| 1024 | isAllowed: function (url, verb, callback) {
|
|---|
| 1025 | this.options(url, function (status, data) {
|
|---|
| 1026 | callback(data.text().indexOf(verb) !== -1)
|
|---|
| 1027 | })
|
|---|
| 1028 | },
|
|---|
| 1029 | options: function (url, options, callback) {
|
|---|
| 1030 | return ajax("OPTIONS", url, options, callback)
|
|---|
| 1031 | },
|
|---|
| 1032 | patch: function (url, options, callback) {
|
|---|
| 1033 | return ajax("PATCH", url, options, callback)
|
|---|
| 1034 | },
|
|---|
| 1035 | post: function (url, options, callback) {
|
|---|
| 1036 | return ajax("POST", url, options, callback)
|
|---|
| 1037 | },
|
|---|
| 1038 | put: function (url, options, callback) {
|
|---|
| 1039 | return ajax("PUT", url, options, callback)
|
|---|
| 1040 | },
|
|---|
| 1041 | trace: function (url, options, callback) {
|
|---|
| 1042 | return ajax("TRACE", url, options, callback)
|
|---|
| 1043 | }
|
|---|
| 1044 | };
|
|---|
| 1045 | var methode = options.type ? options.type.toLowerCase() : "get";
|
|---|
| 1046 | http[methode](options.url, options, function (status, data) {
|
|---|
| 1047 | if (status === 200 || status === 0 && data.text()) {
|
|---|
| 1048 | options.success(data.json(), status, null)
|
|---|
| 1049 | } else {
|
|---|
| 1050 | options.error(data.text(), status, null)
|
|---|
| 1051 | }
|
|---|
| 1052 | })
|
|---|
| 1053 | }
|
|---|
| 1054 | var _cookie = {
|
|---|
| 1055 | create: function (name, value, minutes, domain) {
|
|---|
| 1056 | var expires;
|
|---|
| 1057 | if (minutes) {
|
|---|
| 1058 | var date = new Date;
|
|---|
| 1059 | date.setTime(date.getTime() + minutes * 60 * 1e3);
|
|---|
| 1060 | expires = "; expires=" + date.toGMTString()
|
|---|
| 1061 | } else
|
|---|
| 1062 | expires = "";
|
|---|
| 1063 | domain = domain ? "domain=" + domain + ";" : "";
|
|---|
| 1064 | document.cookie = name + "=" + value + expires + ";" + domain + "path=/"
|
|---|
| 1065 | },
|
|---|
| 1066 | read: function (name) {
|
|---|
| 1067 | var nameEQ = name + "=";
|
|---|
| 1068 | var ca = document.cookie.split(";");
|
|---|
| 1069 | for (var i = 0; i < ca.length; i++) {
|
|---|
| 1070 | var c = ca[i];
|
|---|
| 1071 | while (c.charAt(0) == " ")
|
|---|
| 1072 | c = c.substring(1, c.length);
|
|---|
| 1073 | if (c.indexOf(nameEQ) === 0)
|
|---|
| 1074 | return c.substring(nameEQ.length, c.length)
|
|---|
| 1075 | }
|
|---|
| 1076 | return null
|
|---|
| 1077 | },
|
|---|
| 1078 | remove: function (name) {
|
|---|
| 1079 | this.create(name, "", -1)
|
|---|
| 1080 | }
|
|---|
| 1081 | };
|
|---|
| 1082 | var cookie_noop = {
|
|---|
| 1083 | create: function (name, value, minutes, domain) {},
|
|---|
| 1084 | read: function (name) {
|
|---|
| 1085 | return null
|
|---|
| 1086 | },
|
|---|
| 1087 | remove: function (name) {}
|
|---|
| 1088 | };
|
|---|
| 1089 | var f = {
|
|---|
| 1090 | extend: $ ? $.extend : _extend,
|
|---|
| 1091 | deepExtend: _deepExtend,
|
|---|
| 1092 | each: $ ? $.each : _each,
|
|---|
| 1093 | ajax: $ ? $.ajax : typeof document !== "undefined" ? _ajax : function () {},
|
|---|
| 1094 | cookie: typeof document !== "undefined" ? _cookie : cookie_noop,
|
|---|
| 1095 | detectLanguage: detectLanguage,
|
|---|
| 1096 | escape: _escape,
|
|---|
| 1097 | log: function (str) {
|
|---|
| 1098 | if (o.debug && typeof console !== "undefined")
|
|---|
| 1099 | console.log(str)
|
|---|
| 1100 | },
|
|---|
| 1101 | error: function (str) {
|
|---|
| 1102 | if (typeof console !== "undefined")
|
|---|
| 1103 | console.error(str)
|
|---|
| 1104 | },
|
|---|
| 1105 | getCountyIndexOfLng: function (lng) {
|
|---|
| 1106 | var lng_index = 0;
|
|---|
| 1107 | if (lng === "nb-NO" || lng === "nn-NO" || lng === "nb-no" || lng === "nn-no")
|
|---|
| 1108 | lng_index = 1;
|
|---|
| 1109 | return lng_index
|
|---|
| 1110 | },
|
|---|
| 1111 | toLanguages: function (lng, fallbackLng) {
|
|---|
| 1112 | var log = this.log;
|
|---|
| 1113 | fallbackLng = fallbackLng || o.fallbackLng;
|
|---|
| 1114 | if (typeof fallbackLng === "string")
|
|---|
| 1115 | fallbackLng = [fallbackLng];
|
|---|
| 1116 |
|
|---|
| 1117 | function applyCase(l) {
|
|---|
| 1118 | var ret = l;
|
|---|
| 1119 | if (typeof l === "string" && l.indexOf("-") > -1) {
|
|---|
| 1120 | var parts = l.split("-");
|
|---|
| 1121 | ret = o.lowerCaseLng ? parts[0].toLowerCase() + "-" + parts[1].toLowerCase() : parts[0].toLowerCase() + "-" + parts[1].toUpperCase()
|
|---|
| 1122 | } else {
|
|---|
| 1123 | ret = o.lowerCaseLng ? l.toLowerCase() : l
|
|---|
| 1124 | }
|
|---|
| 1125 | return ret
|
|---|
| 1126 | }
|
|---|
| 1127 | var languages = [];
|
|---|
| 1128 | var whitelist = o.lngWhitelist || false;
|
|---|
| 1129 | var addLanguage = function (language) {
|
|---|
| 1130 | if (!whitelist || whitelist.indexOf(language) > -1) {
|
|---|
| 1131 | languages.push(language)
|
|---|
| 1132 | } else {
|
|---|
| 1133 | log("rejecting non-whitelisted language: " + language)
|
|---|
| 1134 | }
|
|---|
| 1135 | };
|
|---|
| 1136 | if (typeof lng === "string" && lng.indexOf("-") > -1) {
|
|---|
| 1137 | var parts = lng.split("-");
|
|---|
| 1138 | if (o.load !== "unspecific")
|
|---|
| 1139 | addLanguage(applyCase(lng));
|
|---|
| 1140 | if (o.load !== "current")
|
|---|
| 1141 | addLanguage(applyCase(parts[this.getCountyIndexOfLng(lng)]))
|
|---|
| 1142 | } else {
|
|---|
| 1143 | addLanguage(applyCase(lng))
|
|---|
| 1144 | }
|
|---|
| 1145 | for (var i = 0; i < fallbackLng.length; i++) {
|
|---|
| 1146 | if (languages.indexOf(fallbackLng[i]) === -1 && fallbackLng[i])
|
|---|
| 1147 | languages.push(applyCase(fallbackLng[i]))
|
|---|
| 1148 | }
|
|---|
| 1149 | return languages
|
|---|
| 1150 | },
|
|---|
| 1151 | regexEscape: function (str) {
|
|---|
| 1152 | return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&")
|
|---|
| 1153 | },
|
|---|
| 1154 | regexReplacementEscape: function (strOrFn) {
|
|---|
| 1155 | if (typeof strOrFn === "string") {
|
|---|
| 1156 | return strOrFn.replace(/\$/g, "$$$$")
|
|---|
| 1157 | } else {
|
|---|
| 1158 | return strOrFn
|
|---|
| 1159 | }
|
|---|
| 1160 | },
|
|---|
| 1161 | localStorage: {
|
|---|
| 1162 | setItem: function (key, value) {
|
|---|
| 1163 | if (window.localStorage) {
|
|---|
| 1164 | try {
|
|---|
| 1165 | window.localStorage.setItem(key, value)
|
|---|
| 1166 | } catch (e) {
|
|---|
| 1167 | f.log('failed to set value for key "' + key + '" to localStorage.')
|
|---|
| 1168 | }
|
|---|
| 1169 | }
|
|---|
| 1170 | },
|
|---|
| 1171 | getItem: function (key, value) {
|
|---|
| 1172 | if (window.localStorage) {
|
|---|
| 1173 | try {
|
|---|
| 1174 | return window.localStorage.getItem(key, value)
|
|---|
| 1175 | } catch (e) {
|
|---|
| 1176 | f.log('failed to get value for key "' + key + '" from localStorage.');
|
|---|
| 1177 | return undefined
|
|---|
| 1178 | }
|
|---|
| 1179 | }
|
|---|
| 1180 | }
|
|---|
| 1181 | }
|
|---|
| 1182 | };
|
|---|
| 1183 |
|
|---|
| 1184 | function init(options, cb) {
|
|---|
| 1185 | if (typeof options === "function") {
|
|---|
| 1186 | cb = options;
|
|---|
| 1187 | options = {}
|
|---|
| 1188 | }
|
|---|
| 1189 | options = options || {};
|
|---|
| 1190 | f.extend(o, options);
|
|---|
| 1191 | delete o.fixLng;
|
|---|
| 1192 | if (o.functions) {
|
|---|
| 1193 | delete o.functions;
|
|---|
| 1194 | f.extend(f, options.functions)
|
|---|
| 1195 | }
|
|---|
| 1196 | if (typeof o.ns == "string") {
|
|---|
| 1197 | o.ns = {
|
|---|
| 1198 | namespaces: [o.ns],
|
|---|
| 1199 | defaultNs: o.ns
|
|---|
| 1200 | }
|
|---|
| 1201 | }
|
|---|
| 1202 | if (typeof o.fallbackNS == "string") {
|
|---|
| 1203 | o.fallbackNS = [o.fallbackNS]
|
|---|
| 1204 | }
|
|---|
| 1205 | if (typeof o.fallbackLng == "string" || typeof o.fallbackLng == "boolean") {
|
|---|
| 1206 | o.fallbackLng = [o.fallbackLng]
|
|---|
| 1207 | }
|
|---|
| 1208 | o.interpolationPrefixEscaped = f.regexEscape(o.interpolationPrefix);
|
|---|
| 1209 | o.interpolationSuffixEscaped = f.regexEscape(o.interpolationSuffix);
|
|---|
| 1210 | if (!o.lng)
|
|---|
| 1211 | o.lng = f.detectLanguage();
|
|---|
| 1212 | languages = f.toLanguages(o.lng);
|
|---|
| 1213 | currentLng = languages[0];
|
|---|
| 1214 | f.log("currentLng set to: " + currentLng);
|
|---|
| 1215 | if (o.useCookie && f.cookie.read(o.cookieName) !== currentLng) {
|
|---|
| 1216 | f.cookie.create(o.cookieName, currentLng, o.cookieExpirationTime, o.cookieDomain)
|
|---|
| 1217 | }
|
|---|
| 1218 | if (o.detectLngFromLocalStorage && typeof document !== "undefined" && window.localStorage) {
|
|---|
| 1219 | f.localStorage.setItem("i18next_lng", currentLng)
|
|---|
| 1220 | }
|
|---|
| 1221 | var lngTranslate = translate;
|
|---|
| 1222 | if (options.fixLng) {
|
|---|
| 1223 | lngTranslate = function (key, options) {
|
|---|
| 1224 | options = options || {};
|
|---|
| 1225 | options.lng = options.lng || lngTranslate.lng;
|
|---|
| 1226 | return translate(key, options)
|
|---|
| 1227 | };
|
|---|
| 1228 | lngTranslate.lng = currentLng
|
|---|
| 1229 | }
|
|---|
| 1230 | pluralExtensions.setCurrentLng(currentLng);
|
|---|
| 1231 | if ($ && o.setJqueryExt) {
|
|---|
| 1232 | addJqueryFunct && addJqueryFunct()
|
|---|
| 1233 | } else {
|
|---|
| 1234 | addJqueryLikeFunctionality && addJqueryLikeFunctionality()
|
|---|
| 1235 | }
|
|---|
| 1236 | var deferred;
|
|---|
| 1237 | if ($ && $.Deferred) {
|
|---|
| 1238 | deferred = $.Deferred()
|
|---|
| 1239 | }
|
|---|
| 1240 | if (o.resStore) {
|
|---|
| 1241 | resStore = o.resStore;
|
|---|
| 1242 | initialized = true;
|
|---|
| 1243 | if (cb)
|
|---|
| 1244 | cb(null, lngTranslate);
|
|---|
| 1245 | if (deferred)
|
|---|
| 1246 | deferred.resolve(lngTranslate);
|
|---|
| 1247 | if (deferred)
|
|---|
| 1248 | return deferred.promise();
|
|---|
| 1249 | return
|
|---|
| 1250 | }
|
|---|
| 1251 | var lngsToLoad = f.toLanguages(o.lng);
|
|---|
| 1252 | if (typeof o.preload === "string")
|
|---|
| 1253 | o.preload = [o.preload];
|
|---|
| 1254 | for (var i = 0, l = o.preload.length; i < l; i++) {
|
|---|
| 1255 | var pres = f.toLanguages(o.preload[i]);
|
|---|
| 1256 | for (var y = 0, len = pres.length; y < len; y++) {
|
|---|
| 1257 | if (lngsToLoad.indexOf(pres[y]) < 0) {
|
|---|
| 1258 | lngsToLoad.push(pres[y])
|
|---|
| 1259 | }
|
|---|
| 1260 | }
|
|---|
| 1261 | }
|
|---|
| 1262 | i18n.sync.load(lngsToLoad, o, function (err, store) {
|
|---|
| 1263 | resStore = store;
|
|---|
| 1264 | initialized = true;
|
|---|
| 1265 | if (cb)
|
|---|
| 1266 | cb(err, lngTranslate);
|
|---|
| 1267 | if (deferred)
|
|---|
| 1268 | (!err ? deferred.resolve : deferred.reject)(err || lngTranslate)
|
|---|
| 1269 | });
|
|---|
| 1270 | if (deferred)
|
|---|
| 1271 | return deferred.promise()
|
|---|
| 1272 | }
|
|---|
| 1273 |
|
|---|
| 1274 | function isInitialized() {
|
|---|
| 1275 | return initialized
|
|---|
| 1276 | }
|
|---|
| 1277 |
|
|---|
| 1278 | function preload(lngs, cb) {
|
|---|
| 1279 | if (typeof lngs === "string")
|
|---|
| 1280 | lngs = [lngs];
|
|---|
| 1281 | for (var i = 0, l = lngs.length; i < l; i++) {
|
|---|
| 1282 | if (o.preload.indexOf(lngs[i]) < 0) {
|
|---|
| 1283 | o.preload.push(lngs[i])
|
|---|
| 1284 | }
|
|---|
| 1285 | }
|
|---|
| 1286 | return init(cb)
|
|---|
| 1287 | }
|
|---|
| 1288 |
|
|---|
| 1289 | function addResourceBundle(lng, ns, resources, deep, overwrite) {
|
|---|
| 1290 | if (typeof ns !== "string") {
|
|---|
| 1291 | resources = ns;
|
|---|
| 1292 | ns = o.ns.defaultNs
|
|---|
| 1293 | } else if (o.ns.namespaces.indexOf(ns) < 0) {
|
|---|
| 1294 | o.ns.namespaces.push(ns)
|
|---|
| 1295 | }
|
|---|
| 1296 | resStore[lng] = resStore[lng] || {};
|
|---|
| 1297 | resStore[lng][ns] = resStore[lng][ns] || {};
|
|---|
| 1298 | if (deep) {
|
|---|
| 1299 | f.deepExtend(resStore[lng][ns], resources, overwrite)
|
|---|
| 1300 | } else {
|
|---|
| 1301 | f.extend(resStore[lng][ns], resources)
|
|---|
| 1302 | }
|
|---|
| 1303 | if (o.useLocalStorage) {
|
|---|
| 1304 | sync._storeLocal(resStore)
|
|---|
| 1305 | }
|
|---|
| 1306 | }
|
|---|
| 1307 |
|
|---|
| 1308 | function hasResourceBundle(lng, ns) {
|
|---|
| 1309 | if (typeof ns !== "string") {
|
|---|
| 1310 | ns = o.ns.defaultNs
|
|---|
| 1311 | }
|
|---|
| 1312 | resStore[lng] = resStore[lng] || {};
|
|---|
| 1313 | var res = resStore[lng][ns] || {};
|
|---|
| 1314 | var hasValues = false;
|
|---|
| 1315 | for (var prop in res) {
|
|---|
| 1316 | if (res.hasOwnProperty(prop)) {
|
|---|
| 1317 | hasValues = true
|
|---|
| 1318 | }
|
|---|
| 1319 | }
|
|---|
| 1320 | return hasValues
|
|---|
| 1321 | }
|
|---|
| 1322 |
|
|---|
| 1323 | function getResourceBundle(lng, ns) {
|
|---|
| 1324 | if (typeof ns !== "string") {
|
|---|
| 1325 | ns = o.ns.defaultNs
|
|---|
| 1326 | }
|
|---|
| 1327 | resStore[lng] = resStore[lng] || {};
|
|---|
| 1328 | return f.extend({}, resStore[lng][ns])
|
|---|
| 1329 | }
|
|---|
| 1330 |
|
|---|
| 1331 | function removeResourceBundle(lng, ns) {
|
|---|
| 1332 | if (typeof ns !== "string") {
|
|---|
| 1333 | ns = o.ns.defaultNs
|
|---|
| 1334 | }
|
|---|
| 1335 | resStore[lng] = resStore[lng] || {};
|
|---|
| 1336 | resStore[lng][ns] = {};
|
|---|
| 1337 | if (o.useLocalStorage) {
|
|---|
| 1338 | sync._storeLocal(resStore)
|
|---|
| 1339 | }
|
|---|
| 1340 | }
|
|---|
| 1341 |
|
|---|
| 1342 | function addResource(lng, ns, key, value) {
|
|---|
| 1343 | if (typeof ns !== "string") {
|
|---|
| 1344 | resource = ns;
|
|---|
| 1345 | ns = o.ns.defaultNs
|
|---|
| 1346 | } else if (o.ns.namespaces.indexOf(ns) < 0) {
|
|---|
| 1347 | o.ns.namespaces.push(ns)
|
|---|
| 1348 | }
|
|---|
| 1349 | resStore[lng] = resStore[lng] || {};
|
|---|
| 1350 | resStore[lng][ns] = resStore[lng][ns] || {};
|
|---|
| 1351 | var keys = key.split(o.keyseparator);
|
|---|
| 1352 | var x = 0;
|
|---|
| 1353 | var node = resStore[lng][ns];
|
|---|
| 1354 | var origRef = node;
|
|---|
| 1355 | while (keys[x]) {
|
|---|
| 1356 | if (x == keys.length - 1)
|
|---|
| 1357 | node[keys[x]] = value;
|
|---|
| 1358 | else {
|
|---|
| 1359 | if (node[keys[x]] == null)
|
|---|
| 1360 | node[keys[x]] = {};
|
|---|
| 1361 | node = node[keys[x]]
|
|---|
| 1362 | }
|
|---|
| 1363 | x++
|
|---|
| 1364 | }
|
|---|
| 1365 | if (o.useLocalStorage) {
|
|---|
| 1366 | sync._storeLocal(resStore)
|
|---|
| 1367 | }
|
|---|
| 1368 | }
|
|---|
| 1369 |
|
|---|
| 1370 | function addResources(lng, ns, resources) {
|
|---|
| 1371 | if (typeof ns !== "string") {
|
|---|
| 1372 | resources = ns;
|
|---|
| 1373 | ns = o.ns.defaultNs
|
|---|
| 1374 | } else if (o.ns.namespaces.indexOf(ns) < 0) {
|
|---|
| 1375 | o.ns.namespaces.push(ns)
|
|---|
| 1376 | }
|
|---|
| 1377 | for (var m in resources) {
|
|---|
| 1378 | if (typeof resources[m] === "string")
|
|---|
| 1379 | addResource(lng, ns, m, resources[m])
|
|---|
| 1380 | }
|
|---|
| 1381 | }
|
|---|
| 1382 |
|
|---|
| 1383 | function setDefaultNamespace(ns) {
|
|---|
| 1384 | o.ns.defaultNs = ns
|
|---|
| 1385 | }
|
|---|
| 1386 |
|
|---|
| 1387 | function loadNamespace(namespace, cb) {
|
|---|
| 1388 | loadNamespaces([namespace], cb)
|
|---|
| 1389 | }
|
|---|
| 1390 |
|
|---|
| 1391 | function loadNamespaces(namespaces, cb) {
|
|---|
| 1392 | var opts = {
|
|---|
| 1393 | dynamicLoad: o.dynamicLoad,
|
|---|
| 1394 | resGetPath: o.resGetPath,
|
|---|
| 1395 | getAsync: o.getAsync,
|
|---|
| 1396 | customLoad: o.customLoad,
|
|---|
| 1397 | ns: {
|
|---|
| 1398 | namespaces: namespaces,
|
|---|
| 1399 | defaultNs: ""
|
|---|
| 1400 | }
|
|---|
| 1401 | };
|
|---|
| 1402 | var lngsToLoad = f.toLanguages(o.lng);
|
|---|
| 1403 | if (typeof o.preload === "string")
|
|---|
| 1404 | o.preload = [o.preload];
|
|---|
| 1405 | for (var i = 0, l = o.preload.length; i < l; i++) {
|
|---|
| 1406 | var pres = f.toLanguages(o.preload[i]);
|
|---|
| 1407 | for (var y = 0, len = pres.length; y < len; y++) {
|
|---|
| 1408 | if (lngsToLoad.indexOf(pres[y]) < 0) {
|
|---|
| 1409 | lngsToLoad.push(pres[y])
|
|---|
| 1410 | }
|
|---|
| 1411 | }
|
|---|
| 1412 | }
|
|---|
| 1413 | var lngNeedLoad = [];
|
|---|
| 1414 | for (var a = 0, lenA = lngsToLoad.length; a < lenA; a++) {
|
|---|
| 1415 | var needLoad = false;
|
|---|
| 1416 | var resSet = resStore[lngsToLoad[a]];
|
|---|
| 1417 | if (resSet) {
|
|---|
| 1418 | for (var b = 0, lenB = namespaces.length; b < lenB; b++) {
|
|---|
| 1419 | if (!resSet[namespaces[b]])
|
|---|
| 1420 | needLoad = true
|
|---|
| 1421 | }
|
|---|
| 1422 | } else {
|
|---|
| 1423 | needLoad = true
|
|---|
| 1424 | }
|
|---|
| 1425 | if (needLoad)
|
|---|
| 1426 | lngNeedLoad.push(lngsToLoad[a])
|
|---|
| 1427 | }
|
|---|
| 1428 | if (lngNeedLoad.length) {
|
|---|
| 1429 | i18n.sync._fetch(lngNeedLoad, opts, function (err, store) {
|
|---|
| 1430 | var todo = namespaces.length * lngNeedLoad.length;
|
|---|
| 1431 | f.each(namespaces, function (nsIndex, nsValue) {
|
|---|
| 1432 | if (o.ns.namespaces.indexOf(nsValue) < 0) {
|
|---|
| 1433 | o.ns.namespaces.push(nsValue)
|
|---|
| 1434 | }
|
|---|
| 1435 | f.each(lngNeedLoad, function (lngIndex, lngValue) {
|
|---|
| 1436 | resStore[lngValue] = resStore[lngValue] || {};
|
|---|
| 1437 | resStore[lngValue][nsValue] = store[lngValue][nsValue];
|
|---|
| 1438 | todo--;
|
|---|
| 1439 | if (todo === 0 && cb) {
|
|---|
| 1440 | if (o.useLocalStorage)
|
|---|
| 1441 | i18n.sync._storeLocal(resStore);
|
|---|
| 1442 | cb()
|
|---|
| 1443 | }
|
|---|
| 1444 | })
|
|---|
| 1445 | })
|
|---|
| 1446 | })
|
|---|
| 1447 | } else {
|
|---|
| 1448 | if (cb)
|
|---|
| 1449 | cb()
|
|---|
| 1450 | }
|
|---|
| 1451 | }
|
|---|
| 1452 |
|
|---|
| 1453 | function setLng(lng, options, cb) {
|
|---|
| 1454 | if (typeof options === "function") {
|
|---|
| 1455 | cb = options;
|
|---|
| 1456 | options = {}
|
|---|
| 1457 | } else if (!options) {
|
|---|
| 1458 | options = {}
|
|---|
| 1459 | }
|
|---|
| 1460 | options.lng = lng;
|
|---|
| 1461 | return init(options, cb)
|
|---|
| 1462 | }
|
|---|
| 1463 |
|
|---|
| 1464 | function lng() {
|
|---|
| 1465 | return currentLng
|
|---|
| 1466 | }
|
|---|
| 1467 |
|
|---|
| 1468 | function dir() {
|
|---|
| 1469 | var rtlLangs = ["ar", "shu", "sqr", "ssh", "xaa", "yhd", "yud", "aao", "abh", "abv", "acm", "acq", "acw", "acx", "acy", "adf", "ads", "aeb", "aec", "afb", "ajp", "apc", "apd", "arb", "arq", "ars", "ary", "arz", "auz", "avl", "ayh", "ayl", "ayn", "ayp", "bbz", "pga", "he", "iw", "ps", "pbt", "pbu", "pst", "prp", "prd", "ur", "ydd", "yds", "yih", "ji", "yi", "hbo", "men", "xmn", "fa", "jpr", "peo", "pes", "prs", "dv", "sam"];
|
|---|
| 1470 | if (rtlLangs.some(function (lang) {
|
|---|
| 1471 | return new RegExp("^" + lang).test(currentLng)
|
|---|
| 1472 | })) {
|
|---|
| 1473 | return "rtl"
|
|---|
| 1474 | }
|
|---|
| 1475 | return "ltr"
|
|---|
| 1476 | }
|
|---|
| 1477 |
|
|---|
| 1478 | function reload(cb) {
|
|---|
| 1479 | resStore = {};
|
|---|
| 1480 | setLng(currentLng, cb)
|
|---|
| 1481 | }
|
|---|
| 1482 |
|
|---|
| 1483 | function noConflict() {
|
|---|
| 1484 | window.i18next = window.i18n;
|
|---|
| 1485 | if (conflictReference) {
|
|---|
| 1486 | window.i18n = conflictReference
|
|---|
| 1487 | } else {
|
|---|
| 1488 | delete window.i18n
|
|---|
| 1489 | }
|
|---|
| 1490 | }
|
|---|
| 1491 |
|
|---|
| 1492 | function addJqueryFunct() {
|
|---|
| 1493 | $.t = $.t || translate;
|
|---|
| 1494 |
|
|---|
| 1495 | function parse(ele, key, options) {
|
|---|
| 1496 | if (key.length === 0)
|
|---|
| 1497 | return;
|
|---|
| 1498 | var attr = "text";
|
|---|
| 1499 | if (key.indexOf("[") === 0) {
|
|---|
| 1500 | var parts = key.split("]");
|
|---|
| 1501 | key = parts[1];
|
|---|
| 1502 | attr = parts[0].substr(1, parts[0].length - 1)
|
|---|
| 1503 | }
|
|---|
| 1504 | if (key.indexOf(";") === key.length - 1) {
|
|---|
| 1505 | key = key.substr(0, key.length - 2)
|
|---|
| 1506 | }
|
|---|
| 1507 | var optionsToUse;
|
|---|
| 1508 | if (attr === "html") {
|
|---|
| 1509 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1510 | defaultValue: ele.html()
|
|---|
| 1511 | }, options) : options;
|
|---|
| 1512 | ele.html($.t(key, optionsToUse))
|
|---|
| 1513 | } else if (attr === "text") {
|
|---|
| 1514 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1515 | defaultValue: ele.text()
|
|---|
| 1516 | }, options) : options;
|
|---|
| 1517 | ele.text($.t(key, optionsToUse))
|
|---|
| 1518 | } else if (attr === "prepend") {
|
|---|
| 1519 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1520 | defaultValue: ele.html()
|
|---|
| 1521 | }, options) : options;
|
|---|
| 1522 | ele.prepend($.t(key, optionsToUse))
|
|---|
| 1523 | } else if (attr === "append") {
|
|---|
| 1524 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1525 | defaultValue: ele.html()
|
|---|
| 1526 | }, options) : options;
|
|---|
| 1527 | ele.append($.t(key, optionsToUse))
|
|---|
| 1528 | } else if (attr.indexOf("data-") === 0) {
|
|---|
| 1529 | var dataAttr = attr.substr("data-".length);
|
|---|
| 1530 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1531 | defaultValue: ele.data(dataAttr)
|
|---|
| 1532 | }, options) : options;
|
|---|
| 1533 | var translated = $.t(key, optionsToUse);
|
|---|
| 1534 | ele.data(dataAttr, translated);
|
|---|
| 1535 | ele.attr(attr, translated)
|
|---|
| 1536 | } else {
|
|---|
| 1537 | optionsToUse = o.defaultValueFromContent ? $.extend({
|
|---|
| 1538 | defaultValue: ele.attr(attr)
|
|---|
| 1539 | }, options) : options;
|
|---|
| 1540 | ele.attr(attr, $.t(key, optionsToUse))
|
|---|
| 1541 | }
|
|---|
| 1542 | }
|
|---|
| 1543 |
|
|---|
| 1544 | function localize(ele, options) {
|
|---|
| 1545 | var key = ele.attr(o.selectorAttr);
|
|---|
| 1546 | if (!key && typeof key !== "undefined" && key !== false)
|
|---|
| 1547 | key = ele.text() || ele.val();
|
|---|
| 1548 | if (!key)
|
|---|
| 1549 | return;
|
|---|
| 1550 | var target = ele,
|
|---|
| 1551 | targetSelector = ele.data("i18n-target");
|
|---|
| 1552 | if (targetSelector) {
|
|---|
| 1553 | target = ele.find(targetSelector) || ele
|
|---|
| 1554 | }
|
|---|
| 1555 | if (!options && o.useDataAttrOptions === true) {
|
|---|
| 1556 | options = ele.data("i18n-options")
|
|---|
| 1557 | }
|
|---|
| 1558 | options = options || {};
|
|---|
| 1559 | if (key.indexOf(";") >= 0) {
|
|---|
| 1560 | var keys = key.split(";");
|
|---|
| 1561 | $.each(keys, function (m, k) {
|
|---|
| 1562 | if (k !== "")
|
|---|
| 1563 | parse(target, k, options)
|
|---|
| 1564 | })
|
|---|
| 1565 | } else {
|
|---|
| 1566 | parse(target, key, options)
|
|---|
| 1567 | }
|
|---|
| 1568 | if (o.useDataAttrOptions === true) {
|
|---|
| 1569 | var clone = $.extend({
|
|---|
| 1570 | lng: "non",
|
|---|
| 1571 | lngs: [],
|
|---|
| 1572 | _origLng: "non"
|
|---|
| 1573 | }, options);
|
|---|
| 1574 | delete clone.lng;
|
|---|
| 1575 | delete clone.lngs;
|
|---|
| 1576 | delete clone._origLng;
|
|---|
| 1577 | ele.data("i18n-options", clone)
|
|---|
| 1578 | }
|
|---|
| 1579 | }
|
|---|
| 1580 | $.fn.i18n = function (options) {
|
|---|
| 1581 | return this.each(function () {
|
|---|
| 1582 | localize($(this), options);
|
|---|
| 1583 | var elements = $(this).find("[" + o.selectorAttr + "]");
|
|---|
| 1584 | elements.each(function () {
|
|---|
| 1585 | localize($(this), options)
|
|---|
| 1586 | })
|
|---|
| 1587 | })
|
|---|
| 1588 | }
|
|---|
| 1589 | }
|
|---|
| 1590 |
|
|---|
| 1591 | function addJqueryLikeFunctionality() {
|
|---|
| 1592 | function parse(ele, key, options) {
|
|---|
| 1593 | if (key.length === 0)
|
|---|
| 1594 | return;
|
|---|
| 1595 | var attr = "text";
|
|---|
| 1596 | if (key.indexOf("[") === 0) {
|
|---|
| 1597 | var parts = key.split("]");
|
|---|
| 1598 | key = parts[1];
|
|---|
| 1599 | attr = parts[0].substr(1, parts[0].length - 1)
|
|---|
| 1600 | }
|
|---|
| 1601 | if (key.indexOf(";") === key.length - 1) {
|
|---|
| 1602 | key = key.substr(0, key.length - 2)
|
|---|
| 1603 | }
|
|---|
| 1604 | if (attr === "html") {
|
|---|
| 1605 | ele.innerHTML = translate(key, options)
|
|---|
| 1606 | } else if (attr === "text") {
|
|---|
| 1607 | ele.textContent = translate(key, options)
|
|---|
| 1608 | } else if (attr === "prepend") {
|
|---|
| 1609 | ele.insertAdjacentHTML(translate(key, options), "afterbegin")
|
|---|
| 1610 | } else if (attr === "append") {
|
|---|
| 1611 | ele.insertAdjacentHTML(translate(key, options), "beforeend")
|
|---|
| 1612 | } else {
|
|---|
| 1613 | ele.setAttribute(attr, translate(key, options))
|
|---|
| 1614 | }
|
|---|
| 1615 | }
|
|---|
| 1616 |
|
|---|
| 1617 | function localize(ele, options) {
|
|---|
| 1618 | var key = ele.getAttribute(o.selectorAttr);
|
|---|
| 1619 | if (!key && typeof key !== "undefined" && key !== false)
|
|---|
| 1620 | key = ele.textContent || ele.value;
|
|---|
| 1621 | if (!key)
|
|---|
| 1622 | return;
|
|---|
| 1623 | var target = ele,
|
|---|
| 1624 | targetSelector = ele.getAttribute("i18n-target");
|
|---|
| 1625 | if (targetSelector) {
|
|---|
| 1626 | target = ele.querySelector(targetSelector) || ele
|
|---|
| 1627 | }
|
|---|
| 1628 | if (key.indexOf(";") >= 0) {
|
|---|
| 1629 | var keys = key.split(";"),
|
|---|
| 1630 | index = 0,
|
|---|
| 1631 | length = keys.length;
|
|---|
| 1632 | for (; index < length; index++) {
|
|---|
| 1633 | if (keys[index] !== "")
|
|---|
| 1634 | parse(target, keys[index], options)
|
|---|
| 1635 | }
|
|---|
| 1636 | } else {
|
|---|
| 1637 | parse(target, key, options)
|
|---|
| 1638 | }
|
|---|
| 1639 | }
|
|---|
| 1640 | i18n.translateObject = function (object, options) {
|
|---|
| 1641 | var elements = object.querySelectorAll("[" + o.selectorAttr + "]");
|
|---|
| 1642 | var index = 0,
|
|---|
| 1643 | length = elements.length;
|
|---|
| 1644 | for (; index < length; index++) {
|
|---|
| 1645 | localize(elements[index], options)
|
|---|
| 1646 | }
|
|---|
| 1647 | }
|
|---|
| 1648 | }
|
|---|
| 1649 |
|
|---|
| 1650 | function applyReplacement(str, replacementHash, nestedKey, options) {
|
|---|
| 1651 | if (!str)
|
|---|
| 1652 | return str;
|
|---|
| 1653 | options = options || replacementHash;
|
|---|
| 1654 | if (str.indexOf(options.interpolationPrefix || o.interpolationPrefix) < 0)
|
|---|
| 1655 | return str;
|
|---|
| 1656 | var prefix = options.interpolationPrefix ? f.regexEscape(options.interpolationPrefix) : o.interpolationPrefixEscaped,
|
|---|
| 1657 | suffix = options.interpolationSuffix ? f.regexEscape(options.interpolationSuffix) : o.interpolationSuffixEscaped,
|
|---|
| 1658 | keyseparator = options.keyseparator || o.keyseparator,
|
|---|
| 1659 | unEscapingSuffix = "HTML" + suffix;
|
|---|
| 1660 | var hash = replacementHash.replace && typeof replacementHash.replace === "object" ? replacementHash.replace : replacementHash;
|
|---|
| 1661 | var replacementRegex = new RegExp([prefix, "(.+?)", "(HTML)?", suffix].join(""), "g");
|
|---|
| 1662 | var escapeInterpolation = options.escapeInterpolation || o.escapeInterpolation;
|
|---|
| 1663 | return str.replace(replacementRegex, function (wholeMatch, keyMatch, htmlMatched) {
|
|---|
| 1664 | var objectMatching = hash;
|
|---|
| 1665 | var keyLeaf = keyMatch;
|
|---|
| 1666 | while (keyLeaf.indexOf(keyseparator) >= 0 && typeof objectMatching === "object" && objectMatching) {
|
|---|
| 1667 | var propName = keyLeaf.slice(0, keyLeaf.indexOf(keyseparator));
|
|---|
| 1668 | keyLeaf = keyLeaf.slice(keyLeaf.indexOf(keyseparator) + 1);
|
|---|
| 1669 | objectMatching = objectMatching[propName]
|
|---|
| 1670 | }
|
|---|
| 1671 | if (objectMatching && typeof objectMatching === "object" && objectMatching.hasOwnProperty(keyLeaf)) {
|
|---|
| 1672 | var value = objectMatching[keyLeaf];
|
|---|
| 1673 | if (escapeInterpolation && !htmlMatched) {
|
|---|
| 1674 | return f.escape(objectMatching[keyLeaf])
|
|---|
| 1675 | } else {
|
|---|
| 1676 | return objectMatching[keyLeaf]
|
|---|
| 1677 | }
|
|---|
| 1678 | } else {
|
|---|
| 1679 | return wholeMatch
|
|---|
| 1680 | }
|
|---|
| 1681 | })
|
|---|
| 1682 | }
|
|---|
| 1683 | f.applyReplacement = applyReplacement;
|
|---|
| 1684 |
|
|---|
| 1685 | function applyReuse(translated, options) {
|
|---|
| 1686 | var comma = ",";
|
|---|
| 1687 | var options_open = "{";
|
|---|
| 1688 | var options_close = "}";
|
|---|
| 1689 | var opts = f.extend({}, options);
|
|---|
| 1690 | delete opts.postProcess;
|
|---|
| 1691 | delete opts.isFallbackLookup;
|
|---|
| 1692 | while (translated.indexOf(o.reusePrefix) != -1) {
|
|---|
| 1693 | replacementCounter++;
|
|---|
| 1694 | if (replacementCounter > o.maxRecursion) {
|
|---|
| 1695 | break
|
|---|
| 1696 | }
|
|---|
| 1697 | var index_of_opening = translated.lastIndexOf(o.reusePrefix);
|
|---|
| 1698 | var index_of_end_of_closing = translated.indexOf(o.reuseSuffix, index_of_opening) + o.reuseSuffix.length;
|
|---|
| 1699 | var token = translated.substring(index_of_opening, index_of_end_of_closing);
|
|---|
| 1700 | var token_without_symbols = token.replace(o.reusePrefix, "").replace(o.reuseSuffix, "");
|
|---|
| 1701 | if (index_of_end_of_closing <= index_of_opening) {
|
|---|
| 1702 | f.error("there is an missing closing in following translation value", translated);
|
|---|
| 1703 | return ""
|
|---|
| 1704 | }
|
|---|
| 1705 | if (token_without_symbols.indexOf(comma) != -1) {
|
|---|
| 1706 | var index_of_token_end_of_closing = token_without_symbols.indexOf(comma);
|
|---|
| 1707 | if (token_without_symbols.indexOf(options_open, index_of_token_end_of_closing) != -1 && token_without_symbols.indexOf(options_close, index_of_token_end_of_closing) != -1) {
|
|---|
| 1708 | var index_of_opts_opening = token_without_symbols.indexOf(options_open, index_of_token_end_of_closing);
|
|---|
| 1709 | var index_of_opts_end_of_closing = token_without_symbols.indexOf(options_close, index_of_opts_opening) + options_close.length;
|
|---|
| 1710 | try {
|
|---|
| 1711 | opts = f.extend(opts, JSON.parse(token_without_symbols.substring(index_of_opts_opening, index_of_opts_end_of_closing)));
|
|---|
| 1712 | token_without_symbols = token_without_symbols.substring(0, index_of_token_end_of_closing)
|
|---|
| 1713 | } catch (e) {
|
|---|
| 1714 | }
|
|---|
| 1715 | }
|
|---|
| 1716 | }
|
|---|
| 1717 | var translated_token = _translate(token_without_symbols, opts);
|
|---|
| 1718 | translated = translated.replace(token, f.regexReplacementEscape(translated_token))
|
|---|
| 1719 | }
|
|---|
| 1720 | return translated
|
|---|
| 1721 | }
|
|---|
| 1722 |
|
|---|
| 1723 | function hasContext(options) {
|
|---|
| 1724 | return options.context && (typeof options.context == "string" || typeof options.context == "number")
|
|---|
| 1725 | }
|
|---|
| 1726 |
|
|---|
| 1727 | function needsPlural(options, lng) {
|
|---|
| 1728 | return options.count !== undefined && typeof options.count != "string"
|
|---|
| 1729 | }
|
|---|
| 1730 |
|
|---|
| 1731 | function needsIndefiniteArticle(options) {
|
|---|
| 1732 | return options.indefinite_article !== undefined && typeof options.indefinite_article != "string" && options.indefinite_article
|
|---|
| 1733 | }
|
|---|
| 1734 |
|
|---|
| 1735 | function exists(key, options) {
|
|---|
| 1736 | options = options || {};
|
|---|
| 1737 | var notFound = _getDefaultValue(key, options),
|
|---|
| 1738 | found = _find(key, options);
|
|---|
| 1739 | return found !== undefined || found === notFound
|
|---|
| 1740 | }
|
|---|
| 1741 |
|
|---|
| 1742 | function translate(key, options) {
|
|---|
| 1743 | if (!initialized) {
|
|---|
| 1744 | f.log("i18next not finished initialization. you might have called t function before loading resources finished.");
|
|---|
| 1745 | if (options && options.defaultValue) {
|
|---|
| 1746 | return options.detaultValue
|
|---|
| 1747 | } else {
|
|---|
| 1748 | return ""
|
|---|
| 1749 | }
|
|---|
| 1750 | }
|
|---|
| 1751 | replacementCounter = 0;
|
|---|
| 1752 | return _translate.apply(null, arguments)
|
|---|
| 1753 | }
|
|---|
| 1754 |
|
|---|
| 1755 | function _getDefaultValue(key, options) {
|
|---|
| 1756 | return options.defaultValue !== undefined ? options.defaultValue : key
|
|---|
| 1757 | }
|
|---|
| 1758 |
|
|---|
| 1759 | function _injectSprintfProcessor() {
|
|---|
| 1760 | var values = [];
|
|---|
| 1761 | for (var i = 1; i < arguments.length; i++) {
|
|---|
| 1762 | values.push(arguments[i])
|
|---|
| 1763 | }
|
|---|
| 1764 | return {
|
|---|
| 1765 | postProcess: "sprintf",
|
|---|
| 1766 | sprintf: values
|
|---|
| 1767 | }
|
|---|
| 1768 | }
|
|---|
| 1769 |
|
|---|
| 1770 | function _translate(potentialKeys, options) {
|
|---|
| 1771 | if (typeof options !== "undefined" && typeof options !== "object") {
|
|---|
| 1772 | if (o.shortcutFunction === "sprintf") {
|
|---|
| 1773 | options = _injectSprintfProcessor.apply(null, arguments)
|
|---|
| 1774 | } else if (o.shortcutFunction === "defaultValue") {
|
|---|
| 1775 | options = {
|
|---|
| 1776 | defaultValue: options
|
|---|
| 1777 | }
|
|---|
| 1778 | }
|
|---|
| 1779 | } else {
|
|---|
| 1780 | options = options || {}
|
|---|
| 1781 | }
|
|---|
| 1782 | if (typeof o.defaultVariables === "object") {
|
|---|
| 1783 | options = f.extend({}, o.defaultVariables, options)
|
|---|
| 1784 | }
|
|---|
| 1785 | if (potentialKeys === undefined || potentialKeys === null || potentialKeys === "")
|
|---|
| 1786 | return "";
|
|---|
| 1787 | if (typeof potentialKeys === "number") {
|
|---|
| 1788 | potentialKeys = String(potentialKeys)
|
|---|
| 1789 | }
|
|---|
| 1790 | if (typeof potentialKeys === "string") {
|
|---|
| 1791 | potentialKeys = [potentialKeys]
|
|---|
| 1792 | }
|
|---|
| 1793 | var key = potentialKeys[0];
|
|---|
| 1794 | if (potentialKeys.length > 1) {
|
|---|
| 1795 | for (var i = 0; i < potentialKeys.length; i++) {
|
|---|
| 1796 | key = potentialKeys[i];
|
|---|
| 1797 | if (exists(key, options)) {
|
|---|
| 1798 | break
|
|---|
| 1799 | }
|
|---|
| 1800 | }
|
|---|
| 1801 | }
|
|---|
| 1802 | var notFound = _getDefaultValue(key, options),
|
|---|
| 1803 | found = _find(key, options),
|
|---|
| 1804 | nsseparator = options.nsseparator || o.nsseparator,
|
|---|
| 1805 | lngs = options.lng ? f.toLanguages(options.lng, options.fallbackLng) : languages,
|
|---|
| 1806 | ns = options.ns || o.ns.defaultNs,
|
|---|
| 1807 | parts;
|
|---|
| 1808 | if (key.indexOf(nsseparator) > -1) {
|
|---|
| 1809 | parts = key.split(nsseparator);
|
|---|
| 1810 | ns = parts[0];
|
|---|
| 1811 | key = parts[1]
|
|---|
| 1812 | }
|
|---|
| 1813 | if (found === undefined && o.sendMissing && typeof o.missingKeyHandler === "function") {
|
|---|
| 1814 | if (options.lng) {
|
|---|
| 1815 | o.missingKeyHandler(lngs[0], ns, key, notFound, lngs)
|
|---|
| 1816 | } else {
|
|---|
| 1817 | o.missingKeyHandler(o.lng, ns, key, notFound, lngs)
|
|---|
| 1818 | }
|
|---|
| 1819 | }
|
|---|
| 1820 | var postProcessorsToApply, postProcessor, j;
|
|---|
| 1821 | if (typeof o.postProcess === "string" && o.postProcess !== "") {
|
|---|
| 1822 | postProcessorsToApply = [o.postProcess]
|
|---|
| 1823 | } else if (typeof o.postProcess === "array" || typeof o.postProcess === "object") {
|
|---|
| 1824 | postProcessorsToApply = o.postProcess
|
|---|
| 1825 | } else {
|
|---|
| 1826 | postProcessorsToApply = []
|
|---|
| 1827 | }
|
|---|
| 1828 | if (typeof options.postProcess === "string" && options.postProcess !== "") {
|
|---|
| 1829 | postProcessorsToApply = postProcessorsToApply.concat([options.postProcess])
|
|---|
| 1830 | } else if (typeof options.postProcess === "array" || typeof options.postProcess === "object") {
|
|---|
| 1831 | postProcessorsToApply = postProcessorsToApply.concat(options.postProcess)
|
|---|
| 1832 | }
|
|---|
| 1833 | if (found !== undefined && postProcessorsToApply.length) {
|
|---|
| 1834 | for (j = 0; j < postProcessorsToApply.length; j += 1) {
|
|---|
| 1835 | postProcessor = postProcessorsToApply[j];
|
|---|
| 1836 | if (postProcessors[postProcessor]) {
|
|---|
| 1837 | found = postProcessors[postProcessor](found, key, options)
|
|---|
| 1838 | }
|
|---|
| 1839 | }
|
|---|
| 1840 | }
|
|---|
| 1841 | var splitNotFound = notFound;
|
|---|
| 1842 | if (notFound.indexOf(nsseparator) > -1) {
|
|---|
| 1843 | parts = notFound.split(nsseparator);
|
|---|
| 1844 | splitNotFound = parts[1]
|
|---|
| 1845 | }
|
|---|
| 1846 | if (splitNotFound === key && o.parseMissingKey) {
|
|---|
| 1847 | notFound = o.parseMissingKey(notFound)
|
|---|
| 1848 | }
|
|---|
| 1849 | if (found === undefined) {
|
|---|
| 1850 | notFound = applyReplacement(notFound, options);
|
|---|
| 1851 | notFound = applyReuse(notFound, options);
|
|---|
| 1852 | if (postProcessorsToApply.length) {
|
|---|
| 1853 | found = _getDefaultValue(key, options);
|
|---|
| 1854 | for (j = 0; j < postProcessorsToApply.length; j += 1) {
|
|---|
| 1855 | postProcessor = postProcessorsToApply[j];
|
|---|
| 1856 | if (postProcessors[postProcessor]) {
|
|---|
| 1857 | found = postProcessors[postProcessor](found, key, options)
|
|---|
| 1858 | }
|
|---|
| 1859 | }
|
|---|
| 1860 | }
|
|---|
| 1861 | }
|
|---|
| 1862 | return found !== undefined ? found : notFound
|
|---|
| 1863 | }
|
|---|
| 1864 |
|
|---|
| 1865 | function _find(key, options) {
|
|---|
| 1866 | options = options || {};
|
|---|
| 1867 | var optionWithoutCount, translated, notFound = _getDefaultValue(key, options),
|
|---|
| 1868 | lngs = languages;
|
|---|
| 1869 | if (!resStore) {
|
|---|
| 1870 | return notFound
|
|---|
| 1871 | }
|
|---|
| 1872 | if (lngs[0].toLowerCase() === "cimode")
|
|---|
| 1873 | return notFound;
|
|---|
| 1874 | if (options.lngs)
|
|---|
| 1875 | lngs = options.lngs;
|
|---|
| 1876 | if (options.lng) {
|
|---|
| 1877 | lngs = f.toLanguages(options.lng, options.fallbackLng);
|
|---|
| 1878 | if (!resStore[lngs[0]]) {
|
|---|
| 1879 | var oldAsync = o.getAsync;
|
|---|
| 1880 | o.getAsync = false;
|
|---|
| 1881 | i18n.sync.load(lngs, o, function (err, store) {
|
|---|
| 1882 | f.extend(resStore, store);
|
|---|
| 1883 | o.getAsync = oldAsync
|
|---|
| 1884 | })
|
|---|
| 1885 | }
|
|---|
| 1886 | }
|
|---|
| 1887 | var ns = options.ns || o.ns.defaultNs;
|
|---|
| 1888 | var nsseparator = options.nsseparator || o.nsseparator;
|
|---|
| 1889 | if (key.indexOf(nsseparator) > -1) {
|
|---|
| 1890 | var parts = key.split(nsseparator);
|
|---|
| 1891 | ns = parts[0];
|
|---|
| 1892 | key = parts[1]
|
|---|
| 1893 | }
|
|---|
| 1894 | if (hasContext(options)) {
|
|---|
| 1895 | optionWithoutCount = f.extend({}, options);
|
|---|
| 1896 | delete optionWithoutCount.context;
|
|---|
| 1897 | optionWithoutCount.defaultValue = o.contextNotFound;
|
|---|
| 1898 | var contextKey = ns + nsseparator + key + "_" + options.context;
|
|---|
| 1899 | translated = translate(contextKey, optionWithoutCount);
|
|---|
| 1900 | if (translated != o.contextNotFound) {
|
|---|
| 1901 | return applyReplacement(translated, {
|
|---|
| 1902 | context: options.context
|
|---|
| 1903 | })
|
|---|
| 1904 | }
|
|---|
| 1905 | }
|
|---|
| 1906 | if (needsPlural(options, lngs[0])) {
|
|---|
| 1907 | optionWithoutCount = f.extend({
|
|---|
| 1908 | lngs: [lngs[0]]
|
|---|
| 1909 | }, options);
|
|---|
| 1910 | delete optionWithoutCount.count;
|
|---|
| 1911 | optionWithoutCount._origLng = optionWithoutCount._origLng || optionWithoutCount.lng || lngs[0];
|
|---|
| 1912 | delete optionWithoutCount.lng;
|
|---|
| 1913 | optionWithoutCount.defaultValue = o.pluralNotFound;
|
|---|
| 1914 | var pluralKey;
|
|---|
| 1915 | if (!pluralExtensions.needsPlural(lngs[0], options.count)) {
|
|---|
| 1916 | pluralKey = ns + nsseparator + key
|
|---|
| 1917 | } else {
|
|---|
| 1918 | pluralKey = ns + nsseparator + key + o.pluralSuffix;
|
|---|
| 1919 | var pluralExtension = pluralExtensions.get(lngs[0], options.count);
|
|---|
| 1920 | if (pluralExtension >= 0) {
|
|---|
| 1921 | pluralKey = pluralKey + "_" + pluralExtension
|
|---|
| 1922 | } else if (pluralExtension === 1) {
|
|---|
| 1923 | pluralKey = ns + nsseparator + key
|
|---|
| 1924 | }
|
|---|
| 1925 | }
|
|---|
| 1926 | translated = translate(pluralKey, optionWithoutCount);
|
|---|
| 1927 | if (translated != o.pluralNotFound) {
|
|---|
| 1928 | return applyReplacement(translated, {
|
|---|
| 1929 | count: options.count,
|
|---|
| 1930 | interpolationPrefix: options.interpolationPrefix,
|
|---|
| 1931 | interpolationSuffix: options.interpolationSuffix
|
|---|
| 1932 | })
|
|---|
| 1933 | } else if (lngs.length > 1) {
|
|---|
| 1934 | var clone = lngs.slice();
|
|---|
| 1935 | clone.shift();
|
|---|
| 1936 | options = f.extend(options, {
|
|---|
| 1937 | lngs: clone
|
|---|
| 1938 | });
|
|---|
| 1939 | options._origLng = optionWithoutCount._origLng;
|
|---|
| 1940 | delete options.lng;
|
|---|
| 1941 | translated = translate(ns + nsseparator + key, options);
|
|---|
| 1942 | if (translated != o.pluralNotFound)
|
|---|
| 1943 | return translated
|
|---|
| 1944 | } else {
|
|---|
| 1945 | optionWithoutCount.lng = optionWithoutCount._origLng;
|
|---|
| 1946 | delete optionWithoutCount._origLng;
|
|---|
| 1947 | translated = translate(ns + nsseparator + key, optionWithoutCount);
|
|---|
| 1948 | return applyReplacement(translated, {
|
|---|
| 1949 | count: options.count,
|
|---|
| 1950 | interpolationPrefix: options.interpolationPrefix,
|
|---|
| 1951 | interpolationSuffix: options.interpolationSuffix
|
|---|
| 1952 | })
|
|---|
| 1953 | }
|
|---|
| 1954 | }
|
|---|
| 1955 | if (needsIndefiniteArticle(options)) {
|
|---|
| 1956 | var optionsWithoutIndef = f.extend({}, options);
|
|---|
| 1957 | delete optionsWithoutIndef.indefinite_article;
|
|---|
| 1958 | optionsWithoutIndef.defaultValue = o.indefiniteNotFound;
|
|---|
| 1959 | var indefiniteKey = ns + nsseparator + key + (options.count && !needsPlural(options, lngs[0]) || !options.count ? o.indefiniteSuffix : "");
|
|---|
| 1960 | translated = translate(indefiniteKey, optionsWithoutIndef);
|
|---|
| 1961 | if (translated != o.indefiniteNotFound) {
|
|---|
| 1962 | return translated
|
|---|
| 1963 | }
|
|---|
| 1964 | }
|
|---|
| 1965 | var found;
|
|---|
| 1966 | var keyseparator = options.keyseparator || o.keyseparator;
|
|---|
| 1967 | var keys = key.split(keyseparator);
|
|---|
| 1968 | for (var i = 0, len = lngs.length; i < len; i++) {
|
|---|
| 1969 | if (found !== undefined)
|
|---|
| 1970 | break;
|
|---|
| 1971 | var l = lngs[i];
|
|---|
| 1972 | var x = 0;
|
|---|
| 1973 | var value = resStore[l] && resStore[l][ns];
|
|---|
| 1974 | while (keys[x]) {
|
|---|
| 1975 | value = value && value[keys[x]];
|
|---|
| 1976 | x++
|
|---|
| 1977 | }
|
|---|
| 1978 | if (value !== undefined && (!o.showKeyIfEmpty || value !== "")) {
|
|---|
| 1979 | var valueType = Object.prototype.toString.apply(value);
|
|---|
| 1980 | if (typeof value === "string") {
|
|---|
| 1981 | value = applyReplacement(value, options);
|
|---|
| 1982 | value = applyReuse(value, options)
|
|---|
| 1983 | } else if (valueType === "[object Array]" && !o.returnObjectTrees && !options.returnObjectTrees) {
|
|---|
| 1984 | value = value.join("\n");
|
|---|
| 1985 | value = applyReplacement(value, options);
|
|---|
| 1986 | value = applyReuse(value, options)
|
|---|
| 1987 | } else if (value === null && o.fallbackOnNull === true) {
|
|---|
| 1988 | value = undefined
|
|---|
| 1989 | } else if (value !== null) {
|
|---|
| 1990 | if (!o.returnObjectTrees && !options.returnObjectTrees) {
|
|---|
| 1991 | if (o.objectTreeKeyHandler && typeof o.objectTreeKeyHandler == "function") {
|
|---|
| 1992 | value = o.objectTreeKeyHandler(key, value, l, ns, options)
|
|---|
| 1993 | } else {
|
|---|
| 1994 | value = "key '" + ns + ":" + key + " (" + l + ")' " + "returned an object instead of string.";
|
|---|
| 1995 | f.log(value)
|
|---|
| 1996 | }
|
|---|
| 1997 | } else if (valueType !== "[object Number]" && valueType !== "[object Function]" && valueType !== "[object RegExp]") {
|
|---|
| 1998 | var copy = valueType === "[object Array]" ? [] : {};
|
|---|
| 1999 | f.each(value, function (m) {
|
|---|
| 2000 | copy[m] = _translate(ns + nsseparator + key + keyseparator + m, options)
|
|---|
| 2001 | });
|
|---|
| 2002 | value = copy
|
|---|
| 2003 | }
|
|---|
| 2004 | }
|
|---|
| 2005 | if (typeof value === "string" && value.trim() === "" && o.fallbackOnEmpty === true)
|
|---|
| 2006 | value = undefined;
|
|---|
| 2007 | found = value
|
|---|
| 2008 | }
|
|---|
| 2009 | }
|
|---|
| 2010 | if (found === undefined && !options.isFallbackLookup && (o.fallbackToDefaultNS === true || o.fallbackNS && o.fallbackNS.length > 0)) {
|
|---|
| 2011 | options.isFallbackLookup = true;
|
|---|
| 2012 | if (o.fallbackNS.length) {
|
|---|
| 2013 | for (var y = 0, lenY = o.fallbackNS.length; y < lenY; y++) {
|
|---|
| 2014 | found = _find(o.fallbackNS[y] + nsseparator + key, options);
|
|---|
| 2015 | if (found || found === "" && o.fallbackOnEmpty === false) {
|
|---|
| 2016 | var foundValue = found.indexOf(nsseparator) > -1 ? found.split(nsseparator)[1] : found,
|
|---|
| 2017 | notFoundValue = notFound.indexOf(nsseparator) > -1 ? notFound.split(nsseparator)[1] : notFound;
|
|---|
| 2018 | if (foundValue !== notFoundValue)
|
|---|
| 2019 | break
|
|---|
| 2020 | }
|
|---|
| 2021 | }
|
|---|
| 2022 | } else {
|
|---|
| 2023 | options.ns = o.ns.defaultNs;
|
|---|
| 2024 | found = _find(key, options)
|
|---|
| 2025 | }
|
|---|
| 2026 | options.isFallbackLookup = false
|
|---|
| 2027 | }
|
|---|
| 2028 | return found
|
|---|
| 2029 | }
|
|---|
| 2030 |
|
|---|
| 2031 | function detectLanguage() {
|
|---|
| 2032 | var detectedLng;
|
|---|
| 2033 | var whitelist = o.lngWhitelist || [];
|
|---|
| 2034 | var userLngChoices = [];
|
|---|
| 2035 | var qsParm = [];
|
|---|
| 2036 | if (typeof window !== "undefined") {
|
|---|
| 2037 | (function () {
|
|---|
| 2038 | var query = window.location.search.substring(1);
|
|---|
| 2039 | var params = query.split("&");
|
|---|
| 2040 | for (var i = 0; i < params.length; i++) {
|
|---|
| 2041 | var pos = params[i].indexOf("=");
|
|---|
| 2042 | if (pos > 0) {
|
|---|
| 2043 | var key = params[i].substring(0, pos);
|
|---|
| 2044 | if (key == o.detectLngQS) {
|
|---|
| 2045 | userLngChoices.push(params[i].substring(pos + 1))
|
|---|
| 2046 | }
|
|---|
| 2047 | }
|
|---|
| 2048 | }
|
|---|
| 2049 | })()
|
|---|
| 2050 | }
|
|---|
| 2051 | if (o.useCookie && typeof document !== "undefined") {
|
|---|
| 2052 | var c = f.cookie.read(o.cookieName);
|
|---|
| 2053 | if (c)
|
|---|
| 2054 | userLngChoices.push(c)
|
|---|
| 2055 | }
|
|---|
| 2056 | if (o.detectLngFromLocalStorage && typeof window !== "undefined" && window.localStorage) {
|
|---|
| 2057 | var lang = f.localStorage.getItem("i18next_lng");
|
|---|
| 2058 | if (lang) {
|
|---|
| 2059 | userLngChoices.push(lang)
|
|---|
| 2060 | }
|
|---|
| 2061 | }
|
|---|
| 2062 | if (typeof navigator !== "undefined") {
|
|---|
| 2063 | if (navigator.languages) {
|
|---|
| 2064 | for (var i = 0; i < navigator.languages.length; i++) {
|
|---|
| 2065 | userLngChoices.push(navigator.languages[i])
|
|---|
| 2066 | }
|
|---|
| 2067 | }
|
|---|
| 2068 | if (navigator.userLanguage) {
|
|---|
| 2069 | userLngChoices.push(navigator.userLanguage)
|
|---|
| 2070 | }
|
|---|
| 2071 | if (navigator.language) {
|
|---|
| 2072 | userLngChoices.push(navigator.language)
|
|---|
| 2073 | }
|
|---|
| 2074 | }
|
|---|
| 2075 | (function () {
|
|---|
| 2076 | for (var i = 0; i < userLngChoices.length; i++) {
|
|---|
| 2077 | var lng = userLngChoices[i];
|
|---|
| 2078 | if (lng.indexOf("-") > -1) {
|
|---|
| 2079 | var parts = lng.split("-");
|
|---|
| 2080 | lng = o.lowerCaseLng ? parts[0].toLowerCase() + "-" + parts[1].toLowerCase() : parts[0].toLowerCase() + "-" + parts[1].toUpperCase()
|
|---|
| 2081 | }
|
|---|
| 2082 | if (whitelist.length === 0 || whitelist.indexOf(lng) > -1) {
|
|---|
| 2083 | detectedLng = lng;
|
|---|
| 2084 | break
|
|---|
| 2085 | }
|
|---|
| 2086 | }
|
|---|
| 2087 | })();
|
|---|
| 2088 | if (!detectedLng) {
|
|---|
| 2089 | detectedLng = o.fallbackLng[0]
|
|---|
| 2090 | }
|
|---|
| 2091 | return detectedLng
|
|---|
| 2092 | }
|
|---|
| 2093 | var _rules = [
|
|---|
| 2094 | ["ach", "Acholi", [1, 2], 1],
|
|---|
| 2095 | ["af", "Afrikaans", [1, 2], 2],
|
|---|
| 2096 | ["ak", "Akan", [1, 2], 1],
|
|---|
| 2097 | ["am", "Amharic", [1, 2], 1],
|
|---|
| 2098 | ["an", "Aragonese", [1, 2], 2],
|
|---|
| 2099 | ["ar", "Arabic", [0, 1, 2, 3, 11, 100], 5],
|
|---|
| 2100 | ["arn", "Mapudungun", [1, 2], 1],
|
|---|
| 2101 | ["ast", "Asturian", [1, 2], 2],
|
|---|
| 2102 | ["ay", "Aymará", [1], 3],
|
|---|
| 2103 | ["az", "Azerbaijani", [1, 2], 2],
|
|---|
| 2104 | ["be", "Belarusian", [1, 2, 5], 4],
|
|---|
| 2105 | ["bg", "Bulgarian", [1, 2], 2],
|
|---|
| 2106 | ["bn", "Bengali", [1, 2], 2],
|
|---|
| 2107 | ["bo", "Tibetan", [1], 3],
|
|---|
| 2108 | ["br", "Breton", [1, 2], 1],
|
|---|
| 2109 | ["bs", "Bosnian", [1, 2, 5], 4],
|
|---|
| 2110 | ["ca", "Catalan", [1, 2], 2],
|
|---|
| 2111 | ["cgg", "Chiga", [1], 3],
|
|---|
| 2112 | ["cs", "Czech", [1, 2, 5], 6],
|
|---|
| 2113 | ["csb", "Kashubian", [1, 2, 5], 7],
|
|---|
| 2114 | ["cy", "Welsh", [1, 2, 3, 8], 8],
|
|---|
| 2115 | ["da", "Danish", [1, 2], 2],
|
|---|
| 2116 | ["de", "German", [1, 2], 2],
|
|---|
| 2117 | ["dev", "Development Fallback", [1, 2], 2],
|
|---|
| 2118 | ["dz", "Dzongkha", [1], 3],
|
|---|
| 2119 | ["el", "Greek", [1, 2], 2],
|
|---|
| 2120 | ["en", "English", [1, 2], 2],
|
|---|
| 2121 | ["eo", "Esperanto", [1, 2], 2],
|
|---|
| 2122 | ["es", "Spanish", [1, 2], 2],
|
|---|
| 2123 | ["es_ar", "Argentinean Spanish", [1, 2], 2],
|
|---|
| 2124 | ["et", "Estonian", [1, 2], 2],
|
|---|
| 2125 | ["eu", "Basque", [1, 2], 2],
|
|---|
| 2126 | ["fa", "Persian", [1], 3],
|
|---|
| 2127 | ["fi", "Finnish", [1, 2], 2],
|
|---|
| 2128 | ["fil", "Filipino", [1, 2], 1],
|
|---|
| 2129 | ["fo", "Faroese", [1, 2], 2],
|
|---|
| 2130 | ["fr", "French", [1, 2], 9],
|
|---|
| 2131 | ["fur", "Friulian", [1, 2], 2],
|
|---|
| 2132 | ["fy", "Frisian", [1, 2], 2],
|
|---|
| 2133 | ["ga", "Irish", [1, 2, 3, 7, 11], 10],
|
|---|
| 2134 | ["gd", "Scottish Gaelic", [1, 2, 3, 20], 11],
|
|---|
| 2135 | ["gl", "Galician", [1, 2], 2],
|
|---|
| 2136 | ["gu", "Gujarati", [1, 2], 2],
|
|---|
| 2137 | ["gun", "Gun", [1, 2], 1],
|
|---|
| 2138 | ["ha", "Hausa", [1, 2], 2],
|
|---|
| 2139 | ["he", "Hebrew", [1, 2], 2],
|
|---|
| 2140 | ["hi", "Hindi", [1, 2], 2],
|
|---|
| 2141 | ["hr", "Croatian", [1, 2, 5], 4],
|
|---|
| 2142 | ["hu", "Hungarian", [1, 2], 2],
|
|---|
| 2143 | ["hy", "Armenian", [1, 2], 2],
|
|---|
| 2144 | ["ia", "Interlingua", [1, 2], 2],
|
|---|
| 2145 | ["id", "Indonesian", [1], 3],
|
|---|
| 2146 | ["is", "Icelandic", [1, 2], 12],
|
|---|
| 2147 | ["it", "Italian", [1, 2], 2],
|
|---|
| 2148 | ["ja", "Japanese", [1], 3],
|
|---|
| 2149 | ["jbo", "Lojban", [1], 3],
|
|---|
| 2150 | ["jv", "Javanese", [0, 1], 13],
|
|---|
| 2151 | ["ka", "Georgian", [1], 3],
|
|---|
| 2152 | ["kk", "Kazakh", [1], 3],
|
|---|
| 2153 | ["km", "Khmer", [1], 3],
|
|---|
| 2154 | ["kn", "Kannada", [1, 2], 2],
|
|---|
| 2155 | ["ko", "Korean", [1], 3],
|
|---|
| 2156 | ["ku", "Kurdish", [1, 2], 2],
|
|---|
| 2157 | ["kw", "Cornish", [1, 2, 3, 4], 14],
|
|---|
| 2158 | ["ky", "Kyrgyz", [1], 3],
|
|---|
| 2159 | ["lb", "Letzeburgesch", [1, 2], 2],
|
|---|
| 2160 | ["ln", "Lingala", [1, 2], 1],
|
|---|
| 2161 | ["lo", "Lao", [1], 3],
|
|---|
| 2162 | ["lt", "Lithuanian", [1, 2, 10], 15],
|
|---|
| 2163 | ["lv", "Latvian", [1, 2, 0], 16],
|
|---|
| 2164 | ["mai", "Maithili", [1, 2], 2],
|
|---|
| 2165 | ["mfe", "Mauritian Creole", [1, 2], 1],
|
|---|
| 2166 | ["mg", "Malagasy", [1, 2], 1],
|
|---|
| 2167 | ["mi", "Maori", [1, 2], 1],
|
|---|
| 2168 | ["mk", "Macedonian", [1, 2], 17],
|
|---|
| 2169 | ["ml", "Malayalam", [1, 2], 2],
|
|---|
| 2170 | ["mn", "Mongolian", [1, 2], 2],
|
|---|
| 2171 | ["mnk", "Mandinka", [0, 1, 2], 18],
|
|---|
| 2172 | ["mr", "Marathi", [1, 2], 2],
|
|---|
| 2173 | ["ms", "Malay", [1], 3],
|
|---|
| 2174 | ["mt", "Maltese", [1, 2, 11, 20], 19],
|
|---|
| 2175 | ["nah", "Nahuatl", [1, 2], 2],
|
|---|
| 2176 | ["nap", "Neapolitan", [1, 2], 2],
|
|---|
| 2177 | ["nb", "Norwegian Bokmal", [1, 2], 2],
|
|---|
| 2178 | ["ne", "Nepali", [1, 2], 2],
|
|---|
| 2179 | ["nl", "Dutch", [1, 2], 2],
|
|---|
| 2180 | ["nn", "Norwegian Nynorsk", [1, 2], 2],
|
|---|
| 2181 | ["no", "Norwegian", [1, 2], 2],
|
|---|
| 2182 | ["nso", "Northern Sotho", [1, 2], 2],
|
|---|
| 2183 | ["oc", "Occitan", [1, 2], 1],
|
|---|
| 2184 | ["or", "Oriya", [2, 1], 2],
|
|---|
| 2185 | ["pa", "Punjabi", [1, 2], 2],
|
|---|
| 2186 | ["pap", "Papiamento", [1, 2], 2],
|
|---|
| 2187 | ["pl", "Polish", [1, 2, 5], 7],
|
|---|
| 2188 | ["pms", "Piemontese", [1, 2], 2],
|
|---|
| 2189 | ["ps", "Pashto", [1, 2], 2],
|
|---|
| 2190 | ["pt", "Portuguese", [1, 2], 2],
|
|---|
| 2191 | ["pt_br", "Brazilian Portuguese", [1, 2], 2],
|
|---|
| 2192 | ["rm", "Romansh", [1, 2], 2],
|
|---|
| 2193 | ["ro", "Romanian", [1, 2, 20], 20],
|
|---|
| 2194 | ["ru", "Russian", [1, 2, 5], 4],
|
|---|
| 2195 | ["sah", "Yakut", [1], 3],
|
|---|
| 2196 | ["sco", "Scots", [1, 2], 2],
|
|---|
| 2197 | ["se", "Northern Sami", [1, 2], 2],
|
|---|
| 2198 | ["si", "Sinhala", [1, 2], 2],
|
|---|
| 2199 | ["sk", "Slovak", [1, 2, 5], 6],
|
|---|
| 2200 | ["sl", "Slovenian", [5, 1, 2, 3], 21],
|
|---|
| 2201 | ["so", "Somali", [1, 2], 2],
|
|---|
| 2202 | ["son", "Songhay", [1, 2], 2],
|
|---|
| 2203 | ["sq", "Albanian", [1, 2], 2],
|
|---|
| 2204 | ["sr", "Serbian", [1, 2, 5], 4],
|
|---|
| 2205 | ["su", "Sundanese", [1], 3],
|
|---|
| 2206 | ["sv", "Swedish", [1, 2], 2],
|
|---|
| 2207 | ["sw", "Swahili", [1, 2], 2],
|
|---|
| 2208 | ["ta", "Tamil", [1, 2], 2],
|
|---|
| 2209 | ["te", "Telugu", [1, 2], 2],
|
|---|
| 2210 | ["tg", "Tajik", [1, 2], 1],
|
|---|
| 2211 | ["th", "Thai", [1], 3],
|
|---|
| 2212 | ["ti", "Tigrinya", [1, 2], 1],
|
|---|
| 2213 | ["tk", "Turkmen", [1, 2], 2],
|
|---|
| 2214 | ["tr", "Turkish", [1, 2], 1],
|
|---|
| 2215 | ["tt", "Tatar", [1], 3],
|
|---|
| 2216 | ["ug", "Uyghur", [1], 3],
|
|---|
| 2217 | ["uk", "Ukrainian", [1, 2, 5], 4],
|
|---|
| 2218 | ["ur", "Urdu", [1, 2], 2],
|
|---|
| 2219 | ["uz", "Uzbek", [1, 2], 1],
|
|---|
| 2220 | ["vi", "Vietnamese", [1], 3],
|
|---|
| 2221 | ["wa", "Walloon", [1, 2], 1],
|
|---|
| 2222 | ["wo", "Wolof", [1], 3],
|
|---|
| 2223 | ["yo", "Yoruba", [1, 2], 2],
|
|---|
| 2224 | ["zh", "Chinese", [1], 3]
|
|---|
| 2225 | ];
|
|---|
| 2226 | var _rulesPluralsTypes = {
|
|---|
| 2227 | 1: function (n) {
|
|---|
| 2228 | return Number(n > 1)
|
|---|
| 2229 | },
|
|---|
| 2230 | 2: function (n) {
|
|---|
| 2231 | return Number(n != 1)
|
|---|
| 2232 | },
|
|---|
| 2233 | 3: function (n) {
|
|---|
| 2234 | return 0
|
|---|
| 2235 | },
|
|---|
| 2236 | 4: function (n) {
|
|---|
| 2237 | return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2)
|
|---|
| 2238 | },
|
|---|
| 2239 | 5: function (n) {
|
|---|
| 2240 | return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5)
|
|---|
| 2241 | },
|
|---|
| 2242 | 6: function (n) {
|
|---|
| 2243 | return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2)
|
|---|
| 2244 | },
|
|---|
| 2245 | 7: function (n) {
|
|---|
| 2246 | return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2)
|
|---|
| 2247 | },
|
|---|
| 2248 | 8: function (n) {
|
|---|
| 2249 | return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3)
|
|---|
| 2250 | },
|
|---|
| 2251 | 9: function (n) {
|
|---|
| 2252 | return Number(n >= 2)
|
|---|
| 2253 | },
|
|---|
| 2254 | 10: function (n) {
|
|---|
| 2255 | return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4)
|
|---|
| 2256 | },
|
|---|
| 2257 | 11: function (n) {
|
|---|
| 2258 | return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3)
|
|---|
| 2259 | },
|
|---|
| 2260 | 12: function (n) {
|
|---|
| 2261 | return Number(n % 10 != 1 || n % 100 == 11)
|
|---|
| 2262 | },
|
|---|
| 2263 | 13: function (n) {
|
|---|
| 2264 | return Number(n !== 0)
|
|---|
| 2265 | },
|
|---|
| 2266 | 14: function (n) {
|
|---|
| 2267 | return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3)
|
|---|
| 2268 | },
|
|---|
| 2269 | 15: function (n) {
|
|---|
| 2270 | return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2)
|
|---|
| 2271 | },
|
|---|
| 2272 | 16: function (n) {
|
|---|
| 2273 | return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2)
|
|---|
| 2274 | },
|
|---|
| 2275 | 17: function (n) {
|
|---|
| 2276 | return Number(n == 1 || n % 10 == 1 ? 0 : 1)
|
|---|
| 2277 | },
|
|---|
| 2278 | 18: function (n) {
|
|---|
| 2279 | return Number(n == 0 ? 0 : n == 1 ? 1 : 2)
|
|---|
| 2280 | },
|
|---|
| 2281 | 19: function (n) {
|
|---|
| 2282 | return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3)
|
|---|
| 2283 | },
|
|---|
| 2284 | 20: function (n) {
|
|---|
| 2285 | return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2)
|
|---|
| 2286 | },
|
|---|
| 2287 | 21: function (n) {
|
|---|
| 2288 | return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0)
|
|---|
| 2289 | }
|
|---|
| 2290 | };
|
|---|
| 2291 | var pluralExtensions = {
|
|---|
| 2292 | rules: function () {
|
|---|
| 2293 | var l, rules = {};
|
|---|
| 2294 | for (l = _rules.length; l--; ) {
|
|---|
| 2295 | rules[_rules[l][0]] = {
|
|---|
| 2296 | name: _rules[l][1],
|
|---|
| 2297 | numbers: _rules[l][2],
|
|---|
| 2298 | plurals: _rulesPluralsTypes[_rules[l][3]]
|
|---|
| 2299 | }
|
|---|
| 2300 | }
|
|---|
| 2301 | return rules
|
|---|
| 2302 | }(),
|
|---|
| 2303 | addRule: function (lng, obj) {
|
|---|
| 2304 | pluralExtensions.rules[lng] = obj
|
|---|
| 2305 | },
|
|---|
| 2306 | setCurrentLng: function (lng) {
|
|---|
| 2307 | if (!pluralExtensions.currentRule || pluralExtensions.currentRule.lng !== lng) {
|
|---|
| 2308 | var parts = lng.split("-");
|
|---|
| 2309 | pluralExtensions.currentRule = {
|
|---|
| 2310 | lng: lng,
|
|---|
| 2311 | rule: pluralExtensions.rules[parts[0]]
|
|---|
| 2312 | }
|
|---|
| 2313 | }
|
|---|
| 2314 | },
|
|---|
| 2315 | needsPlural: function (lng, count) {
|
|---|
| 2316 | var parts = lng.split("-");
|
|---|
| 2317 | var ext;
|
|---|
| 2318 | if (pluralExtensions.currentRule && pluralExtensions.currentRule.lng === lng) {
|
|---|
| 2319 | ext = pluralExtensions.currentRule.rule
|
|---|
| 2320 | } else {
|
|---|
| 2321 | ext = pluralExtensions.rules[parts[f.getCountyIndexOfLng(lng)]]
|
|---|
| 2322 | }
|
|---|
| 2323 | if (ext && ext.numbers.length <= 1) {
|
|---|
| 2324 | return false
|
|---|
| 2325 | } else {
|
|---|
| 2326 | return this.get(lng, count) !== 1
|
|---|
| 2327 | }
|
|---|
| 2328 | },
|
|---|
| 2329 | get: function (lng, count) {
|
|---|
| 2330 | var parts = lng.split("-");
|
|---|
| 2331 |
|
|---|
| 2332 | function getResult(l, c) {
|
|---|
| 2333 | var ext;
|
|---|
| 2334 | if (pluralExtensions.currentRule && pluralExtensions.currentRule.lng === lng) {
|
|---|
| 2335 | ext = pluralExtensions.currentRule.rule
|
|---|
| 2336 | } else {
|
|---|
| 2337 | ext = pluralExtensions.rules[l]
|
|---|
| 2338 | }
|
|---|
| 2339 | if (ext) {
|
|---|
| 2340 | var i;
|
|---|
| 2341 | if (ext.noAbs) {
|
|---|
| 2342 | i = ext.plurals(c)
|
|---|
| 2343 | } else {
|
|---|
| 2344 | i = ext.plurals(Math.abs(c))
|
|---|
| 2345 | }
|
|---|
| 2346 | var number = ext.numbers[i];
|
|---|
| 2347 | if (ext.numbers.length === 2 && ext.numbers[0] === 1) {
|
|---|
| 2348 | if (number === 2) {
|
|---|
| 2349 | number = -1
|
|---|
| 2350 | } else if (number === 1) {
|
|---|
| 2351 | number = 1
|
|---|
| 2352 | }
|
|---|
| 2353 | }
|
|---|
| 2354 | return number
|
|---|
| 2355 | } else {
|
|---|
| 2356 | return c === 1 ? "1" : "-1"
|
|---|
| 2357 | }
|
|---|
| 2358 | }
|
|---|
| 2359 | return getResult(parts[f.getCountyIndexOfLng(lng)], count)
|
|---|
| 2360 | }
|
|---|
| 2361 | };
|
|---|
| 2362 | var postProcessors = {};
|
|---|
| 2363 | var addPostProcessor = function (name, fc) {
|
|---|
| 2364 | postProcessors[name] = fc
|
|---|
| 2365 | };
|
|---|
| 2366 | var sprintf = function () {
|
|---|
| 2367 | function get_type(variable) {
|
|---|
| 2368 | return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase()
|
|---|
| 2369 | }
|
|---|
| 2370 |
|
|---|
| 2371 | function str_repeat(input, multiplier) {
|
|---|
| 2372 | for (var output = []; multiplier > 0; output[--multiplier] = input) {
|
|---|
| 2373 | }
|
|---|
| 2374 | return output.join("")
|
|---|
| 2375 | }
|
|---|
| 2376 | var str_format = function () {
|
|---|
| 2377 | if (!str_format.cache.hasOwnProperty(arguments[0])) {
|
|---|
| 2378 | str_format.cache[arguments[0]] = str_format.parse(arguments[0])
|
|---|
| 2379 | }
|
|---|
| 2380 | return str_format.format.call(null, str_format.cache[arguments[0]], arguments)
|
|---|
| 2381 | };
|
|---|
| 2382 | str_format.format = function (parse_tree, argv) {
|
|---|
| 2383 | var cursor = 1,
|
|---|
| 2384 | tree_length = parse_tree.length,
|
|---|
| 2385 | node_type = "",
|
|---|
| 2386 | arg, output = [],
|
|---|
| 2387 | i, k, match, pad, pad_character, pad_length;
|
|---|
| 2388 | for (i = 0; i < tree_length; i++) {
|
|---|
| 2389 | node_type = get_type(parse_tree[i]);
|
|---|
| 2390 | if (node_type === "string") {
|
|---|
| 2391 | output.push(parse_tree[i])
|
|---|
| 2392 | } else if (node_type === "array") {
|
|---|
| 2393 | match = parse_tree[i];
|
|---|
| 2394 | if (match[2]) {
|
|---|
| 2395 | arg = argv[cursor];
|
|---|
| 2396 | for (k = 0; k < match[2].length; k++) {
|
|---|
| 2397 | if (!arg.hasOwnProperty(match[2][k])) {
|
|---|
| 2398 | throw sprintf('[sprintf] property "%s" does not exist', match[2][k])
|
|---|
| 2399 | }
|
|---|
| 2400 | arg = arg[match[2][k]]
|
|---|
| 2401 | }
|
|---|
| 2402 | } else if (match[1]) {
|
|---|
| 2403 | arg = argv[match[1]]
|
|---|
| 2404 | } else {
|
|---|
| 2405 | arg = argv[cursor++]
|
|---|
| 2406 | }
|
|---|
| 2407 | if (/[^s]/.test(match[8]) && get_type(arg) != "number") {
|
|---|
| 2408 | throw sprintf("[sprintf] expecting number but found %s", get_type(arg))
|
|---|
| 2409 | }
|
|---|
| 2410 | switch (match[8]) {
|
|---|
| 2411 | case "b":
|
|---|
| 2412 | arg = arg.toString(2);
|
|---|
| 2413 | break;
|
|---|
| 2414 | case "c":
|
|---|
| 2415 | arg = String.fromCharCode(arg);
|
|---|
| 2416 | break;
|
|---|
| 2417 | case "d":
|
|---|
| 2418 | arg = parseInt(arg, 10);
|
|---|
| 2419 | break;
|
|---|
| 2420 | case "e":
|
|---|
| 2421 | arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential();
|
|---|
| 2422 | break;
|
|---|
| 2423 | case "f":
|
|---|
| 2424 | arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg);
|
|---|
| 2425 | break;
|
|---|
| 2426 | case "o":
|
|---|
| 2427 | arg = arg.toString(8);
|
|---|
| 2428 | break;
|
|---|
| 2429 | case "s":
|
|---|
| 2430 | arg = (arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg;
|
|---|
| 2431 | break;
|
|---|
| 2432 | case "u":
|
|---|
| 2433 | arg = Math.abs(arg);
|
|---|
| 2434 | break;
|
|---|
| 2435 | case "x":
|
|---|
| 2436 | arg = arg.toString(16);
|
|---|
| 2437 | break;
|
|---|
| 2438 | case "X":
|
|---|
| 2439 | arg = arg.toString(16).toUpperCase();
|
|---|
| 2440 | break
|
|---|
| 2441 | }
|
|---|
| 2442 | arg = /[def]/.test(match[8]) && match[3] && arg >= 0 ? "+" + arg : arg;
|
|---|
| 2443 | pad_character = match[4] ? match[4] == "0" ? "0" : match[4].charAt(1) : " ";
|
|---|
| 2444 | pad_length = match[6] - String(arg).length;
|
|---|
| 2445 | pad = match[6] ? str_repeat(pad_character, pad_length) : "";
|
|---|
| 2446 | output.push(match[5] ? arg + pad : pad + arg)
|
|---|
| 2447 | }
|
|---|
| 2448 | }
|
|---|
| 2449 | return output.join("")
|
|---|
| 2450 | };
|
|---|
| 2451 | str_format.cache = {};
|
|---|
| 2452 | str_format.parse = function (fmt) {
|
|---|
| 2453 | var _fmt = fmt,
|
|---|
| 2454 | match = [],
|
|---|
| 2455 | parse_tree = [],
|
|---|
| 2456 | arg_names = 0;
|
|---|
| 2457 | while (_fmt) {
|
|---|
| 2458 | if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
|
|---|
| 2459 | parse_tree.push(match[0])
|
|---|
| 2460 | } else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
|
|---|
| 2461 | parse_tree.push("%")
|
|---|
| 2462 | } else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
|
|---|
| 2463 | if (match[2]) {
|
|---|
| 2464 | arg_names |= 1;
|
|---|
| 2465 | var field_list = [],
|
|---|
| 2466 | replacement_field = match[2],
|
|---|
| 2467 | field_match = [];
|
|---|
| 2468 | if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
|---|
| 2469 | field_list.push(field_match[1]);
|
|---|
| 2470 | while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") {
|
|---|
| 2471 | if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
|
|---|
| 2472 | field_list.push(field_match[1])
|
|---|
| 2473 | } else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
|
|---|
| 2474 | field_list.push(field_match[1])
|
|---|
| 2475 | } else {
|
|---|
| 2476 | throw "[sprintf] huh?"
|
|---|
| 2477 | }
|
|---|
| 2478 | }
|
|---|
| 2479 | } else {
|
|---|
| 2480 | throw "[sprintf] huh?"
|
|---|
| 2481 | }
|
|---|
| 2482 | match[2] = field_list
|
|---|
| 2483 | } else {
|
|---|
| 2484 | arg_names |= 2
|
|---|
| 2485 | }
|
|---|
| 2486 | if (arg_names === 3) {
|
|---|
| 2487 | throw "[sprintf] mixing positional and named placeholders is not (yet) supported"
|
|---|
| 2488 | }
|
|---|
| 2489 | parse_tree.push(match)
|
|---|
| 2490 | } else {
|
|---|
| 2491 | throw "[sprintf] huh?"
|
|---|
| 2492 | }
|
|---|
| 2493 | _fmt = _fmt.substring(match[0].length)
|
|---|
| 2494 | }
|
|---|
| 2495 | return parse_tree
|
|---|
| 2496 | };
|
|---|
| 2497 | return str_format
|
|---|
| 2498 | }();
|
|---|
| 2499 | var vsprintf = function (fmt, argv) {
|
|---|
| 2500 | argv.unshift(fmt);
|
|---|
| 2501 | return sprintf.apply(null, argv)
|
|---|
| 2502 | };
|
|---|
| 2503 | addPostProcessor("sprintf", function (val, key, opts) {
|
|---|
| 2504 | if (!opts.sprintf)
|
|---|
| 2505 | return val;
|
|---|
| 2506 | if (Object.prototype.toString.apply(opts.sprintf) === "[object Array]") {
|
|---|
| 2507 | return vsprintf(val, opts.sprintf)
|
|---|
| 2508 | } else if (typeof opts.sprintf === "object") {
|
|---|
| 2509 | return sprintf(val, opts.sprintf)
|
|---|
| 2510 | }
|
|---|
| 2511 | return val
|
|---|
| 2512 | });
|
|---|
| 2513 | i18n.init = init;
|
|---|
| 2514 | i18n.isInitialized = isInitialized;
|
|---|
| 2515 | i18n.setLng = setLng;
|
|---|
| 2516 | i18n.preload = preload;
|
|---|
| 2517 | i18n.addResourceBundle = addResourceBundle;
|
|---|
| 2518 | i18n.hasResourceBundle = hasResourceBundle;
|
|---|
| 2519 | i18n.getResourceBundle = getResourceBundle;
|
|---|
| 2520 | i18n.addResource = addResource;
|
|---|
| 2521 | i18n.addResources = addResources;
|
|---|
| 2522 | i18n.removeResourceBundle = removeResourceBundle;
|
|---|
| 2523 | i18n.loadNamespace = loadNamespace;
|
|---|
| 2524 | i18n.loadNamespaces = loadNamespaces;
|
|---|
| 2525 | i18n.setDefaultNamespace = setDefaultNamespace;
|
|---|
| 2526 | i18n.t = translate;
|
|---|
| 2527 | i18n.translate = translate;
|
|---|
| 2528 | i18n.exists = exists;
|
|---|
| 2529 | i18n.detectLanguage = f.detectLanguage;
|
|---|
| 2530 | i18n.pluralExtensions = pluralExtensions;
|
|---|
| 2531 | i18n.sync = sync;
|
|---|
| 2532 | i18n.functions = f;
|
|---|
| 2533 | i18n.lng = lng;
|
|---|
| 2534 | i18n.dir = dir;
|
|---|
| 2535 | i18n.addPostProcessor = addPostProcessor;
|
|---|
| 2536 | i18n.applyReplacement = f.applyReplacement;
|
|---|
| 2537 | i18n.options = o;
|
|---|
| 2538 | i18n.noConflict = noConflict
|
|---|
| 2539 | })(typeof exports === "undefined" ? window : exports)
|
|---|
| 2540 | }, {}],
|
|---|
| 2541 | moment: [function (require, module, exports) {
|
|---|
| 2542 | (function (global, factory) {
|
|---|
| 2543 | typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.moment = factory()
|
|---|
| 2544 | })(this, function () {
|
|---|
| 2545 | "use strict";
|
|---|
| 2546 | var hookCallback;
|
|---|
| 2547 |
|
|---|
| 2548 | function hooks() {
|
|---|
| 2549 | return hookCallback.apply(null, arguments)
|
|---|
| 2550 | }
|
|---|
| 2551 |
|
|---|
| 2552 | function setHookCallback(callback) {
|
|---|
| 2553 | hookCallback = callback
|
|---|
| 2554 | }
|
|---|
| 2555 |
|
|---|
| 2556 | function isArray(input) {
|
|---|
| 2557 | return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]"
|
|---|
| 2558 | }
|
|---|
| 2559 |
|
|---|
| 2560 | function isObject(input) {
|
|---|
| 2561 | return input != null && Object.prototype.toString.call(input) === "[object Object]"
|
|---|
| 2562 | }
|
|---|
| 2563 |
|
|---|
| 2564 | function isObjectEmpty(obj) {
|
|---|
| 2565 | var k;
|
|---|
| 2566 | for (k in obj) {
|
|---|
| 2567 | return false
|
|---|
| 2568 | }
|
|---|
| 2569 | return true
|
|---|
| 2570 | }
|
|---|
| 2571 |
|
|---|
| 2572 | function isNumber(input) {
|
|---|
| 2573 | return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]"
|
|---|
| 2574 | }
|
|---|
| 2575 |
|
|---|
| 2576 | function isDate(input) {
|
|---|
| 2577 | return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]"
|
|---|
| 2578 | }
|
|---|
| 2579 |
|
|---|
| 2580 | function map(arr, fn) {
|
|---|
| 2581 | var res = [],
|
|---|
| 2582 | i;
|
|---|
| 2583 | for (i = 0; i < arr.length; ++i) {
|
|---|
| 2584 | res.push(fn(arr[i], i))
|
|---|
| 2585 | }
|
|---|
| 2586 | return res
|
|---|
| 2587 | }
|
|---|
| 2588 |
|
|---|
| 2589 | function hasOwnProp(a, b) {
|
|---|
| 2590 | return Object.prototype.hasOwnProperty.call(a, b)
|
|---|
| 2591 | }
|
|---|
| 2592 |
|
|---|
| 2593 | function extend(a, b) {
|
|---|
| 2594 | for (var i in b) {
|
|---|
| 2595 | if (hasOwnProp(b, i)) {
|
|---|
| 2596 | a[i] = b[i]
|
|---|
| 2597 | }
|
|---|
| 2598 | }
|
|---|
| 2599 | if (hasOwnProp(b, "toString")) {
|
|---|
| 2600 | a.toString = b.toString
|
|---|
| 2601 | }
|
|---|
| 2602 | if (hasOwnProp(b, "valueOf")) {
|
|---|
| 2603 | a.valueOf = b.valueOf
|
|---|
| 2604 | }
|
|---|
| 2605 | return a
|
|---|
| 2606 | }
|
|---|
| 2607 |
|
|---|
| 2608 | function createUTC(input, format, locale, strict) {
|
|---|
| 2609 | return createLocalOrUTC(input, format, locale, strict, true).utc()
|
|---|
| 2610 | }
|
|---|
| 2611 |
|
|---|
| 2612 | function defaultParsingFlags() {
|
|---|
| 2613 | return {
|
|---|
| 2614 | empty: false,
|
|---|
| 2615 | unusedTokens: [],
|
|---|
| 2616 | unusedInput: [],
|
|---|
| 2617 | overflow: -2,
|
|---|
| 2618 | charsLeftOver: 0,
|
|---|
| 2619 | nullInput: false,
|
|---|
| 2620 | invalidMonth: null,
|
|---|
| 2621 | invalidFormat: false,
|
|---|
| 2622 | userInvalidated: false,
|
|---|
| 2623 | iso: false,
|
|---|
| 2624 | parsedDateParts: [],
|
|---|
| 2625 | meridiem: null
|
|---|
| 2626 | }
|
|---|
| 2627 | }
|
|---|
| 2628 |
|
|---|
| 2629 | function getParsingFlags(m) {
|
|---|
| 2630 | if (m._pf == null) {
|
|---|
| 2631 | m._pf = defaultParsingFlags()
|
|---|
| 2632 | }
|
|---|
| 2633 | return m._pf
|
|---|
| 2634 | }
|
|---|
| 2635 | var some;
|
|---|
| 2636 | if (Array.prototype.some) {
|
|---|
| 2637 | some = Array.prototype.some
|
|---|
| 2638 | } else {
|
|---|
| 2639 | some = function (fun) {
|
|---|
| 2640 | var t = Object(this);
|
|---|
| 2641 | var len = t.length >>> 0;
|
|---|
| 2642 | for (var i = 0; i < len; i++) {
|
|---|
| 2643 | if (i in t && fun.call(this, t[i], i, t)) {
|
|---|
| 2644 | return true
|
|---|
| 2645 | }
|
|---|
| 2646 | }
|
|---|
| 2647 | return false
|
|---|
| 2648 | }
|
|---|
| 2649 | }
|
|---|
| 2650 | var some$1 = some;
|
|---|
| 2651 |
|
|---|
| 2652 | function isValid(m) {
|
|---|
| 2653 | if (m._isValid == null) {
|
|---|
| 2654 | var flags = getParsingFlags(m);
|
|---|
| 2655 | var parsedParts = some$1.call(flags.parsedDateParts, function (i) {
|
|---|
| 2656 | return i != null
|
|---|
| 2657 | });
|
|---|
| 2658 | var isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
|
|---|
| 2659 | if (m._strict) {
|
|---|
| 2660 | isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined
|
|---|
| 2661 | }
|
|---|
| 2662 | if (Object.isFrozen == null || !Object.isFrozen(m)) {
|
|---|
| 2663 | m._isValid = isNowValid
|
|---|
| 2664 | } else {
|
|---|
| 2665 | return isNowValid
|
|---|
| 2666 | }
|
|---|
| 2667 | }
|
|---|
| 2668 | return m._isValid
|
|---|
| 2669 | }
|
|---|
| 2670 |
|
|---|
| 2671 | function createInvalid(flags) {
|
|---|
| 2672 | var m = createUTC(NaN);
|
|---|
| 2673 | if (flags != null) {
|
|---|
| 2674 | extend(getParsingFlags(m), flags)
|
|---|
| 2675 | } else {
|
|---|
| 2676 | getParsingFlags(m).userInvalidated = true
|
|---|
| 2677 | }
|
|---|
| 2678 | return m
|
|---|
| 2679 | }
|
|---|
| 2680 |
|
|---|
| 2681 | function isUndefined(input) {
|
|---|
| 2682 | return input === void 0
|
|---|
| 2683 | }
|
|---|
| 2684 | var momentProperties = hooks.momentProperties = [];
|
|---|
| 2685 |
|
|---|
| 2686 | function copyConfig(to, from) {
|
|---|
| 2687 | var i, prop, val;
|
|---|
| 2688 | if (!isUndefined(from._isAMomentObject)) {
|
|---|
| 2689 | to._isAMomentObject = from._isAMomentObject
|
|---|
| 2690 | }
|
|---|
| 2691 | if (!isUndefined(from._i)) {
|
|---|
| 2692 | to._i = from._i
|
|---|
| 2693 | }
|
|---|
| 2694 | if (!isUndefined(from._f)) {
|
|---|
| 2695 | to._f = from._f
|
|---|
| 2696 | }
|
|---|
| 2697 | if (!isUndefined(from._l)) {
|
|---|
| 2698 | to._l = from._l
|
|---|
| 2699 | }
|
|---|
| 2700 | if (!isUndefined(from._strict)) {
|
|---|
| 2701 | to._strict = from._strict
|
|---|
| 2702 | }
|
|---|
| 2703 | if (!isUndefined(from._tzm)) {
|
|---|
| 2704 | to._tzm = from._tzm
|
|---|
| 2705 | }
|
|---|
| 2706 | if (!isUndefined(from._isUTC)) {
|
|---|
| 2707 | to._isUTC = from._isUTC
|
|---|
| 2708 | }
|
|---|
| 2709 | if (!isUndefined(from._offset)) {
|
|---|
| 2710 | to._offset = from._offset
|
|---|
| 2711 | }
|
|---|
| 2712 | if (!isUndefined(from._pf)) {
|
|---|
| 2713 | to._pf = getParsingFlags(from)
|
|---|
| 2714 | }
|
|---|
| 2715 | if (!isUndefined(from._locale)) {
|
|---|
| 2716 | to._locale = from._locale
|
|---|
| 2717 | }
|
|---|
| 2718 | if (momentProperties.length > 0) {
|
|---|
| 2719 | for (i in momentProperties) {
|
|---|
| 2720 | prop = momentProperties[i];
|
|---|
| 2721 | val = from[prop];
|
|---|
| 2722 | if (!isUndefined(val)) {
|
|---|
| 2723 | to[prop] = val
|
|---|
| 2724 | }
|
|---|
| 2725 | }
|
|---|
| 2726 | }
|
|---|
| 2727 | return to
|
|---|
| 2728 | }
|
|---|
| 2729 | var updateInProgress = false;
|
|---|
| 2730 |
|
|---|
| 2731 | function Moment(config) {
|
|---|
| 2732 | copyConfig(this, config);
|
|---|
| 2733 | this._d = new Date(config._d != null ? config._d.getTime() : NaN);
|
|---|
| 2734 | if (!this.isValid()) {
|
|---|
| 2735 | this._d = new Date(NaN)
|
|---|
| 2736 | }
|
|---|
| 2737 | if (updateInProgress === false) {
|
|---|
| 2738 | updateInProgress = true;
|
|---|
| 2739 | hooks.updateOffset(this);
|
|---|
| 2740 | updateInProgress = false
|
|---|
| 2741 | }
|
|---|
| 2742 | }
|
|---|
| 2743 |
|
|---|
| 2744 | function isMoment(obj) {
|
|---|
| 2745 | return obj instanceof Moment || obj != null && obj._isAMomentObject != null
|
|---|
| 2746 | }
|
|---|
| 2747 |
|
|---|
| 2748 | function absFloor(number) {
|
|---|
| 2749 | if (number < 0) {
|
|---|
| 2750 | return Math.ceil(number) || 0
|
|---|
| 2751 | } else {
|
|---|
| 2752 | return Math.floor(number)
|
|---|
| 2753 | }
|
|---|
| 2754 | }
|
|---|
| 2755 |
|
|---|
| 2756 | function toInt(argumentForCoercion) {
|
|---|
| 2757 | var coercedNumber = +argumentForCoercion,
|
|---|
| 2758 | value = 0;
|
|---|
| 2759 | if (coercedNumber !== 0 && isFinite(coercedNumber)) {
|
|---|
| 2760 | value = absFloor(coercedNumber)
|
|---|
| 2761 | }
|
|---|
| 2762 | return value
|
|---|
| 2763 | }
|
|---|
| 2764 |
|
|---|
| 2765 | function compareArrays(array1, array2, dontConvert) {
|
|---|
| 2766 | var len = Math.min(array1.length, array2.length),
|
|---|
| 2767 | lengthDiff = Math.abs(array1.length - array2.length),
|
|---|
| 2768 | diffs = 0,
|
|---|
| 2769 | i;
|
|---|
| 2770 | for (i = 0; i < len; i++) {
|
|---|
| 2771 | if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {
|
|---|
| 2772 | diffs++
|
|---|
| 2773 | }
|
|---|
| 2774 | }
|
|---|
| 2775 | return diffs + lengthDiff
|
|---|
| 2776 | }
|
|---|
| 2777 |
|
|---|
| 2778 | function warn(msg) {
|
|---|
| 2779 | if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
|
|---|
| 2780 | console.warn("Deprecation warning: " + msg)
|
|---|
| 2781 | }
|
|---|
| 2782 | }
|
|---|
| 2783 |
|
|---|
| 2784 | function deprecate(msg, fn) {
|
|---|
| 2785 | var firstTime = true;
|
|---|
| 2786 | return extend(function () {
|
|---|
| 2787 | if (hooks.deprecationHandler != null) {
|
|---|
| 2788 | hooks.deprecationHandler(null, msg)
|
|---|
| 2789 | }
|
|---|
| 2790 | if (firstTime) {
|
|---|
| 2791 | var args = [];
|
|---|
| 2792 | var arg;
|
|---|
| 2793 | for (var i = 0; i < arguments.length; i++) {
|
|---|
| 2794 | arg = "";
|
|---|
| 2795 | if (typeof arguments[i] === "object") {
|
|---|
| 2796 | arg += "\n[" + i + "] ";
|
|---|
| 2797 | for (var key in arguments[0]) {
|
|---|
| 2798 | arg += key + ": " + arguments[0][key] + ", "
|
|---|
| 2799 | }
|
|---|
| 2800 | arg = arg.slice(0, -2)
|
|---|
| 2801 | } else {
|
|---|
| 2802 | arg = arguments[i]
|
|---|
| 2803 | }
|
|---|
| 2804 | args.push(arg)
|
|---|
| 2805 | }
|
|---|
| 2806 | warn(msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + (new Error).stack);
|
|---|
| 2807 | firstTime = false
|
|---|
| 2808 | }
|
|---|
| 2809 | return fn.apply(this, arguments)
|
|---|
| 2810 | }, fn)
|
|---|
| 2811 | }
|
|---|
| 2812 | var deprecations = {};
|
|---|
| 2813 |
|
|---|
| 2814 | function deprecateSimple(name, msg) {
|
|---|
| 2815 | if (hooks.deprecationHandler != null) {
|
|---|
| 2816 | hooks.deprecationHandler(name, msg)
|
|---|
| 2817 | }
|
|---|
| 2818 | if (!deprecations[name]) {
|
|---|
| 2819 | warn(msg);
|
|---|
| 2820 | deprecations[name] = true
|
|---|
| 2821 | }
|
|---|
| 2822 | }
|
|---|
| 2823 | hooks.suppressDeprecationWarnings = false;
|
|---|
| 2824 | hooks.deprecationHandler = null;
|
|---|
| 2825 |
|
|---|
| 2826 | function isFunction(input) {
|
|---|
| 2827 | return input instanceof Function || Object.prototype.toString.call(input) === "[object Function]"
|
|---|
| 2828 | }
|
|---|
| 2829 |
|
|---|
| 2830 | function set(config) {
|
|---|
| 2831 | var prop, i;
|
|---|
| 2832 | for (i in config) {
|
|---|
| 2833 | prop = config[i];
|
|---|
| 2834 | if (isFunction(prop)) {
|
|---|
| 2835 | this[i] = prop
|
|---|
| 2836 | } else {
|
|---|
| 2837 | this["_" + i] = prop
|
|---|
| 2838 | }
|
|---|
| 2839 | }
|
|---|
| 2840 | this._config = config;
|
|---|
| 2841 | this._ordinalParseLenient = new RegExp(this._ordinalParse.source + "|" + /\d{1,2}/.source)
|
|---|
| 2842 | }
|
|---|
| 2843 |
|
|---|
| 2844 | function mergeConfigs(parentConfig, childConfig) {
|
|---|
| 2845 | var res = extend({}, parentConfig),
|
|---|
| 2846 | prop;
|
|---|
| 2847 | for (prop in childConfig) {
|
|---|
| 2848 | if (hasOwnProp(childConfig, prop)) {
|
|---|
| 2849 | if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
|
|---|
| 2850 | res[prop] = {};
|
|---|
| 2851 | extend(res[prop], parentConfig[prop]);
|
|---|
| 2852 | extend(res[prop], childConfig[prop])
|
|---|
| 2853 | } else if (childConfig[prop] != null) {
|
|---|
| 2854 | res[prop] = childConfig[prop]
|
|---|
| 2855 | } else {
|
|---|
| 2856 | delete res[prop]
|
|---|
| 2857 | }
|
|---|
| 2858 | }
|
|---|
| 2859 | }
|
|---|
| 2860 | for (prop in parentConfig) {
|
|---|
| 2861 | if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {
|
|---|
| 2862 | res[prop] = extend({}, res[prop])
|
|---|
| 2863 | }
|
|---|
| 2864 | }
|
|---|
| 2865 | return res
|
|---|
| 2866 | }
|
|---|
| 2867 |
|
|---|
| 2868 | function Locale(config) {
|
|---|
| 2869 | if (config != null) {
|
|---|
| 2870 | this.set(config)
|
|---|
| 2871 | }
|
|---|
| 2872 | }
|
|---|
| 2873 | var keys;
|
|---|
| 2874 | if (Object.keys) {
|
|---|
| 2875 | keys = Object.keys
|
|---|
| 2876 | } else {
|
|---|
| 2877 | keys = function (obj) {
|
|---|
| 2878 | var i, res = [];
|
|---|
| 2879 | for (i in obj) {
|
|---|
| 2880 | if (hasOwnProp(obj, i)) {
|
|---|
| 2881 | res.push(i)
|
|---|
| 2882 | }
|
|---|
| 2883 | }
|
|---|
| 2884 | return res
|
|---|
| 2885 | }
|
|---|
| 2886 | }
|
|---|
| 2887 | var keys$1 = keys;
|
|---|
| 2888 | var defaultCalendar = {
|
|---|
| 2889 | sameDay: "[Today at] LT",
|
|---|
| 2890 | nextDay: "[Tomorrow at] LT",
|
|---|
| 2891 | nextWeek: "dddd [at] LT",
|
|---|
| 2892 | lastDay: "[Yesterday at] LT",
|
|---|
| 2893 | lastWeek: "[Last] dddd [at] LT",
|
|---|
| 2894 | sameElse: "L"
|
|---|
| 2895 | };
|
|---|
| 2896 |
|
|---|
| 2897 | function calendar(key, mom, now) {
|
|---|
| 2898 | var output = this._calendar[key] || this._calendar["sameElse"];
|
|---|
| 2899 | return isFunction(output) ? output.call(mom, now) : output
|
|---|
| 2900 | }
|
|---|
| 2901 | var defaultLongDateFormat = {
|
|---|
| 2902 | LTS: "h:mm:ss A",
|
|---|
| 2903 | LT: "h:mm A",
|
|---|
| 2904 | L: "MM/DD/YYYY",
|
|---|
| 2905 | LL: "MMMM D, YYYY",
|
|---|
| 2906 | LLL: "MMMM D, YYYY h:mm A",
|
|---|
| 2907 | LLLL: "dddd, MMMM D, YYYY h:mm A"
|
|---|
| 2908 | };
|
|---|
| 2909 |
|
|---|
| 2910 | function longDateFormat(key) {
|
|---|
| 2911 | var format = this._longDateFormat[key],
|
|---|
| 2912 | formatUpper = this._longDateFormat[key.toUpperCase()];
|
|---|
| 2913 | if (format || !formatUpper) {
|
|---|
| 2914 | return format
|
|---|
| 2915 | }
|
|---|
| 2916 | this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
|
|---|
| 2917 | return val.slice(1)
|
|---|
| 2918 | });
|
|---|
| 2919 | return this._longDateFormat[key]
|
|---|
| 2920 | }
|
|---|
| 2921 | var defaultInvalidDate = "Invalid date";
|
|---|
| 2922 |
|
|---|
| 2923 | function invalidDate() {
|
|---|
| 2924 | return this._invalidDate
|
|---|
| 2925 | }
|
|---|
| 2926 | var defaultOrdinal = "%d";
|
|---|
| 2927 | var defaultOrdinalParse = /\d{1,2}/;
|
|---|
| 2928 |
|
|---|
| 2929 | function ordinal(number) {
|
|---|
| 2930 | return this._ordinal.replace("%d", number)
|
|---|
| 2931 | }
|
|---|
| 2932 | var defaultRelativeTime = {
|
|---|
| 2933 | future: "in %s",
|
|---|
| 2934 | past: "%s ago",
|
|---|
| 2935 | s: "a few seconds",
|
|---|
| 2936 | m: "a minute",
|
|---|
| 2937 | mm: "%d minutes",
|
|---|
| 2938 | h: "an hour",
|
|---|
| 2939 | hh: "%d hours",
|
|---|
| 2940 | d: "a day",
|
|---|
| 2941 | dd: "%d days",
|
|---|
| 2942 | M: "a month",
|
|---|
| 2943 | MM: "%d months",
|
|---|
| 2944 | y: "a year",
|
|---|
| 2945 | yy: "%d years"
|
|---|
| 2946 | };
|
|---|
| 2947 |
|
|---|
| 2948 | function relativeTime(number, withoutSuffix, string, isFuture) {
|
|---|
| 2949 | var output = this._relativeTime[string];
|
|---|
| 2950 | return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number)
|
|---|
| 2951 | }
|
|---|
| 2952 |
|
|---|
| 2953 | function pastFuture(diff, output) {
|
|---|
| 2954 | var format = this._relativeTime[diff > 0 ? "future" : "past"];
|
|---|
| 2955 | return isFunction(format) ? format(output) : format.replace(/%s/i, output)
|
|---|
| 2956 | }
|
|---|
| 2957 | var aliases = {};
|
|---|
| 2958 |
|
|---|
| 2959 | function addUnitAlias(unit, shorthand) {
|
|---|
| 2960 | var lowerCase = unit.toLowerCase();
|
|---|
| 2961 | aliases[lowerCase] = aliases[lowerCase + "s"] = aliases[shorthand] = unit
|
|---|
| 2962 | }
|
|---|
| 2963 |
|
|---|
| 2964 | function normalizeUnits(units) {
|
|---|
| 2965 | return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : undefined
|
|---|
| 2966 | }
|
|---|
| 2967 |
|
|---|
| 2968 | function normalizeObjectUnits(inputObject) {
|
|---|
| 2969 | var normalizedInput = {},
|
|---|
| 2970 | normalizedProp, prop;
|
|---|
| 2971 | for (prop in inputObject) {
|
|---|
| 2972 | if (hasOwnProp(inputObject, prop)) {
|
|---|
| 2973 | normalizedProp = normalizeUnits(prop);
|
|---|
| 2974 | if (normalizedProp) {
|
|---|
| 2975 | normalizedInput[normalizedProp] = inputObject[prop]
|
|---|
| 2976 | }
|
|---|
| 2977 | }
|
|---|
| 2978 | }
|
|---|
| 2979 | return normalizedInput
|
|---|
| 2980 | }
|
|---|
| 2981 | var priorities = {};
|
|---|
| 2982 |
|
|---|
| 2983 | function addUnitPriority(unit, priority) {
|
|---|
| 2984 | priorities[unit] = priority
|
|---|
| 2985 | }
|
|---|
| 2986 |
|
|---|
| 2987 | function getPrioritizedUnits(unitsObj) {
|
|---|
| 2988 | var units = [];
|
|---|
| 2989 | for (var u in unitsObj) {
|
|---|
| 2990 | units.push({
|
|---|
| 2991 | unit: u,
|
|---|
| 2992 | priority: priorities[u]
|
|---|
| 2993 | })
|
|---|
| 2994 | }
|
|---|
| 2995 | units.sort(function (a, b) {
|
|---|
| 2996 | return a.priority - b.priority
|
|---|
| 2997 | });
|
|---|
| 2998 | return units
|
|---|
| 2999 | }
|
|---|
| 3000 |
|
|---|
| 3001 | function makeGetSet(unit, keepTime) {
|
|---|
| 3002 | return function (value) {
|
|---|
| 3003 | if (value != null) {
|
|---|
| 3004 | set$1(this, unit, value);
|
|---|
| 3005 | hooks.updateOffset(this, keepTime);
|
|---|
| 3006 | return this
|
|---|
| 3007 | } else {
|
|---|
| 3008 | return get(this, unit)
|
|---|
| 3009 | }
|
|---|
| 3010 | }
|
|---|
| 3011 | }
|
|---|
| 3012 |
|
|---|
| 3013 | function get(mom, unit) {
|
|---|
| 3014 | return mom.isValid() ? mom._d["get" + (mom._isUTC ? "UTC" : "") + unit]() : NaN
|
|---|
| 3015 | }
|
|---|
| 3016 |
|
|---|
| 3017 | function set$1(mom, unit, value) {
|
|---|
| 3018 | if (mom.isValid()) {
|
|---|
| 3019 | mom._d["set" + (mom._isUTC ? "UTC" : "") + unit](value)
|
|---|
| 3020 | }
|
|---|
| 3021 | }
|
|---|
| 3022 |
|
|---|
| 3023 | function stringGet(units) {
|
|---|
| 3024 | units = normalizeUnits(units);
|
|---|
| 3025 | if (isFunction(this[units])) {
|
|---|
| 3026 | return this[units]()
|
|---|
| 3027 | }
|
|---|
| 3028 | return this
|
|---|
| 3029 | }
|
|---|
| 3030 |
|
|---|
| 3031 | function stringSet(units, value) {
|
|---|
| 3032 | if (typeof units === "object") {
|
|---|
| 3033 | units = normalizeObjectUnits(units);
|
|---|
| 3034 | var prioritized = getPrioritizedUnits(units);
|
|---|
| 3035 | for (var i = 0; i < prioritized.length; i++) {
|
|---|
| 3036 | this[prioritized[i].unit](units[prioritized[i].unit])
|
|---|
| 3037 | }
|
|---|
| 3038 | } else {
|
|---|
| 3039 | units = normalizeUnits(units);
|
|---|
| 3040 | if (isFunction(this[units])) {
|
|---|
| 3041 | return this[units](value)
|
|---|
| 3042 | }
|
|---|
| 3043 | }
|
|---|
| 3044 | return this
|
|---|
| 3045 | }
|
|---|
| 3046 |
|
|---|
| 3047 | function zeroFill(number, targetLength, forceSign) {
|
|---|
| 3048 | var absNumber = "" + Math.abs(number),
|
|---|
| 3049 | zerosToFill = targetLength - absNumber.length,
|
|---|
| 3050 | sign = number >= 0;
|
|---|
| 3051 | return (sign ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber
|
|---|
| 3052 | }
|
|---|
| 3053 | var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
|
|---|
| 3054 | var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
|
|---|
| 3055 | var formatFunctions = {};
|
|---|
| 3056 | var formatTokenFunctions = {};
|
|---|
| 3057 |
|
|---|
| 3058 | function addFormatToken(token, padded, ordinal, callback) {
|
|---|
| 3059 | var func = callback;
|
|---|
| 3060 | if (typeof callback === "string") {
|
|---|
| 3061 | func = function () {
|
|---|
| 3062 | return this[callback]()
|
|---|
| 3063 | }
|
|---|
| 3064 | }
|
|---|
| 3065 | if (token) {
|
|---|
| 3066 | formatTokenFunctions[token] = func
|
|---|
| 3067 | }
|
|---|
| 3068 | if (padded) {
|
|---|
| 3069 | formatTokenFunctions[padded[0]] = function () {
|
|---|
| 3070 | return zeroFill(func.apply(this, arguments), padded[1], padded[2])
|
|---|
| 3071 | }
|
|---|
| 3072 | }
|
|---|
| 3073 | if (ordinal) {
|
|---|
| 3074 | formatTokenFunctions[ordinal] = function () {
|
|---|
| 3075 | return this.localeData().ordinal(func.apply(this, arguments), token)
|
|---|
| 3076 | }
|
|---|
| 3077 | }
|
|---|
| 3078 | }
|
|---|
| 3079 |
|
|---|
| 3080 | function removeFormattingTokens(input) {
|
|---|
| 3081 | if (input.match(/\[[\s\S]/)) {
|
|---|
| 3082 | return input.replace(/^\[|\]$/g, "")
|
|---|
| 3083 | }
|
|---|
| 3084 | return input.replace(/\\/g, "")
|
|---|
| 3085 | }
|
|---|
| 3086 |
|
|---|
| 3087 | function makeFormatFunction(format) {
|
|---|
| 3088 | var array = format.match(formattingTokens),
|
|---|
| 3089 | i, length;
|
|---|
| 3090 | for (i = 0, length = array.length; i < length; i++) {
|
|---|
| 3091 | if (formatTokenFunctions[array[i]]) {
|
|---|
| 3092 | array[i] = formatTokenFunctions[array[i]]
|
|---|
| 3093 | } else {
|
|---|
| 3094 | array[i] = removeFormattingTokens(array[i])
|
|---|
| 3095 | }
|
|---|
| 3096 | }
|
|---|
| 3097 | return function (mom) {
|
|---|
| 3098 | var output = "",
|
|---|
| 3099 | i;
|
|---|
| 3100 | for (i = 0; i < length; i++) {
|
|---|
| 3101 | output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]
|
|---|
| 3102 | }
|
|---|
| 3103 | return output
|
|---|
| 3104 | }
|
|---|
| 3105 | }
|
|---|
| 3106 |
|
|---|
| 3107 | function formatMoment(m, format) {
|
|---|
| 3108 | if (!m.isValid()) {
|
|---|
| 3109 | return m.localeData().invalidDate()
|
|---|
| 3110 | }
|
|---|
| 3111 | format = expandFormat(format, m.localeData());
|
|---|
| 3112 | formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
|
|---|
| 3113 | return formatFunctions[format](m)
|
|---|
| 3114 | }
|
|---|
| 3115 |
|
|---|
| 3116 | function expandFormat(format, locale) {
|
|---|
| 3117 | var i = 5;
|
|---|
| 3118 |
|
|---|
| 3119 | function replaceLongDateFormatTokens(input) {
|
|---|
| 3120 | return locale.longDateFormat(input) || input
|
|---|
| 3121 | }
|
|---|
| 3122 | localFormattingTokens.lastIndex = 0;
|
|---|
| 3123 | while (i >= 0 && localFormattingTokens.test(format)) {
|
|---|
| 3124 | format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
|
|---|
| 3125 | localFormattingTokens.lastIndex = 0;
|
|---|
| 3126 | i -= 1
|
|---|
| 3127 | }
|
|---|
| 3128 | return format
|
|---|
| 3129 | }
|
|---|
| 3130 | var match1 = /\d/;
|
|---|
| 3131 | var match2 = /\d\d/;
|
|---|
| 3132 | var match3 = /\d{3}/;
|
|---|
| 3133 | var match4 = /\d{4}/;
|
|---|
| 3134 | var match6 = /[+-]?\d{6}/;
|
|---|
| 3135 | var match1to2 = /\d\d?/;
|
|---|
| 3136 | var match3to4 = /\d\d\d\d?/;
|
|---|
| 3137 | var match5to6 = /\d\d\d\d\d\d?/;
|
|---|
| 3138 | var match1to3 = /\d{1,3}/;
|
|---|
| 3139 | var match1to4 = /\d{1,4}/;
|
|---|
| 3140 | var match1to6 = /[+-]?\d{1,6}/;
|
|---|
| 3141 | var matchUnsigned = /\d+/;
|
|---|
| 3142 | var matchSigned = /[+-]?\d+/;
|
|---|
| 3143 | var matchOffset = /Z|[+-]\d\d:?\d\d/gi;
|
|---|
| 3144 | var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi;
|
|---|
| 3145 | var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/;
|
|---|
| 3146 | var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
|
|---|
| 3147 | var regexes = {};
|
|---|
| 3148 |
|
|---|
| 3149 | function addRegexToken(token, regex, strictRegex) {
|
|---|
| 3150 | regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
|
|---|
| 3151 | return isStrict && strictRegex ? strictRegex : regex
|
|---|
| 3152 | }
|
|---|
| 3153 | }
|
|---|
| 3154 |
|
|---|
| 3155 | function getParseRegexForToken(token, config) {
|
|---|
| 3156 | if (!hasOwnProp(regexes, token)) {
|
|---|
| 3157 | return new RegExp(unescapeFormat(token))
|
|---|
| 3158 | }
|
|---|
| 3159 | return regexes[token](config._strict, config._locale)
|
|---|
| 3160 | }
|
|---|
| 3161 |
|
|---|
| 3162 | function unescapeFormat(s) {
|
|---|
| 3163 | return regexEscape(s.replace("\\", "").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
|
|---|
| 3164 | return p1 || p2 || p3 || p4
|
|---|
| 3165 | }))
|
|---|
| 3166 | }
|
|---|
| 3167 |
|
|---|
| 3168 | function regexEscape(s) {
|
|---|
| 3169 | return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&")
|
|---|
| 3170 | }
|
|---|
| 3171 | var tokens = {};
|
|---|
| 3172 |
|
|---|
| 3173 | function addParseToken(token, callback) {
|
|---|
| 3174 | var i, func = callback;
|
|---|
| 3175 | if (typeof token === "string") {
|
|---|
| 3176 | token = [token]
|
|---|
| 3177 | }
|
|---|
| 3178 | if (isNumber(callback)) {
|
|---|
| 3179 | func = function (input, array) {
|
|---|
| 3180 | array[callback] = toInt(input)
|
|---|
| 3181 | }
|
|---|
| 3182 | }
|
|---|
| 3183 | for (i = 0; i < token.length; i++) {
|
|---|
| 3184 | tokens[token[i]] = func
|
|---|
| 3185 | }
|
|---|
| 3186 | }
|
|---|
| 3187 |
|
|---|
| 3188 | function addWeekParseToken(token, callback) {
|
|---|
| 3189 | addParseToken(token, function (input, array, config, token) {
|
|---|
| 3190 | config._w = config._w || {};
|
|---|
| 3191 | callback(input, config._w, config, token)
|
|---|
| 3192 | })
|
|---|
| 3193 | }
|
|---|
| 3194 |
|
|---|
| 3195 | function addTimeToArrayFromToken(token, input, config) {
|
|---|
| 3196 | if (input != null && hasOwnProp(tokens, token)) {
|
|---|
| 3197 | tokens[token](input, config._a, config, token)
|
|---|
| 3198 | }
|
|---|
| 3199 | }
|
|---|
| 3200 | var YEAR = 0;
|
|---|
| 3201 | var MONTH = 1;
|
|---|
| 3202 | var DATE = 2;
|
|---|
| 3203 | var HOUR = 3;
|
|---|
| 3204 | var MINUTE = 4;
|
|---|
| 3205 | var SECOND = 5;
|
|---|
| 3206 | var MILLISECOND = 6;
|
|---|
| 3207 | var WEEK = 7;
|
|---|
| 3208 | var WEEKDAY = 8;
|
|---|
| 3209 | var indexOf;
|
|---|
| 3210 | if (Array.prototype.indexOf) {
|
|---|
| 3211 | indexOf = Array.prototype.indexOf
|
|---|
| 3212 | } else {
|
|---|
| 3213 | indexOf = function (o) {
|
|---|
| 3214 | var i;
|
|---|
| 3215 | for (i = 0; i < this.length; ++i) {
|
|---|
| 3216 | if (this[i] === o) {
|
|---|
| 3217 | return i
|
|---|
| 3218 | }
|
|---|
| 3219 | }
|
|---|
| 3220 | return -1
|
|---|
| 3221 | }
|
|---|
| 3222 | }
|
|---|
| 3223 | var indexOf$1 = indexOf;
|
|---|
| 3224 |
|
|---|
| 3225 | function daysInMonth(year, month) {
|
|---|
| 3226 | return new Date(Date.UTC(year, month + 1, 0)).getUTCDate()
|
|---|
| 3227 | }
|
|---|
| 3228 | addFormatToken("M", ["MM", 2], "Mo", function () {
|
|---|
| 3229 | return this.month() + 1
|
|---|
| 3230 | });
|
|---|
| 3231 | addFormatToken("MMM", 0, 0, function (format) {
|
|---|
| 3232 | return this.localeData().monthsShort(this, format)
|
|---|
| 3233 | });
|
|---|
| 3234 | addFormatToken("MMMM", 0, 0, function (format) {
|
|---|
| 3235 | return this.localeData().months(this, format)
|
|---|
| 3236 | });
|
|---|
| 3237 | addUnitAlias("month", "M");
|
|---|
| 3238 | addUnitPriority("month", 8);
|
|---|
| 3239 | addRegexToken("M", match1to2);
|
|---|
| 3240 | addRegexToken("MM", match1to2, match2);
|
|---|
| 3241 | addRegexToken("MMM", function (isStrict, locale) {
|
|---|
| 3242 | return locale.monthsShortRegex(isStrict)
|
|---|
| 3243 | });
|
|---|
| 3244 | addRegexToken("MMMM", function (isStrict, locale) {
|
|---|
| 3245 | return locale.monthsRegex(isStrict)
|
|---|
| 3246 | });
|
|---|
| 3247 | addParseToken(["M", "MM"], function (input, array) {
|
|---|
| 3248 | array[MONTH] = toInt(input) - 1
|
|---|
| 3249 | });
|
|---|
| 3250 | addParseToken(["MMM", "MMMM"], function (input, array, config, token) {
|
|---|
| 3251 | var month = config._locale.monthsParse(input, token, config._strict);
|
|---|
| 3252 | if (month != null) {
|
|---|
| 3253 | array[MONTH] = month
|
|---|
| 3254 | } else {
|
|---|
| 3255 | getParsingFlags(config).invalidMonth = input
|
|---|
| 3256 | }
|
|---|
| 3257 | });
|
|---|
| 3258 | var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
|
|---|
| 3259 | var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split("_");
|
|---|
| 3260 |
|
|---|
| 3261 | function localeMonths(m, format) {
|
|---|
| 3262 | if (!m) {
|
|---|
| 3263 | return this._months
|
|---|
| 3264 | }
|
|---|
| 3265 | return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? "format" : "standalone"][m.month()]
|
|---|
| 3266 | }
|
|---|
| 3267 | var defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");
|
|---|
| 3268 |
|
|---|
| 3269 | function localeMonthsShort(m, format) {
|
|---|
| 3270 | if (!m) {
|
|---|
| 3271 | return this._monthsShort
|
|---|
| 3272 | }
|
|---|
| 3273 | return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? "format" : "standalone"][m.month()]
|
|---|
| 3274 | }
|
|---|
| 3275 |
|
|---|
| 3276 | function handleStrictParse(monthName, format, strict) {
|
|---|
| 3277 | var i, ii, mom, llc = monthName.toLocaleLowerCase();
|
|---|
| 3278 | if (!this._monthsParse) {
|
|---|
| 3279 | this._monthsParse = [];
|
|---|
| 3280 | this._longMonthsParse = [];
|
|---|
| 3281 | this._shortMonthsParse = [];
|
|---|
| 3282 | for (i = 0; i < 12; ++i) {
|
|---|
| 3283 | mom = createUTC([2e3, i]);
|
|---|
| 3284 | this._shortMonthsParse[i] = this.monthsShort(mom, "").toLocaleLowerCase();
|
|---|
| 3285 | this._longMonthsParse[i] = this.months(mom, "").toLocaleLowerCase()
|
|---|
| 3286 | }
|
|---|
| 3287 | }
|
|---|
| 3288 | if (strict) {
|
|---|
| 3289 | if (format === "MMM") {
|
|---|
| 3290 | ii = indexOf$1.call(this._shortMonthsParse, llc);
|
|---|
| 3291 | return ii !== -1 ? ii : null
|
|---|
| 3292 | } else {
|
|---|
| 3293 | ii = indexOf$1.call(this._longMonthsParse, llc);
|
|---|
| 3294 | return ii !== -1 ? ii : null
|
|---|
| 3295 | }
|
|---|
| 3296 | } else {
|
|---|
| 3297 | if (format === "MMM") {
|
|---|
| 3298 | ii = indexOf$1.call(this._shortMonthsParse, llc);
|
|---|
| 3299 | if (ii !== -1) {
|
|---|
| 3300 | return ii
|
|---|
| 3301 | }
|
|---|
| 3302 | ii = indexOf$1.call(this._longMonthsParse, llc);
|
|---|
| 3303 | return ii !== -1 ? ii : null
|
|---|
| 3304 | } else {
|
|---|
| 3305 | ii = indexOf$1.call(this._longMonthsParse, llc);
|
|---|
| 3306 | if (ii !== -1) {
|
|---|
| 3307 | return ii
|
|---|
| 3308 | }
|
|---|
| 3309 | ii = indexOf$1.call(this._shortMonthsParse, llc);
|
|---|
| 3310 | return ii !== -1 ? ii : null
|
|---|
| 3311 | }
|
|---|
| 3312 | }
|
|---|
| 3313 | }
|
|---|
| 3314 |
|
|---|
| 3315 | function localeMonthsParse(monthName, format, strict) {
|
|---|
| 3316 | var i, mom, regex;
|
|---|
| 3317 | if (this._monthsParseExact) {
|
|---|
| 3318 | return handleStrictParse.call(this, monthName, format, strict)
|
|---|
| 3319 | }
|
|---|
| 3320 | if (!this._monthsParse) {
|
|---|
| 3321 | this._monthsParse = [];
|
|---|
| 3322 | this._longMonthsParse = [];
|
|---|
| 3323 | this._shortMonthsParse = []
|
|---|
| 3324 | }
|
|---|
| 3325 | for (i = 0; i < 12; i++) {
|
|---|
| 3326 | mom = createUTC([2e3, i]);
|
|---|
| 3327 | if (strict && !this._longMonthsParse[i]) {
|
|---|
| 3328 | this._longMonthsParse[i] = new RegExp("^" + this.months(mom, "").replace(".", "") + "$", "i");
|
|---|
| 3329 | this._shortMonthsParse[i] = new RegExp("^" + this.monthsShort(mom, "").replace(".", "") + "$", "i")
|
|---|
| 3330 | }
|
|---|
| 3331 | if (!strict && !this._monthsParse[i]) {
|
|---|
| 3332 | regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
|
|---|
| 3333 | this._monthsParse[i] = new RegExp(regex.replace(".", ""), "i")
|
|---|
| 3334 | }
|
|---|
| 3335 | if (strict && format === "MMMM" && this._longMonthsParse[i].test(monthName)) {
|
|---|
| 3336 | return i
|
|---|
| 3337 | } else if (strict && format === "MMM" && this._shortMonthsParse[i].test(monthName)) {
|
|---|
| 3338 | return i
|
|---|
| 3339 | } else if (!strict && this._monthsParse[i].test(monthName)) {
|
|---|
| 3340 | return i
|
|---|
| 3341 | }
|
|---|
| 3342 | }
|
|---|
| 3343 | }
|
|---|
| 3344 |
|
|---|
| 3345 | function setMonth(mom, value) {
|
|---|
| 3346 | var dayOfMonth;
|
|---|
| 3347 | if (!mom.isValid()) {
|
|---|
| 3348 | return mom
|
|---|
| 3349 | }
|
|---|
| 3350 | if (typeof value === "string") {
|
|---|
| 3351 | if (/^\d+$/.test(value)) {
|
|---|
| 3352 | value = toInt(value)
|
|---|
| 3353 | } else {
|
|---|
| 3354 | value = mom.localeData().monthsParse(value);
|
|---|
| 3355 | if (!isNumber(value)) {
|
|---|
| 3356 | return mom
|
|---|
| 3357 | }
|
|---|
| 3358 | }
|
|---|
| 3359 | }
|
|---|
| 3360 | dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
|
|---|
| 3361 | mom._d["set" + (mom._isUTC ? "UTC" : "") + "Month"](value, dayOfMonth);
|
|---|
| 3362 | return mom
|
|---|
| 3363 | }
|
|---|
| 3364 |
|
|---|
| 3365 | function getSetMonth(value) {
|
|---|
| 3366 | if (value != null) {
|
|---|
| 3367 | setMonth(this, value);
|
|---|
| 3368 | hooks.updateOffset(this, true);
|
|---|
| 3369 | return this
|
|---|
| 3370 | } else {
|
|---|
| 3371 | return get(this, "Month")
|
|---|
| 3372 | }
|
|---|
| 3373 | }
|
|---|
| 3374 |
|
|---|
| 3375 | function getDaysInMonth() {
|
|---|
| 3376 | return daysInMonth(this.year(), this.month())
|
|---|
| 3377 | }
|
|---|
| 3378 | var defaultMonthsShortRegex = matchWord;
|
|---|
| 3379 |
|
|---|
| 3380 | function monthsShortRegex(isStrict) {
|
|---|
| 3381 | if (this._monthsParseExact) {
|
|---|
| 3382 | if (!hasOwnProp(this, "_monthsRegex")) {
|
|---|
| 3383 | computeMonthsParse.call(this)
|
|---|
| 3384 | }
|
|---|
| 3385 | if (isStrict) {
|
|---|
| 3386 | return this._monthsShortStrictRegex
|
|---|
| 3387 | } else {
|
|---|
| 3388 | return this._monthsShortRegex
|
|---|
| 3389 | }
|
|---|
| 3390 | } else {
|
|---|
| 3391 | if (!hasOwnProp(this, "_monthsShortRegex")) {
|
|---|
| 3392 | this._monthsShortRegex = defaultMonthsShortRegex
|
|---|
| 3393 | }
|
|---|
| 3394 | return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex
|
|---|
| 3395 | }
|
|---|
| 3396 | }
|
|---|
| 3397 | var defaultMonthsRegex = matchWord;
|
|---|
| 3398 |
|
|---|
| 3399 | function monthsRegex(isStrict) {
|
|---|
| 3400 | if (this._monthsParseExact) {
|
|---|
| 3401 | if (!hasOwnProp(this, "_monthsRegex")) {
|
|---|
| 3402 | computeMonthsParse.call(this)
|
|---|
| 3403 | }
|
|---|
| 3404 | if (isStrict) {
|
|---|
| 3405 | return this._monthsStrictRegex
|
|---|
| 3406 | } else {
|
|---|
| 3407 | return this._monthsRegex
|
|---|
| 3408 | }
|
|---|
| 3409 | } else {
|
|---|
| 3410 | if (!hasOwnProp(this, "_monthsRegex")) {
|
|---|
| 3411 | this._monthsRegex = defaultMonthsRegex
|
|---|
| 3412 | }
|
|---|
| 3413 | return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex
|
|---|
| 3414 | }
|
|---|
| 3415 | }
|
|---|
| 3416 |
|
|---|
| 3417 | function computeMonthsParse() {
|
|---|
| 3418 | function cmpLenRev(a, b) {
|
|---|
| 3419 | return b.length - a.length
|
|---|
| 3420 | }
|
|---|
| 3421 | var shortPieces = [],
|
|---|
| 3422 | longPieces = [],
|
|---|
| 3423 | mixedPieces = [],
|
|---|
| 3424 | i, mom;
|
|---|
| 3425 | for (i = 0; i < 12; i++) {
|
|---|
| 3426 | mom = createUTC([2e3, i]);
|
|---|
| 3427 | shortPieces.push(this.monthsShort(mom, ""));
|
|---|
| 3428 | longPieces.push(this.months(mom, ""));
|
|---|
| 3429 | mixedPieces.push(this.months(mom, ""));
|
|---|
| 3430 | mixedPieces.push(this.monthsShort(mom, ""))
|
|---|
| 3431 | }
|
|---|
| 3432 | shortPieces.sort(cmpLenRev);
|
|---|
| 3433 | longPieces.sort(cmpLenRev);
|
|---|
| 3434 | mixedPieces.sort(cmpLenRev);
|
|---|
| 3435 | for (i = 0; i < 12; i++) {
|
|---|
| 3436 | shortPieces[i] = regexEscape(shortPieces[i]);
|
|---|
| 3437 | longPieces[i] = regexEscape(longPieces[i])
|
|---|
| 3438 | }
|
|---|
| 3439 | for (i = 0; i < 24; i++) {
|
|---|
| 3440 | mixedPieces[i] = regexEscape(mixedPieces[i])
|
|---|
| 3441 | }
|
|---|
| 3442 | this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
|
|---|
| 3443 | this._monthsShortRegex = this._monthsRegex;
|
|---|
| 3444 | this._monthsStrictRegex = new RegExp("^(" + longPieces.join("|") + ")", "i");
|
|---|
| 3445 | this._monthsShortStrictRegex = new RegExp("^(" + shortPieces.join("|") + ")", "i")
|
|---|
| 3446 | }
|
|---|
| 3447 | addFormatToken("Y", 0, 0, function () {
|
|---|
| 3448 | var y = this.year();
|
|---|
| 3449 | return y <= 9999 ? "" + y : "+" + y
|
|---|
| 3450 | });
|
|---|
| 3451 | addFormatToken(0, ["YY", 2], 0, function () {
|
|---|
| 3452 | return this.year() % 100
|
|---|
| 3453 | });
|
|---|
| 3454 | addFormatToken(0, ["YYYY", 4], 0, "year");
|
|---|
| 3455 | addFormatToken(0, ["YYYYY", 5], 0, "year");
|
|---|
| 3456 | addFormatToken(0, ["YYYYYY", 6, true], 0, "year");
|
|---|
| 3457 | addUnitAlias("year", "y");
|
|---|
| 3458 | addUnitPriority("year", 1);
|
|---|
| 3459 | addRegexToken("Y", matchSigned);
|
|---|
| 3460 | addRegexToken("YY", match1to2, match2);
|
|---|
| 3461 | addRegexToken("YYYY", match1to4, match4);
|
|---|
| 3462 | addRegexToken("YYYYY", match1to6, match6);
|
|---|
| 3463 | addRegexToken("YYYYYY", match1to6, match6);
|
|---|
| 3464 | addParseToken(["YYYYY", "YYYYYY"], YEAR);
|
|---|
| 3465 | addParseToken("YYYY", function (input, array) {
|
|---|
| 3466 | array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input)
|
|---|
| 3467 | });
|
|---|
| 3468 | addParseToken("YY", function (input, array) {
|
|---|
| 3469 | array[YEAR] = hooks.parseTwoDigitYear(input)
|
|---|
| 3470 | });
|
|---|
| 3471 | addParseToken("Y", function (input, array) {
|
|---|
| 3472 | array[YEAR] = parseInt(input, 10)
|
|---|
| 3473 | });
|
|---|
| 3474 |
|
|---|
| 3475 | function daysInYear(year) {
|
|---|
| 3476 | return isLeapYear(year) ? 366 : 365
|
|---|
| 3477 | }
|
|---|
| 3478 |
|
|---|
| 3479 | function isLeapYear(year) {
|
|---|
| 3480 | return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0
|
|---|
| 3481 | }
|
|---|
| 3482 | hooks.parseTwoDigitYear = function (input) {
|
|---|
| 3483 | return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3)
|
|---|
| 3484 | };
|
|---|
| 3485 | var getSetYear = makeGetSet("FullYear", true);
|
|---|
| 3486 |
|
|---|
| 3487 | function getIsLeapYear() {
|
|---|
| 3488 | return isLeapYear(this.year())
|
|---|
| 3489 | }
|
|---|
| 3490 |
|
|---|
| 3491 | function createDate(y, m, d, h, M, s, ms) {
|
|---|
| 3492 | var date = new Date(y, m, d, h, M, s, ms);
|
|---|
| 3493 | if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
|
|---|
| 3494 | date.setFullYear(y)
|
|---|
| 3495 | }
|
|---|
| 3496 | return date
|
|---|
| 3497 | }
|
|---|
| 3498 |
|
|---|
| 3499 | function createUTCDate(y) {
|
|---|
| 3500 | var date = new Date(Date.UTC.apply(null, arguments));
|
|---|
| 3501 | if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
|
|---|
| 3502 | date.setUTCFullYear(y)
|
|---|
| 3503 | }
|
|---|
| 3504 | return date
|
|---|
| 3505 | }
|
|---|
| 3506 |
|
|---|
| 3507 | function firstWeekOffset(year, dow, doy) {
|
|---|
| 3508 | var fwd = 7 + dow - doy,
|
|---|
| 3509 | fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
|
|---|
| 3510 | return -fwdlw + fwd - 1
|
|---|
| 3511 | }
|
|---|
| 3512 |
|
|---|
| 3513 | function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
|
|---|
| 3514 | var localWeekday = (7 + weekday - dow) % 7,
|
|---|
| 3515 | weekOffset = firstWeekOffset(year, dow, doy),
|
|---|
| 3516 | dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
|
|---|
| 3517 | resYear, resDayOfYear;
|
|---|
| 3518 | if (dayOfYear <= 0) {
|
|---|
| 3519 | resYear = year - 1;
|
|---|
| 3520 | resDayOfYear = daysInYear(resYear) + dayOfYear
|
|---|
| 3521 | } else if (dayOfYear > daysInYear(year)) {
|
|---|
| 3522 | resYear = year + 1;
|
|---|
| 3523 | resDayOfYear = dayOfYear - daysInYear(year)
|
|---|
| 3524 | } else {
|
|---|
| 3525 | resYear = year;
|
|---|
| 3526 | resDayOfYear = dayOfYear
|
|---|
| 3527 | }
|
|---|
| 3528 | return {
|
|---|
| 3529 | year: resYear,
|
|---|
| 3530 | dayOfYear: resDayOfYear
|
|---|
| 3531 | }
|
|---|
| 3532 | }
|
|---|
| 3533 |
|
|---|
| 3534 | function weekOfYear(mom, dow, doy) {
|
|---|
| 3535 | var weekOffset = firstWeekOffset(mom.year(), dow, doy),
|
|---|
| 3536 | week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
|
|---|
| 3537 | resWeek, resYear;
|
|---|
| 3538 | if (week < 1) {
|
|---|
| 3539 | resYear = mom.year() - 1;
|
|---|
| 3540 | resWeek = week + weeksInYear(resYear, dow, doy)
|
|---|
| 3541 | } else if (week > weeksInYear(mom.year(), dow, doy)) {
|
|---|
| 3542 | resWeek = week - weeksInYear(mom.year(), dow, doy);
|
|---|
| 3543 | resYear = mom.year() + 1
|
|---|
| 3544 | } else {
|
|---|
| 3545 | resYear = mom.year();
|
|---|
| 3546 | resWeek = week
|
|---|
| 3547 | }
|
|---|
| 3548 | return {
|
|---|
| 3549 | week: resWeek,
|
|---|
| 3550 | year: resYear
|
|---|
| 3551 | }
|
|---|
| 3552 | }
|
|---|
| 3553 |
|
|---|
| 3554 | function weeksInYear(year, dow, doy) {
|
|---|
| 3555 | var weekOffset = firstWeekOffset(year, dow, doy),
|
|---|
| 3556 | weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
|
|---|
| 3557 | return (daysInYear(year) - weekOffset + weekOffsetNext) / 7
|
|---|
| 3558 | }
|
|---|
| 3559 | addFormatToken("w", ["ww", 2], "wo", "week");
|
|---|
| 3560 | addFormatToken("W", ["WW", 2], "Wo", "isoWeek");
|
|---|
| 3561 | addUnitAlias("week", "w");
|
|---|
| 3562 | addUnitAlias("isoWeek", "W");
|
|---|
| 3563 | addUnitPriority("week", 5);
|
|---|
| 3564 | addUnitPriority("isoWeek", 5);
|
|---|
| 3565 | addRegexToken("w", match1to2);
|
|---|
| 3566 | addRegexToken("ww", match1to2, match2);
|
|---|
| 3567 | addRegexToken("W", match1to2);
|
|---|
| 3568 | addRegexToken("WW", match1to2, match2);
|
|---|
| 3569 | addWeekParseToken(["w", "ww", "W", "WW"], function (input, week, config, token) {
|
|---|
| 3570 | week[token.substr(0, 1)] = toInt(input)
|
|---|
| 3571 | });
|
|---|
| 3572 |
|
|---|
| 3573 | function localeWeek(mom) {
|
|---|
| 3574 | return weekOfYear(mom, this._week.dow, this._week.doy).week
|
|---|
| 3575 | }
|
|---|
| 3576 | var defaultLocaleWeek = {
|
|---|
| 3577 | dow: 0,
|
|---|
| 3578 | doy: 6
|
|---|
| 3579 | };
|
|---|
| 3580 |
|
|---|
| 3581 | function localeFirstDayOfWeek() {
|
|---|
| 3582 | return this._week.dow
|
|---|
| 3583 | }
|
|---|
| 3584 |
|
|---|
| 3585 | function localeFirstDayOfYear() {
|
|---|
| 3586 | return this._week.doy
|
|---|
| 3587 | }
|
|---|
| 3588 |
|
|---|
| 3589 | function getSetWeek(input) {
|
|---|
| 3590 | var week = this.localeData().week(this);
|
|---|
| 3591 | return input == null ? week : this.add((input - week) * 7, "d")
|
|---|
| 3592 | }
|
|---|
| 3593 |
|
|---|
| 3594 | function getSetISOWeek(input) {
|
|---|
| 3595 | var week = weekOfYear(this, 1, 4).week;
|
|---|
| 3596 | return input == null ? week : this.add((input - week) * 7, "d")
|
|---|
| 3597 | }
|
|---|
| 3598 | addFormatToken("d", 0, "do", "day");
|
|---|
| 3599 | addFormatToken("dd", 0, 0, function (format) {
|
|---|
| 3600 | return this.localeData().weekdaysMin(this, format)
|
|---|
| 3601 | });
|
|---|
| 3602 | addFormatToken("ddd", 0, 0, function (format) {
|
|---|
| 3603 | return this.localeData().weekdaysShort(this, format)
|
|---|
| 3604 | });
|
|---|
| 3605 | addFormatToken("dddd", 0, 0, function (format) {
|
|---|
| 3606 | return this.localeData().weekdays(this, format)
|
|---|
| 3607 | });
|
|---|
| 3608 | addFormatToken("e", 0, 0, "weekday");
|
|---|
| 3609 | addFormatToken("E", 0, 0, "isoWeekday");
|
|---|
| 3610 | addUnitAlias("day", "d");
|
|---|
| 3611 | addUnitAlias("weekday", "e");
|
|---|
| 3612 | addUnitAlias("isoWeekday", "E");
|
|---|
| 3613 | addUnitPriority("day", 11);
|
|---|
| 3614 | addUnitPriority("weekday", 11);
|
|---|
| 3615 | addUnitPriority("isoWeekday", 11);
|
|---|
| 3616 | addRegexToken("d", match1to2);
|
|---|
| 3617 | addRegexToken("e", match1to2);
|
|---|
| 3618 | addRegexToken("E", match1to2);
|
|---|
| 3619 | addRegexToken("dd", function (isStrict, locale) {
|
|---|
| 3620 | return locale.weekdaysMinRegex(isStrict)
|
|---|
| 3621 | });
|
|---|
| 3622 | addRegexToken("ddd", function (isStrict, locale) {
|
|---|
| 3623 | return locale.weekdaysShortRegex(isStrict)
|
|---|
| 3624 | });
|
|---|
| 3625 | addRegexToken("dddd", function (isStrict, locale) {
|
|---|
| 3626 | return locale.weekdaysRegex(isStrict)
|
|---|
| 3627 | });
|
|---|
| 3628 | addWeekParseToken(["dd", "ddd", "dddd"], function (input, week, config, token) {
|
|---|
| 3629 | var weekday = config._locale.weekdaysParse(input, token, config._strict);
|
|---|
| 3630 | if (weekday != null) {
|
|---|
| 3631 | week.d = weekday
|
|---|
| 3632 | } else {
|
|---|
| 3633 | getParsingFlags(config).invalidWeekday = input
|
|---|
| 3634 | }
|
|---|
| 3635 | });
|
|---|
| 3636 | addWeekParseToken(["d", "e", "E"], function (input, week, config, token) {
|
|---|
| 3637 | week[token] = toInt(input)
|
|---|
| 3638 | });
|
|---|
| 3639 |
|
|---|
| 3640 | function parseWeekday(input, locale) {
|
|---|
| 3641 | if (typeof input !== "string") {
|
|---|
| 3642 | return input
|
|---|
| 3643 | }
|
|---|
| 3644 | if (!isNaN(input)) {
|
|---|
| 3645 | return parseInt(input, 10)
|
|---|
| 3646 | }
|
|---|
| 3647 | input = locale.weekdaysParse(input);
|
|---|
| 3648 | if (typeof input === "number") {
|
|---|
| 3649 | return input
|
|---|
| 3650 | }
|
|---|
| 3651 | return null
|
|---|
| 3652 | }
|
|---|
| 3653 |
|
|---|
| 3654 | function parseIsoWeekday(input, locale) {
|
|---|
| 3655 | if (typeof input === "string") {
|
|---|
| 3656 | return locale.weekdaysParse(input) % 7 || 7
|
|---|
| 3657 | }
|
|---|
| 3658 | return isNaN(input) ? null : input
|
|---|
| 3659 | }
|
|---|
| 3660 | var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");
|
|---|
| 3661 |
|
|---|
| 3662 | function localeWeekdays(m, format) {
|
|---|
| 3663 | if (!m) {
|
|---|
| 3664 | return this._weekdays
|
|---|
| 3665 | }
|
|---|
| 3666 | return isArray(this._weekdays) ? this._weekdays[m.day()] : this._weekdays[this._weekdays.isFormat.test(format) ? "format" : "standalone"][m.day()]
|
|---|
| 3667 | }
|
|---|
| 3668 | var defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");
|
|---|
| 3669 |
|
|---|
| 3670 | function localeWeekdaysShort(m) {
|
|---|
| 3671 | return m ? this._weekdaysShort[m.day()] : this._weekdaysShort
|
|---|
| 3672 | }
|
|---|
| 3673 | var defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_");
|
|---|
| 3674 |
|
|---|
| 3675 | function localeWeekdaysMin(m) {
|
|---|
| 3676 | return m ? this._weekdaysMin[m.day()] : this._weekdaysMin
|
|---|
| 3677 | }
|
|---|
| 3678 |
|
|---|
| 3679 | function handleStrictParse$1(weekdayName, format, strict) {
|
|---|
| 3680 | var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
|
|---|
| 3681 | if (!this._weekdaysParse) {
|
|---|
| 3682 | this._weekdaysParse = [];
|
|---|
| 3683 | this._shortWeekdaysParse = [];
|
|---|
| 3684 | this._minWeekdaysParse = [];
|
|---|
| 3685 | for (i = 0; i < 7; ++i) {
|
|---|
| 3686 | mom = createUTC([2e3, 1]).day(i);
|
|---|
| 3687 | this._minWeekdaysParse[i] = this.weekdaysMin(mom, "").toLocaleLowerCase();
|
|---|
| 3688 | this._shortWeekdaysParse[i] = this.weekdaysShort(mom, "").toLocaleLowerCase();
|
|---|
| 3689 | this._weekdaysParse[i] = this.weekdays(mom, "").toLocaleLowerCase()
|
|---|
| 3690 | }
|
|---|
| 3691 | }
|
|---|
| 3692 | if (strict) {
|
|---|
| 3693 | if (format === "dddd") {
|
|---|
| 3694 | ii = indexOf$1.call(this._weekdaysParse, llc);
|
|---|
| 3695 | return ii !== -1 ? ii : null
|
|---|
| 3696 | } else if (format === "ddd") {
|
|---|
| 3697 | ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
|---|
| 3698 | return ii !== -1 ? ii : null
|
|---|
| 3699 | } else {
|
|---|
| 3700 | ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
|---|
| 3701 | return ii !== -1 ? ii : null
|
|---|
| 3702 | }
|
|---|
| 3703 | } else {
|
|---|
| 3704 | if (format === "dddd") {
|
|---|
| 3705 | ii = indexOf$1.call(this._weekdaysParse, llc);
|
|---|
| 3706 | if (ii !== -1) {
|
|---|
| 3707 | return ii
|
|---|
| 3708 | }
|
|---|
| 3709 | ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
|---|
| 3710 | if (ii !== -1) {
|
|---|
| 3711 | return ii
|
|---|
| 3712 | }
|
|---|
| 3713 | ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
|---|
| 3714 | return ii !== -1 ? ii : null
|
|---|
| 3715 | } else if (format === "ddd") {
|
|---|
| 3716 | ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
|---|
| 3717 | if (ii !== -1) {
|
|---|
| 3718 | return ii
|
|---|
| 3719 | }
|
|---|
| 3720 | ii = indexOf$1.call(this._weekdaysParse, llc);
|
|---|
| 3721 | if (ii !== -1) {
|
|---|
| 3722 | return ii
|
|---|
| 3723 | }
|
|---|
| 3724 | ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
|---|
| 3725 | return ii !== -1 ? ii : null
|
|---|
| 3726 | } else {
|
|---|
| 3727 | ii = indexOf$1.call(this._minWeekdaysParse, llc);
|
|---|
| 3728 | if (ii !== -1) {
|
|---|
| 3729 | return ii
|
|---|
| 3730 | }
|
|---|
| 3731 | ii = indexOf$1.call(this._weekdaysParse, llc);
|
|---|
| 3732 | if (ii !== -1) {
|
|---|
| 3733 | return ii
|
|---|
| 3734 | }
|
|---|
| 3735 | ii = indexOf$1.call(this._shortWeekdaysParse, llc);
|
|---|
| 3736 | return ii !== -1 ? ii : null
|
|---|
| 3737 | }
|
|---|
| 3738 | }
|
|---|
| 3739 | }
|
|---|
| 3740 |
|
|---|
| 3741 | function localeWeekdaysParse(weekdayName, format, strict) {
|
|---|
| 3742 | var i, mom, regex;
|
|---|
| 3743 | if (this._weekdaysParseExact) {
|
|---|
| 3744 | return handleStrictParse$1.call(this, weekdayName, format, strict)
|
|---|
| 3745 | }
|
|---|
| 3746 | if (!this._weekdaysParse) {
|
|---|
| 3747 | this._weekdaysParse = [];
|
|---|
| 3748 | this._minWeekdaysParse = [];
|
|---|
| 3749 | this._shortWeekdaysParse = [];
|
|---|
| 3750 | this._fullWeekdaysParse = []
|
|---|
| 3751 | }
|
|---|
| 3752 | for (i = 0; i < 7; i++) {
|
|---|
| 3753 | mom = createUTC([2e3, 1]).day(i);
|
|---|
| 3754 | if (strict && !this._fullWeekdaysParse[i]) {
|
|---|
| 3755 | this._fullWeekdaysParse[i] = new RegExp("^" + this.weekdays(mom, "").replace(".", ".?") + "$", "i");
|
|---|
| 3756 | this._shortWeekdaysParse[i] = new RegExp("^" + this.weekdaysShort(mom, "").replace(".", ".?") + "$", "i");
|
|---|
| 3757 | this._minWeekdaysParse[i] = new RegExp("^" + this.weekdaysMin(mom, "").replace(".", ".?") + "$", "i")
|
|---|
| 3758 | }
|
|---|
| 3759 | if (!this._weekdaysParse[i]) {
|
|---|
| 3760 | regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
|
|---|
| 3761 | this._weekdaysParse[i] = new RegExp(regex.replace(".", ""), "i")
|
|---|
| 3762 | }
|
|---|
| 3763 | if (strict && format === "dddd" && this._fullWeekdaysParse[i].test(weekdayName)) {
|
|---|
| 3764 | return i
|
|---|
| 3765 | } else if (strict && format === "ddd" && this._shortWeekdaysParse[i].test(weekdayName)) {
|
|---|
| 3766 | return i
|
|---|
| 3767 | } else if (strict && format === "dd" && this._minWeekdaysParse[i].test(weekdayName)) {
|
|---|
| 3768 | return i
|
|---|
| 3769 | } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
|
|---|
| 3770 | return i
|
|---|
| 3771 | }
|
|---|
| 3772 | }
|
|---|
| 3773 | }
|
|---|
| 3774 |
|
|---|
| 3775 | function getSetDayOfWeek(input) {
|
|---|
| 3776 | if (!this.isValid()) {
|
|---|
| 3777 | return input != null ? this : NaN
|
|---|
| 3778 | }
|
|---|
| 3779 | var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
|
|---|
| 3780 | if (input != null) {
|
|---|
| 3781 | input = parseWeekday(input, this.localeData());
|
|---|
| 3782 | return this.add(input - day, "d")
|
|---|
| 3783 | } else {
|
|---|
| 3784 | return day
|
|---|
| 3785 | }
|
|---|
| 3786 | }
|
|---|
| 3787 |
|
|---|
| 3788 | function getSetLocaleDayOfWeek(input) {
|
|---|
| 3789 | if (!this.isValid()) {
|
|---|
| 3790 | return input != null ? this : NaN
|
|---|
| 3791 | }
|
|---|
| 3792 | var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
|
|---|
| 3793 | return input == null ? weekday : this.add(input - weekday, "d")
|
|---|
| 3794 | }
|
|---|
| 3795 |
|
|---|
| 3796 | function getSetISODayOfWeek(input) {
|
|---|
| 3797 | if (!this.isValid()) {
|
|---|
| 3798 | return input != null ? this : NaN
|
|---|
| 3799 | }
|
|---|
| 3800 | if (input != null) {
|
|---|
| 3801 | var weekday = parseIsoWeekday(input, this.localeData());
|
|---|
| 3802 | return this.day(this.day() % 7 ? weekday : weekday - 7)
|
|---|
| 3803 | } else {
|
|---|
| 3804 | return this.day() || 7
|
|---|
| 3805 | }
|
|---|
| 3806 | }
|
|---|
| 3807 | var defaultWeekdaysRegex = matchWord;
|
|---|
| 3808 |
|
|---|
| 3809 | function weekdaysRegex(isStrict) {
|
|---|
| 3810 | if (this._weekdaysParseExact) {
|
|---|
| 3811 | if (!hasOwnProp(this, "_weekdaysRegex")) {
|
|---|
| 3812 | computeWeekdaysParse.call(this)
|
|---|
| 3813 | }
|
|---|
| 3814 | if (isStrict) {
|
|---|
| 3815 | return this._weekdaysStrictRegex
|
|---|
| 3816 | } else {
|
|---|
| 3817 | return this._weekdaysRegex
|
|---|
| 3818 | }
|
|---|
| 3819 | } else {
|
|---|
| 3820 | if (!hasOwnProp(this, "_weekdaysRegex")) {
|
|---|
| 3821 | this._weekdaysRegex = defaultWeekdaysRegex
|
|---|
| 3822 | }
|
|---|
| 3823 | return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex
|
|---|
| 3824 | }
|
|---|
| 3825 | }
|
|---|
| 3826 | var defaultWeekdaysShortRegex = matchWord;
|
|---|
| 3827 |
|
|---|
| 3828 | function weekdaysShortRegex(isStrict) {
|
|---|
| 3829 | if (this._weekdaysParseExact) {
|
|---|
| 3830 | if (!hasOwnProp(this, "_weekdaysRegex")) {
|
|---|
| 3831 | computeWeekdaysParse.call(this)
|
|---|
| 3832 | }
|
|---|
| 3833 | if (isStrict) {
|
|---|
| 3834 | return this._weekdaysShortStrictRegex
|
|---|
| 3835 | } else {
|
|---|
| 3836 | return this._weekdaysShortRegex
|
|---|
| 3837 | }
|
|---|
| 3838 | } else {
|
|---|
| 3839 | if (!hasOwnProp(this, "_weekdaysShortRegex")) {
|
|---|
| 3840 | this._weekdaysShortRegex = defaultWeekdaysShortRegex
|
|---|
| 3841 | }
|
|---|
| 3842 | return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex
|
|---|
| 3843 | }
|
|---|
| 3844 | }
|
|---|
| 3845 | var defaultWeekdaysMinRegex = matchWord;
|
|---|
| 3846 |
|
|---|
| 3847 | function weekdaysMinRegex(isStrict) {
|
|---|
| 3848 | if (this._weekdaysParseExact) {
|
|---|
| 3849 | if (!hasOwnProp(this, "_weekdaysRegex")) {
|
|---|
| 3850 | computeWeekdaysParse.call(this)
|
|---|
| 3851 | }
|
|---|
| 3852 | if (isStrict) {
|
|---|
| 3853 | return this._weekdaysMinStrictRegex
|
|---|
| 3854 | } else {
|
|---|
| 3855 | return this._weekdaysMinRegex
|
|---|
| 3856 | }
|
|---|
| 3857 | } else {
|
|---|
| 3858 | if (!hasOwnProp(this, "_weekdaysMinRegex")) {
|
|---|
| 3859 | this._weekdaysMinRegex = defaultWeekdaysMinRegex
|
|---|
| 3860 | }
|
|---|
| 3861 | return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex
|
|---|
| 3862 | }
|
|---|
| 3863 | }
|
|---|
| 3864 |
|
|---|
| 3865 | function computeWeekdaysParse() {
|
|---|
| 3866 | function cmpLenRev(a, b) {
|
|---|
| 3867 | return b.length - a.length
|
|---|
| 3868 | }
|
|---|
| 3869 | var minPieces = [],
|
|---|
| 3870 | shortPieces = [],
|
|---|
| 3871 | longPieces = [],
|
|---|
| 3872 | mixedPieces = [],
|
|---|
| 3873 | i, mom, minp, shortp, longp;
|
|---|
| 3874 | for (i = 0; i < 7; i++) {
|
|---|
| 3875 | mom = createUTC([2e3, 1]).day(i);
|
|---|
| 3876 | minp = this.weekdaysMin(mom, "");
|
|---|
| 3877 | shortp = this.weekdaysShort(mom, "");
|
|---|
| 3878 | longp = this.weekdays(mom, "");
|
|---|
| 3879 | minPieces.push(minp);
|
|---|
| 3880 | shortPieces.push(shortp);
|
|---|
| 3881 | longPieces.push(longp);
|
|---|
| 3882 | mixedPieces.push(minp);
|
|---|
| 3883 | mixedPieces.push(shortp);
|
|---|
| 3884 | mixedPieces.push(longp)
|
|---|
| 3885 | }
|
|---|
| 3886 | minPieces.sort(cmpLenRev);
|
|---|
| 3887 | shortPieces.sort(cmpLenRev);
|
|---|
| 3888 | longPieces.sort(cmpLenRev);
|
|---|
| 3889 | mixedPieces.sort(cmpLenRev);
|
|---|
| 3890 | for (i = 0; i < 7; i++) {
|
|---|
| 3891 | shortPieces[i] = regexEscape(shortPieces[i]);
|
|---|
| 3892 | longPieces[i] = regexEscape(longPieces[i]);
|
|---|
| 3893 | mixedPieces[i] = regexEscape(mixedPieces[i])
|
|---|
| 3894 | }
|
|---|
| 3895 | this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
|
|---|
| 3896 | this._weekdaysShortRegex = this._weekdaysRegex;
|
|---|
| 3897 | this._weekdaysMinRegex = this._weekdaysRegex;
|
|---|
| 3898 | this._weekdaysStrictRegex = new RegExp("^(" + longPieces.join("|") + ")", "i");
|
|---|
| 3899 | this._weekdaysShortStrictRegex = new RegExp("^(" + shortPieces.join("|") + ")", "i");
|
|---|
| 3900 | this._weekdaysMinStrictRegex = new RegExp("^(" + minPieces.join("|") + ")", "i")
|
|---|
| 3901 | }
|
|---|
| 3902 |
|
|---|
| 3903 | function hFormat() {
|
|---|
| 3904 | return this.hours() % 12 || 12
|
|---|
| 3905 | }
|
|---|
| 3906 |
|
|---|
| 3907 | function kFormat() {
|
|---|
| 3908 | return this.hours() || 24
|
|---|
| 3909 | }
|
|---|
| 3910 | addFormatToken("H", ["HH", 2], 0, "hour");
|
|---|
| 3911 | addFormatToken("h", ["hh", 2], 0, hFormat);
|
|---|
| 3912 | addFormatToken("k", ["kk", 2], 0, kFormat);
|
|---|
| 3913 | addFormatToken("hmm", 0, 0, function () {
|
|---|
| 3914 | return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2)
|
|---|
| 3915 | });
|
|---|
| 3916 | addFormatToken("hmmss", 0, 0, function () {
|
|---|
| 3917 | return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2)
|
|---|
| 3918 | });
|
|---|
| 3919 | addFormatToken("Hmm", 0, 0, function () {
|
|---|
| 3920 | return "" + this.hours() + zeroFill(this.minutes(), 2)
|
|---|
| 3921 | });
|
|---|
| 3922 | addFormatToken("Hmmss", 0, 0, function () {
|
|---|
| 3923 | return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2)
|
|---|
| 3924 | });
|
|---|
| 3925 |
|
|---|
| 3926 | function meridiem(token, lowercase) {
|
|---|
| 3927 | addFormatToken(token, 0, 0, function () {
|
|---|
| 3928 | return this.localeData().meridiem(this.hours(), this.minutes(), lowercase)
|
|---|
| 3929 | })
|
|---|
| 3930 | }
|
|---|
| 3931 | meridiem("a", true);
|
|---|
| 3932 | meridiem("A", false);
|
|---|
| 3933 | addUnitAlias("hour", "h");
|
|---|
| 3934 | addUnitPriority("hour", 13);
|
|---|
| 3935 |
|
|---|
| 3936 | function matchMeridiem(isStrict, locale) {
|
|---|
| 3937 | return locale._meridiemParse
|
|---|
| 3938 | }
|
|---|
| 3939 | addRegexToken("a", matchMeridiem);
|
|---|
| 3940 | addRegexToken("A", matchMeridiem);
|
|---|
| 3941 | addRegexToken("H", match1to2);
|
|---|
| 3942 | addRegexToken("h", match1to2);
|
|---|
| 3943 | addRegexToken("HH", match1to2, match2);
|
|---|
| 3944 | addRegexToken("hh", match1to2, match2);
|
|---|
| 3945 | addRegexToken("hmm", match3to4);
|
|---|
| 3946 | addRegexToken("hmmss", match5to6);
|
|---|
| 3947 | addRegexToken("Hmm", match3to4);
|
|---|
| 3948 | addRegexToken("Hmmss", match5to6);
|
|---|
| 3949 | addParseToken(["H", "HH"], HOUR);
|
|---|
| 3950 | addParseToken(["a", "A"], function (input, array, config) {
|
|---|
| 3951 | config._isPm = config._locale.isPM(input);
|
|---|
| 3952 | config._meridiem = input
|
|---|
| 3953 | });
|
|---|
| 3954 | addParseToken(["h", "hh"], function (input, array, config) {
|
|---|
| 3955 | array[HOUR] = toInt(input);
|
|---|
| 3956 | getParsingFlags(config).bigHour = true
|
|---|
| 3957 | });
|
|---|
| 3958 | addParseToken("hmm", function (input, array, config) {
|
|---|
| 3959 | var pos = input.length - 2;
|
|---|
| 3960 | array[HOUR] = toInt(input.substr(0, pos));
|
|---|
| 3961 | array[MINUTE] = toInt(input.substr(pos));
|
|---|
| 3962 | getParsingFlags(config).bigHour = true
|
|---|
| 3963 | });
|
|---|
| 3964 | addParseToken("hmmss", function (input, array, config) {
|
|---|
| 3965 | var pos1 = input.length - 4;
|
|---|
| 3966 | var pos2 = input.length - 2;
|
|---|
| 3967 | array[HOUR] = toInt(input.substr(0, pos1));
|
|---|
| 3968 | array[MINUTE] = toInt(input.substr(pos1, 2));
|
|---|
| 3969 | array[SECOND] = toInt(input.substr(pos2));
|
|---|
| 3970 | getParsingFlags(config).bigHour = true
|
|---|
| 3971 | });
|
|---|
| 3972 | addParseToken("Hmm", function (input, array, config) {
|
|---|
| 3973 | var pos = input.length - 2;
|
|---|
| 3974 | array[HOUR] = toInt(input.substr(0, pos));
|
|---|
| 3975 | array[MINUTE] = toInt(input.substr(pos))
|
|---|
| 3976 | });
|
|---|
| 3977 | addParseToken("Hmmss", function (input, array, config) {
|
|---|
| 3978 | var pos1 = input.length - 4;
|
|---|
| 3979 | var pos2 = input.length - 2;
|
|---|
| 3980 | array[HOUR] = toInt(input.substr(0, pos1));
|
|---|
| 3981 | array[MINUTE] = toInt(input.substr(pos1, 2));
|
|---|
| 3982 | array[SECOND] = toInt(input.substr(pos2))
|
|---|
| 3983 | });
|
|---|
| 3984 |
|
|---|
| 3985 | function localeIsPM(input) {
|
|---|
| 3986 | return (input + "").toLowerCase().charAt(0) === "p"
|
|---|
| 3987 | }
|
|---|
| 3988 | var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
|
|---|
| 3989 |
|
|---|
| 3990 | function localeMeridiem(hours, minutes, isLower) {
|
|---|
| 3991 | if (hours > 11) {
|
|---|
| 3992 | return isLower ? "pm" : "PM"
|
|---|
| 3993 | } else {
|
|---|
| 3994 | return isLower ? "am" : "AM"
|
|---|
| 3995 | }
|
|---|
| 3996 | }
|
|---|
| 3997 | var getSetHour = makeGetSet("Hours", true);
|
|---|
| 3998 | var baseConfig = {
|
|---|
| 3999 | calendar: defaultCalendar,
|
|---|
| 4000 | longDateFormat: defaultLongDateFormat,
|
|---|
| 4001 | invalidDate: defaultInvalidDate,
|
|---|
| 4002 | ordinal: defaultOrdinal,
|
|---|
| 4003 | ordinalParse: defaultOrdinalParse,
|
|---|
| 4004 | relativeTime: defaultRelativeTime,
|
|---|
| 4005 | months: defaultLocaleMonths,
|
|---|
| 4006 | monthsShort: defaultLocaleMonthsShort,
|
|---|
| 4007 | week: defaultLocaleWeek,
|
|---|
| 4008 | weekdays: defaultLocaleWeekdays,
|
|---|
| 4009 | weekdaysMin: defaultLocaleWeekdaysMin,
|
|---|
| 4010 | weekdaysShort: defaultLocaleWeekdaysShort,
|
|---|
| 4011 | meridiemParse: defaultLocaleMeridiemParse
|
|---|
| 4012 | };
|
|---|
| 4013 | var locales = {};
|
|---|
| 4014 | var localeFamilies = {};
|
|---|
| 4015 | var globalLocale;
|
|---|
| 4016 |
|
|---|
| 4017 | function normalizeLocale(key) {
|
|---|
| 4018 | return key ? key.toLowerCase().replace("_", "-") : key
|
|---|
| 4019 | }
|
|---|
| 4020 |
|
|---|
| 4021 | function chooseLocale(names) {
|
|---|
| 4022 | var i = 0,
|
|---|
| 4023 | j, next, locale, split;
|
|---|
| 4024 | while (i < names.length) {
|
|---|
| 4025 | split = normalizeLocale(names[i]).split("-");
|
|---|
| 4026 | j = split.length;
|
|---|
| 4027 | next = normalizeLocale(names[i + 1]);
|
|---|
| 4028 | next = next ? next.split("-") : null;
|
|---|
| 4029 | while (j > 0) {
|
|---|
| 4030 | locale = loadLocale(split.slice(0, j).join("-"));
|
|---|
| 4031 | if (locale) {
|
|---|
| 4032 | return locale
|
|---|
| 4033 | }
|
|---|
| 4034 | if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
|
|---|
| 4035 | break
|
|---|
| 4036 | }
|
|---|
| 4037 | j--
|
|---|
| 4038 | }
|
|---|
| 4039 | i++
|
|---|
| 4040 | }
|
|---|
| 4041 | return null
|
|---|
| 4042 | }
|
|---|
| 4043 |
|
|---|
| 4044 | function loadLocale(name) {
|
|---|
| 4045 | var oldLocale = null;
|
|---|
| 4046 | if (!locales[name] && typeof module !== "undefined" && module && module.exports) {
|
|---|
| 4047 | try {
|
|---|
| 4048 | oldLocale = globalLocale._abbr;
|
|---|
| 4049 | require("./locale/" + name);
|
|---|
| 4050 | getSetGlobalLocale(oldLocale)
|
|---|
| 4051 | } catch (e) {
|
|---|
| 4052 | }
|
|---|
| 4053 | }
|
|---|
| 4054 | return locales[name]
|
|---|
| 4055 | }
|
|---|
| 4056 |
|
|---|
| 4057 | function getSetGlobalLocale(key, values) {
|
|---|
| 4058 | var data;
|
|---|
| 4059 | if (key) {
|
|---|
| 4060 | if (isUndefined(values)) {
|
|---|
| 4061 | data = getLocale(key)
|
|---|
| 4062 | } else {
|
|---|
| 4063 | data = defineLocale(key, values)
|
|---|
| 4064 | }
|
|---|
| 4065 | if (data) {
|
|---|
| 4066 | globalLocale = data
|
|---|
| 4067 | }
|
|---|
| 4068 | }
|
|---|
| 4069 | return globalLocale._abbr
|
|---|
| 4070 | }
|
|---|
| 4071 |
|
|---|
| 4072 | function defineLocale(name, config) {
|
|---|
| 4073 | if (config !== null) {
|
|---|
| 4074 | var parentConfig = baseConfig;
|
|---|
| 4075 | config.abbr = name;
|
|---|
| 4076 | if (locales[name] != null) {
|
|---|
| 4077 | deprecateSimple("defineLocaleOverride", "use moment.updateLocale(localeName, config) to change " + "an existing locale. moment.defineLocale(localeName, " + "config) should only be used for creating a new locale " + "See http://momentjs.com/guides/#/warnings/define-locale/ for more info.");
|
|---|
| 4078 | parentConfig = locales[name]._config
|
|---|
| 4079 | } else if (config.parentLocale != null) {
|
|---|
| 4080 | if (locales[config.parentLocale] != null) {
|
|---|
| 4081 | parentConfig = locales[config.parentLocale]._config
|
|---|
| 4082 | } else {
|
|---|
| 4083 | if (!localeFamilies[config.parentLocale]) {
|
|---|
| 4084 | localeFamilies[config.parentLocale] = []
|
|---|
| 4085 | }
|
|---|
| 4086 | localeFamilies[config.parentLocale].push({
|
|---|
| 4087 | name: name,
|
|---|
| 4088 | config: config
|
|---|
| 4089 | });
|
|---|
| 4090 | return null
|
|---|
| 4091 | }
|
|---|
| 4092 | }
|
|---|
| 4093 | locales[name] = new Locale(mergeConfigs(parentConfig, config));
|
|---|
| 4094 | if (localeFamilies[name]) {
|
|---|
| 4095 | localeFamilies[name].forEach(function (x) {
|
|---|
| 4096 | defineLocale(x.name, x.config)
|
|---|
| 4097 | })
|
|---|
| 4098 | }
|
|---|
| 4099 | getSetGlobalLocale(name);
|
|---|
| 4100 | return locales[name]
|
|---|
| 4101 | } else {
|
|---|
| 4102 | delete locales[name];
|
|---|
| 4103 | return null
|
|---|
| 4104 | }
|
|---|
| 4105 | }
|
|---|
| 4106 |
|
|---|
| 4107 | function updateLocale(name, config) {
|
|---|
| 4108 | if (config != null) {
|
|---|
| 4109 | var locale, parentConfig = baseConfig;
|
|---|
| 4110 | if (locales[name] != null) {
|
|---|
| 4111 | parentConfig = locales[name]._config
|
|---|
| 4112 | }
|
|---|
| 4113 | config = mergeConfigs(parentConfig, config);
|
|---|
| 4114 | locale = new Locale(config);
|
|---|
| 4115 | locale.parentLocale = locales[name];
|
|---|
| 4116 | locales[name] = locale;
|
|---|
| 4117 | getSetGlobalLocale(name)
|
|---|
| 4118 | } else {
|
|---|
| 4119 | if (locales[name] != null) {
|
|---|
| 4120 | if (locales[name].parentLocale != null) {
|
|---|
| 4121 | locales[name] = locales[name].parentLocale
|
|---|
| 4122 | } else if (locales[name] != null) {
|
|---|
| 4123 | delete locales[name]
|
|---|
| 4124 | }
|
|---|
| 4125 | }
|
|---|
| 4126 | }
|
|---|
| 4127 | return locales[name]
|
|---|
| 4128 | }
|
|---|
| 4129 |
|
|---|
| 4130 | function getLocale(key) {
|
|---|
| 4131 | var locale;
|
|---|
| 4132 | if (key && key._locale && key._locale._abbr) {
|
|---|
| 4133 | key = key._locale._abbr
|
|---|
| 4134 | }
|
|---|
| 4135 | if (!key) {
|
|---|
| 4136 | return globalLocale
|
|---|
| 4137 | }
|
|---|
| 4138 | if (!isArray(key)) {
|
|---|
| 4139 | locale = loadLocale(key);
|
|---|
| 4140 | if (locale) {
|
|---|
| 4141 | return locale
|
|---|
| 4142 | }
|
|---|
| 4143 | key = [key]
|
|---|
| 4144 | }
|
|---|
| 4145 | return chooseLocale(key)
|
|---|
| 4146 | }
|
|---|
| 4147 |
|
|---|
| 4148 | function listLocales() {
|
|---|
| 4149 | return keys$1(locales)
|
|---|
| 4150 | }
|
|---|
| 4151 |
|
|---|
| 4152 | function checkOverflow(m) {
|
|---|
| 4153 | var overflow;
|
|---|
| 4154 | var a = m._a;
|
|---|
| 4155 | if (a && getParsingFlags(m).overflow === -2) {
|
|---|
| 4156 | overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;
|
|---|
| 4157 | if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
|
|---|
| 4158 | overflow = DATE
|
|---|
| 4159 | }
|
|---|
| 4160 | if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
|
|---|
| 4161 | overflow = WEEK
|
|---|
| 4162 | }
|
|---|
| 4163 | if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
|
|---|
| 4164 | overflow = WEEKDAY
|
|---|
| 4165 | }
|
|---|
| 4166 | getParsingFlags(m).overflow = overflow
|
|---|
| 4167 | }
|
|---|
| 4168 | return m
|
|---|
| 4169 | }
|
|---|
| 4170 | var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
|
|---|
| 4171 | var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
|
|---|
| 4172 | var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
|
|---|
| 4173 | var isoDates = [
|
|---|
| 4174 | ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
|
|---|
| 4175 | ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
|
|---|
| 4176 | ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
|
|---|
| 4177 | ["GGGG-[W]WW", /\d{4}-W\d\d/, false],
|
|---|
| 4178 | ["YYYY-DDD", /\d{4}-\d{3}/],
|
|---|
| 4179 | ["YYYY-MM", /\d{4}-\d\d/, false],
|
|---|
| 4180 | ["YYYYYYMMDD", /[+-]\d{10}/],
|
|---|
| 4181 | ["YYYYMMDD", /\d{8}/],
|
|---|
| 4182 | ["GGGG[W]WWE", /\d{4}W\d{3}/],
|
|---|
| 4183 | ["GGGG[W]WW", /\d{4}W\d{2}/, false],
|
|---|
| 4184 | ["YYYYDDD", /\d{7}/]
|
|---|
| 4185 | ];
|
|---|
| 4186 | var isoTimes = [
|
|---|
| 4187 | ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
|
|---|
| 4188 | ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
|
|---|
| 4189 | ["HH:mm:ss", /\d\d:\d\d:\d\d/],
|
|---|
| 4190 | ["HH:mm", /\d\d:\d\d/],
|
|---|
| 4191 | ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
|
|---|
| 4192 | ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
|
|---|
| 4193 | ["HHmmss", /\d\d\d\d\d\d/],
|
|---|
| 4194 | ["HHmm", /\d\d\d\d/],
|
|---|
| 4195 | ["HH", /\d\d/]
|
|---|
| 4196 | ];
|
|---|
| 4197 | var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
|
|---|
| 4198 |
|
|---|
| 4199 | function configFromISO(config) {
|
|---|
| 4200 | var i, l, string = config._i,
|
|---|
| 4201 | match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
|
|---|
| 4202 | allowTime, dateFormat, timeFormat, tzFormat;
|
|---|
| 4203 | if (match) {
|
|---|
| 4204 | getParsingFlags(config).iso = true;
|
|---|
| 4205 | for (i = 0, l = isoDates.length; i < l; i++) {
|
|---|
| 4206 | if (isoDates[i][1].exec(match[1])) {
|
|---|
| 4207 | dateFormat = isoDates[i][0];
|
|---|
| 4208 | allowTime = isoDates[i][2] !== false;
|
|---|
| 4209 | break
|
|---|
| 4210 | }
|
|---|
| 4211 | }
|
|---|
| 4212 | if (dateFormat == null) {
|
|---|
| 4213 | config._isValid = false;
|
|---|
| 4214 | return
|
|---|
| 4215 | }
|
|---|
| 4216 | if (match[3]) {
|
|---|
| 4217 | for (i = 0, l = isoTimes.length; i < l; i++) {
|
|---|
| 4218 | if (isoTimes[i][1].exec(match[3])) {
|
|---|
| 4219 | timeFormat = (match[2] || " ") + isoTimes[i][0];
|
|---|
| 4220 | break
|
|---|
| 4221 | }
|
|---|
| 4222 | }
|
|---|
| 4223 | if (timeFormat == null) {
|
|---|
| 4224 | config._isValid = false;
|
|---|
| 4225 | return
|
|---|
| 4226 | }
|
|---|
| 4227 | }
|
|---|
| 4228 | if (!allowTime && timeFormat != null) {
|
|---|
| 4229 | config._isValid = false;
|
|---|
| 4230 | return
|
|---|
| 4231 | }
|
|---|
| 4232 | if (match[4]) {
|
|---|
| 4233 | if (tzRegex.exec(match[4])) {
|
|---|
| 4234 | tzFormat = "Z"
|
|---|
| 4235 | } else {
|
|---|
| 4236 | config._isValid = false;
|
|---|
| 4237 | return
|
|---|
| 4238 | }
|
|---|
| 4239 | }
|
|---|
| 4240 | config._f = dateFormat + (timeFormat || "") + (tzFormat || "");
|
|---|
| 4241 | configFromStringAndFormat(config)
|
|---|
| 4242 | } else {
|
|---|
| 4243 | config._isValid = false
|
|---|
| 4244 | }
|
|---|
| 4245 | }
|
|---|
| 4246 |
|
|---|
| 4247 | function configFromString(config) {
|
|---|
| 4248 | var matched = aspNetJsonRegex.exec(config._i);
|
|---|
| 4249 | if (matched !== null) {
|
|---|
| 4250 | config._d = new Date(+matched[1]);
|
|---|
| 4251 | return
|
|---|
| 4252 | }
|
|---|
| 4253 | configFromISO(config);
|
|---|
| 4254 | if (config._isValid === false) {
|
|---|
| 4255 | delete config._isValid;
|
|---|
| 4256 | hooks.createFromInputFallback(config)
|
|---|
| 4257 | }
|
|---|
| 4258 | }
|
|---|
| 4259 | hooks.createFromInputFallback = deprecate("value provided is not in a recognized ISO format. moment construction falls back to js Date(), " + "which is not reliable across all browsers and versions. Non ISO date formats are " + "discouraged and will be removed in an upcoming major release. Please refer to " + "http://momentjs.com/guides/#/warnings/js-date/ for more info.", function (config) {
|
|---|
| 4260 | config._d = new Date(config._i + (config._useUTC ? " UTC" : ""))
|
|---|
| 4261 | });
|
|---|
| 4262 |
|
|---|
| 4263 | function defaults(a, b, c) {
|
|---|
| 4264 | if (a != null) {
|
|---|
| 4265 | return a
|
|---|
| 4266 | }
|
|---|
| 4267 | if (b != null) {
|
|---|
| 4268 | return b
|
|---|
| 4269 | }
|
|---|
| 4270 | return c
|
|---|
| 4271 | }
|
|---|
| 4272 |
|
|---|
| 4273 | function currentDateArray(config) {
|
|---|
| 4274 | var nowValue = new Date(hooks.now());
|
|---|
| 4275 | if (config._useUTC) {
|
|---|
| 4276 | return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]
|
|---|
| 4277 | }
|
|---|
| 4278 | return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]
|
|---|
| 4279 | }
|
|---|
| 4280 |
|
|---|
| 4281 | function configFromArray(config) {
|
|---|
| 4282 | var i, date, input = [],
|
|---|
| 4283 | currentDate, yearToUse;
|
|---|
| 4284 | if (config._d) {
|
|---|
| 4285 | return
|
|---|
| 4286 | }
|
|---|
| 4287 | currentDate = currentDateArray(config);
|
|---|
| 4288 | if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
|
|---|
| 4289 | dayOfYearFromWeekInfo(config)
|
|---|
| 4290 | }
|
|---|
| 4291 | if (config._dayOfYear) {
|
|---|
| 4292 | yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
|
|---|
| 4293 | if (config._dayOfYear > daysInYear(yearToUse)) {
|
|---|
| 4294 | getParsingFlags(config)._overflowDayOfYear = true
|
|---|
| 4295 | }
|
|---|
| 4296 | date = createUTCDate(yearToUse, 0, config._dayOfYear);
|
|---|
| 4297 | config._a[MONTH] = date.getUTCMonth();
|
|---|
| 4298 | config._a[DATE] = date.getUTCDate()
|
|---|
| 4299 | }
|
|---|
| 4300 | for (i = 0; i < 3 && config._a[i] == null; ++i) {
|
|---|
| 4301 | config._a[i] = input[i] = currentDate[i]
|
|---|
| 4302 | }
|
|---|
| 4303 | for (; i < 7; i++) {
|
|---|
| 4304 | config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i]
|
|---|
| 4305 | }
|
|---|
| 4306 | if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {
|
|---|
| 4307 | config._nextDay = true;
|
|---|
| 4308 | config._a[HOUR] = 0
|
|---|
| 4309 | }
|
|---|
| 4310 | config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
|
|---|
| 4311 | if (config._tzm != null) {
|
|---|
| 4312 | config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm)
|
|---|
| 4313 | }
|
|---|
| 4314 | if (config._nextDay) {
|
|---|
| 4315 | config._a[HOUR] = 24
|
|---|
| 4316 | }
|
|---|
| 4317 | }
|
|---|
| 4318 |
|
|---|
| 4319 | function dayOfYearFromWeekInfo(config) {
|
|---|
| 4320 | var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
|
|---|
| 4321 | w = config._w;
|
|---|
| 4322 | if (w.GG != null || w.W != null || w.E != null) {
|
|---|
| 4323 | dow = 1;
|
|---|
| 4324 | doy = 4;
|
|---|
| 4325 | weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
|
|---|
| 4326 | week = defaults(w.W, 1);
|
|---|
| 4327 | weekday = defaults(w.E, 1);
|
|---|
| 4328 | if (weekday < 1 || weekday > 7) {
|
|---|
| 4329 | weekdayOverflow = true
|
|---|
| 4330 | }
|
|---|
| 4331 | } else {
|
|---|
| 4332 | dow = config._locale._week.dow;
|
|---|
| 4333 | doy = config._locale._week.doy;
|
|---|
| 4334 | var curWeek = weekOfYear(createLocal(), dow, doy);
|
|---|
| 4335 | weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
|
|---|
| 4336 | week = defaults(w.w, curWeek.week);
|
|---|
| 4337 | if (w.d != null) {
|
|---|
| 4338 | weekday = w.d;
|
|---|
| 4339 | if (weekday < 0 || weekday > 6) {
|
|---|
| 4340 | weekdayOverflow = true
|
|---|
| 4341 | }
|
|---|
| 4342 | } else if (w.e != null) {
|
|---|
| 4343 | weekday = w.e + dow;
|
|---|
| 4344 | if (w.e < 0 || w.e > 6) {
|
|---|
| 4345 | weekdayOverflow = true
|
|---|
| 4346 | }
|
|---|
| 4347 | } else {
|
|---|
| 4348 | weekday = dow
|
|---|
| 4349 | }
|
|---|
| 4350 | }
|
|---|
| 4351 | if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
|
|---|
| 4352 | getParsingFlags(config)._overflowWeeks = true
|
|---|
| 4353 | } else if (weekdayOverflow != null) {
|
|---|
| 4354 | getParsingFlags(config)._overflowWeekday = true
|
|---|
| 4355 | } else {
|
|---|
| 4356 | temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
|
|---|
| 4357 | config._a[YEAR] = temp.year;
|
|---|
| 4358 | config._dayOfYear = temp.dayOfYear
|
|---|
| 4359 | }
|
|---|
| 4360 | }
|
|---|
| 4361 | hooks.ISO_8601 = function () {};
|
|---|
| 4362 |
|
|---|
| 4363 | function configFromStringAndFormat(config) {
|
|---|
| 4364 | if (config._f === hooks.ISO_8601) {
|
|---|
| 4365 | configFromISO(config);
|
|---|
| 4366 | return
|
|---|
| 4367 | }
|
|---|
| 4368 | config._a = [];
|
|---|
| 4369 | getParsingFlags(config).empty = true;
|
|---|
| 4370 | var string = "" + config._i,
|
|---|
| 4371 | i, parsedInput, tokens, token, skipped, stringLength = string.length,
|
|---|
| 4372 | totalParsedInputLength = 0;
|
|---|
| 4373 | tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
|
|---|
| 4374 | for (i = 0; i < tokens.length; i++) {
|
|---|
| 4375 | token = tokens[i];
|
|---|
| 4376 | parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
|
|---|
| 4377 | if (parsedInput) {
|
|---|
| 4378 | skipped = string.substr(0, string.indexOf(parsedInput));
|
|---|
| 4379 | if (skipped.length > 0) {
|
|---|
| 4380 | getParsingFlags(config).unusedInput.push(skipped)
|
|---|
| 4381 | }
|
|---|
| 4382 | string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
|
|---|
| 4383 | totalParsedInputLength += parsedInput.length
|
|---|
| 4384 | }
|
|---|
| 4385 | if (formatTokenFunctions[token]) {
|
|---|
| 4386 | if (parsedInput) {
|
|---|
| 4387 | getParsingFlags(config).empty = false
|
|---|
| 4388 | } else {
|
|---|
| 4389 | getParsingFlags(config).unusedTokens.push(token)
|
|---|
| 4390 | }
|
|---|
| 4391 | addTimeToArrayFromToken(token, parsedInput, config)
|
|---|
| 4392 | } else if (config._strict && !parsedInput) {
|
|---|
| 4393 | getParsingFlags(config).unusedTokens.push(token)
|
|---|
| 4394 | }
|
|---|
| 4395 | }
|
|---|
| 4396 | getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
|
|---|
| 4397 | if (string.length > 0) {
|
|---|
| 4398 | getParsingFlags(config).unusedInput.push(string)
|
|---|
| 4399 | }
|
|---|
| 4400 | if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {
|
|---|
| 4401 | getParsingFlags(config).bigHour = undefined
|
|---|
| 4402 | }
|
|---|
| 4403 | getParsingFlags(config).parsedDateParts = config._a.slice(0);
|
|---|
| 4404 | getParsingFlags(config).meridiem = config._meridiem;
|
|---|
| 4405 | config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
|
|---|
| 4406 | configFromArray(config);
|
|---|
| 4407 | checkOverflow(config)
|
|---|
| 4408 | }
|
|---|
| 4409 |
|
|---|
| 4410 | function meridiemFixWrap(locale, hour, meridiem) {
|
|---|
| 4411 | var isPm;
|
|---|
| 4412 | if (meridiem == null) {
|
|---|
| 4413 | return hour
|
|---|
| 4414 | }
|
|---|
| 4415 | if (locale.meridiemHour != null) {
|
|---|
| 4416 | return locale.meridiemHour(hour, meridiem)
|
|---|
| 4417 | } else if (locale.isPM != null) {
|
|---|
| 4418 | isPm = locale.isPM(meridiem);
|
|---|
| 4419 | if (isPm && hour < 12) {
|
|---|
| 4420 | hour += 12
|
|---|
| 4421 | }
|
|---|
| 4422 | if (!isPm && hour === 12) {
|
|---|
| 4423 | hour = 0
|
|---|
| 4424 | }
|
|---|
| 4425 | return hour
|
|---|
| 4426 | } else {
|
|---|
| 4427 | return hour
|
|---|
| 4428 | }
|
|---|
| 4429 | }
|
|---|
| 4430 |
|
|---|
| 4431 | function configFromStringAndArray(config) {
|
|---|
| 4432 | var tempConfig, bestMoment, scoreToBeat, i, currentScore;
|
|---|
| 4433 | if (config._f.length === 0) {
|
|---|
| 4434 | getParsingFlags(config).invalidFormat = true;
|
|---|
| 4435 | config._d = new Date(NaN);
|
|---|
| 4436 | return
|
|---|
| 4437 | }
|
|---|
| 4438 | for (i = 0; i < config._f.length; i++) {
|
|---|
| 4439 | currentScore = 0;
|
|---|
| 4440 | tempConfig = copyConfig({}, config);
|
|---|
| 4441 | if (config._useUTC != null) {
|
|---|
| 4442 | tempConfig._useUTC = config._useUTC
|
|---|
| 4443 | }
|
|---|
| 4444 | tempConfig._f = config._f[i];
|
|---|
| 4445 | configFromStringAndFormat(tempConfig);
|
|---|
| 4446 | if (!isValid(tempConfig)) {
|
|---|
| 4447 | continue
|
|---|
| 4448 | }
|
|---|
| 4449 | currentScore += getParsingFlags(tempConfig).charsLeftOver;
|
|---|
| 4450 | currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
|
|---|
| 4451 | getParsingFlags(tempConfig).score = currentScore;
|
|---|
| 4452 | if (scoreToBeat == null || currentScore < scoreToBeat) {
|
|---|
| 4453 | scoreToBeat = currentScore;
|
|---|
| 4454 | bestMoment = tempConfig
|
|---|
| 4455 | }
|
|---|
| 4456 | }
|
|---|
| 4457 | extend(config, bestMoment || tempConfig)
|
|---|
| 4458 | }
|
|---|
| 4459 |
|
|---|
| 4460 | function configFromObject(config) {
|
|---|
| 4461 | if (config._d) {
|
|---|
| 4462 | return
|
|---|
| 4463 | }
|
|---|
| 4464 | var i = normalizeObjectUnits(config._i);
|
|---|
| 4465 | config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
|
|---|
| 4466 | return obj && parseInt(obj, 10)
|
|---|
| 4467 | });
|
|---|
| 4468 | configFromArray(config)
|
|---|
| 4469 | }
|
|---|
| 4470 |
|
|---|
| 4471 | function createFromConfig(config) {
|
|---|
| 4472 | var res = new Moment(checkOverflow(prepareConfig(config)));
|
|---|
| 4473 | if (res._nextDay) {
|
|---|
| 4474 | res.add(1, "d");
|
|---|
| 4475 | res._nextDay = undefined
|
|---|
| 4476 | }
|
|---|
| 4477 | return res
|
|---|
| 4478 | }
|
|---|
| 4479 |
|
|---|
| 4480 | function prepareConfig(config) {
|
|---|
| 4481 | var input = config._i,
|
|---|
| 4482 | format = config._f;
|
|---|
| 4483 | config._locale = config._locale || getLocale(config._l);
|
|---|
| 4484 | if (input === null || format === undefined && input === "") {
|
|---|
| 4485 | return createInvalid({
|
|---|
| 4486 | nullInput: true
|
|---|
| 4487 | })
|
|---|
| 4488 | }
|
|---|
| 4489 | if (typeof input === "string") {
|
|---|
| 4490 | config._i = input = config._locale.preparse(input)
|
|---|
| 4491 | }
|
|---|
| 4492 | if (isMoment(input)) {
|
|---|
| 4493 | return new Moment(checkOverflow(input))
|
|---|
| 4494 | } else if (isDate(input)) {
|
|---|
| 4495 | config._d = input
|
|---|
| 4496 | } else if (isArray(format)) {
|
|---|
| 4497 | configFromStringAndArray(config)
|
|---|
| 4498 | } else if (format) {
|
|---|
| 4499 | configFromStringAndFormat(config)
|
|---|
| 4500 | } else {
|
|---|
| 4501 | configFromInput(config)
|
|---|
| 4502 | }
|
|---|
| 4503 | if (!isValid(config)) {
|
|---|
| 4504 | config._d = null
|
|---|
| 4505 | }
|
|---|
| 4506 | return config
|
|---|
| 4507 | }
|
|---|
| 4508 |
|
|---|
| 4509 | function configFromInput(config) {
|
|---|
| 4510 | var input = config._i;
|
|---|
| 4511 | if (input === undefined) {
|
|---|
| 4512 | config._d = new Date(hooks.now())
|
|---|
| 4513 | } else if (isDate(input)) {
|
|---|
| 4514 | config._d = new Date(input.valueOf())
|
|---|
| 4515 | } else if (typeof input === "string") {
|
|---|
| 4516 | configFromString(config)
|
|---|
| 4517 | } else if (isArray(input)) {
|
|---|
| 4518 | config._a = map(input.slice(0), function (obj) {
|
|---|
| 4519 | return parseInt(obj, 10)
|
|---|
| 4520 | });
|
|---|
| 4521 | configFromArray(config)
|
|---|
| 4522 | } else if (typeof input === "object") {
|
|---|
| 4523 | configFromObject(config)
|
|---|
| 4524 | } else if (isNumber(input)) {
|
|---|
| 4525 | config._d = new Date(input)
|
|---|
| 4526 | } else {
|
|---|
| 4527 | hooks.createFromInputFallback(config)
|
|---|
| 4528 | }
|
|---|
| 4529 | }
|
|---|
| 4530 |
|
|---|
| 4531 | function createLocalOrUTC(input, format, locale, strict, isUTC) {
|
|---|
| 4532 | var c = {};
|
|---|
| 4533 | if (locale === true || locale === false) {
|
|---|
| 4534 | strict = locale;
|
|---|
| 4535 | locale = undefined
|
|---|
| 4536 | }
|
|---|
| 4537 | if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
|
|---|
| 4538 | input = undefined
|
|---|
| 4539 | } // https://github.com/moment/moment/issues/1423
|
|---|
| 4540 | c._isAMomentObject = true;
|
|---|
| 4541 | c._useUTC = c._isUTC = isUTC;
|
|---|
| 4542 | c._l = locale;
|
|---|
| 4543 | c._i = input;
|
|---|
| 4544 | c._f = format;
|
|---|
| 4545 | c._strict = strict;
|
|---|
| 4546 | return createFromConfig(c)
|
|---|
| 4547 | }
|
|---|
| 4548 |
|
|---|
| 4549 | function createLocal(input, format, locale, strict) {
|
|---|
| 4550 | return createLocalOrUTC(input, format, locale, strict, false)
|
|---|
| 4551 | }
|
|---|
| 4552 | var prototypeMin = deprecate("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/", function () {
|
|---|
| 4553 | var other = createLocal.apply(null, arguments);
|
|---|
| 4554 | if (this.isValid() && other.isValid()) {
|
|---|
| 4555 | return other < this ? this : other
|
|---|
| 4556 | } else {
|
|---|
| 4557 | return createInvalid()
|
|---|
| 4558 | }
|
|---|
| 4559 | });
|
|---|
| 4560 | var prototypeMax = deprecate("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/", function () {
|
|---|
| 4561 | var other = createLocal.apply(null, arguments);
|
|---|
| 4562 | if (this.isValid() && other.isValid()) {
|
|---|
| 4563 | return other > this ? this : other
|
|---|
| 4564 | } else {
|
|---|
| 4565 | return createInvalid()
|
|---|
| 4566 | }
|
|---|
| 4567 | });
|
|---|
| 4568 |
|
|---|
| 4569 | function pickBy(fn, moments) {
|
|---|
| 4570 | var res, i;
|
|---|
| 4571 | if (moments.length === 1 && isArray(moments[0])) {
|
|---|
| 4572 | moments = moments[0]
|
|---|
| 4573 | }
|
|---|
| 4574 | if (!moments.length) {
|
|---|
| 4575 | return createLocal()
|
|---|
| 4576 | }
|
|---|
| 4577 | res = moments[0];
|
|---|
| 4578 | for (i = 1; i < moments.length; ++i) {
|
|---|
| 4579 | if (!moments[i].isValid() || moments[i][fn](res)) {
|
|---|
| 4580 | res = moments[i]
|
|---|
| 4581 | }
|
|---|
| 4582 | }
|
|---|
| 4583 | return res
|
|---|
| 4584 | }
|
|---|
| 4585 |
|
|---|
| 4586 | function min() {
|
|---|
| 4587 | var args = [].slice.call(arguments, 0);
|
|---|
| 4588 | return pickBy("isBefore", args)
|
|---|
| 4589 | }
|
|---|
| 4590 |
|
|---|
| 4591 | function max() {
|
|---|
| 4592 | var args = [].slice.call(arguments, 0);
|
|---|
| 4593 | return pickBy("isAfter", args)
|
|---|
| 4594 | }
|
|---|
| 4595 | var now = function () {
|
|---|
| 4596 | return Date.now ? Date.now() : +new Date
|
|---|
| 4597 | };
|
|---|
| 4598 |
|
|---|
| 4599 | function Duration(duration) {
|
|---|
| 4600 | var normalizedInput = normalizeObjectUnits(duration),
|
|---|
| 4601 | years = normalizedInput.year || 0,
|
|---|
| 4602 | quarters = normalizedInput.quarter || 0,
|
|---|
| 4603 | months = normalizedInput.month || 0,
|
|---|
| 4604 | weeks = normalizedInput.week || 0,
|
|---|
| 4605 | days = normalizedInput.day || 0,
|
|---|
| 4606 | hours = normalizedInput.hour || 0,
|
|---|
| 4607 | minutes = normalizedInput.minute || 0,
|
|---|
| 4608 | seconds = normalizedInput.second || 0,
|
|---|
| 4609 | milliseconds = normalizedInput.millisecond || 0;
|
|---|
| 4610 | this._milliseconds = +milliseconds + seconds * 1e3 + minutes * 6e4 + hours * 1e3 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
|
|---|
| 4611 | this._days = +days + weeks * 7;
|
|---|
| 4612 | this._months = +months + quarters * 3 + years * 12;
|
|---|
| 4613 | this._data = {};
|
|---|
| 4614 | this._locale = getLocale();
|
|---|
| 4615 | this._bubble()
|
|---|
| 4616 | }
|
|---|
| 4617 |
|
|---|
| 4618 | function isDuration(obj) {
|
|---|
| 4619 | return obj instanceof Duration
|
|---|
| 4620 | }
|
|---|
| 4621 |
|
|---|
| 4622 | function absRound(number) {
|
|---|
| 4623 | if (number < 0) {
|
|---|
| 4624 | return Math.round(-1 * number) * -1
|
|---|
| 4625 | } else {
|
|---|
| 4626 | return Math.round(number)
|
|---|
| 4627 | }
|
|---|
| 4628 | }
|
|---|
| 4629 |
|
|---|
| 4630 | function offset(token, separator) {
|
|---|
| 4631 | addFormatToken(token, 0, 0, function () {
|
|---|
| 4632 | var offset = this.utcOffset();
|
|---|
| 4633 | var sign = "+";
|
|---|
| 4634 | if (offset < 0) {
|
|---|
| 4635 | offset = -offset;
|
|---|
| 4636 | sign = "-"
|
|---|
| 4637 | }
|
|---|
| 4638 | return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2)
|
|---|
| 4639 | })
|
|---|
| 4640 | }
|
|---|
| 4641 | offset("Z", ":");
|
|---|
| 4642 | offset("ZZ", "");
|
|---|
| 4643 | addRegexToken("Z", matchShortOffset);
|
|---|
| 4644 | addRegexToken("ZZ", matchShortOffset);
|
|---|
| 4645 | addParseToken(["Z", "ZZ"], function (input, array, config) {
|
|---|
| 4646 | config._useUTC = true;
|
|---|
| 4647 | config._tzm = offsetFromString(matchShortOffset, input)
|
|---|
| 4648 | });
|
|---|
| 4649 | var chunkOffset = /([\+\-]|\d\d)/gi;
|
|---|
| 4650 |
|
|---|
| 4651 | function offsetFromString(matcher, string) {
|
|---|
| 4652 | var matches = (string || "").match(matcher);
|
|---|
| 4653 | if (matches === null) {
|
|---|
| 4654 | return null
|
|---|
| 4655 | }
|
|---|
| 4656 | var chunk = matches[matches.length - 1] || [];
|
|---|
| 4657 | var parts = (chunk + "").match(chunkOffset) || ["-", 0, 0];
|
|---|
| 4658 | var minutes = +(parts[1] * 60) + toInt(parts[2]);
|
|---|
| 4659 | return minutes === 0 ? 0 : parts[0] === "+" ? minutes : -minutes
|
|---|
| 4660 | }
|
|---|
| 4661 |
|
|---|
| 4662 | function cloneWithOffset(input, model) {
|
|---|
| 4663 | var res, diff;
|
|---|
| 4664 | if (model._isUTC) {
|
|---|
| 4665 | res = model.clone();
|
|---|
| 4666 | diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
|
|---|
| 4667 | res._d.setTime(res._d.valueOf() + diff);
|
|---|
| 4668 | hooks.updateOffset(res, false);
|
|---|
| 4669 | return res
|
|---|
| 4670 | } else {
|
|---|
| 4671 | return createLocal(input).local()
|
|---|
| 4672 | }
|
|---|
| 4673 | }
|
|---|
| 4674 |
|
|---|
| 4675 | function getDateOffset(m) { // https://github.com/moment/moment/pull/1871
|
|---|
| 4676 | return -Math.round(m._d.getTimezoneOffset() / 15) * 15
|
|---|
| 4677 | }
|
|---|
| 4678 | hooks.updateOffset = function () {};
|
|---|
| 4679 |
|
|---|
| 4680 | function getSetOffset(input, keepLocalTime) {
|
|---|
| 4681 | var offset = this._offset || 0,
|
|---|
| 4682 | localAdjust;
|
|---|
| 4683 | if (!this.isValid()) {
|
|---|
| 4684 | return input != null ? this : NaN
|
|---|
| 4685 | }
|
|---|
| 4686 | if (input != null) {
|
|---|
| 4687 | if (typeof input === "string") {
|
|---|
| 4688 | input = offsetFromString(matchShortOffset, input);
|
|---|
| 4689 | if (input === null) {
|
|---|
| 4690 | return this
|
|---|
| 4691 | }
|
|---|
| 4692 | } else if (Math.abs(input) < 16) {
|
|---|
| 4693 | input = input * 60
|
|---|
| 4694 | }
|
|---|
| 4695 | if (!this._isUTC && keepLocalTime) {
|
|---|
| 4696 | localAdjust = getDateOffset(this)
|
|---|
| 4697 | }
|
|---|
| 4698 | this._offset = input;
|
|---|
| 4699 | this._isUTC = true;
|
|---|
| 4700 | if (localAdjust != null) {
|
|---|
| 4701 | this.add(localAdjust, "m")
|
|---|
| 4702 | }
|
|---|
| 4703 | if (offset !== input) {
|
|---|
| 4704 | if (!keepLocalTime || this._changeInProgress) {
|
|---|
| 4705 | addSubtract(this, createDuration(input - offset, "m"), 1, false)
|
|---|
| 4706 | } else if (!this._changeInProgress) {
|
|---|
| 4707 | this._changeInProgress = true;
|
|---|
| 4708 | hooks.updateOffset(this, true);
|
|---|
| 4709 | this._changeInProgress = null
|
|---|
| 4710 | }
|
|---|
| 4711 | }
|
|---|
| 4712 | return this
|
|---|
| 4713 | } else {
|
|---|
| 4714 | return this._isUTC ? offset : getDateOffset(this)
|
|---|
| 4715 | }
|
|---|
| 4716 | }
|
|---|
| 4717 |
|
|---|
| 4718 | function getSetZone(input, keepLocalTime) {
|
|---|
| 4719 | if (input != null) {
|
|---|
| 4720 | if (typeof input !== "string") {
|
|---|
| 4721 | input = -input
|
|---|
| 4722 | }
|
|---|
| 4723 | this.utcOffset(input, keepLocalTime);
|
|---|
| 4724 | return this
|
|---|
| 4725 | } else {
|
|---|
| 4726 | return -this.utcOffset()
|
|---|
| 4727 | }
|
|---|
| 4728 | }
|
|---|
| 4729 |
|
|---|
| 4730 | function setOffsetToUTC(keepLocalTime) {
|
|---|
| 4731 | return this.utcOffset(0, keepLocalTime)
|
|---|
| 4732 | }
|
|---|
| 4733 |
|
|---|
| 4734 | function setOffsetToLocal(keepLocalTime) {
|
|---|
| 4735 | if (this._isUTC) {
|
|---|
| 4736 | this.utcOffset(0, keepLocalTime);
|
|---|
| 4737 | this._isUTC = false;
|
|---|
| 4738 | if (keepLocalTime) {
|
|---|
| 4739 | this.subtract(getDateOffset(this), "m")
|
|---|
| 4740 | }
|
|---|
| 4741 | }
|
|---|
| 4742 | return this
|
|---|
| 4743 | }
|
|---|
| 4744 |
|
|---|
| 4745 | function setOffsetToParsedOffset() {
|
|---|
| 4746 | if (this._tzm != null) {
|
|---|
| 4747 | this.utcOffset(this._tzm)
|
|---|
| 4748 | } else if (typeof this._i === "string") {
|
|---|
| 4749 | var tZone = offsetFromString(matchOffset, this._i);
|
|---|
| 4750 | if (tZone != null) {
|
|---|
| 4751 | this.utcOffset(tZone)
|
|---|
| 4752 | } else {
|
|---|
| 4753 | this.utcOffset(0, true)
|
|---|
| 4754 | }
|
|---|
| 4755 | }
|
|---|
| 4756 | return this
|
|---|
| 4757 | }
|
|---|
| 4758 |
|
|---|
| 4759 | function hasAlignedHourOffset(input) {
|
|---|
| 4760 | if (!this.isValid()) {
|
|---|
| 4761 | return false
|
|---|
| 4762 | }
|
|---|
| 4763 | input = input ? createLocal(input).utcOffset() : 0;
|
|---|
| 4764 | return (this.utcOffset() - input) % 60 === 0
|
|---|
| 4765 | }
|
|---|
| 4766 |
|
|---|
| 4767 | function isDaylightSavingTime() {
|
|---|
| 4768 | return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset()
|
|---|
| 4769 | }
|
|---|
| 4770 |
|
|---|
| 4771 | function isDaylightSavingTimeShifted() {
|
|---|
| 4772 | if (!isUndefined(this._isDSTShifted)) {
|
|---|
| 4773 | return this._isDSTShifted
|
|---|
| 4774 | }
|
|---|
| 4775 | var c = {};
|
|---|
| 4776 | copyConfig(c, this);
|
|---|
| 4777 | c = prepareConfig(c);
|
|---|
| 4778 | if (c._a) {
|
|---|
| 4779 | var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
|
|---|
| 4780 | this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0
|
|---|
| 4781 | } else {
|
|---|
| 4782 | this._isDSTShifted = false
|
|---|
| 4783 | }
|
|---|
| 4784 | return this._isDSTShifted
|
|---|
| 4785 | }
|
|---|
| 4786 |
|
|---|
| 4787 | function isLocal() {
|
|---|
| 4788 | return this.isValid() ? !this._isUTC : false
|
|---|
| 4789 | }
|
|---|
| 4790 |
|
|---|
| 4791 | function isUtcOffset() {
|
|---|
| 4792 | return this.isValid() ? this._isUTC : false
|
|---|
| 4793 | }
|
|---|
| 4794 |
|
|---|
| 4795 | function isUtc() {
|
|---|
| 4796 | return this.isValid() ? this._isUTC && this._offset === 0 : false
|
|---|
| 4797 | }
|
|---|
| 4798 | var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
|
|---|
| 4799 | var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;
|
|---|
| 4800 |
|
|---|
| 4801 | function createDuration(input, key) {
|
|---|
| 4802 | var duration = input,
|
|---|
| 4803 | match = null,
|
|---|
| 4804 | sign, ret, diffRes;
|
|---|
| 4805 | if (isDuration(input)) {
|
|---|
| 4806 | duration = {
|
|---|
| 4807 | ms: input._milliseconds,
|
|---|
| 4808 | d: input._days,
|
|---|
| 4809 | M: input._months
|
|---|
| 4810 | }
|
|---|
| 4811 | } else if (isNumber(input)) {
|
|---|
| 4812 | duration = {};
|
|---|
| 4813 | if (key) {
|
|---|
| 4814 | duration[key] = input
|
|---|
| 4815 | } else {
|
|---|
| 4816 | duration.milliseconds = input
|
|---|
| 4817 | }
|
|---|
| 4818 | } else if (!!(match = aspNetRegex.exec(input))) {
|
|---|
| 4819 | sign = match[1] === "-" ? -1 : 1;
|
|---|
| 4820 | duration = {
|
|---|
| 4821 | y: 0,
|
|---|
| 4822 | d: toInt(match[DATE]) * sign,
|
|---|
| 4823 | h: toInt(match[HOUR]) * sign,
|
|---|
| 4824 | m: toInt(match[MINUTE]) * sign,
|
|---|
| 4825 | s: toInt(match[SECOND]) * sign,
|
|---|
| 4826 | ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign
|
|---|
| 4827 | }
|
|---|
| 4828 | } else if (!!(match = isoRegex.exec(input))) {
|
|---|
| 4829 | sign = match[1] === "-" ? -1 : 1;
|
|---|
| 4830 | duration = {
|
|---|
| 4831 | y: parseIso(match[2], sign),
|
|---|
| 4832 | M: parseIso(match[3], sign),
|
|---|
| 4833 | w: parseIso(match[4], sign),
|
|---|
| 4834 | d: parseIso(match[5], sign),
|
|---|
| 4835 | h: parseIso(match[6], sign),
|
|---|
| 4836 | m: parseIso(match[7], sign),
|
|---|
| 4837 | s: parseIso(match[8], sign)
|
|---|
| 4838 | }
|
|---|
| 4839 | } else if (duration == null) {
|
|---|
| 4840 | duration = {}
|
|---|
| 4841 | } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
|
|---|
| 4842 | diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
|
|---|
| 4843 | duration = {};
|
|---|
| 4844 | duration.ms = diffRes.milliseconds;
|
|---|
| 4845 | duration.M = diffRes.months
|
|---|
| 4846 | }
|
|---|
| 4847 | ret = new Duration(duration);
|
|---|
| 4848 | if (isDuration(input) && hasOwnProp(input, "_locale")) {
|
|---|
| 4849 | ret._locale = input._locale
|
|---|
| 4850 | }
|
|---|
| 4851 | return ret
|
|---|
| 4852 | }
|
|---|
| 4853 | createDuration.fn = Duration.prototype;
|
|---|
| 4854 |
|
|---|
| 4855 | function parseIso(inp, sign) {
|
|---|
| 4856 | var res = inp && parseFloat(inp.replace(",", "."));
|
|---|
| 4857 | return (isNaN(res) ? 0 : res) * sign
|
|---|
| 4858 | }
|
|---|
| 4859 |
|
|---|
| 4860 | function positiveMomentsDifference(base, other) {
|
|---|
| 4861 | var res = {
|
|---|
| 4862 | milliseconds: 0,
|
|---|
| 4863 | months: 0
|
|---|
| 4864 | };
|
|---|
| 4865 | res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
|
|---|
| 4866 | if (base.clone().add(res.months, "M").isAfter(other)) {
|
|---|
| 4867 | --res.months
|
|---|
| 4868 | }
|
|---|
| 4869 | res.milliseconds = +other - +base.clone().add(res.months, "M");
|
|---|
| 4870 | return res
|
|---|
| 4871 | }
|
|---|
| 4872 |
|
|---|
| 4873 | function momentsDifference(base, other) {
|
|---|
| 4874 | var res;
|
|---|
| 4875 | if (!(base.isValid() && other.isValid())) {
|
|---|
| 4876 | return {
|
|---|
| 4877 | milliseconds: 0,
|
|---|
| 4878 | months: 0
|
|---|
| 4879 | }
|
|---|
| 4880 | }
|
|---|
| 4881 | other = cloneWithOffset(other, base);
|
|---|
| 4882 | if (base.isBefore(other)) {
|
|---|
| 4883 | res = positiveMomentsDifference(base, other)
|
|---|
| 4884 | } else {
|
|---|
| 4885 | res = positiveMomentsDifference(other, base);
|
|---|
| 4886 | res.milliseconds = -res.milliseconds;
|
|---|
| 4887 | res.months = -res.months
|
|---|
| 4888 | }
|
|---|
| 4889 | return res
|
|---|
| 4890 | }
|
|---|
| 4891 |
|
|---|
| 4892 | function createAdder(direction, name) {
|
|---|
| 4893 | return function (val, period) {
|
|---|
| 4894 | var dur, tmp;
|
|---|
| 4895 | if (period !== null && !isNaN(+period)) {
|
|---|
| 4896 | deprecateSimple(name, "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). " + "See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.");
|
|---|
| 4897 | tmp = val;
|
|---|
| 4898 | val = period;
|
|---|
| 4899 | period = tmp
|
|---|
| 4900 | }
|
|---|
| 4901 | val = typeof val === "string" ? +val : val;
|
|---|
| 4902 | dur = createDuration(val, period);
|
|---|
| 4903 | addSubtract(this, dur, direction);
|
|---|
| 4904 | return this
|
|---|
| 4905 | }
|
|---|
| 4906 | }
|
|---|
| 4907 |
|
|---|
| 4908 | function addSubtract(mom, duration, isAdding, updateOffset) {
|
|---|
| 4909 | var milliseconds = duration._milliseconds,
|
|---|
| 4910 | days = absRound(duration._days),
|
|---|
| 4911 | months = absRound(duration._months);
|
|---|
| 4912 | if (!mom.isValid()) {
|
|---|
| 4913 | return
|
|---|
| 4914 | }
|
|---|
| 4915 | updateOffset = updateOffset == null ? true : updateOffset;
|
|---|
| 4916 | if (milliseconds) {
|
|---|
| 4917 | mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding)
|
|---|
| 4918 | }
|
|---|
| 4919 | if (days) {
|
|---|
| 4920 | set$1(mom, "Date", get(mom, "Date") + days * isAdding)
|
|---|
| 4921 | }
|
|---|
| 4922 | if (months) {
|
|---|
| 4923 | setMonth(mom, get(mom, "Month") + months * isAdding)
|
|---|
| 4924 | }
|
|---|
| 4925 | if (updateOffset) {
|
|---|
| 4926 | hooks.updateOffset(mom, days || months)
|
|---|
| 4927 | }
|
|---|
| 4928 | }
|
|---|
| 4929 | var add = createAdder(1, "add");
|
|---|
| 4930 | var subtract = createAdder(-1, "subtract");
|
|---|
| 4931 |
|
|---|
| 4932 | function getCalendarFormat(myMoment, now) {
|
|---|
| 4933 | var diff = myMoment.diff(now, "days", true);
|
|---|
| 4934 | return diff < -6 ? "sameElse" : diff < -1 ? "lastWeek" : diff < 0 ? "lastDay" : diff < 1 ? "sameDay" : diff < 2 ? "nextDay" : diff < 7 ? "nextWeek" : "sameElse"
|
|---|
| 4935 | }
|
|---|
| 4936 |
|
|---|
| 4937 | function calendar$1(time, formats) {
|
|---|
| 4938 | var now = time || createLocal(),
|
|---|
| 4939 | sod = cloneWithOffset(now, this).startOf("day"),
|
|---|
| 4940 | format = hooks.calendarFormat(this, sod) || "sameElse";
|
|---|
| 4941 | var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
|
|---|
| 4942 | return this.format(output || this.localeData().calendar(format, this, createLocal(now)))
|
|---|
| 4943 | }
|
|---|
| 4944 |
|
|---|
| 4945 | function clone() {
|
|---|
| 4946 | return new Moment(this)
|
|---|
| 4947 | }
|
|---|
| 4948 |
|
|---|
| 4949 | function isAfter(input, units) {
|
|---|
| 4950 | var localInput = isMoment(input) ? input : createLocal(input);
|
|---|
| 4951 | if (!(this.isValid() && localInput.isValid())) {
|
|---|
| 4952 | return false
|
|---|
| 4953 | }
|
|---|
| 4954 | units = normalizeUnits(!isUndefined(units) ? units : "millisecond");
|
|---|
| 4955 | if (units === "millisecond") {
|
|---|
| 4956 | return this.valueOf() > localInput.valueOf()
|
|---|
| 4957 | } else {
|
|---|
| 4958 | return localInput.valueOf() < this.clone().startOf(units).valueOf()
|
|---|
| 4959 | }
|
|---|
| 4960 | }
|
|---|
| 4961 |
|
|---|
| 4962 | function isBefore(input, units) {
|
|---|
| 4963 | var localInput = isMoment(input) ? input : createLocal(input);
|
|---|
| 4964 | if (!(this.isValid() && localInput.isValid())) {
|
|---|
| 4965 | return false
|
|---|
| 4966 | }
|
|---|
| 4967 | units = normalizeUnits(!isUndefined(units) ? units : "millisecond");
|
|---|
| 4968 | if (units === "millisecond") {
|
|---|
| 4969 | return this.valueOf() < localInput.valueOf()
|
|---|
| 4970 | } else {
|
|---|
| 4971 | return this.clone().endOf(units).valueOf() < localInput.valueOf()
|
|---|
| 4972 | }
|
|---|
| 4973 | }
|
|---|
| 4974 |
|
|---|
| 4975 | function isBetween(from, to, units, inclusivity) {
|
|---|
| 4976 | inclusivity = inclusivity || "()";
|
|---|
| 4977 | return (inclusivity[0] === "(" ? this.isAfter(from, units) : !this.isBefore(from, units)) && (inclusivity[1] === ")" ? this.isBefore(to, units) : !this.isAfter(to, units))
|
|---|
| 4978 | }
|
|---|
| 4979 |
|
|---|
| 4980 | function isSame(input, units) {
|
|---|
| 4981 | var localInput = isMoment(input) ? input : createLocal(input),
|
|---|
| 4982 | inputMs;
|
|---|
| 4983 | if (!(this.isValid() && localInput.isValid())) {
|
|---|
| 4984 | return false
|
|---|
| 4985 | }
|
|---|
| 4986 | units = normalizeUnits(units || "millisecond");
|
|---|
| 4987 | if (units === "millisecond") {
|
|---|
| 4988 | return this.valueOf() === localInput.valueOf()
|
|---|
| 4989 | } else {
|
|---|
| 4990 | inputMs = localInput.valueOf();
|
|---|
| 4991 | return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf()
|
|---|
| 4992 | }
|
|---|
| 4993 | }
|
|---|
| 4994 |
|
|---|
| 4995 | function isSameOrAfter(input, units) {
|
|---|
| 4996 | return this.isSame(input, units) || this.isAfter(input, units)
|
|---|
| 4997 | }
|
|---|
| 4998 |
|
|---|
| 4999 | function isSameOrBefore(input, units) {
|
|---|
| 5000 | return this.isSame(input, units) || this.isBefore(input, units)
|
|---|
| 5001 | }
|
|---|
| 5002 |
|
|---|
| 5003 | function diff(input, units, asFloat) {
|
|---|
| 5004 | var that, zoneDelta, delta, output;
|
|---|
| 5005 | if (!this.isValid()) {
|
|---|
| 5006 | return NaN
|
|---|
| 5007 | }
|
|---|
| 5008 | that = cloneWithOffset(input, this);
|
|---|
| 5009 | if (!that.isValid()) {
|
|---|
| 5010 | return NaN
|
|---|
| 5011 | }
|
|---|
| 5012 | zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
|
|---|
| 5013 | units = normalizeUnits(units);
|
|---|
| 5014 | if (units === "year" || units === "month" || units === "quarter") {
|
|---|
| 5015 | output = monthDiff(this, that);
|
|---|
| 5016 | if (units === "quarter") {
|
|---|
| 5017 | output = output / 3
|
|---|
| 5018 | } else if (units === "year") {
|
|---|
| 5019 | output = output / 12
|
|---|
| 5020 | }
|
|---|
| 5021 | } else {
|
|---|
| 5022 | delta = this - that;
|
|---|
| 5023 | output = units === "second" ? delta / 1e3 : units === "minute" ? delta / 6e4 : units === "hour" ? delta / 36e5 : units === "day" ? (delta - zoneDelta) / 864e5 : units === "week" ? (delta - zoneDelta) / 6048e5 : delta
|
|---|
| 5024 | }
|
|---|
| 5025 | return asFloat ? output : absFloor(output)
|
|---|
| 5026 | }
|
|---|
| 5027 |
|
|---|
| 5028 | function monthDiff(a, b) {
|
|---|
| 5029 | var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
|
|---|
| 5030 | anchor = a.clone().add(wholeMonthDiff, "months"),
|
|---|
| 5031 | anchor2, adjust;
|
|---|
| 5032 | if (b - anchor < 0) {
|
|---|
| 5033 | anchor2 = a.clone().add(wholeMonthDiff - 1, "months");
|
|---|
| 5034 | adjust = (b - anchor) / (anchor - anchor2)
|
|---|
| 5035 | } else {
|
|---|
| 5036 | anchor2 = a.clone().add(wholeMonthDiff + 1, "months");
|
|---|
| 5037 | adjust = (b - anchor) / (anchor2 - anchor)
|
|---|
| 5038 | }
|
|---|
| 5039 | return -(wholeMonthDiff + adjust) || 0
|
|---|
| 5040 | }
|
|---|
| 5041 | hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
|
|---|
| 5042 | hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
|
|---|
| 5043 |
|
|---|
| 5044 | function toString() {
|
|---|
| 5045 | return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")
|
|---|
| 5046 | }
|
|---|
| 5047 |
|
|---|
| 5048 | function toISOString() {
|
|---|
| 5049 | var m = this.clone().utc();
|
|---|
| 5050 | if (0 < m.year() && m.year() <= 9999) {
|
|---|
| 5051 | if (isFunction(Date.prototype.toISOString)) {
|
|---|
| 5052 | return this.toDate().toISOString()
|
|---|
| 5053 | } else {
|
|---|
| 5054 | return formatMoment(m, "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")
|
|---|
| 5055 | }
|
|---|
| 5056 | } else {
|
|---|
| 5057 | return formatMoment(m, "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")
|
|---|
| 5058 | }
|
|---|
| 5059 | }
|
|---|
| 5060 |
|
|---|
| 5061 | function inspect() {
|
|---|
| 5062 | if (!this.isValid()) {
|
|---|
| 5063 | return "moment.invalid(/* " + this._i + " */)"
|
|---|
| 5064 | }
|
|---|
| 5065 | var func = "moment";
|
|---|
| 5066 | var zone = "";
|
|---|
| 5067 | if (!this.isLocal()) {
|
|---|
| 5068 | func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
|
|---|
| 5069 | zone = "Z"
|
|---|
| 5070 | }
|
|---|
| 5071 | var prefix = "[" + func + '("]';
|
|---|
| 5072 | var year = 0 < this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
|
|---|
| 5073 | var datetime = "-MM-DD[T]HH:mm:ss.SSS";
|
|---|
| 5074 | var suffix = zone + '[")]';
|
|---|
| 5075 | return this.format(prefix + year + datetime + suffix)
|
|---|
| 5076 | }
|
|---|
| 5077 |
|
|---|
| 5078 | function format(inputString) {
|
|---|
| 5079 | if (!inputString) {
|
|---|
| 5080 | inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat
|
|---|
| 5081 | }
|
|---|
| 5082 | var output = formatMoment(this, inputString);
|
|---|
| 5083 | return this.localeData().postformat(output)
|
|---|
| 5084 | }
|
|---|
| 5085 |
|
|---|
| 5086 | function from(time, withoutSuffix) {
|
|---|
| 5087 | if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
|
|---|
| 5088 | return createDuration({
|
|---|
| 5089 | to: this,
|
|---|
| 5090 | from: time
|
|---|
| 5091 | }).locale(this.locale()).humanize(!withoutSuffix)
|
|---|
| 5092 | } else {
|
|---|
| 5093 | return this.localeData().invalidDate()
|
|---|
| 5094 | }
|
|---|
| 5095 | }
|
|---|
| 5096 |
|
|---|
| 5097 | function fromNow(withoutSuffix) {
|
|---|
| 5098 | return this.from(createLocal(), withoutSuffix)
|
|---|
| 5099 | }
|
|---|
| 5100 |
|
|---|
| 5101 | function to(time, withoutSuffix) {
|
|---|
| 5102 | if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
|
|---|
| 5103 | return createDuration({
|
|---|
| 5104 | from: this,
|
|---|
| 5105 | to: time
|
|---|
| 5106 | }).locale(this.locale()).humanize(!withoutSuffix)
|
|---|
| 5107 | } else {
|
|---|
| 5108 | return this.localeData().invalidDate()
|
|---|
| 5109 | }
|
|---|
| 5110 | }
|
|---|
| 5111 |
|
|---|
| 5112 | function toNow(withoutSuffix) {
|
|---|
| 5113 | return this.to(createLocal(), withoutSuffix)
|
|---|
| 5114 | }
|
|---|
| 5115 |
|
|---|
| 5116 | function locale(key) {
|
|---|
| 5117 | var newLocaleData;
|
|---|
| 5118 | if (key === undefined) {
|
|---|
| 5119 | return this._locale._abbr
|
|---|
| 5120 | } else {
|
|---|
| 5121 | newLocaleData = getLocale(key);
|
|---|
| 5122 | if (newLocaleData != null) {
|
|---|
| 5123 | this._locale = newLocaleData
|
|---|
| 5124 | }
|
|---|
| 5125 | return this
|
|---|
| 5126 | }
|
|---|
| 5127 | }
|
|---|
| 5128 | var lang = deprecate("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.", function (key) {
|
|---|
| 5129 | if (key === undefined) {
|
|---|
| 5130 | return this.localeData()
|
|---|
| 5131 | } else {
|
|---|
| 5132 | return this.locale(key)
|
|---|
| 5133 | }
|
|---|
| 5134 | });
|
|---|
| 5135 |
|
|---|
| 5136 | function localeData() {
|
|---|
| 5137 | return this._locale
|
|---|
| 5138 | }
|
|---|
| 5139 |
|
|---|
| 5140 | function startOf(units) {
|
|---|
| 5141 | units = normalizeUnits(units);
|
|---|
| 5142 | switch (units) {
|
|---|
| 5143 | case "year":
|
|---|
| 5144 | this.month(0);
|
|---|
| 5145 | case "quarter":
|
|---|
| 5146 | case "month":
|
|---|
| 5147 | this.date(1);
|
|---|
| 5148 | case "week":
|
|---|
| 5149 | case "isoWeek":
|
|---|
| 5150 | case "day":
|
|---|
| 5151 | case "date":
|
|---|
| 5152 | this.hours(0);
|
|---|
| 5153 | case "hour":
|
|---|
| 5154 | this.minutes(0);
|
|---|
| 5155 | case "minute":
|
|---|
| 5156 | this.seconds(0);
|
|---|
| 5157 | case "second":
|
|---|
| 5158 | this.milliseconds(0)
|
|---|
| 5159 | }
|
|---|
| 5160 | if (units === "week") {
|
|---|
| 5161 | this.weekday(0)
|
|---|
| 5162 | }
|
|---|
| 5163 | if (units === "isoWeek") {
|
|---|
| 5164 | this.isoWeekday(1)
|
|---|
| 5165 | }
|
|---|
| 5166 | if (units === "quarter") {
|
|---|
| 5167 | this.month(Math.floor(this.month() / 3) * 3)
|
|---|
| 5168 | }
|
|---|
| 5169 | return this
|
|---|
| 5170 | }
|
|---|
| 5171 |
|
|---|
| 5172 | function endOf(units) {
|
|---|
| 5173 | units = normalizeUnits(units);
|
|---|
| 5174 | if (units === undefined || units === "millisecond") {
|
|---|
| 5175 | return this
|
|---|
| 5176 | }
|
|---|
| 5177 | if (units === "date") {
|
|---|
| 5178 | units = "day"
|
|---|
| 5179 | }
|
|---|
| 5180 | return this.startOf(units).add(1, units === "isoWeek" ? "week" : units).subtract(1, "ms")
|
|---|
| 5181 | }
|
|---|
| 5182 |
|
|---|
| 5183 | function valueOf() {
|
|---|
| 5184 | return this._d.valueOf() - (this._offset || 0) * 6e4
|
|---|
| 5185 | }
|
|---|
| 5186 |
|
|---|
| 5187 | function unix() {
|
|---|
| 5188 | return Math.floor(this.valueOf() / 1e3)
|
|---|
| 5189 | }
|
|---|
| 5190 |
|
|---|
| 5191 | function toDate() {
|
|---|
| 5192 | return new Date(this.valueOf())
|
|---|
| 5193 | }
|
|---|
| 5194 |
|
|---|
| 5195 | function toArray() {
|
|---|
| 5196 | var m = this;
|
|---|
| 5197 | return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]
|
|---|
| 5198 | }
|
|---|
| 5199 |
|
|---|
| 5200 | function toObject() {
|
|---|
| 5201 | var m = this;
|
|---|
| 5202 | return {
|
|---|
| 5203 | years: m.year(),
|
|---|
| 5204 | months: m.month(),
|
|---|
| 5205 | date: m.date(),
|
|---|
| 5206 | hours: m.hours(),
|
|---|
| 5207 | minutes: m.minutes(),
|
|---|
| 5208 | seconds: m.seconds(),
|
|---|
| 5209 | milliseconds: m.milliseconds()
|
|---|
| 5210 | }
|
|---|
| 5211 | }
|
|---|
| 5212 |
|
|---|
| 5213 | function toJSON() {
|
|---|
| 5214 | return this.isValid() ? this.toISOString() : null
|
|---|
| 5215 | }
|
|---|
| 5216 |
|
|---|
| 5217 | function isValid$1() {
|
|---|
| 5218 | return isValid(this)
|
|---|
| 5219 | }
|
|---|
| 5220 |
|
|---|
| 5221 | function parsingFlags() {
|
|---|
| 5222 | return extend({}, getParsingFlags(this))
|
|---|
| 5223 | }
|
|---|
| 5224 |
|
|---|
| 5225 | function invalidAt() {
|
|---|
| 5226 | return getParsingFlags(this).overflow
|
|---|
| 5227 | }
|
|---|
| 5228 |
|
|---|
| 5229 | function creationData() {
|
|---|
| 5230 | return {
|
|---|
| 5231 | input: this._i,
|
|---|
| 5232 | format: this._f,
|
|---|
| 5233 | locale: this._locale,
|
|---|
| 5234 | isUTC: this._isUTC,
|
|---|
| 5235 | strict: this._strict
|
|---|
| 5236 | }
|
|---|
| 5237 | }
|
|---|
| 5238 | addFormatToken(0, ["gg", 2], 0, function () {
|
|---|
| 5239 | return this.weekYear() % 100
|
|---|
| 5240 | });
|
|---|
| 5241 | addFormatToken(0, ["GG", 2], 0, function () {
|
|---|
| 5242 | return this.isoWeekYear() % 100
|
|---|
| 5243 | });
|
|---|
| 5244 |
|
|---|
| 5245 | function addWeekYearFormatToken(token, getter) {
|
|---|
| 5246 | addFormatToken(0, [token, token.length], 0, getter)
|
|---|
| 5247 | }
|
|---|
| 5248 | addWeekYearFormatToken("gggg", "weekYear");
|
|---|
| 5249 | addWeekYearFormatToken("ggggg", "weekYear");
|
|---|
| 5250 | addWeekYearFormatToken("GGGG", "isoWeekYear");
|
|---|
| 5251 | addWeekYearFormatToken("GGGGG", "isoWeekYear");
|
|---|
| 5252 | addUnitAlias("weekYear", "gg");
|
|---|
| 5253 | addUnitAlias("isoWeekYear", "GG");
|
|---|
| 5254 | addUnitPriority("weekYear", 1);
|
|---|
| 5255 | addUnitPriority("isoWeekYear", 1);
|
|---|
| 5256 | addRegexToken("G", matchSigned);
|
|---|
| 5257 | addRegexToken("g", matchSigned);
|
|---|
| 5258 | addRegexToken("GG", match1to2, match2);
|
|---|
| 5259 | addRegexToken("gg", match1to2, match2);
|
|---|
| 5260 | addRegexToken("GGGG", match1to4, match4);
|
|---|
| 5261 | addRegexToken("gggg", match1to4, match4);
|
|---|
| 5262 | addRegexToken("GGGGG", match1to6, match6);
|
|---|
| 5263 | addRegexToken("ggggg", match1to6, match6);
|
|---|
| 5264 | addWeekParseToken(["gggg", "ggggg", "GGGG", "GGGGG"], function (input, week, config, token) {
|
|---|
| 5265 | week[token.substr(0, 2)] = toInt(input)
|
|---|
| 5266 | });
|
|---|
| 5267 | addWeekParseToken(["gg", "GG"], function (input, week, config, token) {
|
|---|
| 5268 | week[token] = hooks.parseTwoDigitYear(input)
|
|---|
| 5269 | });
|
|---|
| 5270 |
|
|---|
| 5271 | function getSetWeekYear(input) {
|
|---|
| 5272 | return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy)
|
|---|
| 5273 | }
|
|---|
| 5274 |
|
|---|
| 5275 | function getSetISOWeekYear(input) {
|
|---|
| 5276 | return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4)
|
|---|
| 5277 | }
|
|---|
| 5278 |
|
|---|
| 5279 | function getISOWeeksInYear() {
|
|---|
| 5280 | return weeksInYear(this.year(), 1, 4)
|
|---|
| 5281 | }
|
|---|
| 5282 |
|
|---|
| 5283 | function getWeeksInYear() {
|
|---|
| 5284 | var weekInfo = this.localeData()._week;
|
|---|
| 5285 | return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy)
|
|---|
| 5286 | }
|
|---|
| 5287 |
|
|---|
| 5288 | function getSetWeekYearHelper(input, week, weekday, dow, doy) {
|
|---|
| 5289 | var weeksTarget;
|
|---|
| 5290 | if (input == null) {
|
|---|
| 5291 | return weekOfYear(this, dow, doy).year
|
|---|
| 5292 | } else {
|
|---|
| 5293 | weeksTarget = weeksInYear(input, dow, doy);
|
|---|
| 5294 | if (week > weeksTarget) {
|
|---|
| 5295 | week = weeksTarget
|
|---|
| 5296 | }
|
|---|
| 5297 | return setWeekAll.call(this, input, week, weekday, dow, doy)
|
|---|
| 5298 | }
|
|---|
| 5299 | }
|
|---|
| 5300 |
|
|---|
| 5301 | function setWeekAll(weekYear, week, weekday, dow, doy) {
|
|---|
| 5302 | var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
|
|---|
| 5303 | date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
|
|---|
| 5304 | this.year(date.getUTCFullYear());
|
|---|
| 5305 | this.month(date.getUTCMonth());
|
|---|
| 5306 | this.date(date.getUTCDate());
|
|---|
| 5307 | return this
|
|---|
| 5308 | }
|
|---|
| 5309 | addFormatToken("Q", 0, "Qo", "quarter");
|
|---|
| 5310 | addUnitAlias("quarter", "Q");
|
|---|
| 5311 | addUnitPriority("quarter", 7);
|
|---|
| 5312 | addRegexToken("Q", match1);
|
|---|
| 5313 | addParseToken("Q", function (input, array) {
|
|---|
| 5314 | array[MONTH] = (toInt(input) - 1) * 3
|
|---|
| 5315 | });
|
|---|
| 5316 |
|
|---|
| 5317 | function getSetQuarter(input) {
|
|---|
| 5318 | return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3)
|
|---|
| 5319 | }
|
|---|
| 5320 | addFormatToken("D", ["DD", 2], "Do", "date");
|
|---|
| 5321 | addUnitAlias("date", "D");
|
|---|
| 5322 | addUnitPriority("date", 9);
|
|---|
| 5323 | addRegexToken("D", match1to2);
|
|---|
| 5324 | addRegexToken("DD", match1to2, match2);
|
|---|
| 5325 | addRegexToken("Do", function (isStrict, locale) {
|
|---|
| 5326 | return isStrict ? locale._ordinalParse : locale._ordinalParseLenient
|
|---|
| 5327 | });
|
|---|
| 5328 | addParseToken(["D", "DD"], DATE);
|
|---|
| 5329 | addParseToken("Do", function (input, array) {
|
|---|
| 5330 | array[DATE] = toInt(input.match(match1to2)[0], 10)
|
|---|
| 5331 | });
|
|---|
| 5332 | var getSetDayOfMonth = makeGetSet("Date", true);
|
|---|
| 5333 | addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear");
|
|---|
| 5334 | addUnitAlias("dayOfYear", "DDD");
|
|---|
| 5335 | addUnitPriority("dayOfYear", 4);
|
|---|
| 5336 | addRegexToken("DDD", match1to3);
|
|---|
| 5337 | addRegexToken("DDDD", match3);
|
|---|
| 5338 | addParseToken(["DDD", "DDDD"], function (input, array, config) {
|
|---|
| 5339 | config._dayOfYear = toInt(input)
|
|---|
| 5340 | });
|
|---|
| 5341 |
|
|---|
| 5342 | function getSetDayOfYear(input) {
|
|---|
| 5343 | var dayOfYear = Math.round((this.clone().startOf("day") - this.clone().startOf("year")) / 864e5) + 1;
|
|---|
| 5344 | return input == null ? dayOfYear : this.add(input - dayOfYear, "d")
|
|---|
| 5345 | }
|
|---|
| 5346 | addFormatToken("m", ["mm", 2], 0, "minute");
|
|---|
| 5347 | addUnitAlias("minute", "m");
|
|---|
| 5348 | addUnitPriority("minute", 14);
|
|---|
| 5349 | addRegexToken("m", match1to2);
|
|---|
| 5350 | addRegexToken("mm", match1to2, match2);
|
|---|
| 5351 | addParseToken(["m", "mm"], MINUTE);
|
|---|
| 5352 | var getSetMinute = makeGetSet("Minutes", false);
|
|---|
| 5353 | addFormatToken("s", ["ss", 2], 0, "second");
|
|---|
| 5354 | addUnitAlias("second", "s");
|
|---|
| 5355 | addUnitPriority("second", 15);
|
|---|
| 5356 | addRegexToken("s", match1to2);
|
|---|
| 5357 | addRegexToken("ss", match1to2, match2);
|
|---|
| 5358 | addParseToken(["s", "ss"], SECOND);
|
|---|
| 5359 | var getSetSecond = makeGetSet("Seconds", false);
|
|---|
| 5360 | addFormatToken("S", 0, 0, function () {
|
|---|
| 5361 | return ~~(this.millisecond() / 100)
|
|---|
| 5362 | });
|
|---|
| 5363 | addFormatToken(0, ["SS", 2], 0, function () {
|
|---|
| 5364 | return ~~(this.millisecond() / 10)
|
|---|
| 5365 | });
|
|---|
| 5366 | addFormatToken(0, ["SSS", 3], 0, "millisecond");
|
|---|
| 5367 | addFormatToken(0, ["SSSS", 4], 0, function () {
|
|---|
| 5368 | return this.millisecond() * 10
|
|---|
| 5369 | });
|
|---|
| 5370 | addFormatToken(0, ["SSSSS", 5], 0, function () {
|
|---|
| 5371 | return this.millisecond() * 100
|
|---|
| 5372 | });
|
|---|
| 5373 | addFormatToken(0, ["SSSSSS", 6], 0, function () {
|
|---|
| 5374 | return this.millisecond() * 1e3
|
|---|
| 5375 | });
|
|---|
| 5376 | addFormatToken(0, ["SSSSSSS", 7], 0, function () {
|
|---|
| 5377 | return this.millisecond() * 1e4
|
|---|
| 5378 | });
|
|---|
| 5379 | addFormatToken(0, ["SSSSSSSS", 8], 0, function () {
|
|---|
| 5380 | return this.millisecond() * 1e5
|
|---|
| 5381 | });
|
|---|
| 5382 | addFormatToken(0, ["SSSSSSSSS", 9], 0, function () {
|
|---|
| 5383 | return this.millisecond() * 1e6
|
|---|
| 5384 | });
|
|---|
| 5385 | addUnitAlias("millisecond", "ms");
|
|---|
| 5386 | addUnitPriority("millisecond", 16);
|
|---|
| 5387 | addRegexToken("S", match1to3, match1);
|
|---|
| 5388 | addRegexToken("SS", match1to3, match2);
|
|---|
| 5389 | addRegexToken("SSS", match1to3, match3);
|
|---|
| 5390 | var token;
|
|---|
| 5391 | for (token = "SSSS"; token.length <= 9; token += "S") {
|
|---|
| 5392 | addRegexToken(token, matchUnsigned)
|
|---|
| 5393 | }
|
|---|
| 5394 |
|
|---|
| 5395 | function parseMs(input, array) {
|
|---|
| 5396 | array[MILLISECOND] = toInt(("0." + input) * 1e3)
|
|---|
| 5397 | }
|
|---|
| 5398 | for (token = "S"; token.length <= 9; token += "S") {
|
|---|
| 5399 | addParseToken(token, parseMs)
|
|---|
| 5400 | }
|
|---|
| 5401 | var getSetMillisecond = makeGetSet("Milliseconds", false);
|
|---|
| 5402 | addFormatToken("z", 0, 0, "zoneAbbr");
|
|---|
| 5403 | addFormatToken("zz", 0, 0, "zoneName");
|
|---|
| 5404 |
|
|---|
| 5405 | function getZoneAbbr() {
|
|---|
| 5406 | return this._isUTC ? "UTC" : ""
|
|---|
| 5407 | }
|
|---|
| 5408 |
|
|---|
| 5409 | function getZoneName() {
|
|---|
| 5410 | return this._isUTC ? "Coordinated Universal Time" : ""
|
|---|
| 5411 | }
|
|---|
| 5412 | var proto = Moment.prototype;
|
|---|
| 5413 | proto.add = add;
|
|---|
| 5414 | proto.calendar = calendar$1;
|
|---|
| 5415 | proto.clone = clone;
|
|---|
| 5416 | proto.diff = diff;
|
|---|
| 5417 | proto.endOf = endOf;
|
|---|
| 5418 | proto.format = format;
|
|---|
| 5419 | proto.from = from;
|
|---|
| 5420 | proto.fromNow = fromNow;
|
|---|
| 5421 | proto.to = to;
|
|---|
| 5422 | proto.toNow = toNow;
|
|---|
| 5423 | proto.get = stringGet;
|
|---|
| 5424 | proto.invalidAt = invalidAt;
|
|---|
| 5425 | proto.isAfter = isAfter;
|
|---|
| 5426 | proto.isBefore = isBefore;
|
|---|
| 5427 | proto.isBetween = isBetween;
|
|---|
| 5428 | proto.isSame = isSame;
|
|---|
| 5429 | proto.isSameOrAfter = isSameOrAfter;
|
|---|
| 5430 | proto.isSameOrBefore = isSameOrBefore;
|
|---|
| 5431 | proto.isValid = isValid$1;
|
|---|
| 5432 | proto.lang = lang;
|
|---|
| 5433 | proto.locale = locale;
|
|---|
| 5434 | proto.localeData = localeData;
|
|---|
| 5435 | proto.max = prototypeMax;
|
|---|
| 5436 | proto.min = prototypeMin;
|
|---|
| 5437 | proto.parsingFlags = parsingFlags;
|
|---|
| 5438 | proto.set = stringSet;
|
|---|
| 5439 | proto.startOf = startOf;
|
|---|
| 5440 | proto.subtract = subtract;
|
|---|
| 5441 | proto.toArray = toArray;
|
|---|
| 5442 | proto.toObject = toObject;
|
|---|
| 5443 | proto.toDate = toDate;
|
|---|
| 5444 | proto.toISOString = toISOString;
|
|---|
| 5445 | proto.inspect = inspect;
|
|---|
| 5446 | proto.toJSON = toJSON;
|
|---|
| 5447 | proto.toString = toString;
|
|---|
| 5448 | proto.unix = unix;
|
|---|
| 5449 | proto.valueOf = valueOf;
|
|---|
| 5450 | proto.creationData = creationData;
|
|---|
| 5451 | proto.year = getSetYear;
|
|---|
| 5452 | proto.isLeapYear = getIsLeapYear;
|
|---|
| 5453 | proto.weekYear = getSetWeekYear;
|
|---|
| 5454 | proto.isoWeekYear = getSetISOWeekYear;
|
|---|
| 5455 | proto.quarter = proto.quarters = getSetQuarter;
|
|---|
| 5456 | proto.month = getSetMonth;
|
|---|
| 5457 | proto.daysInMonth = getDaysInMonth;
|
|---|
| 5458 | proto.week = proto.weeks = getSetWeek;
|
|---|
| 5459 | proto.isoWeek = proto.isoWeeks = getSetISOWeek;
|
|---|
| 5460 | proto.weeksInYear = getWeeksInYear;
|
|---|
| 5461 | proto.isoWeeksInYear = getISOWeeksInYear;
|
|---|
| 5462 | proto.date = getSetDayOfMonth;
|
|---|
| 5463 | proto.day = proto.days = getSetDayOfWeek;
|
|---|
| 5464 | proto.weekday = getSetLocaleDayOfWeek;
|
|---|
| 5465 | proto.isoWeekday = getSetISODayOfWeek;
|
|---|
| 5466 | proto.dayOfYear = getSetDayOfYear;
|
|---|
| 5467 | proto.hour = proto.hours = getSetHour;
|
|---|
| 5468 | proto.minute = proto.minutes = getSetMinute;
|
|---|
| 5469 | proto.second = proto.seconds = getSetSecond;
|
|---|
| 5470 | proto.millisecond = proto.milliseconds = getSetMillisecond;
|
|---|
| 5471 | proto.utcOffset = getSetOffset;
|
|---|
| 5472 | proto.utc = setOffsetToUTC;
|
|---|
| 5473 | proto.local = setOffsetToLocal;
|
|---|
| 5474 | proto.parseZone = setOffsetToParsedOffset;
|
|---|
| 5475 | proto.hasAlignedHourOffset = hasAlignedHourOffset;
|
|---|
| 5476 | proto.isDST = isDaylightSavingTime;
|
|---|
| 5477 | proto.isLocal = isLocal;
|
|---|
| 5478 | proto.isUtcOffset = isUtcOffset;
|
|---|
| 5479 | proto.isUtc = isUtc;
|
|---|
| 5480 | proto.isUTC = isUtc;
|
|---|
| 5481 | proto.zoneAbbr = getZoneAbbr;
|
|---|
| 5482 | proto.zoneName = getZoneName;
|
|---|
| 5483 | proto.dates = deprecate("dates accessor is deprecated. Use date instead.", getSetDayOfMonth);
|
|---|
| 5484 | proto.months = deprecate("months accessor is deprecated. Use month instead", getSetMonth);
|
|---|
| 5485 | proto.years = deprecate("years accessor is deprecated. Use year instead", getSetYear);
|
|---|
| 5486 | proto.zone = deprecate("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/", getSetZone);
|
|---|
| 5487 | proto.isDSTShifted = deprecate("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information", isDaylightSavingTimeShifted);
|
|---|
| 5488 |
|
|---|
| 5489 | function createUnix(input) {
|
|---|
| 5490 | return createLocal(input * 1e3)
|
|---|
| 5491 | }
|
|---|
| 5492 |
|
|---|
| 5493 | function createInZone() {
|
|---|
| 5494 | return createLocal.apply(null, arguments).parseZone()
|
|---|
| 5495 | }
|
|---|
| 5496 |
|
|---|
| 5497 | function preParsePostFormat(string) {
|
|---|
| 5498 | return string
|
|---|
| 5499 | }
|
|---|
| 5500 | var proto$1 = Locale.prototype;
|
|---|
| 5501 | proto$1.calendar = calendar;
|
|---|
| 5502 | proto$1.longDateFormat = longDateFormat;
|
|---|
| 5503 | proto$1.invalidDate = invalidDate;
|
|---|
| 5504 | proto$1.ordinal = ordinal;
|
|---|
| 5505 | proto$1.preparse = preParsePostFormat;
|
|---|
| 5506 | proto$1.postformat = preParsePostFormat;
|
|---|
| 5507 | proto$1.relativeTime = relativeTime;
|
|---|
| 5508 | proto$1.pastFuture = pastFuture;
|
|---|
| 5509 | proto$1.set = set;
|
|---|
| 5510 | proto$1.months = localeMonths;
|
|---|
| 5511 | proto$1.monthsShort = localeMonthsShort;
|
|---|
| 5512 | proto$1.monthsParse = localeMonthsParse;
|
|---|
| 5513 | proto$1.monthsRegex = monthsRegex;
|
|---|
| 5514 | proto$1.monthsShortRegex = monthsShortRegex;
|
|---|
| 5515 | proto$1.week = localeWeek;
|
|---|
| 5516 | proto$1.firstDayOfYear = localeFirstDayOfYear;
|
|---|
| 5517 | proto$1.firstDayOfWeek = localeFirstDayOfWeek;
|
|---|
| 5518 | proto$1.weekdays = localeWeekdays;
|
|---|
| 5519 | proto$1.weekdaysMin = localeWeekdaysMin;
|
|---|
| 5520 | proto$1.weekdaysShort = localeWeekdaysShort;
|
|---|
| 5521 | proto$1.weekdaysParse = localeWeekdaysParse;
|
|---|
| 5522 | proto$1.weekdaysRegex = weekdaysRegex;
|
|---|
| 5523 | proto$1.weekdaysShortRegex = weekdaysShortRegex;
|
|---|
| 5524 | proto$1.weekdaysMinRegex = weekdaysMinRegex;
|
|---|
| 5525 | proto$1.isPM = localeIsPM;
|
|---|
| 5526 | proto$1.meridiem = localeMeridiem;
|
|---|
| 5527 |
|
|---|
| 5528 | function get$1(format, index, field, setter) {
|
|---|
| 5529 | var locale = getLocale();
|
|---|
| 5530 | var utc = createUTC().set(setter, index);
|
|---|
| 5531 | return locale[field](utc, format)
|
|---|
| 5532 | }
|
|---|
| 5533 |
|
|---|
| 5534 | function listMonthsImpl(format, index, field) {
|
|---|
| 5535 | if (isNumber(format)) {
|
|---|
| 5536 | index = format;
|
|---|
| 5537 | format = undefined
|
|---|
| 5538 | }
|
|---|
| 5539 | format = format || "";
|
|---|
| 5540 | if (index != null) {
|
|---|
| 5541 | return get$1(format, index, field, "month")
|
|---|
| 5542 | }
|
|---|
| 5543 | var i;
|
|---|
| 5544 | var out = [];
|
|---|
| 5545 | for (i = 0; i < 12; i++) {
|
|---|
| 5546 | out[i] = get$1(format, i, field, "month")
|
|---|
| 5547 | }
|
|---|
| 5548 | return out
|
|---|
| 5549 | }
|
|---|
| 5550 |
|
|---|
| 5551 | function listWeekdaysImpl(localeSorted, format, index, field) {
|
|---|
| 5552 | if (typeof localeSorted === "boolean") {
|
|---|
| 5553 | if (isNumber(format)) {
|
|---|
| 5554 | index = format;
|
|---|
| 5555 | format = undefined
|
|---|
| 5556 | }
|
|---|
| 5557 | format = format || ""
|
|---|
| 5558 | } else {
|
|---|
| 5559 | format = localeSorted;
|
|---|
| 5560 | index = format;
|
|---|
| 5561 | localeSorted = false;
|
|---|
| 5562 | if (isNumber(format)) {
|
|---|
| 5563 | index = format;
|
|---|
| 5564 | format = undefined
|
|---|
| 5565 | }
|
|---|
| 5566 | format = format || ""
|
|---|
| 5567 | }
|
|---|
| 5568 | var locale = getLocale(),
|
|---|
| 5569 | shift = localeSorted ? locale._week.dow : 0;
|
|---|
| 5570 | if (index != null) {
|
|---|
| 5571 | return get$1(format, (index + shift) % 7, field, "day")
|
|---|
| 5572 | }
|
|---|
| 5573 | var i;
|
|---|
| 5574 | var out = [];
|
|---|
| 5575 | for (i = 0; i < 7; i++) {
|
|---|
| 5576 | out[i] = get$1(format, (i + shift) % 7, field, "day")
|
|---|
| 5577 | }
|
|---|
| 5578 | return out
|
|---|
| 5579 | }
|
|---|
| 5580 |
|
|---|
| 5581 | function listMonths(format, index) {
|
|---|
| 5582 | return listMonthsImpl(format, index, "months")
|
|---|
| 5583 | }
|
|---|
| 5584 |
|
|---|
| 5585 | function listMonthsShort(format, index) {
|
|---|
| 5586 | return listMonthsImpl(format, index, "monthsShort")
|
|---|
| 5587 | }
|
|---|
| 5588 |
|
|---|
| 5589 | function listWeekdays(localeSorted, format, index) {
|
|---|
| 5590 | return listWeekdaysImpl(localeSorted, format, index, "weekdays")
|
|---|
| 5591 | }
|
|---|
| 5592 |
|
|---|
| 5593 | function listWeekdaysShort(localeSorted, format, index) {
|
|---|
| 5594 | return listWeekdaysImpl(localeSorted, format, index, "weekdaysShort")
|
|---|
| 5595 | }
|
|---|
| 5596 |
|
|---|
| 5597 | function listWeekdaysMin(localeSorted, format, index) {
|
|---|
| 5598 | return listWeekdaysImpl(localeSorted, format, index, "weekdaysMin")
|
|---|
| 5599 | }
|
|---|
| 5600 | getSetGlobalLocale("en", {
|
|---|
| 5601 | ordinalParse: /\d{1,2}(th|st|nd|rd)/,
|
|---|
| 5602 | ordinal: function (number) {
|
|---|
| 5603 | var b = number % 10,
|
|---|
| 5604 | output = toInt(number % 100 / 10) === 1 ? "th" : b === 1 ? "st" : b === 2 ? "nd" : b === 3 ? "rd" : "th";
|
|---|
| 5605 | return number + output
|
|---|
| 5606 | }
|
|---|
| 5607 | });
|
|---|
| 5608 | hooks.lang = deprecate("moment.lang is deprecated. Use moment.locale instead.", getSetGlobalLocale);
|
|---|
| 5609 | hooks.langData = deprecate("moment.langData is deprecated. Use moment.localeData instead.", getLocale);
|
|---|
| 5610 | var mathAbs = Math.abs;
|
|---|
| 5611 |
|
|---|
| 5612 | function abs() {
|
|---|
| 5613 | var data = this._data;
|
|---|
| 5614 | this._milliseconds = mathAbs(this._milliseconds);
|
|---|
| 5615 | this._days = mathAbs(this._days);
|
|---|
| 5616 | this._months = mathAbs(this._months);
|
|---|
| 5617 | data.milliseconds = mathAbs(data.milliseconds);
|
|---|
| 5618 | data.seconds = mathAbs(data.seconds);
|
|---|
| 5619 | data.minutes = mathAbs(data.minutes);
|
|---|
| 5620 | data.hours = mathAbs(data.hours);
|
|---|
| 5621 | data.months = mathAbs(data.months);
|
|---|
| 5622 | data.years = mathAbs(data.years);
|
|---|
| 5623 | return this
|
|---|
| 5624 | }
|
|---|
| 5625 |
|
|---|
| 5626 | function addSubtract$1(duration, input, value, direction) {
|
|---|
| 5627 | var other = createDuration(input, value);
|
|---|
| 5628 | duration._milliseconds += direction * other._milliseconds;
|
|---|
| 5629 | duration._days += direction * other._days;
|
|---|
| 5630 | duration._months += direction * other._months;
|
|---|
| 5631 | return duration._bubble()
|
|---|
| 5632 | }
|
|---|
| 5633 |
|
|---|
| 5634 | function add$1(input, value) {
|
|---|
| 5635 | return addSubtract$1(this, input, value, 1)
|
|---|
| 5636 | }
|
|---|
| 5637 |
|
|---|
| 5638 | function subtract$1(input, value) {
|
|---|
| 5639 | return addSubtract$1(this, input, value, -1)
|
|---|
| 5640 | }
|
|---|
| 5641 |
|
|---|
| 5642 | function absCeil(number) {
|
|---|
| 5643 | if (number < 0) {
|
|---|
| 5644 | return Math.floor(number)
|
|---|
| 5645 | } else {
|
|---|
| 5646 | return Math.ceil(number)
|
|---|
| 5647 | }
|
|---|
| 5648 | }
|
|---|
| 5649 |
|
|---|
| 5650 | function bubble() {
|
|---|
| 5651 | var milliseconds = this._milliseconds;
|
|---|
| 5652 | var days = this._days;
|
|---|
| 5653 | var months = this._months;
|
|---|
| 5654 | var data = this._data;
|
|---|
| 5655 | var seconds, minutes, hours, years, monthsFromDays; // check: https://github.com/moment/moment/issues/2166
|
|---|
| 5656 | if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {
|
|---|
| 5657 | milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
|
|---|
| 5658 | days = 0;
|
|---|
| 5659 | months = 0
|
|---|
| 5660 | }
|
|---|
| 5661 | data.milliseconds = milliseconds % 1e3;
|
|---|
| 5662 | seconds = absFloor(milliseconds / 1e3);
|
|---|
| 5663 | data.seconds = seconds % 60;
|
|---|
| 5664 | minutes = absFloor(seconds / 60);
|
|---|
| 5665 | data.minutes = minutes % 60;
|
|---|
| 5666 | hours = absFloor(minutes / 60);
|
|---|
| 5667 | data.hours = hours % 24;
|
|---|
| 5668 | days += absFloor(hours / 24);
|
|---|
| 5669 | monthsFromDays = absFloor(daysToMonths(days));
|
|---|
| 5670 | months += monthsFromDays;
|
|---|
| 5671 | days -= absCeil(monthsToDays(monthsFromDays));
|
|---|
| 5672 | years = absFloor(months / 12);
|
|---|
| 5673 | months %= 12;
|
|---|
| 5674 | data.days = days;
|
|---|
| 5675 | data.months = months;
|
|---|
| 5676 | data.years = years;
|
|---|
| 5677 | return this
|
|---|
| 5678 | }
|
|---|
| 5679 |
|
|---|
| 5680 | function daysToMonths(days) {
|
|---|
| 5681 | return days * 4800 / 146097
|
|---|
| 5682 | }
|
|---|
| 5683 |
|
|---|
| 5684 | function monthsToDays(months) {
|
|---|
| 5685 | return months * 146097 / 4800
|
|---|
| 5686 | }
|
|---|
| 5687 |
|
|---|
| 5688 | function as(units) {
|
|---|
| 5689 | var days;
|
|---|
| 5690 | var months;
|
|---|
| 5691 | var milliseconds = this._milliseconds;
|
|---|
| 5692 | units = normalizeUnits(units);
|
|---|
| 5693 | if (units === "month" || units === "year") {
|
|---|
| 5694 | days = this._days + milliseconds / 864e5;
|
|---|
| 5695 | months = this._months + daysToMonths(days);
|
|---|
| 5696 | return units === "month" ? months : months / 12
|
|---|
| 5697 | } else {
|
|---|
| 5698 | days = this._days + Math.round(monthsToDays(this._months));
|
|---|
| 5699 | switch (units) {
|
|---|
| 5700 | case "week":
|
|---|
| 5701 | return days / 7 + milliseconds / 6048e5;
|
|---|
| 5702 | case "day":
|
|---|
| 5703 | return days + milliseconds / 864e5;
|
|---|
| 5704 | case "hour":
|
|---|
| 5705 | return days * 24 + milliseconds / 36e5;
|
|---|
| 5706 | case "minute":
|
|---|
| 5707 | return days * 1440 + milliseconds / 6e4;
|
|---|
| 5708 | case "second":
|
|---|
| 5709 | return days * 86400 + milliseconds / 1e3;
|
|---|
| 5710 | case "millisecond":
|
|---|
| 5711 | return Math.floor(days * 864e5) + milliseconds;
|
|---|
| 5712 | default:
|
|---|
| 5713 | throw new Error("Unknown unit " + units)
|
|---|
| 5714 | }
|
|---|
| 5715 | }
|
|---|
| 5716 | }
|
|---|
| 5717 |
|
|---|
| 5718 | function valueOf$1() {
|
|---|
| 5719 | return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6
|
|---|
| 5720 | }
|
|---|
| 5721 |
|
|---|
| 5722 | function makeAs(alias) {
|
|---|
| 5723 | return function () {
|
|---|
| 5724 | return this.as(alias)
|
|---|
| 5725 | }
|
|---|
| 5726 | }
|
|---|
| 5727 | var asMilliseconds = makeAs("ms");
|
|---|
| 5728 | var asSeconds = makeAs("s");
|
|---|
| 5729 | var asMinutes = makeAs("m");
|
|---|
| 5730 | var asHours = makeAs("h");
|
|---|
| 5731 | var asDays = makeAs("d");
|
|---|
| 5732 | var asWeeks = makeAs("w");
|
|---|
| 5733 | var asMonths = makeAs("M");
|
|---|
| 5734 | var asYears = makeAs("y");
|
|---|
| 5735 |
|
|---|
| 5736 | function get$2(units) {
|
|---|
| 5737 | units = normalizeUnits(units);
|
|---|
| 5738 | return this[units + "s"]()
|
|---|
| 5739 | }
|
|---|
| 5740 |
|
|---|
| 5741 | function makeGetter(name) {
|
|---|
| 5742 | return function () {
|
|---|
| 5743 | return this._data[name]
|
|---|
| 5744 | }
|
|---|
| 5745 | }
|
|---|
| 5746 | var milliseconds = makeGetter("milliseconds");
|
|---|
| 5747 | var seconds = makeGetter("seconds");
|
|---|
| 5748 | var minutes = makeGetter("minutes");
|
|---|
| 5749 | var hours = makeGetter("hours");
|
|---|
| 5750 | var days = makeGetter("days");
|
|---|
| 5751 | var months = makeGetter("months");
|
|---|
| 5752 | var years = makeGetter("years");
|
|---|
| 5753 |
|
|---|
| 5754 | function weeks() {
|
|---|
| 5755 | return absFloor(this.days() / 7)
|
|---|
| 5756 | }
|
|---|
| 5757 | var round = Math.round;
|
|---|
| 5758 | var thresholds = {
|
|---|
| 5759 | s: 45,
|
|---|
| 5760 | m: 45,
|
|---|
| 5761 | h: 22,
|
|---|
| 5762 | d: 26,
|
|---|
| 5763 | M: 11
|
|---|
| 5764 | };
|
|---|
| 5765 |
|
|---|
| 5766 | function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
|
|---|
| 5767 | return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture)
|
|---|
| 5768 | }
|
|---|
| 5769 |
|
|---|
| 5770 | function relativeTime$1(posNegDuration, withoutSuffix, locale) {
|
|---|
| 5771 | var duration = createDuration(posNegDuration).abs();
|
|---|
| 5772 | var seconds = round(duration.as("s"));
|
|---|
| 5773 | var minutes = round(duration.as("m"));
|
|---|
| 5774 | var hours = round(duration.as("h"));
|
|---|
| 5775 | var days = round(duration.as("d"));
|
|---|
| 5776 | var months = round(duration.as("M"));
|
|---|
| 5777 | var years = round(duration.as("y"));
|
|---|
| 5778 | var a = seconds < thresholds.s && ["s", seconds] || minutes <= 1 && ["m"] || minutes < thresholds.m && ["mm", minutes] || hours <= 1 && ["h"] || hours < thresholds.h && ["hh", hours] || days <= 1 && ["d"] || days < thresholds.d && ["dd", days] || months <= 1 && ["M"] || months < thresholds.M && ["MM", months] || years <= 1 && ["y"] || ["yy", years];
|
|---|
| 5779 | a[2] = withoutSuffix;
|
|---|
| 5780 | a[3] = +posNegDuration > 0;
|
|---|
| 5781 | a[4] = locale;
|
|---|
| 5782 | return substituteTimeAgo.apply(null, a)
|
|---|
| 5783 | }
|
|---|
| 5784 |
|
|---|
| 5785 | function getSetRelativeTimeRounding(roundingFunction) {
|
|---|
| 5786 | if (roundingFunction === undefined) {
|
|---|
| 5787 | return round
|
|---|
| 5788 | }
|
|---|
| 5789 | if (typeof roundingFunction === "function") {
|
|---|
| 5790 | round = roundingFunction;
|
|---|
| 5791 | return true
|
|---|
| 5792 | }
|
|---|
| 5793 | return false
|
|---|
| 5794 | }
|
|---|
| 5795 |
|
|---|
| 5796 | function getSetRelativeTimeThreshold(threshold, limit) {
|
|---|
| 5797 | if (thresholds[threshold] === undefined) {
|
|---|
| 5798 | return false
|
|---|
| 5799 | }
|
|---|
| 5800 | if (limit === undefined) {
|
|---|
| 5801 | return thresholds[threshold]
|
|---|
| 5802 | }
|
|---|
| 5803 | thresholds[threshold] = limit;
|
|---|
| 5804 | return true
|
|---|
| 5805 | }
|
|---|
| 5806 |
|
|---|
| 5807 | function humanize(withSuffix) {
|
|---|
| 5808 | var locale = this.localeData();
|
|---|
| 5809 | var output = relativeTime$1(this, !withSuffix, locale);
|
|---|
| 5810 | if (withSuffix) {
|
|---|
| 5811 | output = locale.pastFuture(+this, output)
|
|---|
| 5812 | }
|
|---|
| 5813 | return locale.postformat(output)
|
|---|
| 5814 | }
|
|---|
| 5815 | var abs$1 = Math.abs;
|
|---|
| 5816 |
|
|---|
| 5817 | function toISOString$1() {
|
|---|
| 5818 | var seconds = abs$1(this._milliseconds) / 1e3;
|
|---|
| 5819 | var days = abs$1(this._days);
|
|---|
| 5820 | var months = abs$1(this._months);
|
|---|
| 5821 | var minutes, hours, years;
|
|---|
| 5822 | minutes = absFloor(seconds / 60);
|
|---|
| 5823 | hours = absFloor(minutes / 60);
|
|---|
| 5824 | seconds %= 60;
|
|---|
| 5825 | minutes %= 60;
|
|---|
| 5826 | years = absFloor(months / 12);
|
|---|
| 5827 | months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
|
|---|
| 5828 | var Y = years;
|
|---|
| 5829 | var M = months;
|
|---|
| 5830 | var D = days;
|
|---|
| 5831 | var h = hours;
|
|---|
| 5832 | var m = minutes;
|
|---|
| 5833 | var s = seconds;
|
|---|
| 5834 | var total = this.asSeconds();
|
|---|
| 5835 | if (!total) {
|
|---|
| 5836 | return "P0D"
|
|---|
| 5837 | }
|
|---|
| 5838 | return (total < 0 ? "-" : "") + "P" + (Y ? Y + "Y" : "") + (M ? M + "M" : "") + (D ? D + "D" : "") + (h || m || s ? "T" : "") + (h ? h + "H" : "") + (m ? m + "M" : "") + (s ? s + "S" : "")
|
|---|
| 5839 | }
|
|---|
| 5840 | var proto$2 = Duration.prototype;
|
|---|
| 5841 | proto$2.abs = abs;
|
|---|
| 5842 | proto$2.add = add$1;
|
|---|
| 5843 | proto$2.subtract = subtract$1;
|
|---|
| 5844 | proto$2.as = as;
|
|---|
| 5845 | proto$2.asMilliseconds = asMilliseconds;
|
|---|
| 5846 | proto$2.asSeconds = asSeconds;
|
|---|
| 5847 | proto$2.asMinutes = asMinutes;
|
|---|
| 5848 | proto$2.asHours = asHours;
|
|---|
| 5849 | proto$2.asDays = asDays;
|
|---|
| 5850 | proto$2.asWeeks = asWeeks;
|
|---|
| 5851 | proto$2.asMonths = asMonths;
|
|---|
| 5852 | proto$2.asYears = asYears;
|
|---|
| 5853 | proto$2.valueOf = valueOf$1;
|
|---|
| 5854 | proto$2._bubble = bubble;
|
|---|
| 5855 | proto$2.get = get$2;
|
|---|
| 5856 | proto$2.milliseconds = milliseconds;
|
|---|
| 5857 | proto$2.seconds = seconds;
|
|---|
| 5858 | proto$2.minutes = minutes;
|
|---|
| 5859 | proto$2.hours = hours;
|
|---|
| 5860 | proto$2.days = days;
|
|---|
| 5861 | proto$2.weeks = weeks;
|
|---|
| 5862 | proto$2.months = months;
|
|---|
| 5863 | proto$2.years = years;
|
|---|
| 5864 | proto$2.humanize = humanize;
|
|---|
| 5865 | proto$2.toISOString = toISOString$1;
|
|---|
| 5866 | proto$2.toString = toISOString$1;
|
|---|
| 5867 | proto$2.toJSON = toISOString$1;
|
|---|
| 5868 | proto$2.locale = locale;
|
|---|
| 5869 | proto$2.localeData = localeData;
|
|---|
| 5870 | proto$2.toIsoString = deprecate("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)", toISOString$1);
|
|---|
| 5871 | proto$2.lang = lang;
|
|---|
| 5872 | addFormatToken("X", 0, 0, "unix");
|
|---|
| 5873 | addFormatToken("x", 0, 0, "valueOf");
|
|---|
| 5874 | addRegexToken("x", matchSigned);
|
|---|
| 5875 | addRegexToken("X", matchTimestamp);
|
|---|
| 5876 | addParseToken("X", function (input, array, config) {
|
|---|
| 5877 | config._d = new Date(parseFloat(input, 10) * 1e3)
|
|---|
| 5878 | });
|
|---|
| 5879 | addParseToken("x", function (input, array, config) {
|
|---|
| 5880 | config._d = new Date(toInt(input))
|
|---|
| 5881 | });
|
|---|
| 5882 | hooks.version = "2.17.1";
|
|---|
| 5883 | setHookCallback(createLocal);
|
|---|
| 5884 | hooks.fn = proto;
|
|---|
| 5885 | hooks.min = min;
|
|---|
| 5886 | hooks.max = max;
|
|---|
| 5887 | hooks.now = now;
|
|---|
| 5888 | hooks.utc = createUTC;
|
|---|
| 5889 | hooks.unix = createUnix;
|
|---|
| 5890 | hooks.months = listMonths;
|
|---|
| 5891 | hooks.isDate = isDate;
|
|---|
| 5892 | hooks.locale = getSetGlobalLocale;
|
|---|
| 5893 | hooks.invalid = createInvalid;
|
|---|
| 5894 | hooks.duration = createDuration;
|
|---|
| 5895 | hooks.isMoment = isMoment;
|
|---|
| 5896 | hooks.weekdays = listWeekdays;
|
|---|
| 5897 | hooks.parseZone = createInZone;
|
|---|
| 5898 | hooks.localeData = getLocale;
|
|---|
| 5899 | hooks.isDuration = isDuration;
|
|---|
| 5900 | hooks.monthsShort = listMonthsShort;
|
|---|
| 5901 | hooks.weekdaysMin = listWeekdaysMin;
|
|---|
| 5902 | hooks.defineLocale = defineLocale;
|
|---|
| 5903 | hooks.updateLocale = updateLocale;
|
|---|
| 5904 | hooks.locales = listLocales;
|
|---|
| 5905 | hooks.weekdaysShort = listWeekdaysShort;
|
|---|
| 5906 | hooks.normalizeUnits = normalizeUnits;
|
|---|
| 5907 | hooks.relativeTimeRounding = getSetRelativeTimeRounding;
|
|---|
| 5908 | hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
|
|---|
| 5909 | hooks.calendarFormat = getCalendarFormat;
|
|---|
| 5910 | hooks.prototype = proto;
|
|---|
| 5911 | return hooks
|
|---|
| 5912 | })
|
|---|
| 5913 | }, {}],
|
|---|
| 5914 | opening_hours: [function (require, module, exports) {
|
|---|
| 5915 | /*
|
|---|
| 5916 | * @source: https://github.com/opening-hours/opening_hours.js/blob/master/opening_hours.js
|
|---|
| 5917 | * @source: ./opening_hours.js
|
|---|
| 5918 | * @license: LGPL-3.0
|
|---|
| 5919 | *
|
|---|
| 5920 | * Copyright (C) 2012-2013 Dmitry Marakasov
|
|---|
| 5921 | * Copyright (C) 2013-2016 Robin `ypid` Schneider
|
|---|
| 5922 | *
|
|---|
| 5923 | * opening_hours.js is free software; you can redistribute it and/or modify it
|
|---|
| 5924 | * under the terms of the GNU Lesser General Public License as published by the
|
|---|
| 5925 | * Free Software Foundation, version 3 of the License.
|
|---|
| 5926 | *
|
|---|
| 5927 | * opening_hours.js is distributed in the hope that it will be useful,
|
|---|
| 5928 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 5929 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|---|
| 5930 | * Lesser General Public License for more details.
|
|---|
| 5931 | *
|
|---|
| 5932 | * You should have received a copy of the GNU Lesser General Public
|
|---|
| 5933 | * License along with opening_hours.js; if not, see
|
|---|
| 5934 | * <https://www.gnu.org/licenses/>.
|
|---|
| 5935 | * For information see https://github.com/opening-hours/opening_hours.js
|
|---|
| 5936 | * and the docs directory which contains internal documentation and design.
|
|---|
| 5937 | *
|
|---|
| 5938 | * ---------------
|
|---|
| 5939 | * Copyright (C) 2012-2013 Dmitry Marakasov
|
|---|
| 5940 | *
|
|---|
| 5941 | * All work done by Dmitry Marakasov is additionally published under the New (2-clause) BSD license.
|
|---|
| 5942 | * Refer to the README.md and the reversion control history for more details.
|
|---|
| 5943 | */
|
|---|
| 5944 | (function (root, factory) {
|
|---|
| 5945 | "use strict";
|
|---|
| 5946 | var holiday_definitions = {
|
|---|
| 5947 | nl: {
|
|---|
| 5948 | PH: {
|
|---|
| 5949 | Nieuwjaarsdag: [1, 1],
|
|---|
| 5950 | "Goede vrijdag": ["easter", -2],
|
|---|
| 5951 | "Tweede Paasdag": ["easter", 1],
|
|---|
| 5952 | Koningsdag: [4, 27],
|
|---|
| 5953 | Bevreidingsdag: [5, 5],
|
|---|
| 5954 | Hemelvaartsdag: ["easter", 39],
|
|---|
| 5955 | "Tweede Pinksterdag": ["easter", 50],
|
|---|
| 5956 | "Eerste Kerstdag": [12, 25],
|
|---|
| 5957 | "Tweede Kerstdag": [12, 26]
|
|---|
| 5958 | }
|
|---|
| 5959 | },
|
|---|
| 5960 | be: {
|
|---|
| 5961 | PH: {
|
|---|
| 5962 | "Nieuwjaar - Jour de l'an": [1, 1],
|
|---|
| 5963 | "Paasmaandag - Lundi de Pâques": ["easter", 1],
|
|---|
| 5964 | "Dag van de Arbeid - Fête du Travail": [5, 1],
|
|---|
| 5965 | "Onze-Lieve-Heer-Hemelvaart - Jeudi de l'Ascensionn": ["easter", 39],
|
|---|
| 5966 | "Pinkstermaandag - Lundi de Pentecôte": ["easter", 50],
|
|---|
| 5967 | "Nationale feestdag van België - Fête nationale": [7, 21],
|
|---|
| 5968 | "Onze-Lieve-Vrouw-Hemelvaart - Assomption": [8, 15],
|
|---|
| 5969 | "Allerheiligen - Toussaint": [11, 1],
|
|---|
| 5970 | "Wapenstilstand - Armistice": [11, 11],
|
|---|
| 5971 | "Kerstmis - Noël": [12, 25]
|
|---|
| 5972 | }
|
|---|
| 5973 | },
|
|---|
| 5974 | pl: {
|
|---|
| 5975 | _nominatim_url: "https://nominatim.openstreetmap.org/reverse?format=json&lat=53.4825&lon=18.75823&zoom=18&addressdetails=1&accept-language=pl,en",
|
|---|
| 5976 | PH: {
|
|---|
| 5977 | "Nowy Rok": [1, 1],
|
|---|
| 5978 | "Święto Trzech Króli": [1, 6],
|
|---|
| 5979 | Wielkanoc: ["easter", 0],
|
|---|
| 5980 | "Lany Poniedziałek - drugi dzień Wielkiej Nocy": ["easter", 1],
|
|---|
| 5981 | "Pierwszy Maja": [5, 1],
|
|---|
| 5982 | "Trzeci Maja": [5, 3],
|
|---|
| 5983 | "Zielone Świątki": ["easter", 49],
|
|---|
| 5984 | "Boże Ciało": ["easter", 60],
|
|---|
| 5985 | "Wniebowzięcie Najświętszej Maryi Panny": [8, 15],
|
|---|
| 5986 | "Wszystkich Świętych": [11, 1],
|
|---|
| 5987 | "Święto Niepodległości": [11, 11],
|
|---|
| 5988 | "pierwszy dzień Bożego Narodzenia": [12, 25],
|
|---|
| 5989 | "drugi dzień Bożego Narodzenia": [12, 26]
|
|---|
| 5990 | }
|
|---|
| 5991 | },
|
|---|
| 5992 | fr: {
|
|---|
| 5993 | PH: {
|
|---|
| 5994 | "Jour de l'an": [1, 1],
|
|---|
| 5995 | "Vendredi saint": ["easter", -2, ["Moselle", "Bas-Rhin", "Haut-Rhin", "Guadeloupe", "Martinique", "Polynésie française"]],
|
|---|
| 5996 | "Lundi de Pâques": ["easter", 1],
|
|---|
| 5997 | "Saint-Pierre-Chanel": [4, 28, ["Wallis-et-Futuna"]],
|
|---|
| 5998 | "Fête du Travail": [5, 1],
|
|---|
| 5999 | "Fête de la Victoire": [5, 8],
|
|---|
| 6000 | "Abolition de l'esclavage (Martinique)": [5, 22, ["Martinique"]],
|
|---|
| 6001 | "Abolition de l'esclavage (Guadeloupe)": [5, 27, ["Guadeloupe"]],
|
|---|
| 6002 | "Jeudi de l'Ascension": ["easter", 39],
|
|---|
| 6003 | "Lundi de Pentecôte": ["easter", 50],
|
|---|
| 6004 | "Abolition de l'esclavage (Guyane)": [6, 10, ["Guyane"]],
|
|---|
| 6005 | "Fête de l'autonomie": [6, 29, ["Polynésie française"]],
|
|---|
| 6006 | "Fête nationale": [7, 14],
|
|---|
| 6007 | "Fête Victor Schoelcher": [7, 21, ["Guadeloupe", "Martinique"]],
|
|---|
| 6008 | "Fête du Territoire": [7, 29, ["Wallis-et-Futuna"]],
|
|---|
| 6009 | Assomption: [8, 15],
|
|---|
| 6010 | "Fête de la citoyenneté": [9, 24, ["Nouvelle-Calédonie"]],
|
|---|
| 6011 | Toussaint: [11, 1],
|
|---|
| 6012 | Armistice: [11, 11],
|
|---|
| 6013 | "Abolition de l'esclavage (Réunion)": [12, 20, ["Réunion"]],
|
|---|
| 6014 | "Noël": [12, 25],
|
|---|
| 6015 | "Saint-Étienne ": [12, 26, ["Moselle", "Bas-Rhin", "Haut-Rhin"]]
|
|---|
| 6016 | }
|
|---|
| 6017 | },
|
|---|
| 6018 | de: {
|
|---|
| 6019 | _nominatim_url: "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.5487429714954&lon=9.81602098644987&zoom=18&addressdetails=1&accept-language=de,en",
|
|---|
| 6020 | PH: {
|
|---|
| 6021 | Neujahrstag: [1, 1],
|
|---|
| 6022 | "Heilige Drei Könige": [1, 6, ["Baden-Württemberg", "Bayern", "Sachsen-Anhalt"]],
|
|---|
| 6023 | "Tag der Arbeit": [5, 1],
|
|---|
| 6024 | Karfreitag: ["easter", -2],
|
|---|
| 6025 | Ostersonntag: ["easter", 0, ["Brandenburg"]],
|
|---|
| 6026 | Ostermontag: ["easter", 1],
|
|---|
| 6027 | "Christi Himmelfahrt": ["easter", 39],
|
|---|
| 6028 | Pfingstsonntag: ["easter", 49, ["Brandenburg"]],
|
|---|
| 6029 | Pfingstmontag: ["easter", 50],
|
|---|
| 6030 | Fronleichnam: ["easter", 60, ["Baden-Württemberg", "Bayern", "Hessen", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland"]],
|
|---|
| 6031 | "Mariä Himmelfahrt": [8, 15, ["Saarland"]],
|
|---|
| 6032 | "Tag der Deutschen Einheit": [10, 3],
|
|---|
| 6033 | Reformationstag: [10, 31, ["Brandenburg", "Mecklenburg-Vorpommern", "Sachsen", "Sachsen-Anhalt", "Thüringen"]],
|
|---|
| 6034 | Allerheiligen: [11, 1, ["Baden-Württemberg", "Bayern", "Nordrhein-Westfalen", "Rheinland-Pfalz", "Saarland"]],
|
|---|
| 6035 | "Buß- und Bettag": ["nextWednesday16Nov", 0, ["Sachsen"]],
|
|---|
| 6036 | "1. Weihnachtstag": [12, 25],
|
|---|
| 6037 | "2. Weihnachtstag": [12, 26]
|
|---|
| 6038 | },
|
|---|
| 6039 | "Baden-Württemberg": {
|
|---|
| 6040 | _nominatim_url: "https://nominatim.openstreetmap.org/reverse?format=json&lat=49.5487429714954&lon=9.81602098644987&zoom=18&addressdetails=1&accept-language=de,en",
|
|---|
| 6041 | SH: [{
|
|---|
| 6042 | name: "Osterferien",
|
|---|
| 6043 | 2005: [3, 24, 3, 24, 3, 29, 4, 2],
|
|---|
| 6044 | 2006: [4, 18, 4, 22],
|
|---|
| 6045 | 2007: [4, 2, 4, 14],
|
|---|
| 6046 | 2008: [3, 17, 3, 28],
|
|---|
| 6047 | 2009: [4, 9, 4, 9, 4, 14, 4, 17],
|
|---|
| 6048 | 2010: [4, 1, 4, 1, 4, 6, 4, 10],
|
|---|
| 6049 | 2011: [4, 21, 4, 21, 4, 26, 4, 30],
|
|---|
| 6050 | 2012: [4, 2, 4, 13],
|
|---|
| 6051 | 2013: [3, 25, 4, 5],
|
|---|
| 6052 | 2014: [4, 14, 4, 25],
|
|---|
| 6053 | 2018: [3, 30, 4, 10],
|
|---|
| 6054 | 2019: [3, 29, 4, 2],
|
|---|
| 6055 | 2020: [4, 10, 4, 21]
|
|---|
| 6056 | }, {
|
|---|
| 6057 | name: "Pfingstferien",
|
|---|
| 6058 | 2005: [5, 17, 5, 28],
|
|---|
| 6059 | 2006: [5, 29, 6, 10],
|
|---|
| 6060 | 2007: [5, 29, 6, 9],
|
|---|
| 6061 | 2008: [5, 13, 5, 23],
|
|---|
| 6062 | 2009: [5, 25, 6, 6],
|
|---|
| 6063 | 2010: [5, 25, 6, 5],
|
|---|
| 6064 | 2011: [6, 14, 6, 25],
|
|---|
| 6065 | 2012: [5, 29, 6, 9],
|
|---|
| 6066 | 2013: [5, 21, 6, 1],
|
|---|
| 6067 | 2014: [6, 10, 6, 21],
|
|---|
| 6068 | 2018: [5, 26, 6, 6],
|
|---|
| 6069 | 2019: [5, 17, 5, 28],
|
|---|
| 6070 | 2020: [6, 6, 6, 16]
|
|---|
| 6071 | }, {
|
|---|
| 6072 | name: "Sommerferien",
|
|---|
| 6073 | 2005: [7, 28, 9, 10],
|
|---|
| 6074 | 2006: [8, 3, 9, 16],
|
|---|
| 6075 | 2007: [7, 26, 9, 8],
|
|---|
| 6076 | 2008: [7, 24, 9, 6],
|
|---|
| 6077 | 2009: [7, 30, 9, 12],
|
|---|
| 6078 | 2010: [7, 29, 9, 11],
|
|---|
| 6079 | 2011: [7, 28, 9, 10],
|
|---|
| 6080 | 2012: [7, 26, 9, 8],
|
|---|
| 6081 | 2013: [7, 25, 9, 7],
|
|---|
| 6082 | 2014: [7, 31, 9, 13],
|
|---|
| 6083 | 2018: [7, 30, 9, 12],
|
|---|
| 6084 | 2019: [7, 28, 9, 10],
|
|---|
| 6085 | 2020: [7, 27, 9, 9]
|
|---|
| 6086 | }, {
|
|---|
| 6087 | name: "Herbstferien",
|
|---|
| 6088 | 2005: [11, 2, 11, 4],
|
|---|
| 6089 | 2006: [10, 30, 11, 3],
|
|---|
| 6090 | 2007: [10, 29, 11, 3],
|
|---|
| 6091 | 2008: [10, 27, 10, 31],
|
|---|
| 6092 | 2009: [10, 26, 10, 31],
|
|---|
| 6093 | 2010: [11, 2, 11, 6],
|
|---|
| 6094 | 2011: [10, 31, 10, 31, 11, 2, 11, 4],
|
|---|
| 6095 | 2012: [10, 29, 11, 2],
|
|---|
| 6096 | 2013: [10, 28, 10, 30],
|
|---|
| 6097 | 2014: [10, 27, 10, 30],
|
|---|
| 6098 | 2018: [11, 2, 11, 6],
|
|---|
| 6099 | 2019: [11, 2, 11, 4]
|
|---|
| 6100 | }, {
|
|---|
| 6101 | name: "Weihnachtsferien",
|
|---|
| 6102 | 2005: [12, 22, 1, 5],
|
|---|
| 6103 | 2006: [12, 27, 1, 5],
|
|---|
| 6104 | 2007: [12, 24, 1, 5],
|
|---|
| 6105 | 2008: [12, 22, 1, 10],
|
|---|
| 6106 | 2009: [12, 23, 1, 9],
|
|---|
| 6107 | 2010: [12, 23, 1, 8],
|
|---|
| 6108 | 2011: [12, 23, 1, 5],
|
|---|
| 6109 | 2012: [12, 24, 1, 5],
|
|---|
| 6110 | 2013: [12, 23, 1, 4],
|
|---|
| 6111 | 2014: [12, 22, 1, 5],
|
|---|
| 6112 | 2018: [12, 23, 1, 9],
|
|---|
| 6113 | 2019: [12, 23, 1, 7]
|
|---|
| 6114 | }]
|
|---|
| 6115 | },
|
|---|
| 6116 | "Mecklenburg-Vorpommern": {
|
|---|
| 6117 | SH: [{
|
|---|
| 6118 | name: "Winterferien",
|
|---|
| 6119 | 2010: [2, 6, 2, 20],
|
|---|
| 6120 | 2011: [2, 7, 2, 19],
|
|---|
| 6121 | 2012: [2, 6, 2, 17],
|
|---|
| 6122 | 2013: [2, 4, 2, 15],
|
|---|
| 6123 | 2014: [2, 3, 2, 15],
|
|---|
| 6124 | 2018: [2, 2, 2, 14],
|
|---|
| 6125 | 2019: [2, 1, 2, 13],
|
|---|
| 6126 | 2020: [2, 6, 2, 18]
|
|---|
| 6127 | }, {
|
|---|
| 6128 | name: "Osterferien",
|
|---|
| 6129 | 2010: [3, 29, 4, 7],
|
|---|
| 6130 | 2011: [4, 16, 4, 27],
|
|---|
| 6131 | 2012: [4, 2, 4, 11],
|
|---|
| 6132 | 2013: [3, 25, 4, 3],
|
|---|
| 6133 | 2014: [4, 14, 4, 23],
|
|---|
| 6134 | 2018: [3, 30, 4, 8],
|
|---|
| 6135 | 2019: [3, 21, 3, 30],
|
|---|
| 6136 | 2020: [4, 10, 4, 19]
|
|---|
| 6137 | }, {
|
|---|
| 6138 | name: "Pfingstferien",
|
|---|
| 6139 | 2010: [5, 21, 5, 22],
|
|---|
| 6140 | 2011: [6, 10, 6, 14],
|
|---|
| 6141 | 2012: [5, 25, 5, 29],
|
|---|
| 6142 | 2013: [5, 17, 5, 21],
|
|---|
| 6143 | 2014: [6, 6, 6, 10],
|
|---|
| 6144 | 2018: [5, 22, 5, 26],
|
|---|
| 6145 | 2019: [5, 14, 5, 17],
|
|---|
| 6146 | 2020: [6, 2, 6, 6]
|
|---|
| 6147 | }, {
|
|---|
| 6148 | name: "Sommerferien",
|
|---|
| 6149 | 2010: [7, 12, 8, 21],
|
|---|
| 6150 | 2011: [7, 4, 8, 13],
|
|---|
| 6151 | 2012: [6, 23, 8, 4],
|
|---|
| 6152 | 2013: [6, 22, 8, 3],
|
|---|
| 6153 | 2014: [7, 14, 8, 23],
|
|---|
| 6154 | 2018: [7, 20, 8, 29],
|
|---|
| 6155 | 2019: [7, 25, 9, 3],
|
|---|
| 6156 | 2020: [7, 24, 9, 2]
|
|---|
| 6157 | }, {
|
|---|
| 6158 | name: "Herbstferien",
|
|---|
| 6159 | 2010: [10, 18, 10, 23],
|
|---|
| 6160 | 2011: [10, 17, 10, 21],
|
|---|
| 6161 | 2012: [10, 1, 10, 5],
|
|---|
| 6162 | 2013: [10, 14, 10, 19],
|
|---|
| 6163 | 2014: [10, 20, 10, 25],
|
|---|
| 6164 | 2018: [10, 24, 10, 30],
|
|---|
| 6165 | 2019: [10, 24, 10, 28]
|
|---|
| 6166 | }, {
|
|---|
| 6167 | name: "Weihnachtsferien",
|
|---|
| 6168 | 2010: [12, 23, 12, 31],
|
|---|
| 6169 | 2011: [12, 23, 1, 3],
|
|---|
| 6170 | 2012: [12, 21, 1, 4],
|
|---|
| 6171 | 2013: [12, 23, 1, 3],
|
|---|
| 6172 | 2014: [12, 22, 1, 2],
|
|---|
| 6173 | 2018: [12, 21, 1, 2],
|
|---|
| 6174 | 2019: [12, 22, 1, 2]
|
|---|
| 6175 | }]
|
|---|
| 6176 | },
|
|---|
| 6177 | Hessen: {
|
|---|
| 6178 | SH: [{
|
|---|
| 6179 | name: "Osterferien",
|
|---|
| 6180 | 2010: [3, 29, 4, 10],
|
|---|
| 6181 | 2011: [4, 18, 4, 30],
|
|---|
| 6182 | 2012: [4, 2, 4, 14],
|
|---|
| 6183 | 2013: [3, 25, 4, 6],
|
|---|
| 6184 | 2014: [4, 14, 4, 26],
|
|---|
| 6185 | 2018: [3, 30, 4, 11],
|
|---|
| 6186 | 2019: [3, 29, 4, 9],
|
|---|
| 6187 | 2020: [4, 3, 4, 15],
|
|---|
| 6188 | 2021: [3, 26, 4, 7]
|
|---|
| 6189 | }, {
|
|---|
| 6190 | name: "Sommerferien",
|
|---|
| 6191 | 2010: [7, 5, 8, 14],
|
|---|
| 6192 | 2011: [6, 27, 8, 5],
|
|---|
| 6193 | 2012: [7, 2, 8, 10],
|
|---|
| 6194 | 2013: [7, 8, 8, 16],
|
|---|
| 6195 | 2014: [7, 28, 9, 5],
|
|---|
| 6196 | 2018: [7, 27, 9, 5],
|
|---|
| 6197 | 2019: [7, 18, 8, 26],
|
|---|
| 6198 | 2020: [7, 3, 8, 11]
|
|---|
| 6199 | }, {
|
|---|
| 6200 | name: "Herbstferien",
|
|---|
| 6201 | 2010: [10, 11, 10, 22],
|
|---|
| 6202 | 2011: [10, 10, 10, 22],
|
|---|
| 6203 | 2012: [10, 15, 10, 27],
|
|---|
| 6204 | 2013: [10, 14, 10, 26],
|
|---|
| 6205 | 2014: [10, 20, 11, 1],
|
|---|
| 6206 | 2018: [10, 19, 10, 31],
|
|---|
| 6207 | 2019: [10, 17, 10, 29],
|
|---|
| 6208 | 2020: [10, 9, 10, 21]
|
|---|
| 6209 | }, {
|
|---|
| 6210 | name: "Weihnachtsferien",
|
|---|
| 6211 | 2010: [12, 20, 1, 7],
|
|---|
| 6212 | 2011: [12, 21, 1, 6],
|
|---|
| 6213 | 2012: [12, 24, 1, 12],
|
|---|
| 6214 | 2013: [12, 23, 1, 11],
|
|---|
| 6215 | 2014: [12, 22, 1, 10],
|
|---|
| 6216 | 2018: [12, 23, 1, 9],
|
|---|
| 6217 | 2019: [12, 22, 1, 7],
|
|---|
| 6218 | 2020: [12, 24, 1, 13]
|
|---|
| 6219 | }]
|
|---|
| 6220 | },
|
|---|
| 6221 | "Schleswig-Holstein": {
|
|---|
| 6222 | SH: [{
|
|---|
| 6223 | name: "Osterferien",
|
|---|
| 6224 | 2010: [4, 3, 4, 17],
|
|---|
| 6225 | 2011: [4, 15, 4, 30],
|
|---|
| 6226 | 2012: [3, 30, 4, 13],
|
|---|
| 6227 | 2013: [3, 25, 4, 9],
|
|---|
| 6228 | 2014: [4, 16, 5, 2],
|
|---|
| 6229 | 2018: [4, 1, 4, 17],
|
|---|
| 6230 | 2019: [3, 24, 4, 9],
|
|---|
| 6231 | 2020: [4, 7, 4, 21]
|
|---|
| 6232 | }, {
|
|---|
| 6233 | name: "Sommerferien",
|
|---|
| 6234 | 2010: [7, 12, 8, 21],
|
|---|
| 6235 | 2011: [7, 4, 8, 13],
|
|---|
| 6236 | 2012: [6, 25, 8, 4],
|
|---|
| 6237 | 2013: [6, 24, 8, 3],
|
|---|
| 6238 | 2014: [7, 14, 8, 23],
|
|---|
| 6239 | 2018: [7, 20, 8, 29],
|
|---|
| 6240 | 2019: [7, 25, 9, 3],
|
|---|
| 6241 | 2020: [7, 24, 9, 2]
|
|---|
| 6242 | }, {
|
|---|
| 6243 | name: "Pfingstferien",
|
|---|
| 6244 | 2011: [6, 3, 6, 4],
|
|---|
| 6245 | 2012: [5, 18, 5, 18],
|
|---|
| 6246 | 2013: [5, 10, 5, 10],
|
|---|
| 6247 | 2014: [5, 30, 5, 30],
|
|---|
| 6248 | 2018: [5, 15, 5, 15],
|
|---|
| 6249 | 2019: [5, 6, 5, 6],
|
|---|
| 6250 | 2020: [5, 26, 5, 26]
|
|---|
| 6251 | }, {
|
|---|
| 6252 | name: "Herbstferien",
|
|---|
| 6253 | 2010: [10, 11, 10, 23],
|
|---|
| 6254 | 2011: [10, 10, 10, 22],
|
|---|
| 6255 | 2012: [10, 4, 10, 19],
|
|---|
| 6256 | 2013: [10, 4, 10, 18],
|
|---|
| 6257 | 2014: [10, 13, 10, 25],
|
|---|
| 6258 | 2018: [10, 19, 10, 31],
|
|---|
| 6259 | 2019: [10, 17, 10, 29]
|
|---|
| 6260 | }, {
|
|---|
| 6261 | name: "Weihnachtsferien",
|
|---|
| 6262 | 2010: [12, 23, 1, 7],
|
|---|
| 6263 | 2011: [12, 23, 1, 6],
|
|---|
| 6264 | 2012: [12, 24, 1, 5],
|
|---|
| 6265 | 2013: [12, 23, 1, 6],
|
|---|
| 6266 | 2014: [12, 22, 1, 6],
|
|---|
| 6267 | 2018: [12, 21, 1, 6],
|
|---|
| 6268 | 2019: [12, 23, 1, 6]
|
|---|
| 6269 | }]
|
|---|
| 6270 | },
|
|---|
| 6271 | Berlin: {
|
|---|
| 6272 | SH: [{
|
|---|
| 6273 | name: "Winterferien",
|
|---|
| 6274 | 2010: [2, 1, 2, 6],
|
|---|
| 6275 | 2011: [1, 31, 2, 5],
|
|---|
| 6276 | 2012: [1, 30, 2, 4],
|
|---|
| 6277 | 2013: [2, 4, 2, 9],
|
|---|
| 6278 | 2014: [2, 3, 2, 8],
|
|---|
| 6279 | 2018: [2, 2, 2, 7],
|
|---|
| 6280 | 2019: [2, 1, 2, 6],
|
|---|
| 6281 | 2020: [1, 30, 2, 4]
|
|---|
| 6282 | }, {
|
|---|
| 6283 | name: "Osterferien",
|
|---|
| 6284 | 2010: [3, 31, 4, 10],
|
|---|
| 6285 | 2011: [4, 18, 4, 30],
|
|---|
| 6286 | 2012: [4, 2, 4, 14, 4, 30, 4, 30],
|
|---|
| 6287 | 2013: [3, 25, 4, 6],
|
|---|
| 6288 | 2014: [4, 14, 4, 26, 5, 2, 5, 2],
|
|---|
| 6289 | 2018: [3, 30, 4, 11],
|
|---|
| 6290 | 2019: [3, 21, 4, 2],
|
|---|
| 6291 | 2020: [4, 10, 4, 22]
|
|---|
| 6292 | }, {
|
|---|
| 6293 | name: "Pfingstferien",
|
|---|
| 6294 | 2010: [5, 14, 5, 14, 5, 25, 5, 25],
|
|---|
| 6295 | 2011: [6, 3, 6, 3],
|
|---|
| 6296 | 2012: [5, 18, 5, 18],
|
|---|
| 6297 | 2013: [5, 10, 5, 10, 5, 21, 5, 21],
|
|---|
| 6298 | 2014: [5, 30, 5, 30],
|
|---|
| 6299 | 2018: [5, 15, 5, 15],
|
|---|
| 6300 | 2019: [5, 6, 5, 6, 5, 17, 5, 17],
|
|---|
| 6301 | 2020: [5, 26, 5, 26]
|
|---|
| 6302 | }, {
|
|---|
| 6303 | name: "Sommerferien",
|
|---|
| 6304 | 2010: [7, 7, 8, 21],
|
|---|
| 6305 | 2011: [6, 29, 8, 12],
|
|---|
| 6306 | 2012: [6, 20, 8, 3],
|
|---|
| 6307 | 2013: [6, 19, 8, 2],
|
|---|
| 6308 | 2014: [7, 9, 8, 22],
|
|---|
| 6309 | 2018: [7, 15, 8, 28],
|
|---|
| 6310 | 2019: [7, 20, 9, 2],
|
|---|
| 6311 | 2020: [7, 19, 9, 1]
|
|---|
| 6312 | }, {
|
|---|
| 6313 | name: "Herbstferien",
|
|---|
| 6314 | 2010: [10, 11, 10, 23],
|
|---|
| 6315 | 2011: [10, 4, 10, 14],
|
|---|
| 6316 | 2012: [10, 1, 10, 13],
|
|---|
| 6317 | 2013: [9, 30, 10, 12],
|
|---|
| 6318 | 2014: [10, 20, 11, 1],
|
|---|
| 6319 | 2018: [10, 19, 10, 31],
|
|---|
| 6320 | 2019: [10, 17, 10, 28]
|
|---|
| 6321 | }, {
|
|---|
| 6322 | name: "Weihnachtsferien",
|
|---|
| 6323 | 2010: [12, 23, 1, 1],
|
|---|
| 6324 | 2011: [12, 23, 1, 3],
|
|---|
| 6325 | 2012: [12, 24, 1, 4],
|
|---|
| 6326 | 2013: [12, 23, 1, 3],
|
|---|
| 6327 | 2014: [12, 22, 1, 2],
|
|---|
| 6328 | 2018: [12, 23, 1, 2],
|
|---|
| 6329 | 2019: [12, 23, 1, 3]
|
|---|
| 6330 | }]
|
|---|
| 6331 | },
|
|---|
| 6332 | Saarland: {
|
|---|
| 6333 | SH: [{
|
|---|
| 6334 | name: "Winterferien",
|
|---|
| 6335 | 2010: [2, 15, 2, 20],
|
|---|
| 6336 | 2011: [3, 7, 3, 12],
|
|---|
| 6337 | 2012: [2, 20, 2, 25],
|
|---|
| 6338 | 2013: [2, 11, 2, 16],
|
|---|
| 6339 | 2014: [3, 3, 3, 8],
|
|---|
| 6340 | 2018: [2, 16, 2, 21]
|
|---|
| 6341 | }, {
|
|---|
| 6342 | name: "Osterferien",
|
|---|
| 6343 | 2010: [3, 29, 4, 10],
|
|---|
| 6344 | 2011: [4, 18, 4, 30],
|
|---|
| 6345 | 2012: [4, 2, 4, 14],
|
|---|
| 6346 | 2013: [3, 25, 4, 6],
|
|---|
| 6347 | 2014: [4, 14, 4, 26],
|
|---|
| 6348 | 2018: [3, 30, 4, 11]
|
|---|
| 6349 | }, {
|
|---|
| 6350 | name: "Sommerferien",
|
|---|
| 6351 | 2010: [7, 5, 8, 14],
|
|---|
| 6352 | 2011: [6, 24, 8, 6],
|
|---|
| 6353 | 2012: [7, 2, 8, 14],
|
|---|
| 6354 | 2013: [7, 8, 8, 17],
|
|---|
| 6355 | 2014: [7, 28, 9, 6],
|
|---|
| 6356 | 2018: [7, 27, 9, 4],
|
|---|
| 6357 | 2019: [7, 18, 8, 26],
|
|---|
| 6358 | 2020: [7, 3, 8, 14]
|
|---|
| 6359 | }, {
|
|---|
| 6360 | name: "Herbstferien",
|
|---|
| 6361 | 2010: [10, 11, 10, 23],
|
|---|
| 6362 | 2011: [10, 4, 10, 15],
|
|---|
| 6363 | 2012: [10, 22, 11, 3],
|
|---|
| 6364 | 2013: [10, 21, 11, 2],
|
|---|
| 6365 | 2014: [10, 20, 10, 31]
|
|---|
| 6366 | }, {
|
|---|
| 6367 | name: "Weihnachtsferien",
|
|---|
| 6368 | 2010: [12, 20, 1, 1],
|
|---|
| 6369 | 2011: [12, 23, 1, 4],
|
|---|
| 6370 | 2012: [12, 24, 1, 5],
|
|---|
| 6371 | 2013: [12, 20, 1, 4],
|
|---|
| 6372 | 2014: [12, 22, 1, 7]
|
|---|
| 6373 | }]
|
|---|
| 6374 | },
|
|---|
| 6375 | Bremen: {
|
|---|
| 6376 | SH: [{
|
|---|
| 6377 | name: "Winterferien",
|
|---|
| 6378 | 2010: [2, 1, 2, 2],
|
|---|
| 6379 | 2011: [1, 31, 2, 1],
|
|---|
| 6380 | 2012: [1, 30, 1, 31],
|
|---|
| 6381 | 2013: [1, 31, 2, 1],
|
|---|
| 6382 | 2014: [1, 30, 1, 31],
|
|---|
| 6383 | 2018: [2, 2, 2, 3],
|
|---|
| 6384 | 2019: [1, 28, 1, 29],
|
|---|
| 6385 | 2020: [1, 30, 1, 31]
|
|---|
| 6386 | }, {
|
|---|
| 6387 | name: "Osterferien",
|
|---|
| 6388 | 2010: [3, 19, 4, 6],
|
|---|
| 6389 | 2011: [4, 16, 4, 30],
|
|---|
| 6390 | 2012: [3, 26, 4, 11, 4, 30, 4, 30],
|
|---|
| 6391 | 2013: [3, 16, 4, 2],
|
|---|
| 6392 | 2014: [4, 3, 4, 22, 5, 2, 5, 2],
|
|---|
| 6393 | 2018: [3, 25, 4, 10],
|
|---|
| 6394 | 2019: [3, 18, 4, 2],
|
|---|
| 6395 | 2020: [4, 10, 4, 22]
|
|---|
| 6396 | }, {
|
|---|
| 6397 | name: "Pfingstferien",
|
|---|
| 6398 | 2010: [5, 14, 5, 14, 5, 25, 5, 25],
|
|---|
| 6399 | 2011: [6, 3, 6, 3, 6, 14, 6, 14],
|
|---|
| 6400 | 2012: [5, 18, 5, 18, 5, 29, 5, 29],
|
|---|
| 6401 | 2013: [5, 10, 5, 10, 5, 21, 5, 21],
|
|---|
| 6402 | 2014: [5, 30, 5, 30, 6, 10, 6, 10],
|
|---|
| 6403 | 2018: [5, 15, 5, 15, 5, 26, 5, 26],
|
|---|
| 6404 | 2019: [5, 6, 5, 6, 5, 17, 5, 17],
|
|---|
| 6405 | 2020: [5, 26, 5, 26, 6, 6, 6, 6]
|
|---|
| 6406 | }, {
|
|---|
| 6407 | name: "Sommerferien",
|
|---|
| 6408 | 2010: [6, 24, 8, 4],
|
|---|
| 6409 | 2011: [7, 7, 8, 17],
|
|---|
| 6410 | 2012: [7, 23, 8, 31],
|
|---|
| 6411 | 2013: [6, 27, 8, 7],
|
|---|
| 6412 | 2014: [7, 31, 9, 10],
|
|---|
| 6413 | 2018: [7, 23, 9, 2],
|
|---|
| 6414 | 2019: [6, 23, 8, 3],
|
|---|
| 6415 | 2020: [6, 22, 8, 2]
|
|---|
| 6416 | }, {
|
|---|
| 6417 | name: "Herbstferien",
|
|---|
| 6418 | 2010: [10, 9, 10, 23],
|
|---|
| 6419 | 2011: [10, 17, 10, 29],
|
|---|
| 6420 | 2012: [10, 22, 11, 3],
|
|---|
| 6421 | 2013: [10, 4, 10, 18],
|
|---|
| 6422 | 2014: [10, 27, 11, 8],
|
|---|
| 6423 | 2018: [10, 19, 10, 31],
|
|---|
| 6424 | 2019: [10, 4, 10, 15]
|
|---|
| 6425 | }, {
|
|---|
| 6426 | name: "Weihnachtsferien",
|
|---|
| 6427 | 2010: [12, 22, 1, 5],
|
|---|
| 6428 | 2011: [12, 23, 1, 4],
|
|---|
| 6429 | 2012: [12, 24, 1, 5],
|
|---|
| 6430 | 2013: [12, 23, 1, 3],
|
|---|
| 6431 | 2014: [12, 22, 1, 5],
|
|---|
| 6432 | 2018: [12, 23, 1, 6],
|
|---|
| 6433 | 2019: [12, 21, 1, 6]
|
|---|
| 6434 | }]
|
|---|
| 6435 | },
|
|---|
| 6436 | Bayern: {
|
|---|
| 6437 | SH: [{
|
|---|
| 6438 | name: "Winterferien",
|
|---|
| 6439 | 2010: [2, 15, 2, 20],
|
|---|
| 6440 | 2011: [3, 7, 3, 11],
|
|---|
| 6441 | 2012: [2, 20, 2, 24],
|
|---|
| 6442 | 2013: [2, 11, 2, 15],
|
|---|
| 6443 | 2014: [3, 3, 3, 7],
|
|---|
| 6444 | 2018: [2, 16, 2, 20],
|
|---|
| 6445 | 2019: [2, 8, 2, 12],
|
|---|
| 6446 | 2020: [2, 27, 3, 3]
|
|---|
| 6447 | }, {
|
|---|
| 6448 | name: "Osterferien",
|
|---|
| 6449 | 2010: [3, 29, 4, 10],
|
|---|
| 6450 | 2011: [4, 18, 4, 30],
|
|---|
| 6451 | 2012: [4, 2, 4, 14],
|
|---|
| 6452 | 2013: [3, 25, 4, 6],
|
|---|
| 6453 | 2014: [4, 14, 4, 26],
|
|---|
| 6454 | 2018: [3, 30, 4, 11],
|
|---|
| 6455 | 2019: [3, 21, 4, 1],
|
|---|
| 6456 | 2020: [4, 10, 4, 22]
|
|---|
| 6457 | }, {
|
|---|
| 6458 | name: "Pfingstferien",
|
|---|
| 6459 | 2010: [5, 25, 6, 5],
|
|---|
| 6460 | 2011: [6, 14, 6, 25],
|
|---|
| 6461 | 2012: [5, 29, 6, 9],
|
|---|
| 6462 | 2013: [5, 21, 5, 31],
|
|---|
| 6463 | 2014: [6, 10, 6, 21],
|
|---|
| 6464 | 2018: [5, 26, 6, 5],
|
|---|
| 6465 | 2019: [5, 17, 5, 28],
|
|---|
| 6466 | 2020: [6, 6, 6, 16]
|
|---|
| 6467 | }, {
|
|---|
| 6468 | name: "Sommerferien",
|
|---|
| 6469 | 2010: [8, 2, 9, 13],
|
|---|
| 6470 | 2011: [7, 30, 9, 12],
|
|---|
| 6471 | 2012: [8, 1, 9, 12],
|
|---|
| 6472 | 2013: [7, 31, 9, 11],
|
|---|
| 6473 | 2014: [7, 30, 9, 15],
|
|---|
| 6474 | 2018: [8, 1, 9, 14],
|
|---|
| 6475 | 2019: [7, 30, 9, 12],
|
|---|
| 6476 | 2020: [7, 29, 9, 11]
|
|---|
| 6477 | }, {
|
|---|
| 6478 | name: "Herbstferien",
|
|---|
| 6479 | 2010: [11, 2, 11, 5],
|
|---|
| 6480 | 2011: [10, 31, 11, 5],
|
|---|
| 6481 | 2012: [10, 29, 11, 3],
|
|---|
| 6482 | 2013: [10, 28, 10, 31],
|
|---|
| 6483 | 2014: [10, 27, 10, 31],
|
|---|
| 6484 | 2018: [11, 2, 11, 7],
|
|---|
| 6485 | 2019: [10, 31, 11, 4]
|
|---|
| 6486 | }, {
|
|---|
| 6487 | name: "Weihnachtsferien",
|
|---|
| 6488 | 2010: [12, 24, 1, 7],
|
|---|
| 6489 | 2011: [12, 27, 1, 5],
|
|---|
| 6490 | 2012: [12, 24, 1, 5],
|
|---|
| 6491 | 2013: [12, 23, 1, 4],
|
|---|
| 6492 | 2014: [12, 24, 1, 5],
|
|---|
| 6493 | 2018: [12, 24, 1, 5],
|
|---|
| 6494 | 2019: [12, 24, 1, 5]
|
|---|
| 6495 | }]
|
|---|
| 6496 | },
|
|---|
| 6497 | Niedersachsen: {
|
|---|
| 6498 | SH: [{
|
|---|
| 6499 | name: "Winterferien",
|
|---|
| 6500 | 2010: [2, 1, 2, 2],
|
|---|
| 6501 | 2011: [1, 31, 2, 1],
|
|---|
| 6502 | 2012: [1, 30, 1, 31],
|
|---|
| 6503 | 2013: [1, 31, 2, 1],
|
|---|
| 6504 | 2014: [1, 30, 1, 31],
|
|---|
| 6505 | 2018: [2, 2, 2, 3],
|
|---|
| 6506 | 2019: [1, 28, 1, 29],
|
|---|
| 6507 | 2020: [1, 30, 1, 31]
|
|---|
| 6508 | }, {
|
|---|
| 6509 | name: "Osterferien",
|
|---|
| 6510 | 2010: [3, 19, 4, 6],
|
|---|
| 6511 | 2011: [4, 16, 4, 30],
|
|---|
| 6512 | 2012: [3, 26, 4, 11, 4, 30, 4, 30],
|
|---|
| 6513 | 2013: [3, 16, 4, 2],
|
|---|
| 6514 | 2014: [4, 3, 4, 22, 5, 2, 5, 2],
|
|---|
| 6515 | 2018: [3, 25, 4, 10],
|
|---|
| 6516 | 2019: [3, 18, 4, 2],
|
|---|
| 6517 | 2020: [4, 10, 4, 22]
|
|---|
| 6518 | }, {
|
|---|
| 6519 | name: "Pfingstferien",
|
|---|
| 6520 | 2010: [5, 14, 5, 14, 5, 25, 5, 25],
|
|---|
| 6521 | 2011: [6, 3, 6, 3, 6, 14, 6, 14],
|
|---|
| 6522 | 2012: [5, 18, 5, 18, 5, 29, 5, 29],
|
|---|
| 6523 | 2013: [5, 10, 5, 10, 5, 21, 5, 21],
|
|---|
| 6524 | 2014: [5, 30, 5, 30, 6, 10, 6, 10],
|
|---|
| 6525 | 2018: [5, 15, 5, 15, 5, 26, 5, 26],
|
|---|
| 6526 | 2019: [5, 6, 5, 6, 5, 17, 5, 17],
|
|---|
| 6527 | 2020: [5, 26, 5, 26, 6, 6, 6, 6]
|
|---|
| 6528 | }, {
|
|---|
| 6529 | name: "Sommerferien",
|
|---|
| 6530 | 2010: [6, 24, 8, 4],
|
|---|
| 6531 | 2011: [7, 7, 8, 17],
|
|---|
| 6532 | 2012: [7, 23, 8, 31],
|
|---|
| 6533 | 2013: [6, 27, 8, 7],
|
|---|
| 6534 | 2014: [7, 31, 9, 10],
|
|---|
| 6535 | 2018: [7, 23, 9, 2],
|
|---|
| 6536 | 2019: [6, 23, 8, 3],
|
|---|
| 6537 | 2020: [6, 22, 8, 2]
|
|---|
| 6538 | }, {
|
|---|
| 6539 | name: "Herbstferien",
|
|---|
| 6540 | 2010: [10, 9, 10, 23],
|
|---|
| 6541 | 2011: [10, 17, 10, 29],
|
|---|
| 6542 | 2012: [10, 22, 11, 3],
|
|---|
| 6543 | 2013: [10, 4, 10, 18],
|
|---|
| 6544 | 2014: [10, 27, 11, 8],
|
|---|
| 6545 | 2018: [10, 19, 10, 31],
|
|---|
| 6546 | 2019: [10, 4, 10, 15]
|
|---|
| 6547 | }, {
|
|---|
| 6548 | name: "Weihnachtsferien",
|
|---|
| 6549 | 2010: [12, 22, 1, 5],
|
|---|
| 6550 | 2011: [12, 23, 1, 4],
|
|---|
| 6551 | 2012: [12, 24, 1, 5],
|
|---|
| 6552 | 2013: [12, 23, 1, 3],
|
|---|
| 6553 | 2014: [12, 22, 1, 5],
|
|---|
| 6554 | 2018: [12, 23, 1, 6],
|
|---|
| 6555 | 2019: [12, 21, 1, 6]
|
|---|
| 6556 | }]
|
|---|
| 6557 | },
|
|---|
| 6558 | "Nordrhein-Westfalen": {
|
|---|
| 6559 | SH: [{
|
|---|
| 6560 | name: "Osterferien",
|
|---|
| 6561 | 2010: [3, 27, 4, 10],
|
|---|
| 6562 | 2011: [4, 18, 4, 30],
|
|---|
| 6563 | 2012: [4, 2, 4, 14],
|
|---|
| 6564 | 2013: [3, 25, 4, 6],
|
|---|
| 6565 | 2014: [4, 14, 4, 26],
|
|---|
| 6566 | 2018: [3, 30, 4, 11],
|
|---|
| 6567 | 2019: [3, 21, 4, 2],
|
|---|
| 6568 | 2020: [4, 10, 4, 22]
|
|---|
| 6569 | }, {
|
|---|
| 6570 | name: "Pfingstferien",
|
|---|
| 6571 | 2010: [5, 25, 5, 25],
|
|---|
| 6572 | 2012: [5, 29, 5, 29],
|
|---|
| 6573 | 2013: [5, 21, 5, 21],
|
|---|
| 6574 | 2014: [6, 10, 6, 10],
|
|---|
| 6575 | 2018: [5, 26, 5, 26],
|
|---|
| 6576 | 2019: [5, 17, 5, 17],
|
|---|
| 6577 | 2020: [6, 6, 6, 6]
|
|---|
| 6578 | }, {
|
|---|
| 6579 | name: "Sommerferien",
|
|---|
| 6580 | 2010: [7, 15, 8, 27],
|
|---|
| 6581 | 2011: [7, 25, 9, 6],
|
|---|
| 6582 | 2012: [7, 9, 8, 21],
|
|---|
| 6583 | 2013: [7, 22, 9, 3],
|
|---|
| 6584 | 2014: [7, 7, 8, 19],
|
|---|
| 6585 | 2018: [6, 29, 8, 11],
|
|---|
| 6586 | 2019: [7, 11, 8, 23],
|
|---|
| 6587 | 2020: [7, 17, 8, 29]
|
|---|
| 6588 | }, {
|
|---|
| 6589 | name: "Herbstferien",
|
|---|
| 6590 | 2010: [10, 11, 10, 23],
|
|---|
| 6591 | 2011: [10, 24, 11, 5],
|
|---|
| 6592 | 2012: [10, 8, 10, 20],
|
|---|
| 6593 | 2013: [10, 21, 11, 2],
|
|---|
| 6594 | 2014: [10, 6, 10, 18],
|
|---|
| 6595 | 2018: [10, 5, 10, 17],
|
|---|
| 6596 | 2019: [10, 10, 10, 21]
|
|---|
| 6597 | }, {
|
|---|
| 6598 | name: "Weihnachtsferien",
|
|---|
| 6599 | 2010: [12, 24, 1, 8],
|
|---|
| 6600 | 2011: [12, 23, 1, 6],
|
|---|
| 6601 | 2012: [12, 21, 1, 4],
|
|---|
| 6602 | 2013: [12, 23, 1, 7],
|
|---|
| 6603 | 2014: [12, 22, 1, 6],
|
|---|
| 6604 | 2018: [12, 23, 1, 6],
|
|---|
| 6605 | 2019: [12, 23, 1, 6]
|
|---|
| 6606 | }]
|
|---|
| 6607 | },
|
|---|
| 6608 | Sachsen: {
|
|---|
| 6609 | SH: [{
|
|---|
| 6610 | name: "Winterferien",
|
|---|
| 6611 | 2010: [2, 8, 2, 20],
|
|---|
| 6612 | 2011: [2, 12, 2, 26],
|
|---|
| 6613 | 2012: [2, 13, 2, 25],
|
|---|
| 6614 | 2013: [2, 4, 2, 15],
|
|---|
| 6615 | 2014: [2, 17, 3, 1],
|
|---|
| 6616 | 2018: [2, 9, 2, 21],
|
|---|
| 6617 | 2019: [2, 8, 2, 20],
|
|---|
| 6618 | 2020: [2, 13, 2, 24]
|
|---|
| 6619 | }, {
|
|---|
| 6620 | name: "Osterferien",
|
|---|
| 6621 | 2010: [4, 1, 4, 10],
|
|---|
| 6622 | 2011: [4, 22, 4, 30],
|
|---|
| 6623 | 2012: [4, 6, 4, 14],
|
|---|
| 6624 | 2013: [3, 29, 4, 6],
|
|---|
| 6625 | 2014: [4, 18, 4, 26],
|
|---|
| 6626 | 2018: [4, 2, 4, 11],
|
|---|
| 6627 | 2019: [3, 25, 4, 2],
|
|---|
| 6628 | 2020: [4, 13, 4, 22]
|
|---|
| 6629 | }, {
|
|---|
| 6630 | name: "Pfingstferien",
|
|---|
| 6631 | 2010: [5, 14, 5, 14],
|
|---|
| 6632 | 2011: [6, 3, 6, 3],
|
|---|
| 6633 | 2012: [5, 18, 5, 18],
|
|---|
| 6634 | 2013: [5, 10, 5, 10, 5, 18, 5, 22],
|
|---|
| 6635 | 2014: [5, 30, 5, 30],
|
|---|
| 6636 | 2018: [5, 15, 5, 15],
|
|---|
| 6637 | 2019: [5, 6, 5, 6],
|
|---|
| 6638 | 2020: [5, 26, 5, 26]
|
|---|
| 6639 | }, {
|
|---|
| 6640 | name: "Sommerferien",
|
|---|
| 6641 | 2010: [6, 28, 8, 6],
|
|---|
| 6642 | 2011: [7, 11, 8, 19],
|
|---|
| 6643 | 2012: [7, 23, 8, 31],
|
|---|
| 6644 | 2013: [7, 15, 8, 23],
|
|---|
| 6645 | 2014: [7, 21, 8, 29],
|
|---|
| 6646 | 2018: [7, 13, 8, 21],
|
|---|
| 6647 | 2019: [6, 27, 8, 5],
|
|---|
| 6648 | 2020: [6, 26, 8, 4]
|
|---|
| 6649 | }, {
|
|---|
| 6650 | name: "Herbstferien",
|
|---|
| 6651 | 2010: [10, 4, 10, 16],
|
|---|
| 6652 | 2011: [10, 17, 10, 28],
|
|---|
| 6653 | 2012: [10, 22, 11, 2],
|
|---|
| 6654 | 2013: [10, 21, 11, 1],
|
|---|
| 6655 | 2014: [10, 20, 10, 31],
|
|---|
| 6656 | 2018: [10, 12, 10, 24],
|
|---|
| 6657 | 2019: [10, 3, 10, 15]
|
|---|
| 6658 | }, {
|
|---|
| 6659 | name: "Weihnachtsferien",
|
|---|
| 6660 | 2010: [12, 23, 1, 1],
|
|---|
| 6661 | 2011: [12, 23, 1, 2],
|
|---|
| 6662 | 2012: [12, 22, 1, 2],
|
|---|
| 6663 | 2013: [12, 21, 1, 3],
|
|---|
| 6664 | 2014: [12, 22, 1, 3],
|
|---|
| 6665 | 2018: [12, 21, 1, 2],
|
|---|
| 6666 | 2019: [12, 23, 1, 2]
|
|---|
| 6667 | }]
|
|---|
| 6668 | },
|
|---|
| 6669 | "Thüringen": {
|
|---|
| 6670 | SH: [{
|
|---|
| 6671 | name: "Winterferien",
|
|---|
| 6672 | 2010: [2, 1, 2, 6],
|
|---|
| 6673 | 2011: [1, 31, 2, 5],
|
|---|
| 6674 | 2012: [2, 6, 2, 11],
|
|---|
| 6675 | 2013: [2, 18, 2, 23],
|
|---|
| 6676 | 2014: [2, 17, 2, 22],
|
|---|
| 6677 | 2018: [2, 2, 2, 7],
|
|---|
| 6678 | 2019: [2, 1, 2, 6],
|
|---|
| 6679 | 2020: [2, 6, 2, 11]
|
|---|
| 6680 | }, {
|
|---|
| 6681 | name: "Osterferien",
|
|---|
| 6682 | 2010: [3, 29, 4, 9],
|
|---|
| 6683 | 2011: [4, 18, 4, 30],
|
|---|
| 6684 | 2012: [4, 2, 4, 13],
|
|---|
| 6685 | 2013: [3, 25, 4, 6],
|
|---|
| 6686 | 2014: [4, 19, 5, 2],
|
|---|
| 6687 | 2018: [3, 30, 4, 11],
|
|---|
| 6688 | 2019: [3, 24, 4, 2],
|
|---|
| 6689 | 2020: [4, 10, 4, 21]
|
|---|
| 6690 | }, {
|
|---|
| 6691 | name: "Sommerferien",
|
|---|
| 6692 | 2010: [6, 24, 8, 4],
|
|---|
| 6693 | 2011: [7, 11, 8, 19],
|
|---|
| 6694 | 2012: [7, 23, 8, 31],
|
|---|
| 6695 | 2013: [7, 15, 8, 23],
|
|---|
| 6696 | 2014: [7, 21, 8, 29],
|
|---|
| 6697 | 2018: [7, 13, 8, 21],
|
|---|
| 6698 | 2019: [6, 27, 8, 10],
|
|---|
| 6699 | 2020: [6, 26, 8, 9]
|
|---|
| 6700 | }, {
|
|---|
| 6701 | name: "Pfingstferien",
|
|---|
| 6702 | 2011: [6, 11, 6, 14],
|
|---|
| 6703 | 2012: [5, 25, 5, 29],
|
|---|
| 6704 | 2013: [5, 10, 5, 10],
|
|---|
| 6705 | 2014: [5, 30, 5, 30],
|
|---|
| 6706 | 2018: [5, 15, 5, 15],
|
|---|
| 6707 | 2019: [5, 6, 5, 6],
|
|---|
| 6708 | 2020: [5, 26, 5, 26]
|
|---|
| 6709 | }, {
|
|---|
| 6710 | name: "Herbstferien",
|
|---|
| 6711 | 2010: [10, 9, 10, 23],
|
|---|
| 6712 | 2011: [10, 17, 10, 28],
|
|---|
| 6713 | 2012: [10, 22, 11, 3],
|
|---|
| 6714 | 2013: [10, 21, 11, 2],
|
|---|
| 6715 | 2014: [10, 6, 10, 18],
|
|---|
| 6716 | 2018: [10, 5, 10, 17],
|
|---|
| 6717 | 2019: [10, 10, 10, 22]
|
|---|
| 6718 | }, {
|
|---|
| 6719 | name: "Weihnachtsferien",
|
|---|
| 6720 | 2010: [12, 23, 1, 1],
|
|---|
| 6721 | 2011: [12, 23, 1, 1],
|
|---|
| 6722 | 2012: [12, 24, 1, 5],
|
|---|
| 6723 | 2013: [12, 23, 1, 4],
|
|---|
| 6724 | 2014: [12, 22, 1, 3],
|
|---|
| 6725 | 2018: [12, 23, 1, 2],
|
|---|
| 6726 | 2019: [12, 23, 12, 31]
|
|---|
| 6727 | }]
|
|---|
| 6728 | },
|
|---|
| 6729 | Hamburg: {
|
|---|
| 6730 | SH: [{
|
|---|
| 6731 | name: "Winterferien",
|
|---|
| 6732 | 2010: [1, 29, 1, 29],
|
|---|
| 6733 | 2011: [1, 31, 1, 31],
|
|---|
| 6734 | 2012: [1, 30, 1, 30],
|
|---|
| 6735 | 2013: [2, 1, 2, 1],
|
|---|
| 6736 | 2014: [1, 31, 1, 31],
|
|---|
| 6737 | 2018: [1, 30, 1, 30],
|
|---|
| 6738 | 2019: [1, 29, 1, 29],
|
|---|
| 6739 | 2020: [1, 30, 1, 30]
|
|---|
| 6740 | }, {
|
|---|
| 6741 | name: "Osterferien",
|
|---|
| 6742 | 2010: [3, 8, 3, 20],
|
|---|
| 6743 | 2011: [3, 7, 3, 18],
|
|---|
| 6744 | 2012: [3, 5, 3, 16],
|
|---|
| 6745 | 2013: [3, 4, 3, 15],
|
|---|
| 6746 | 2014: [3, 3, 3, 14],
|
|---|
| 6747 | 2018: [3, 2, 3, 13],
|
|---|
| 6748 | 2019: [3, 7, 3, 18],
|
|---|
| 6749 | 2020: [3, 6, 3, 17]
|
|---|
| 6750 | }, {
|
|---|
| 6751 | name: "Pfingstferien",
|
|---|
| 6752 | 2010: [5, 14, 5, 22],
|
|---|
| 6753 | 2011: [4, 26, 4, 29, 6, 3, 6, 3],
|
|---|
| 6754 | 2012: [4, 30, 5, 4, 5, 18, 5, 18],
|
|---|
| 6755 | 2013: [5, 2, 5, 10],
|
|---|
| 6756 | 2014: [4, 28, 5, 2, 5, 30, 5, 30],
|
|---|
| 6757 | 2018: [5, 11, 5, 15],
|
|---|
| 6758 | 2019: [5, 6, 5, 6, 5, 17, 5, 20],
|
|---|
| 6759 | 2020: [5, 22, 5, 26]
|
|---|
| 6760 | }, {
|
|---|
| 6761 | name: "Sommerferien",
|
|---|
| 6762 | 2010: [7, 8, 8, 18],
|
|---|
| 6763 | 2011: [6, 30, 8, 10],
|
|---|
| 6764 | 2012: [6, 21, 8, 1],
|
|---|
| 6765 | 2013: [6, 20, 7, 31],
|
|---|
| 6766 | 2014: [7, 10, 8, 20],
|
|---|
| 6767 | 2018: [7, 16, 8, 26],
|
|---|
| 6768 | 2019: [7, 21, 8, 31],
|
|---|
| 6769 | 2020: [7, 20, 8, 30]
|
|---|
| 6770 | }, {
|
|---|
| 6771 | name: "Herbstferien",
|
|---|
| 6772 | 2010: [10, 4, 10, 15],
|
|---|
| 6773 | 2011: [10, 4, 10, 14],
|
|---|
| 6774 | 2012: [10, 1, 10, 12],
|
|---|
| 6775 | 2013: [9, 30, 10, 11],
|
|---|
| 6776 | 2014: [10, 13, 10, 24],
|
|---|
| 6777 | 2018: [10, 19, 10, 30],
|
|---|
| 6778 | 2019: [10, 17, 10, 28]
|
|---|
| 6779 | }, {
|
|---|
| 6780 | name: "Weihnachtsferien",
|
|---|
| 6781 | 2010: [12, 23, 1, 3],
|
|---|
| 6782 | 2011: [12, 27, 1, 6],
|
|---|
| 6783 | 2012: [12, 21, 1, 4],
|
|---|
| 6784 | 2013: [12, 19, 1, 3],
|
|---|
| 6785 | 2014: [12, 22, 1, 6],
|
|---|
| 6786 | 2018: [12, 21, 1, 1],
|
|---|
| 6787 | 2019: [12, 27, 1, 6]
|
|---|
| 6788 | }]
|
|---|
| 6789 | },
|
|---|
| 6790 | "Sachsen-Anhalt": {
|
|---|
| 6791 | SH: [{
|
|---|
| 6792 | name: "Winterferien",
|
|---|
| 6793 | 2010: [2, 8, 2, 13],
|
|---|
| 6794 | 2011: [2, 5, 2, 12],
|
|---|
| 6795 | 2012: [2, 4, 2, 11],
|
|---|
| 6796 | 2013: [2, 1, 2, 8],
|
|---|
| 6797 | 2014: [2, 1, 2, 12],
|
|---|
| 6798 | 2018: [2, 2, 2, 14],
|
|---|
| 6799 | 2019: [2, 1, 2, 10],
|
|---|
| 6800 | 2020: [2, 4, 2, 11]
|
|---|
| 6801 | }, {
|
|---|
| 6802 | name: "Osterferien",
|
|---|
| 6803 | 2010: [3, 29, 4, 9],
|
|---|
| 6804 | 2011: [4, 18, 4, 27],
|
|---|
| 6805 | 2012: [4, 2, 4, 7],
|
|---|
| 6806 | 2013: [3, 25, 3, 30],
|
|---|
| 6807 | 2014: [4, 14, 4, 17],
|
|---|
| 6808 | 2018: [4, 2, 4, 2],
|
|---|
| 6809 | 2019: [3, 24, 3, 24],
|
|---|
| 6810 | 2020: [4, 10, 4, 13]
|
|---|
| 6811 | }, {
|
|---|
| 6812 | name: "Pfingstferien",
|
|---|
| 6813 | 2010: [5, 14, 5, 22],
|
|---|
| 6814 | 2011: [6, 14, 6, 18],
|
|---|
| 6815 | 2012: [5, 18, 5, 25],
|
|---|
| 6816 | 2013: [5, 10, 5, 18],
|
|---|
| 6817 | 2014: [5, 30, 6, 7],
|
|---|
| 6818 | 2018: [5, 15, 5, 23],
|
|---|
| 6819 | 2019: [5, 6, 5, 14],
|
|---|
| 6820 | 2020: [5, 26, 5, 26]
|
|---|
| 6821 | }, {
|
|---|
| 6822 | name: "Sommerferien",
|
|---|
| 6823 | 2010: [6, 24, 8, 4],
|
|---|
| 6824 | 2011: [7, 11, 8, 24],
|
|---|
| 6825 | 2012: [7, 23, 9, 5],
|
|---|
| 6826 | 2013: [7, 15, 8, 28],
|
|---|
| 6827 | 2014: [7, 21, 9, 3],
|
|---|
| 6828 | 2018: [7, 13, 8, 26],
|
|---|
| 6829 | 2019: [6, 27, 8, 10],
|
|---|
| 6830 | 2020: [6, 26, 8, 9]
|
|---|
| 6831 | }, {
|
|---|
| 6832 | name: "Herbstferien",
|
|---|
| 6833 | 2010: [10, 18, 10, 23],
|
|---|
| 6834 | 2011: [10, 17, 10, 22],
|
|---|
| 6835 | 2012: [10, 29, 11, 2],
|
|---|
| 6836 | 2013: [10, 21, 10, 25],
|
|---|
| 6837 | 2014: [10, 27, 10, 30],
|
|---|
| 6838 | 2018: [10, 17, 10, 24],
|
|---|
| 6839 | 2019: [10, 4, 10, 15]
|
|---|
| 6840 | }, {
|
|---|
| 6841 | name: "Weihnachtsferien",
|
|---|
| 6842 | 2010: [12, 22, 1, 5],
|
|---|
| 6843 | 2011: [12, 22, 1, 7],
|
|---|
| 6844 | 2012: [12, 19, 1, 4],
|
|---|
| 6845 | 2013: [12, 21, 1, 3],
|
|---|
| 6846 | 2014: [12, 22, 1, 5],
|
|---|
| 6847 | 2018: [12, 21, 1, 5],
|
|---|
| 6848 | 2019: [12, 19, 1, 2]
|
|---|
| 6849 | }]
|
|---|
| 6850 | },
|
|---|
| 6851 | "Rheinland-Pfalz": {
|
|---|
| 6852 | SH: [{
|
|---|
| 6853 | name: "Osterferien",
|
|---|
| 6854 | 2010: [3, 26, 4, 9],
|
|---|
| 6855 | 2011: [4, 18, 4, 29],
|
|---|
| 6856 | 2012: [3, 29, 4, 13],
|
|---|
| 6857 | 2013: [3, 20, 4, 5],
|
|---|
| 6858 | 2014: [4, 11, 4, 25],
|
|---|
| 6859 | 2018: [3, 26, 4, 10],
|
|---|
| 6860 | 2019: [3, 18, 4, 1],
|
|---|
| 6861 | 2020: [4, 10, 4, 21]
|
|---|
| 6862 | }, {
|
|---|
| 6863 | name: "Sommerferien",
|
|---|
| 6864 | 2010: [7, 5, 8, 13],
|
|---|
| 6865 | 2011: [6, 27, 8, 5],
|
|---|
| 6866 | 2012: [7, 2, 8, 10],
|
|---|
| 6867 | 2013: [7, 8, 8, 16],
|
|---|
| 6868 | 2014: [7, 28, 9, 5],
|
|---|
| 6869 | 2018: [7, 27, 9, 4],
|
|---|
| 6870 | 2019: [7, 18, 8, 26],
|
|---|
| 6871 | 2020: [7, 3, 8, 11]
|
|---|
| 6872 | }, {
|
|---|
| 6873 | name: "Herbstferien",
|
|---|
| 6874 | 2010: [10, 11, 10, 22],
|
|---|
| 6875 | 2011: [10, 4, 10, 14],
|
|---|
| 6876 | 2012: [10, 1, 10, 12],
|
|---|
| 6877 | 2013: [10, 4, 10, 18],
|
|---|
| 6878 | 2014: [10, 20, 10, 31],
|
|---|
| 6879 | 2018: [10, 19, 10, 30],
|
|---|
| 6880 | 2019: [10, 10, 10, 21]
|
|---|
| 6881 | }, {
|
|---|
| 6882 | name: "Weihnachtsferien",
|
|---|
| 6883 | 2010: [12, 23, 1, 7],
|
|---|
| 6884 | 2011: [12, 22, 1, 6],
|
|---|
| 6885 | 2012: [12, 20, 1, 4],
|
|---|
| 6886 | 2013: [12, 23, 1, 7],
|
|---|
| 6887 | 2014: [12, 22, 1, 7],
|
|---|
| 6888 | 2018: [12, 23, 1, 8],
|
|---|
| 6889 | 2019: [12, 22, 1, 6]
|
|---|
| 6890 | }]
|
|---|
| 6891 | },
|
|---|
| 6892 | Brandenburg: {
|
|---|
| 6893 | SH: [{
|
|---|
| 6894 | name: "Winterferien",
|
|---|
| 6895 | 2010: [2, 1, 2, 6],
|
|---|
| 6896 | 2011: [1, 31, 2, 5],
|
|---|
| 6897 | 2012: [1, 30, 2, 4],
|
|---|
| 6898 | 2013: [2, 4, 2, 9],
|
|---|
| 6899 | 2014: [2, 3, 2, 8],
|
|---|
| 6900 | 2018: [2, 2, 2, 7],
|
|---|
| 6901 | 2019: [2, 1, 2, 6],
|
|---|
| 6902 | 2020: [1, 30, 2, 4]
|
|---|
| 6903 | }, {
|
|---|
| 6904 | name: "Osterferien",
|
|---|
| 6905 | 2010: [3, 31, 4, 10],
|
|---|
| 6906 | 2011: [4, 20, 4, 30],
|
|---|
| 6907 | 2012: [4, 4, 4, 14, 4, 30, 4, 30],
|
|---|
| 6908 | 2013: [3, 27, 4, 6],
|
|---|
| 6909 | 2014: [4, 16, 4, 26, 5, 2, 5, 2],
|
|---|
| 6910 | 2018: [4, 1, 4, 11],
|
|---|
| 6911 | 2019: [3, 23, 4, 2],
|
|---|
| 6912 | 2020: [4, 12, 4, 22]
|
|---|
| 6913 | }, {
|
|---|
| 6914 | name: "Pfingstferien",
|
|---|
| 6915 | 2010: [5, 14, 5, 14],
|
|---|
| 6916 | 2011: [6, 3, 6, 3],
|
|---|
| 6917 | 2012: [5, 18, 5, 18],
|
|---|
| 6918 | 2013: [5, 10, 5, 10],
|
|---|
| 6919 | 2014: [5, 30, 5, 30],
|
|---|
| 6920 | 2018: [5, 15, 5, 15],
|
|---|
| 6921 | 2019: [5, 6, 5, 6, 5, 17, 5, 17],
|
|---|
| 6922 | 2020: [5, 26, 5, 26]
|
|---|
| 6923 | }, {
|
|---|
| 6924 | name: "Sommerferien",
|
|---|
| 6925 | 2010: [7, 8, 8, 21],
|
|---|
| 6926 | 2011: [6, 30, 8, 13],
|
|---|
| 6927 | 2012: [6, 21, 8, 3],
|
|---|
| 6928 | 2013: [6, 20, 8, 2],
|
|---|
| 6929 | 2014: [7, 10, 8, 22],
|
|---|
| 6930 | 2018: [7, 16, 8, 28],
|
|---|
| 6931 | 2019: [7, 21, 9, 3],
|
|---|
| 6932 | 2020: [7, 20, 9, 1]
|
|---|
| 6933 | }, {
|
|---|
| 6934 | name: "Herbstferien",
|
|---|
| 6935 | 2010: [10, 11, 10, 23],
|
|---|
| 6936 | 2011: [10, 4, 10, 14],
|
|---|
| 6937 | 2012: [10, 1, 10, 13],
|
|---|
| 6938 | 2013: [9, 30, 10, 12, 11, 1, 11, 1],
|
|---|
| 6939 | 2014: [10, 20, 11, 1],
|
|---|
| 6940 | 2018: [10, 19, 10, 30],
|
|---|
| 6941 | 2019: [10, 17, 10, 28]
|
|---|
| 6942 | }, {
|
|---|
| 6943 | name: "Weihnachtsferien",
|
|---|
| 6944 | 2010: [12, 23, 1, 1],
|
|---|
| 6945 | 2011: [12, 23, 1, 3],
|
|---|
| 6946 | 2012: [12, 24, 1, 4],
|
|---|
| 6947 | 2013: [12, 23, 1, 3],
|
|---|
| 6948 | 2014: [12, 22, 1, 2],
|
|---|
| 6949 | 2018: [12, 23, 1, 2],
|
|---|
| 6950 | 2019: [12, 23, 1, 3]
|
|---|
| 6951 | }]
|
|---|
| 6952 | }
|
|---|
| 6953 | },
|
|---|
| 6954 | at: {
|
|---|
| 6955 | PH: {
|
|---|
| 6956 | Neujahrstag: [1, 1],
|
|---|
| 6957 | "Heilige Drei Könige": [1, 6],
|
|---|
| 6958 | Ostermontag: ["easter", 1],
|
|---|
| 6959 | Staatsfeiertag: [5, 1],
|
|---|
| 6960 | "Christi Himmelfahrt": ["easter", 39],
|
|---|
| 6961 | Pfingstmontag: ["easter", 50],
|
|---|
| 6962 | Fronleichnam: ["easter", 60],
|
|---|
| 6963 | "Mariä Himmelfahrt": [8, 15],
|
|---|
| 6964 | Nationalfeiertag: [10, 26],
|
|---|
| 6965 | Allerheiligen: [11, 1],
|
|---|
| 6966 | "Mariä Empfängnis": [12, 8],
|
|---|
| 6967 | Christtag: [12, 25],
|
|---|
| 6968 | Stefanitag: [12, 26]
|
|---|
| 6969 | }
|
|---|
| 6970 | },
|
|---|
| 6971 | dk: {
|
|---|
| 6972 | PH: {
|
|---|
| 6973 | "Nytårsdag": [1, 1],
|
|---|
| 6974 | "Skærtorsdag": ["easter", -3],
|
|---|
| 6975 | Langfredag: ["easter", -2],
|
|---|
| 6976 | "Påskedag": ["easter", 0],
|
|---|
| 6977 | "2. Påskedag": ["easter", 1],
|
|---|
| 6978 | "Store Bededag": ["easter", 26],
|
|---|
| 6979 | "Kristi Himmelfartsdag": ["easter", 39],
|
|---|
| 6980 | Pinsedag: ["easter", 49],
|
|---|
| 6981 | "2. Pinsedag": ["easter", 50],
|
|---|
| 6982 | Grundlovsdag: [6, 5],
|
|---|
| 6983 | Juleaftensdag: [12, 24],
|
|---|
| 6984 | Juledag: [12, 25],
|
|---|
| 6985 | "2. Juledag": [12, 26]
|
|---|
| 6986 | }
|
|---|
| 6987 | },
|
|---|
| 6988 | ca: {
|
|---|
| 6989 | PH: {
|
|---|
| 6990 | "New Year's Day": [1, 1],
|
|---|
| 6991 | "Good Friday": ["easter", -2],
|
|---|
| 6992 | "Canada Day": ["canadaDay", 0],
|
|---|
| 6993 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 6994 | "Christmas Day": [12, 25]
|
|---|
| 6995 | },
|
|---|
| 6996 | Alberta: {
|
|---|
| 6997 | PH: {
|
|---|
| 6998 | "New Year's Day": [1, 1],
|
|---|
| 6999 | "Alberta Family Day": ["firstFebruaryMonday", 14],
|
|---|
| 7000 | "Good Friday": ["easter", -2],
|
|---|
| 7001 | "Easter Monday": ["easter", 1],
|
|---|
| 7002 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7003 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7004 | "Heritage Day": ["firstAugustMonday", 0],
|
|---|
| 7005 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7006 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7007 | "Remembrance Day": [11, 11],
|
|---|
| 7008 | "Christmas Day": [12, 25],
|
|---|
| 7009 | "Boxing Day": [12, 26]
|
|---|
| 7010 | }
|
|---|
| 7011 | },
|
|---|
| 7012 | "British Columbia": {
|
|---|
| 7013 | PH: {
|
|---|
| 7014 | "New Year's Day": [1, 1],
|
|---|
| 7015 | "Family Day": ["firstFebruaryMonday", 7],
|
|---|
| 7016 | "Good Friday": ["easter", -2],
|
|---|
| 7017 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7018 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7019 | "British Columbia Day": ["firstAugustMonday", 0],
|
|---|
| 7020 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7021 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7022 | "Remembrance Day": [11, 11],
|
|---|
| 7023 | "Christmas Day": [12, 25]
|
|---|
| 7024 | }
|
|---|
| 7025 | },
|
|---|
| 7026 | Manitoba: {
|
|---|
| 7027 | PH: {
|
|---|
| 7028 | "New Year's Day": [1, 1],
|
|---|
| 7029 | "Louis Riel Day": ["firstFebruaryMonday", 14],
|
|---|
| 7030 | "Good Friday": ["easter", -2],
|
|---|
| 7031 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7032 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7033 | "Civic Holiday": ["firstAugustMonday", 0],
|
|---|
| 7034 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7035 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7036 | "Remembrance Day": [11, 11],
|
|---|
| 7037 | "Christmas Day": [12, 25]
|
|---|
| 7038 | }
|
|---|
| 7039 | },
|
|---|
| 7040 | "New Brunswick": {
|
|---|
| 7041 | PH: {
|
|---|
| 7042 | "New Year's Day": [1, 1],
|
|---|
| 7043 | "Good Friday": ["easter", -2],
|
|---|
| 7044 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7045 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7046 | "New Brunswick Day": ["firstAugustMonday", 0],
|
|---|
| 7047 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7048 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7049 | "Remembrance Day": [11, 11],
|
|---|
| 7050 | "Christmas Day": [12, 25],
|
|---|
| 7051 | "Boxing Day": [12, 26]
|
|---|
| 7052 | }
|
|---|
| 7053 | },
|
|---|
| 7054 | "Newfoundland and Labrador": {
|
|---|
| 7055 | PH: {
|
|---|
| 7056 | "New Year's Day": [1, 1],
|
|---|
| 7057 | "Saint Patrick's Day": [3, 17],
|
|---|
| 7058 | "Good Friday": ["easter", -2],
|
|---|
| 7059 | "Saint George's Day": [4, 23],
|
|---|
| 7060 | "Discovery Day": [6, 24],
|
|---|
| 7061 | "Memorial Day": [7, 1],
|
|---|
| 7062 | "Orangemen's Day": [7, 12],
|
|---|
| 7063 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7064 | "Armistice Day": [11, 11],
|
|---|
| 7065 | "Christmas Day": [12, 25]
|
|---|
| 7066 | }
|
|---|
| 7067 | },
|
|---|
| 7068 | "Northwest Territories": {
|
|---|
| 7069 | PH: {
|
|---|
| 7070 | "New Year's Day": [1, 1],
|
|---|
| 7071 | "Good Friday": ["easter", -2],
|
|---|
| 7072 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7073 | "National Aboriginal Day": [6, 21],
|
|---|
| 7074 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7075 | "Civic Holiday": ["firstAugustMonday", 0],
|
|---|
| 7076 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7077 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7078 | "Remembrance Day": [11, 11],
|
|---|
| 7079 | "Christmas Day": [12, 25]
|
|---|
| 7080 | }
|
|---|
| 7081 | },
|
|---|
| 7082 | "Nova Scotia": {
|
|---|
| 7083 | PH: {
|
|---|
| 7084 | "New Year's Day": [1, 1],
|
|---|
| 7085 | "Good Friday": ["easter", -2],
|
|---|
| 7086 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7087 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7088 | "Natal Day": ["firstAugustMonday", 0],
|
|---|
| 7089 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7090 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7091 | "Remembrance Day": [11, 11],
|
|---|
| 7092 | "Christmas Day": [12, 25],
|
|---|
| 7093 | "Boxing Day": [12, 26]
|
|---|
| 7094 | }
|
|---|
| 7095 | },
|
|---|
| 7096 | Nunavut: {
|
|---|
| 7097 | PH: {
|
|---|
| 7098 | "New Year's Day": [1, 1],
|
|---|
| 7099 | "Good Friday": ["easter", -2],
|
|---|
| 7100 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7101 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7102 | "Nunavut Day": [7, 9],
|
|---|
| 7103 | "Civic Holiday": ["firstAugustMonday", 0],
|
|---|
| 7104 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7105 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7106 | "Remembrance Day": [11, 11],
|
|---|
| 7107 | "Christmas Day": [12, 25]
|
|---|
| 7108 | }
|
|---|
| 7109 | },
|
|---|
| 7110 | Ontario: {
|
|---|
| 7111 | PH: {
|
|---|
| 7112 | "New Year's Day": [1, 1],
|
|---|
| 7113 | "Family Day": ["firstFebruaryMonday", 14],
|
|---|
| 7114 | "Good Friday": ["easter", -2],
|
|---|
| 7115 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7116 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7117 | "August Civic Public Holiday": ["firstAugustMonday", 0],
|
|---|
| 7118 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7119 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7120 | "Remembrance Day": [11, 11],
|
|---|
| 7121 | "Christmas Day": [12, 25],
|
|---|
| 7122 | "Boxing Day": [12, 26]
|
|---|
| 7123 | }
|
|---|
| 7124 | },
|
|---|
| 7125 | "Prince Edward Island": {
|
|---|
| 7126 | PH: {
|
|---|
| 7127 | "New Year's Day": [1, 1],
|
|---|
| 7128 | "Islander Day": ["firstFebruaryMonday", 14],
|
|---|
| 7129 | "Good Friday": ["easter", -2],
|
|---|
| 7130 | "Easter Monday": ["easter", 1],
|
|---|
| 7131 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7132 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7133 | "Civic Holiday": ["firstAugustMonday", 0],
|
|---|
| 7134 | "Gold Cup Parade Day": ["firstAugustMonday", 18],
|
|---|
| 7135 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7136 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7137 | "Remembrance Day": [11, 11],
|
|---|
| 7138 | "Christmas Day": [12, 25],
|
|---|
| 7139 | "Boxing Day": [12, 26]
|
|---|
| 7140 | }
|
|---|
| 7141 | },
|
|---|
| 7142 | Quebec: {
|
|---|
| 7143 | PH: {
|
|---|
| 7144 | "Jour de l'an": [1, 1],
|
|---|
| 7145 | "Vendredi saint": ["easter", -2],
|
|---|
| 7146 | "Lundi de Pâques": ["easter", 1],
|
|---|
| 7147 | "Journée nationale des patriotes": ["victoriaDay", 0],
|
|---|
| 7148 | "Fête nationale du Québec": [6, 24],
|
|---|
| 7149 | "Fête du Canada": ["canadaDay", 0],
|
|---|
| 7150 | "Fête du Travail": ["firstSeptemberMonday", 0],
|
|---|
| 7151 | "Jour de l'Action de grâce": ["firstOctoberMonday", 7],
|
|---|
| 7152 | "Noël": [12, 25]
|
|---|
| 7153 | }
|
|---|
| 7154 | },
|
|---|
| 7155 | Saskatchewan: {
|
|---|
| 7156 | PH: {
|
|---|
| 7157 | "New Year's Day": [1, 1],
|
|---|
| 7158 | "Family Day": ["firstFebruaryMonday", 14],
|
|---|
| 7159 | "Good Friday": ["easter", -2],
|
|---|
| 7160 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7161 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7162 | "Saskatchewan Day": ["firstAugustMonday", 0],
|
|---|
| 7163 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7164 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7165 | "Remembrance Day": [11, 11],
|
|---|
| 7166 | "Christmas Day": [12, 25]
|
|---|
| 7167 | }
|
|---|
| 7168 | },
|
|---|
| 7169 | Yukon: {
|
|---|
| 7170 | PH: {
|
|---|
| 7171 | "New Year's Day": [1, 1],
|
|---|
| 7172 | "Heritage Day": ["lastFebruarySunday", -2],
|
|---|
| 7173 | "Good Friday": ["easter", -2],
|
|---|
| 7174 | "Easter Monday": ["easter", 1],
|
|---|
| 7175 | "Victoria Day": ["victoriaDay", 0],
|
|---|
| 7176 | "Canada Day": ["canadaDay", 0],
|
|---|
| 7177 | "Discovery Day": ["firstAugustMonday", 14],
|
|---|
| 7178 | "Labour Day": ["firstSeptemberMonday", 0],
|
|---|
| 7179 | Thanksgiving: ["firstOctoberMonday", 7],
|
|---|
| 7180 | "Remembrance Day": [11, 11],
|
|---|
| 7181 | "Christmas Day": [12, 25],
|
|---|
| 7182 | "Boxing Day": [12, 26]
|
|---|
| 7183 | }
|
|---|
| 7184 | }
|
|---|
| 7185 | },
|
|---|
| 7186 | ru: {
|
|---|
| 7187 | PH: {
|
|---|
| 7188 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7189 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7190 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7191 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7192 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7193 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7194 | "Рождество Христово": [1, 7],
|
|---|
| 7195 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7196 | "День защитника Отечества": [2, 23],
|
|---|
| 7197 | "Международный женский день": [3, 8],
|
|---|
| 7198 | "День Победы": [5, 9],
|
|---|
| 7199 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7200 | "День народного единства": [11, 4],
|
|---|
| 7201 | "День России": [6, 12]
|
|---|
| 7202 | },
|
|---|
| 7203 | Tatarstan: {
|
|---|
| 7204 | PH: {
|
|---|
| 7205 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7206 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7207 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7208 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7209 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7210 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7211 | "Рождество Христово": [1, 7],
|
|---|
| 7212 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7213 | "День защитника Отечества": [2, 23],
|
|---|
| 7214 | "Международный женский день": [3, 8],
|
|---|
| 7215 | "День Победы": [5, 9],
|
|---|
| 7216 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7217 | "День народного единства": [11, 4],
|
|---|
| 7218 | "День России": [6, 12],
|
|---|
| 7219 | "Ураза-байрам": [7, 28],
|
|---|
| 7220 | "День Республики Татарстан": [8, 30],
|
|---|
| 7221 | "Курбан-байрам": [10, 4],
|
|---|
| 7222 | "День Конституции Республики Татарстан": [11, 6]
|
|---|
| 7223 | }
|
|---|
| 7224 | },
|
|---|
| 7225 | Bashkortostan: {
|
|---|
| 7226 | PH: {
|
|---|
| 7227 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7228 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7229 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7230 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7231 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7232 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7233 | "Рождество Христово": [1, 7],
|
|---|
| 7234 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7235 | "День защитника Отечества": [2, 23],
|
|---|
| 7236 | "Международный женский день": [3, 8],
|
|---|
| 7237 | "День Победы": [5, 9],
|
|---|
| 7238 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7239 | "День народного единства": [11, 4],
|
|---|
| 7240 | "День России": [6, 12],
|
|---|
| 7241 | "Ураза-байрам": [7, 28],
|
|---|
| 7242 | "Курбан-байрам": [10, 4],
|
|---|
| 7243 | "День Республики Башкирии": [10, 11],
|
|---|
| 7244 | "День Конституции Башкортостана": [12, 24]
|
|---|
| 7245 | }
|
|---|
| 7246 | },
|
|---|
| 7247 | Chuvashia: {
|
|---|
| 7248 | PH: {
|
|---|
| 7249 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7250 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7251 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7252 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7253 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7254 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7255 | "Рождество Христово": [1, 7],
|
|---|
| 7256 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7257 | "День защитника Отечества": [2, 23],
|
|---|
| 7258 | "Международный женский день": [3, 8],
|
|---|
| 7259 | "День Победы": [5, 9],
|
|---|
| 7260 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7261 | "День народного единства": [11, 4],
|
|---|
| 7262 | "День России": [6, 12],
|
|---|
| 7263 | "День Чувашской республики": [6, 24]
|
|---|
| 7264 | }
|
|---|
| 7265 | },
|
|---|
| 7266 | "Sakha Republic": {
|
|---|
| 7267 | PH: {
|
|---|
| 7268 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7269 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7270 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7271 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7272 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7273 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7274 | "Рождество Христово": [1, 7],
|
|---|
| 7275 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7276 | "День защитника Отечества": [2, 23],
|
|---|
| 7277 | "Международный женский день": [3, 8],
|
|---|
| 7278 | "День Победы": [5, 9],
|
|---|
| 7279 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7280 | "День народного единства": [11, 4],
|
|---|
| 7281 | "День России": [6, 12],
|
|---|
| 7282 | "День Республики Саха": [4, 27],
|
|---|
| 7283 | "Ысыах": [6, 23],
|
|---|
| 7284 | "День государственности Республики Саха": [9, 27]
|
|---|
| 7285 | }
|
|---|
| 7286 | },
|
|---|
| 7287 | "Republic of Kalmykia": {
|
|---|
| 7288 | PH: {
|
|---|
| 7289 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7290 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7291 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7292 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7293 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7294 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7295 | "Рождество Христово": [1, 7],
|
|---|
| 7296 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7297 | "День защитника Отечества": [2, 23],
|
|---|
| 7298 | "Международный женский день": [3, 8],
|
|---|
| 7299 | "День Победы": [5, 9],
|
|---|
| 7300 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7301 | "День народного единства": [11, 4],
|
|---|
| 7302 | "День России": [6, 12],
|
|---|
| 7303 | "Цаган Сар": [1, 14],
|
|---|
| 7304 | "День принятия Степного Уложения (Конституции) Республики Калмыкия": [4, 5],
|
|---|
| 7305 | "День рождения Будды Шакьямун": [6, 6],
|
|---|
| 7306 | "Зул": [12, 15],
|
|---|
| 7307 | "День памяти жертв депортации калмыцкого народа": [12, 28]
|
|---|
| 7308 | }
|
|---|
| 7309 | },
|
|---|
| 7310 | Buryatia: {
|
|---|
| 7311 | PH: {
|
|---|
| 7312 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7313 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7314 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7315 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7316 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7317 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7318 | "Рождество Христово": [1, 7],
|
|---|
| 7319 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7320 | "День защитника Отечества": [2, 23],
|
|---|
| 7321 | "Международный женский день": [3, 8],
|
|---|
| 7322 | "День Победы": [5, 9],
|
|---|
| 7323 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7324 | "День народного единства": [11, 4],
|
|---|
| 7325 | "День России": [6, 12],
|
|---|
| 7326 | "Сагаалган": [1, 14]
|
|---|
| 7327 | }
|
|---|
| 7328 | },
|
|---|
| 7329 | "Republic of Karelia": {
|
|---|
| 7330 | PH: {
|
|---|
| 7331 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7332 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7333 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7334 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7335 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7336 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7337 | "Рождество Христово": [1, 7],
|
|---|
| 7338 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7339 | "День защитника Отечества": [2, 23],
|
|---|
| 7340 | "Международный женский день": [3, 8],
|
|---|
| 7341 | "День Победы": [5, 9],
|
|---|
| 7342 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7343 | "День народного единства": [11, 4],
|
|---|
| 7344 | "День России": [6, 12],
|
|---|
| 7345 | "День Республики Карелия": [6, 8],
|
|---|
| 7346 | "День освобождения Карелии от фашистских захватчиков": [9, 30]
|
|---|
| 7347 | }
|
|---|
| 7348 | },
|
|---|
| 7349 | "Удмуртская республика": {
|
|---|
| 7350 | PH: {
|
|---|
| 7351 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7352 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7353 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7354 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7355 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7356 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7357 | "Рождество Христово": [1, 7],
|
|---|
| 7358 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7359 | "День защитника Отечества": [2, 23],
|
|---|
| 7360 | "Международный женский день": [3, 8],
|
|---|
| 7361 | "День Победы": [5, 9],
|
|---|
| 7362 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7363 | "День народного единства": [11, 4],
|
|---|
| 7364 | "День России": [6, 12],
|
|---|
| 7365 | "День Государственности Удмуртской Республики": [5, 31]
|
|---|
| 7366 | }
|
|---|
| 7367 | },
|
|---|
| 7368 | Adygea: {
|
|---|
| 7369 | PH: {
|
|---|
| 7370 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7371 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7372 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7373 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7374 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7375 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7376 | "Рождество Христово": [1, 7],
|
|---|
| 7377 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7378 | "День защитника Отечества": [2, 23],
|
|---|
| 7379 | "Международный женский день": [3, 8],
|
|---|
| 7380 | "День Победы": [5, 9],
|
|---|
| 7381 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7382 | "День народного единства": [11, 4],
|
|---|
| 7383 | "День России": [6, 12],
|
|---|
| 7384 | "Ураза-байрам": [7, 28],
|
|---|
| 7385 | "Курбан-байрам": [10, 4],
|
|---|
| 7386 | "День образования Республики Адыгея": [10, 5]
|
|---|
| 7387 | }
|
|---|
| 7388 | },
|
|---|
| 7389 | "Republic of Dagestan": {
|
|---|
| 7390 | PH: {
|
|---|
| 7391 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7392 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7393 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7394 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7395 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7396 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7397 | "Рождество Христово": [1, 7],
|
|---|
| 7398 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7399 | "День защитника Отечества": [2, 23],
|
|---|
| 7400 | "Международный женский день": [3, 8],
|
|---|
| 7401 | "День Победы": [5, 9],
|
|---|
| 7402 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7403 | "День народного единства": [11, 4],
|
|---|
| 7404 | "День России": [6, 12],
|
|---|
| 7405 | "День Конституции Республики Дагестан": [7, 26],
|
|---|
| 7406 | "Ураза-байрам": [7, 28],
|
|---|
| 7407 | "День единства народов Дагестана": [9, 15],
|
|---|
| 7408 | "Курбан-байрам": [10, 4]
|
|---|
| 7409 | }
|
|---|
| 7410 | },
|
|---|
| 7411 | Ingushetia: {
|
|---|
| 7412 | PH: {
|
|---|
| 7413 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7414 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7415 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7416 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7417 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7418 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7419 | "Рождество Христово": [1, 7],
|
|---|
| 7420 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7421 | "День защитника Отечества": [2, 23],
|
|---|
| 7422 | "Международный женский день": [3, 8],
|
|---|
| 7423 | "День Победы": [5, 9],
|
|---|
| 7424 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7425 | "День народного единства": [11, 4],
|
|---|
| 7426 | "День России": [6, 12],
|
|---|
| 7427 | "День образования Республики Ингушетия": [6, 4],
|
|---|
| 7428 | "Ураза-байрам": [7, 28],
|
|---|
| 7429 | "Курбан-байрам": [10, 4]
|
|---|
| 7430 | }
|
|---|
| 7431 | },
|
|---|
| 7432 | "Карачаево-Черкесская республика": {
|
|---|
| 7433 | PH: {
|
|---|
| 7434 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7435 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7436 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7437 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7438 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7439 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7440 | "Рождество Христово": [1, 7],
|
|---|
| 7441 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7442 | "День защитника Отечества": [2, 23],
|
|---|
| 7443 | "Международный женский день": [3, 8],
|
|---|
| 7444 | "День Победы": [5, 9],
|
|---|
| 7445 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7446 | "День народного единства": [11, 4],
|
|---|
| 7447 | "День России": [6, 12],
|
|---|
| 7448 | "День возрождения карачаевского народа": [5, 3],
|
|---|
| 7449 | "Ураза-байрам": [7, 28],
|
|---|
| 7450 | "Курбан-байрам": [10, 4]
|
|---|
| 7451 | }
|
|---|
| 7452 | },
|
|---|
| 7453 | "Chechen Republic": {
|
|---|
| 7454 | PH: {
|
|---|
| 7455 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7456 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7457 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7458 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7459 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7460 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7461 | "Рождество Христово": [1, 7],
|
|---|
| 7462 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7463 | "День защитника Отечества": [2, 23],
|
|---|
| 7464 | "Международный женский день": [3, 8],
|
|---|
| 7465 | "День Победы": [5, 9],
|
|---|
| 7466 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7467 | "День народного единства": [11, 4],
|
|---|
| 7468 | "День России": [6, 12],
|
|---|
| 7469 | "День мира в Чеченской Республике": [4, 16],
|
|---|
| 7470 | "Ураза-байрам": [7, 28],
|
|---|
| 7471 | "Курбан-байрам": [10, 4]
|
|---|
| 7472 | }
|
|---|
| 7473 | },
|
|---|
| 7474 | "Кабардино-Балкарская республика": {
|
|---|
| 7475 | PH: {
|
|---|
| 7476 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7477 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7478 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7479 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7480 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7481 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7482 | "Рождество Христово": [1, 7],
|
|---|
| 7483 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7484 | "День защитника Отечества": [2, 23],
|
|---|
| 7485 | "Международный женский день": [3, 8],
|
|---|
| 7486 | "День Победы": [5, 9],
|
|---|
| 7487 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7488 | "День народного единства": [11, 4],
|
|---|
| 7489 | "День России": [6, 12],
|
|---|
| 7490 | "День возрождения балкарского народа": [3, 28],
|
|---|
| 7491 | "Черкесский день траура": [5, 21],
|
|---|
| 7492 | "Ураза-байрам": [7, 28],
|
|---|
| 7493 | "День государственности Кабардино-Балкарской Республики": [9, 1],
|
|---|
| 7494 | "Курбан-байрам": [10, 4]
|
|---|
| 7495 | }
|
|---|
| 7496 | },
|
|---|
| 7497 | "Altai Republic": {
|
|---|
| 7498 | PH: {
|
|---|
| 7499 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7500 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7501 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7502 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7503 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7504 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7505 | "Рождество Христово": [1, 7],
|
|---|
| 7506 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7507 | "День защитника Отечества": [2, 23],
|
|---|
| 7508 | "Международный женский день": [3, 8],
|
|---|
| 7509 | "День Победы": [5, 9],
|
|---|
| 7510 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7511 | "День народного единства": [11, 4],
|
|---|
| 7512 | "День России": [6, 12],
|
|---|
| 7513 | "Чага-Байрам": [1, 14]
|
|---|
| 7514 | }
|
|---|
| 7515 | },
|
|---|
| 7516 | Tuva: {
|
|---|
| 7517 | PH: {
|
|---|
| 7518 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7519 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7520 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7521 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7522 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7523 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7524 | "Рождество Христово": [1, 7],
|
|---|
| 7525 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7526 | "День защитника Отечества": [2, 23],
|
|---|
| 7527 | "Международный женский день": [3, 8],
|
|---|
| 7528 | "День Победы": [5, 9],
|
|---|
| 7529 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7530 | "День народного единства": [11, 4],
|
|---|
| 7531 | "День России": [6, 12],
|
|---|
| 7532 | "Народный праздник Шагаа": [1, 14],
|
|---|
| 7533 | "День Республики Тыва": [8, 15]
|
|---|
| 7534 | }
|
|---|
| 7535 | },
|
|---|
| 7536 | "Saratov Oblast": {
|
|---|
| 7537 | PH: {
|
|---|
| 7538 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7539 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7540 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7541 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7542 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7543 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7544 | "Рождество Христово": [1, 7],
|
|---|
| 7545 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7546 | "День защитника Отечества": [2, 23],
|
|---|
| 7547 | "Международный женский день": [3, 8],
|
|---|
| 7548 | "День Победы": [5, 9],
|
|---|
| 7549 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7550 | "День народного единства": [11, 4],
|
|---|
| 7551 | "День России": [6, 12],
|
|---|
| 7552 | "Радоница": [4, 29]
|
|---|
| 7553 | }
|
|---|
| 7554 | },
|
|---|
| 7555 | "Bryansk Oblast": {
|
|---|
| 7556 | PH: {
|
|---|
| 7557 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7558 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7559 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7560 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7561 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7562 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7563 | "Рождество Христово": [1, 7],
|
|---|
| 7564 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7565 | "День защитника Отечества": [2, 23],
|
|---|
| 7566 | "Международный женский день": [3, 8],
|
|---|
| 7567 | "День Победы": [5, 9],
|
|---|
| 7568 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7569 | "День народного единства": [11, 4],
|
|---|
| 7570 | "День России": [6, 12],
|
|---|
| 7571 | "Радоница": [4, 29],
|
|---|
| 7572 | "День освобождения города Брянска": [9, 17]
|
|---|
| 7573 | }
|
|---|
| 7574 | },
|
|---|
| 7575 | "Komi Republic": {
|
|---|
| 7576 | PH: {
|
|---|
| 7577 | "1. Новогодние каникулы": [1, 1],
|
|---|
| 7578 | "2. Новогодние каникулы": [1, 2],
|
|---|
| 7579 | "3. Новогодние каникулы": [1, 3],
|
|---|
| 7580 | "4. Новогодние каникулы": [1, 4],
|
|---|
| 7581 | "5. Новогодние каникулы": [1, 5],
|
|---|
| 7582 | "6. Новогодние каникулы": [1, 6],
|
|---|
| 7583 | "Рождество Христово": [1, 7],
|
|---|
| 7584 | "8. Новогодние каникулы": [1, 8],
|
|---|
| 7585 | "День защитника Отечества": [2, 23],
|
|---|
| 7586 | "Международный женский день": [3, 8],
|
|---|
| 7587 | "День Победы": [5, 9],
|
|---|
| 7588 | "Праздник Весны и Труда": [5, 1],
|
|---|
| 7589 | "День народного единства": [11, 4],
|
|---|
| 7590 | "День России": [6, 12],
|
|---|
| 7591 | "День Республики Коми": [8, 22]
|
|---|
| 7592 | }
|
|---|
| 7593 | }
|
|---|
| 7594 | },
|
|---|
| 7595 | ua: {
|
|---|
| 7596 | PH: {
|
|---|
| 7597 | "Новий рік": [1, 1],
|
|---|
| 7598 | "Різдво": [1, 7],
|
|---|
| 7599 | "Міжнародний жіночий день": [3, 8],
|
|---|
| 7600 | "Великдень": ["orthodox easter", 1],
|
|---|
| 7601 | "День Праці 1": [5, 1],
|
|---|
| 7602 | "День Праці 2": [5, 2],
|
|---|
| 7603 | "День Перемоги": [5, 9],
|
|---|
| 7604 | "День Конституції України": [6, 28],
|
|---|
| 7605 | "День Незалежності України": [8, 24]
|
|---|
| 7606 | }
|
|---|
| 7607 | },
|
|---|
| 7608 | us: {
|
|---|
| 7609 | PH: {
|
|---|
| 7610 | "New Year's Day": [1, 1],
|
|---|
| 7611 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7612 | "Independence Day": [7, 4],
|
|---|
| 7613 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7614 | "Veterans Day": [11, 11],
|
|---|
| 7615 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7616 | "Christmas Day": [12, 25]
|
|---|
| 7617 | },
|
|---|
| 7618 | Alabama: {
|
|---|
| 7619 | PH: {
|
|---|
| 7620 | "New Year's Day": [1, 1],
|
|---|
| 7621 | "Robert E. Lee/Martin Luther King Birthday": ["firstJanuaryMonday", 14],
|
|---|
| 7622 | "George Washington/Thomas Jefferson Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7623 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7624 | "Independence Day": [7, 4],
|
|---|
| 7625 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7626 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7627 | "Veterans Day": [11, 11],
|
|---|
| 7628 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7629 | "Christmas Day": [12, 25],
|
|---|
| 7630 | "Confederate Memorial Day": ["firstAprilMonday", 21],
|
|---|
| 7631 | "Jefferson Davis' Birthday": ["firstJuneMonday", 0]
|
|---|
| 7632 | }
|
|---|
| 7633 | },
|
|---|
| 7634 | Alaska: {
|
|---|
| 7635 | PH: {
|
|---|
| 7636 | "New Year's Day": [1, 1],
|
|---|
| 7637 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7638 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7639 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7640 | "Independence Day": [7, 4],
|
|---|
| 7641 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7642 | "Veterans Day": [11, 11],
|
|---|
| 7643 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7644 | "Christmas Day": [12, 25],
|
|---|
| 7645 | "Seward's Day": ["lastMarchMonday", 0],
|
|---|
| 7646 | "Alaska Day": [10, 18]
|
|---|
| 7647 | }
|
|---|
| 7648 | },
|
|---|
| 7649 | Arizona: {
|
|---|
| 7650 | PH: {
|
|---|
| 7651 | "New Year's Day": [1, 1],
|
|---|
| 7652 | "Dr. Martin Luther King Jr./Civil Rights Day": ["firstJanuaryMonday", 14],
|
|---|
| 7653 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7654 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7655 | "Independence Day": [7, 4],
|
|---|
| 7656 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7657 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7658 | "Veterans Day": [11, 11],
|
|---|
| 7659 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7660 | "Christmas Day": [12, 25]
|
|---|
| 7661 | }
|
|---|
| 7662 | },
|
|---|
| 7663 | Arkansas: {
|
|---|
| 7664 | PH: {
|
|---|
| 7665 | "New Year's Day": [1, 1],
|
|---|
| 7666 | "Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays": ["firstJanuaryMonday", 14],
|
|---|
| 7667 | "George Washington's Birthday and Daisy Gatson Bates Day": ["firstFebruaryMonday", 14],
|
|---|
| 7668 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7669 | "Independence Day": [7, 4],
|
|---|
| 7670 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7671 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7672 | "Veterans Day": [11, 11],
|
|---|
| 7673 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7674 | "Christmas Eve": [12, 24],
|
|---|
| 7675 | "Christmas Day": [12, 25]
|
|---|
| 7676 | }
|
|---|
| 7677 | },
|
|---|
| 7678 | California: {
|
|---|
| 7679 | PH: {
|
|---|
| 7680 | "New Year's Day": [1, 1],
|
|---|
| 7681 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7682 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7683 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7684 | "Independence Day": [7, 4],
|
|---|
| 7685 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7686 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7687 | "Veterans Day": [11, 11],
|
|---|
| 7688 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7689 | "Christmas Day": [12, 25],
|
|---|
| 7690 | "César Chávez Day": [3, 31]
|
|---|
| 7691 | }
|
|---|
| 7692 | },
|
|---|
| 7693 | Colorado: {
|
|---|
| 7694 | PH: {
|
|---|
| 7695 | "New Year's Day": [1, 1],
|
|---|
| 7696 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7697 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7698 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7699 | "Independence Day": [7, 4],
|
|---|
| 7700 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7701 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7702 | "Veterans Day": [11, 11],
|
|---|
| 7703 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7704 | "Christmas Day": [12, 25]
|
|---|
| 7705 | }
|
|---|
| 7706 | },
|
|---|
| 7707 | Connecticut: {
|
|---|
| 7708 | PH: {
|
|---|
| 7709 | "New Year's Day": [1, 1],
|
|---|
| 7710 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7711 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7712 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7713 | "Independence Day": [7, 4],
|
|---|
| 7714 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7715 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7716 | "Veterans Day": [11, 11],
|
|---|
| 7717 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7718 | "Christmas Day": [12, 25],
|
|---|
| 7719 | "Lincoln's Birthday": [2, 12],
|
|---|
| 7720 | "Good Friday": ["easter", -2]
|
|---|
| 7721 | }
|
|---|
| 7722 | },
|
|---|
| 7723 | Delaware: {
|
|---|
| 7724 | PH: {
|
|---|
| 7725 | "New Year's Day": [1, 1],
|
|---|
| 7726 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7727 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7728 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7729 | "Independence Day": [7, 4],
|
|---|
| 7730 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7731 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7732 | "Veterans Day": [11, 11],
|
|---|
| 7733 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7734 | "Day After Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 7735 | "Christmas Day": [12, 25],
|
|---|
| 7736 | "Good Friday": ["easter", -2]
|
|---|
| 7737 | }
|
|---|
| 7738 | },
|
|---|
| 7739 | "District of Columbia": {
|
|---|
| 7740 | PH: {
|
|---|
| 7741 | "New Year's Day": [1, 1],
|
|---|
| 7742 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7743 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7744 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7745 | "Independence Day": [7, 4],
|
|---|
| 7746 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7747 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7748 | "Veterans Day": [11, 11],
|
|---|
| 7749 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7750 | "Christmas Day": [12, 25],
|
|---|
| 7751 | "Emancipation Day": [4, 16]
|
|---|
| 7752 | }
|
|---|
| 7753 | },
|
|---|
| 7754 | Florida: {
|
|---|
| 7755 | PH: {
|
|---|
| 7756 | "New Year's Day": [1, 1],
|
|---|
| 7757 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7758 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7759 | "Independence Day": [7, 4],
|
|---|
| 7760 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7761 | "Veterans Day": [11, 11],
|
|---|
| 7762 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7763 | "Friday after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 7764 | "Christmas Day": [12, 25]
|
|---|
| 7765 | }
|
|---|
| 7766 | },
|
|---|
| 7767 | Georgia: {
|
|---|
| 7768 | PH: {
|
|---|
| 7769 | "New Year's Day": [1, 1],
|
|---|
| 7770 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7771 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7772 | "Independence Day": [7, 4],
|
|---|
| 7773 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7774 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7775 | "Veterans Day": [11, 11],
|
|---|
| 7776 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7777 | "Robert E. Lee's Birthday": ["firstNovemberThursday", 22],
|
|---|
| 7778 | "Washington's Birthday": [12, 24],
|
|---|
| 7779 | "Christmas Day": [12, 25],
|
|---|
| 7780 | "Confederate Memorial Day": ["lastAprilMonday", 0]
|
|---|
| 7781 | }
|
|---|
| 7782 | },
|
|---|
| 7783 | Guam: {
|
|---|
| 7784 | PH: {
|
|---|
| 7785 | "New Year's Day": [1, 1],
|
|---|
| 7786 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7787 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7788 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7789 | "Independence Day": [7, 4],
|
|---|
| 7790 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7791 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7792 | "Veterans Day": [11, 11],
|
|---|
| 7793 | "Guam Discovery Day": [3, 5],
|
|---|
| 7794 | "Good Friday": ["easter", -2],
|
|---|
| 7795 | "Liberation Day": [7, 21],
|
|---|
| 7796 | "All Souls' Day": [11, 2],
|
|---|
| 7797 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7798 | "Lady of Camarin Day": [12, 8],
|
|---|
| 7799 | "Christmas Day": [12, 25]
|
|---|
| 7800 | }
|
|---|
| 7801 | },
|
|---|
| 7802 | Hawaii: {
|
|---|
| 7803 | PH: {
|
|---|
| 7804 | "New Year's Day": [1, 1],
|
|---|
| 7805 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7806 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7807 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7808 | "Independence Day": [7, 4],
|
|---|
| 7809 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7810 | "Veterans Day": [11, 11],
|
|---|
| 7811 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7812 | "Christmas Day": [12, 25],
|
|---|
| 7813 | "Prince Jonah Kuhio Kalanianaole Day": [3, 26],
|
|---|
| 7814 | "Kamehameha Day": [6, 11],
|
|---|
| 7815 | "Statehood Day": ["firstAugustFriday", 14],
|
|---|
| 7816 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 7817 | }
|
|---|
| 7818 | },
|
|---|
| 7819 | Idaho: {
|
|---|
| 7820 | PH: {
|
|---|
| 7821 | "New Year's Day": [1, 1],
|
|---|
| 7822 | "Martin Luther King, Jr.-Idaho Human Rights Day": ["firstJanuaryMonday", 14],
|
|---|
| 7823 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7824 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7825 | "Independence Day": [7, 4],
|
|---|
| 7826 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7827 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7828 | "Veterans Day": [11, 11],
|
|---|
| 7829 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7830 | "Christmas Day": [12, 25]
|
|---|
| 7831 | }
|
|---|
| 7832 | },
|
|---|
| 7833 | Illinois: {
|
|---|
| 7834 | PH: {
|
|---|
| 7835 | "New Year's Day": [1, 1],
|
|---|
| 7836 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7837 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7838 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7839 | "Independence Day": [7, 4],
|
|---|
| 7840 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7841 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7842 | "Veterans Day": [11, 11],
|
|---|
| 7843 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7844 | "Christmas Day": [12, 25],
|
|---|
| 7845 | "Lincoln's Birthday": [2, 12],
|
|---|
| 7846 | "Casimir Pulaski Day": ["firstMarchMonday", 0],
|
|---|
| 7847 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 7848 | }
|
|---|
| 7849 | },
|
|---|
| 7850 | Indiana: {
|
|---|
| 7851 | PH: {
|
|---|
| 7852 | "New Year's Day": [1, 1],
|
|---|
| 7853 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7854 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7855 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7856 | "Independence Day": [7, 4],
|
|---|
| 7857 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7858 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7859 | "Veterans Day": [11, 11],
|
|---|
| 7860 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7861 | "Lincoln's Birthday": ["firstNovemberThursday", 22],
|
|---|
| 7862 | "Christmas Day": [12, 25],
|
|---|
| 7863 | "Good Friday": ["easter", -2],
|
|---|
| 7864 | "Primary Election Day": ["firstMayMonday", 1],
|
|---|
| 7865 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 7866 | }
|
|---|
| 7867 | },
|
|---|
| 7868 | Iowa: {
|
|---|
| 7869 | PH: {
|
|---|
| 7870 | "New Year's Day": [1, 1],
|
|---|
| 7871 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7872 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7873 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7874 | "Independence Day": [7, 4],
|
|---|
| 7875 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7876 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7877 | "Veterans Day": [11, 11],
|
|---|
| 7878 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7879 | "Christmas Day": [12, 25],
|
|---|
| 7880 | "Lincoln's Birthday": [2, 12]
|
|---|
| 7881 | }
|
|---|
| 7882 | },
|
|---|
| 7883 | Kansas: {
|
|---|
| 7884 | PH: {
|
|---|
| 7885 | "New Year's Day": [1, 1],
|
|---|
| 7886 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7887 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7888 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7889 | "Independence Day": [7, 4],
|
|---|
| 7890 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7891 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7892 | "Veterans Day": [11, 11],
|
|---|
| 7893 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7894 | "Christmas Day": [12, 25]
|
|---|
| 7895 | }
|
|---|
| 7896 | },
|
|---|
| 7897 | Kentucky: {
|
|---|
| 7898 | PH: {
|
|---|
| 7899 | "New Year's Day": [1, 1],
|
|---|
| 7900 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7901 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7902 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7903 | "Independence Day": [7, 4],
|
|---|
| 7904 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7905 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7906 | "Veterans Day": [11, 11],
|
|---|
| 7907 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7908 | "Christmas Eve": [12, 24],
|
|---|
| 7909 | "Christmas Day": [12, 25],
|
|---|
| 7910 | "New Year's Eve": [12, 31],
|
|---|
| 7911 | "Good Friday": ["easter", -2]
|
|---|
| 7912 | }
|
|---|
| 7913 | },
|
|---|
| 7914 | Louisiana: {
|
|---|
| 7915 | PH: {
|
|---|
| 7916 | "New Year's Day": [1, 1],
|
|---|
| 7917 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7918 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7919 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7920 | "Independence Day": [7, 4],
|
|---|
| 7921 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7922 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7923 | "Veterans Day": [11, 11],
|
|---|
| 7924 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7925 | "Christmas Day": [12, 25],
|
|---|
| 7926 | "Mardi Gras": ["easter", -47],
|
|---|
| 7927 | "Good Friday": ["easter", -2],
|
|---|
| 7928 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 7929 | }
|
|---|
| 7930 | },
|
|---|
| 7931 | Maine: {
|
|---|
| 7932 | PH: {
|
|---|
| 7933 | "New Year's Day": [1, 1],
|
|---|
| 7934 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7935 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7936 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7937 | "Independence Day": [7, 4],
|
|---|
| 7938 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7939 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7940 | "Veterans Day": [11, 11],
|
|---|
| 7941 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7942 | "Christmas Day": [12, 25],
|
|---|
| 7943 | "Patriots' Day": ["firstAprilMonday", 14]
|
|---|
| 7944 | }
|
|---|
| 7945 | },
|
|---|
| 7946 | Maryland: {
|
|---|
| 7947 | PH: {
|
|---|
| 7948 | "New Year's Day": [1, 1],
|
|---|
| 7949 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7950 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7951 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7952 | "Independence Day": [7, 4],
|
|---|
| 7953 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7954 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7955 | "Veterans Day": [11, 11],
|
|---|
| 7956 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7957 | "Native American Heritage Day": ["firstNovemberThursday", 22],
|
|---|
| 7958 | "Christmas Day": [12, 25]
|
|---|
| 7959 | }
|
|---|
| 7960 | },
|
|---|
| 7961 | Massachusetts: {
|
|---|
| 7962 | PH: {
|
|---|
| 7963 | "New Year's Day": [1, 1],
|
|---|
| 7964 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7965 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7966 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7967 | "Independence Day": [7, 4],
|
|---|
| 7968 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7969 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7970 | "Veterans Day": [11, 11],
|
|---|
| 7971 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7972 | "Christmas Day": [12, 25],
|
|---|
| 7973 | "Patriots' Day": ["firstAprilMonday", 14]
|
|---|
| 7974 | }
|
|---|
| 7975 | },
|
|---|
| 7976 | Michigan: {
|
|---|
| 7977 | PH: {
|
|---|
| 7978 | "New Year's Day": [1, 1],
|
|---|
| 7979 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7980 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7981 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7982 | "Independence Day": [7, 4],
|
|---|
| 7983 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 7984 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 7985 | "Veterans Day": [11, 11],
|
|---|
| 7986 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 7987 | "Christmas Eve": [12, 24],
|
|---|
| 7988 | "Christmas Day": [12, 25],
|
|---|
| 7989 | "New Year's Eve": [12, 31]
|
|---|
| 7990 | }
|
|---|
| 7991 | },
|
|---|
| 7992 | Minnesota: {
|
|---|
| 7993 | PH: {
|
|---|
| 7994 | "New Year's Day": [1, 1],
|
|---|
| 7995 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 7996 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 7997 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 7998 | "Independence Day": [7, 4],
|
|---|
| 7999 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8000 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8001 | "Veterans Day": [11, 11],
|
|---|
| 8002 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8003 | "Christmas Day": [12, 25]
|
|---|
| 8004 | }
|
|---|
| 8005 | },
|
|---|
| 8006 | Mississippi: {
|
|---|
| 8007 | PH: {
|
|---|
| 8008 | "New Year's Day": [1, 1],
|
|---|
| 8009 | "Martin Luther King's and Robert E. Lee's Birthdays": ["firstJanuaryMonday", 14],
|
|---|
| 8010 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8011 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8012 | "Independence Day": [7, 4],
|
|---|
| 8013 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8014 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8015 | "Veterans Day": [11, 11],
|
|---|
| 8016 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8017 | "Christmas Day": [12, 25],
|
|---|
| 8018 | "Confederate Memorial Day": ["lastAprilMonday", 0]
|
|---|
| 8019 | }
|
|---|
| 8020 | },
|
|---|
| 8021 | Missouri: {
|
|---|
| 8022 | PH: {
|
|---|
| 8023 | "New Year's Day": [1, 1],
|
|---|
| 8024 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8025 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8026 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8027 | "Independence Day": [7, 4],
|
|---|
| 8028 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8029 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8030 | "Veterans Day": [11, 11],
|
|---|
| 8031 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8032 | "Christmas Day": [12, 25],
|
|---|
| 8033 | "Truman Day": [5, 8]
|
|---|
| 8034 | }
|
|---|
| 8035 | },
|
|---|
| 8036 | Montana: {
|
|---|
| 8037 | PH: {
|
|---|
| 8038 | "New Year's Day": [1, 1],
|
|---|
| 8039 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8040 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8041 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8042 | "Independence Day": [7, 4],
|
|---|
| 8043 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8044 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8045 | "Veterans Day": [11, 11],
|
|---|
| 8046 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8047 | "Christmas Day": [12, 25],
|
|---|
| 8048 | "Election Day": ["firstNovemberMonday", 1],
|
|---|
| 8049 | "Christmas Eve": [12, 24],
|
|---|
| 8050 | "New Year's Eve": [12, 31]
|
|---|
| 8051 | }
|
|---|
| 8052 | },
|
|---|
| 8053 | Nebraska: {
|
|---|
| 8054 | PH: {
|
|---|
| 8055 | "New Year's Day": [1, 1],
|
|---|
| 8056 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8057 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8058 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8059 | "Independence Day": [7, 4],
|
|---|
| 8060 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8061 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8062 | "Veterans Day": [11, 11],
|
|---|
| 8063 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8064 | "Christmas Day": [12, 25],
|
|---|
| 8065 | "Arbor Day": ["lastAprilFriday", 0]
|
|---|
| 8066 | }
|
|---|
| 8067 | },
|
|---|
| 8068 | Nevada: {
|
|---|
| 8069 | PH: {
|
|---|
| 8070 | "New Year's Day": [1, 1],
|
|---|
| 8071 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8072 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8073 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8074 | "Independence Day": [7, 4],
|
|---|
| 8075 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8076 | "Veterans Day": [11, 11],
|
|---|
| 8077 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8078 | "Christmas Day": [12, 25],
|
|---|
| 8079 | "Nevada Day": ["lastOctoberFriday", 0],
|
|---|
| 8080 | "Family Day": ["firstNovemberThursday", 22]
|
|---|
| 8081 | }
|
|---|
| 8082 | },
|
|---|
| 8083 | "New Hampshire": {
|
|---|
| 8084 | PH: {
|
|---|
| 8085 | "New Year's Day": [1, 1],
|
|---|
| 8086 | "Martin Luther King, Jr. Civil Rights Day": ["firstJanuaryMonday", 14],
|
|---|
| 8087 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8088 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8089 | "Independence Day": [7, 4],
|
|---|
| 8090 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8091 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8092 | "Veterans Day": [11, 11],
|
|---|
| 8093 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8094 | "Day after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 8095 | "Christmas Day": [12, 25],
|
|---|
| 8096 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 8097 | }
|
|---|
| 8098 | },
|
|---|
| 8099 | "New Jersey": {
|
|---|
| 8100 | PH: {
|
|---|
| 8101 | "New Year's Day": [1, 1],
|
|---|
| 8102 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8103 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8104 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8105 | "Independence Day": [7, 4],
|
|---|
| 8106 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8107 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8108 | "Veterans Day": [11, 11],
|
|---|
| 8109 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8110 | "Christmas Day": [12, 25],
|
|---|
| 8111 | "Lincoln's Birthday": [2, 12],
|
|---|
| 8112 | "Good Friday": ["easter", -2],
|
|---|
| 8113 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 8114 | }
|
|---|
| 8115 | },
|
|---|
| 8116 | "New Mexico": {
|
|---|
| 8117 | PH: {
|
|---|
| 8118 | "New Year's Day": [1, 1],
|
|---|
| 8119 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8120 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8121 | "Independence Day": [7, 4],
|
|---|
| 8122 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8123 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8124 | "Veterans Day": [11, 11],
|
|---|
| 8125 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8126 | "Day after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 8127 | "Christmas Day": [12, 25]
|
|---|
| 8128 | }
|
|---|
| 8129 | },
|
|---|
| 8130 | "New York": {
|
|---|
| 8131 | PH: {
|
|---|
| 8132 | "New Year's Day": [1, 1],
|
|---|
| 8133 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8134 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8135 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8136 | "Independence Day": [7, 4],
|
|---|
| 8137 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8138 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8139 | "Veterans Day": [11, 11],
|
|---|
| 8140 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8141 | "Christmas Day": [12, 25],
|
|---|
| 8142 | "Lincoln's Birthday": [2, 12],
|
|---|
| 8143 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 8144 | }
|
|---|
| 8145 | },
|
|---|
| 8146 | "North Carolina": {
|
|---|
| 8147 | PH: {
|
|---|
| 8148 | "New Year's Day": [1, 1],
|
|---|
| 8149 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8150 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8151 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8152 | "Independence Day": [7, 4],
|
|---|
| 8153 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8154 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8155 | "Veterans Day": [11, 11],
|
|---|
| 8156 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8157 | "Day after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 8158 | "Christmas Eve": [12, 24],
|
|---|
| 8159 | "Christmas Day": [12, 25],
|
|---|
| 8160 | "Day after Christmas": [12, 26],
|
|---|
| 8161 | "Good Friday": ["easter", -2]
|
|---|
| 8162 | }
|
|---|
| 8163 | },
|
|---|
| 8164 | "North Dakota": {
|
|---|
| 8165 | PH: {
|
|---|
| 8166 | "New Year's Day": [1, 1],
|
|---|
| 8167 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8168 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8169 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8170 | "Independence Day": [7, 4],
|
|---|
| 8171 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8172 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8173 | "Veterans Day": [11, 11],
|
|---|
| 8174 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8175 | "Christmas Day": [12, 25]
|
|---|
| 8176 | }
|
|---|
| 8177 | },
|
|---|
| 8178 | Ohio: {
|
|---|
| 8179 | PH: {
|
|---|
| 8180 | "New Year's Day": [1, 1],
|
|---|
| 8181 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8182 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8183 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8184 | "Independence Day": [7, 4],
|
|---|
| 8185 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8186 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8187 | "Veterans Day": [11, 11],
|
|---|
| 8188 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8189 | "Christmas Day": [12, 25]
|
|---|
| 8190 | }
|
|---|
| 8191 | },
|
|---|
| 8192 | Oklahoma: {
|
|---|
| 8193 | PH: {
|
|---|
| 8194 | "New Year's Day": [1, 1],
|
|---|
| 8195 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8196 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8197 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8198 | "Independence Day": [7, 4],
|
|---|
| 8199 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8200 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8201 | "Veterans Day": [11, 11],
|
|---|
| 8202 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8203 | "Day after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 8204 | "Christmas Day": [12, 25]
|
|---|
| 8205 | }
|
|---|
| 8206 | },
|
|---|
| 8207 | Oregon: {
|
|---|
| 8208 | PH: {
|
|---|
| 8209 | "New Year's Day": [1, 1],
|
|---|
| 8210 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8211 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8212 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8213 | "Independence Day": [7, 4],
|
|---|
| 8214 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8215 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8216 | "Veterans Day": [11, 11],
|
|---|
| 8217 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8218 | "Christmas Day": [12, 25]
|
|---|
| 8219 | }
|
|---|
| 8220 | },
|
|---|
| 8221 | Pennsylvania: {
|
|---|
| 8222 | PH: {
|
|---|
| 8223 | "New Year's Day": [1, 1],
|
|---|
| 8224 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8225 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8226 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8227 | "Independence Day": [7, 4],
|
|---|
| 8228 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8229 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8230 | "Veterans Day": [11, 11],
|
|---|
| 8231 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8232 | "Christmas Day": [12, 25],
|
|---|
| 8233 | "Flag Day": [6, 14]
|
|---|
| 8234 | }
|
|---|
| 8235 | },
|
|---|
| 8236 | "Puerto Rico": {
|
|---|
| 8237 | PH: {
|
|---|
| 8238 | "Día de Año Nuevo": [1, 1],
|
|---|
| 8239 | "Día de Reyes": [1, 6],
|
|---|
| 8240 | "Natalicio de Eugenio María de Hostos": ["firstJanuaryMonday", 7],
|
|---|
| 8241 | "Natalicio de Martin Luther King, Jr.": ["firstJanuaryMonday", 14],
|
|---|
| 8242 | "Día de los Presidentes": ["firstFebruaryMonday", 14],
|
|---|
| 8243 | "Día de la Abolición de Esclavitud": [3, 22],
|
|---|
| 8244 | "Viernes Santo": ["easter", -2],
|
|---|
| 8245 | "Natalicio de José de Diego": ["firstAprilMonday", 14],
|
|---|
| 8246 | "Recordación de los Muertos de la Guerra": ["lastMayMonday", 0],
|
|---|
| 8247 | "Día de la Independencia": [7, 4],
|
|---|
| 8248 | "Constitución de Puerto Rico": [7, 25],
|
|---|
| 8249 | "Natalicio de Dr. José Celso Barbosa": [7, 27],
|
|---|
| 8250 | "Día del Trabajo": ["firstSeptemberMonday", 0],
|
|---|
| 8251 | "Día de la Raza Descubrimiento de América": ["firstOctoberMonday", 7],
|
|---|
| 8252 | "Día del Veterano": [11, 11],
|
|---|
| 8253 | "Día del Descubrimiento de Puerto Rico": [11, 19],
|
|---|
| 8254 | "Día de Acción de Gracias": ["firstNovemberThursday", 21],
|
|---|
| 8255 | "Noche Buena": [12, 24],
|
|---|
| 8256 | "Día de Navidad": [12, 25]
|
|---|
| 8257 | }
|
|---|
| 8258 | },
|
|---|
| 8259 | "Rhode Island": {
|
|---|
| 8260 | PH: {
|
|---|
| 8261 | "New Year's Day": [1, 1],
|
|---|
| 8262 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8263 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8264 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8265 | "Independence Day": [7, 4],
|
|---|
| 8266 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8267 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8268 | "Veterans Day": [11, 11],
|
|---|
| 8269 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8270 | "Christmas Day": [12, 25],
|
|---|
| 8271 | "Victory Day": ["firstAugustMonday", 7]
|
|---|
| 8272 | }
|
|---|
| 8273 | },
|
|---|
| 8274 | "South Carolina": {
|
|---|
| 8275 | PH: {
|
|---|
| 8276 | "New Year's Day": [1, 1],
|
|---|
| 8277 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8278 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8279 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8280 | "Independence Day": [7, 4],
|
|---|
| 8281 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8282 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8283 | "Veterans Day": [11, 11],
|
|---|
| 8284 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8285 | "Christmas Day": [12, 25],
|
|---|
| 8286 | "Confederate Memorial Day": [5, 10]
|
|---|
| 8287 | }
|
|---|
| 8288 | },
|
|---|
| 8289 | "South Dakota": {
|
|---|
| 8290 | PH: {
|
|---|
| 8291 | "New Year's Day": [1, 1],
|
|---|
| 8292 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8293 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8294 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8295 | "Independence Day": [7, 4],
|
|---|
| 8296 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8297 | "Native American Day": ["firstOctoberMonday", 7],
|
|---|
| 8298 | "Veterans Day": [11, 11],
|
|---|
| 8299 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8300 | "Christmas Day": [12, 25]
|
|---|
| 8301 | }
|
|---|
| 8302 | },
|
|---|
| 8303 | Tennessee: {
|
|---|
| 8304 | PH: {
|
|---|
| 8305 | "New Year's Day": [1, 1],
|
|---|
| 8306 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8307 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8308 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8309 | "Independence Day": [7, 4],
|
|---|
| 8310 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8311 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8312 | "Veterans Day": [11, 11],
|
|---|
| 8313 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8314 | "Christmas Eve": [12, 24],
|
|---|
| 8315 | "Christmas Day": [12, 25],
|
|---|
| 8316 | "Good Friday": ["easter", -2]
|
|---|
| 8317 | }
|
|---|
| 8318 | },
|
|---|
| 8319 | Texas: {
|
|---|
| 8320 | PH: {
|
|---|
| 8321 | "New Year's Day": [1, 1],
|
|---|
| 8322 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8323 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8324 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8325 | "Independence Day": [7, 4],
|
|---|
| 8326 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8327 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8328 | "Veterans Day": [11, 11],
|
|---|
| 8329 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8330 | "Friday after Thanksgiving": ["firstNovemberThursday", 22],
|
|---|
| 8331 | "Christmas Eve": [12, 24],
|
|---|
| 8332 | "Christmas Day": [12, 25],
|
|---|
| 8333 | "Day after Christmas": [12, 26]
|
|---|
| 8334 | }
|
|---|
| 8335 | },
|
|---|
| 8336 | "United States Virgin Islands": {
|
|---|
| 8337 | PH: {
|
|---|
| 8338 | "New Year's Day": [1, 1],
|
|---|
| 8339 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8340 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8341 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8342 | "Independence Day": [7, 4],
|
|---|
| 8343 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8344 | "Virgin Islands-Puerto Rico Friendship Day": ["firstOctoberMonday", 7],
|
|---|
| 8345 | "Veterans Day": [11, 11],
|
|---|
| 8346 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8347 | "Christmas Day": [12, 25],
|
|---|
| 8348 | "Three Kings Day": [1, 6],
|
|---|
| 8349 | "Transfer Day": [3, 31],
|
|---|
| 8350 | "Holy Thursday": ["easter", -3],
|
|---|
| 8351 | "Good Friday": ["easter", -2],
|
|---|
| 8352 | "Easter Monday": ["easter", 1],
|
|---|
| 8353 | "Emancipation Day": [7, 3],
|
|---|
| 8354 | "Hurricane Supplication Day": ["firstJulyMonday", 21],
|
|---|
| 8355 | "Hurricane Thanksgiving": [10, 25],
|
|---|
| 8356 | "Liberty Day": [11, 1],
|
|---|
| 8357 | "Christmas Second Day": [12, 26],
|
|---|
| 8358 | "New Year's Eve": [12, 31]
|
|---|
| 8359 | }
|
|---|
| 8360 | },
|
|---|
| 8361 | Utah: {
|
|---|
| 8362 | PH: {
|
|---|
| 8363 | "New Year's Day": [1, 1],
|
|---|
| 8364 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8365 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8366 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8367 | "Independence Day": [7, 4],
|
|---|
| 8368 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8369 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8370 | "Veterans Day": [11, 11],
|
|---|
| 8371 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8372 | "Christmas Day": [12, 25],
|
|---|
| 8373 | "Pioneer Day": [7, 24]
|
|---|
| 8374 | }
|
|---|
| 8375 | },
|
|---|
| 8376 | Vermont: {
|
|---|
| 8377 | PH: {
|
|---|
| 8378 | "New Year's Day": [1, 1],
|
|---|
| 8379 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8380 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8381 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8382 | "Independence Day": [7, 4],
|
|---|
| 8383 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8384 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8385 | "Veterans Day": [11, 11],
|
|---|
| 8386 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8387 | "Christmas Day": [12, 25],
|
|---|
| 8388 | "Town Meeting Day": ["firstMarchTuesday", 0],
|
|---|
| 8389 | "Battle of Bennington": ["firstAugustMonday", 14]
|
|---|
| 8390 | }
|
|---|
| 8391 | },
|
|---|
| 8392 | Virginia: {
|
|---|
| 8393 | PH: {
|
|---|
| 8394 | "New Year's Day": [1, 1],
|
|---|
| 8395 | "Lee-Jackson Day": ["firstJanuaryMonday", 11],
|
|---|
| 8396 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8397 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8398 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8399 | "Independence Day": [7, 4],
|
|---|
| 8400 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8401 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8402 | "Veterans Day": [11, 11],
|
|---|
| 8403 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8404 | "Christmas Day": [12, 25]
|
|---|
| 8405 | }
|
|---|
| 8406 | },
|
|---|
| 8407 | Washington: {
|
|---|
| 8408 | PH: {
|
|---|
| 8409 | "New Year's Day": [1, 1],
|
|---|
| 8410 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8411 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8412 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8413 | "Independence Day": [7, 4],
|
|---|
| 8414 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8415 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8416 | "Veterans Day": [11, 11],
|
|---|
| 8417 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8418 | "Christmas Day": [12, 25]
|
|---|
| 8419 | }
|
|---|
| 8420 | },
|
|---|
| 8421 | "West Virginia": {
|
|---|
| 8422 | PH: {
|
|---|
| 8423 | "New Year's Day": [1, 1],
|
|---|
| 8424 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8425 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8426 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8427 | "Independence Day": [7, 4],
|
|---|
| 8428 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8429 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8430 | "Veterans Day": [11, 11],
|
|---|
| 8431 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8432 | "Christmas Day": [12, 25],
|
|---|
| 8433 | "West Virginia Day": [6, 20],
|
|---|
| 8434 | "Lincoln's Day": ["firstNovemberThursday", 22]
|
|---|
| 8435 | }
|
|---|
| 8436 | },
|
|---|
| 8437 | Wisconsin: {
|
|---|
| 8438 | PH: {
|
|---|
| 8439 | "New Year's Day": [1, 1],
|
|---|
| 8440 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8441 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8442 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8443 | "Independence Day": [7, 4],
|
|---|
| 8444 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8445 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8446 | "Veterans Day": [11, 11],
|
|---|
| 8447 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8448 | "Christmas Day": [12, 25],
|
|---|
| 8449 | "Primary Election Day": ["firstAugustTuesday", 7],
|
|---|
| 8450 | "Election Day": ["firstNovemberMonday", 1]
|
|---|
| 8451 | }
|
|---|
| 8452 | },
|
|---|
| 8453 | Wyoming: {
|
|---|
| 8454 | PH: {
|
|---|
| 8455 | "New Year's Day": [1, 1],
|
|---|
| 8456 | "Martin Luther King, Jr. Day": ["firstJanuaryMonday", 14],
|
|---|
| 8457 | "Washington's Birthday": ["firstFebruaryMonday", 14],
|
|---|
| 8458 | "Memorial Day": ["lastMayMonday", 0],
|
|---|
| 8459 | "Independence Day": [7, 4],
|
|---|
| 8460 | "Labor Day": ["firstSeptemberMonday", 0],
|
|---|
| 8461 | "Columbus Day": ["firstOctoberMonday", 7],
|
|---|
| 8462 | "Veterans Day": [11, 11],
|
|---|
| 8463 | Thanksgiving: ["firstNovemberThursday", 21],
|
|---|
| 8464 | "Christmas Day": [12, 25]
|
|---|
| 8465 | }
|
|---|
| 8466 | }
|
|---|
| 8467 | },
|
|---|
| 8468 | si: {
|
|---|
| 8469 | PH: {
|
|---|
| 8470 | "novo leto": [1, 1],
|
|---|
| 8471 | "Prešernov dan, slovenski kulturni praznik": [2, 8],
|
|---|
| 8472 | "velikonočna nedelja": ["easter", 0],
|
|---|
| 8473 | "velikonočni ponedeljek": ["easter", 1],
|
|---|
| 8474 | "dan upora proti okupatorju": [4, 27],
|
|---|
| 8475 | "praznik dela 1": [5, 1],
|
|---|
| 8476 | "praznik dela 2": [5, 2],
|
|---|
| 8477 | "binkoštna nedelja - binkošti": ["easter", 49],
|
|---|
| 8478 | "dan državnosti": [6, 25],
|
|---|
| 8479 | "Marijino vnebovzetje": [8, 15],
|
|---|
| 8480 | "dan reformacije": [10, 31],
|
|---|
| 8481 | "dan spomina na mrtve": [11, 1],
|
|---|
| 8482 | "božič": [12, 25],
|
|---|
| 8483 | "dan samostojnosti in enotnosti": [12, 26]
|
|---|
| 8484 | }
|
|---|
| 8485 | },
|
|---|
| 8486 | it: {
|
|---|
| 8487 | PH: {
|
|---|
| 8488 | Capodanno: [1, 1],
|
|---|
| 8489 | Epifania: [1, 6],
|
|---|
| 8490 | "Liberazione dal nazifascismo (1945)": [4, 25],
|
|---|
| 8491 | Pasqua: ["easter", 0],
|
|---|
| 8492 | "Lunedì di Pasqua": ["easter", 1],
|
|---|
| 8493 | "Festa del lavoro": [5, 1],
|
|---|
| 8494 | "Festa della Repubblica": [6, 2],
|
|---|
| 8495 | "Assunzione di Maria": [8, 15],
|
|---|
| 8496 | Ognissanti: [11, 1],
|
|---|
| 8497 | "Festa dell’unità nazionale": ["firstSeptemberSunday", 0],
|
|---|
| 8498 | "Immacolata Concezione": [12, 8],
|
|---|
| 8499 | "Natale di Gesù": [12, 25],
|
|---|
| 8500 | "Santo Stefano": [12, 26]
|
|---|
| 8501 | }
|
|---|
| 8502 | },
|
|---|
| 8503 | cz: {
|
|---|
| 8504 | PH: {
|
|---|
| 8505 | "Den obnovy samostatného českého státu": [1, 1],
|
|---|
| 8506 | "Velký pátek": ["easter", -2],
|
|---|
| 8507 | "Velikonoční pondělí": ["easter", 1],
|
|---|
| 8508 | "Svátek práce": [5, 1],
|
|---|
| 8509 | "Den vítězství": [5, 8],
|
|---|
| 8510 | "Den slovanských věrozvěstů Cyrila a Metoděje": [7, 5],
|
|---|
| 8511 | "Den upálení mistra Jana Husa": [7, 6],
|
|---|
| 8512 | "Den české státnosti": [9, 28],
|
|---|
| 8513 | "Den vzniku samostatného československého státu": [10, 28],
|
|---|
| 8514 | "Den boje za svobodu a demokracii": [11, 17],
|
|---|
| 8515 | "Štědrý den": [12, 24],
|
|---|
| 8516 | "1. svátek vánoční": [12, 25],
|
|---|
| 8517 | "2. svátek vánoční": [12, 26]
|
|---|
| 8518 | }
|
|---|
| 8519 | },
|
|---|
| 8520 | ro: {
|
|---|
| 8521 | PH: {
|
|---|
| 8522 | "Anul Nou": [1, 1],
|
|---|
| 8523 | "A doua zi de Anul Nou": [1, 2],
|
|---|
| 8524 | "Ziua Unirii Principatelor Române (Ziua Unirii)": [1, 24],
|
|---|
| 8525 | "Paștele ortodox": ["orthodox easter", 0],
|
|---|
| 8526 | "A doua zi de Paște ortodox": ["orthodox easter", 1],
|
|---|
| 8527 | "Ziua Muncii": [5, 1],
|
|---|
| 8528 | Rusaliile: ["orthodox easter", 50],
|
|---|
| 8529 | "A doua zi de Rusalii": ["orthodox easter", 51],
|
|---|
| 8530 | "Adormirea Maicii Domnului": [8, 15],
|
|---|
| 8531 | "Sfântul Apostol Andrei": [11, 30],
|
|---|
| 8532 | "Ziua Națională (Ziua Marii Uniri)": [12, 1],
|
|---|
| 8533 | "Crăciunul": [12, 25],
|
|---|
| 8534 | "A doua zi de Crăciun": [12, 26]
|
|---|
| 8535 | },
|
|---|
| 8536 | SH: [{
|
|---|
| 8537 | name: "Vacanţa intersemestrială",
|
|---|
| 8538 | 2018: [1, 31, 2, 8],
|
|---|
| 8539 | 2019: [1, 30, 2, 7]
|
|---|
| 8540 | }, {
|
|---|
| 8541 | name: "Vacanța de primăvară",
|
|---|
| 8542 | 2018: [4, 11, 4, 19],
|
|---|
| 8543 | 2019: [4, 23, 5, 3]
|
|---|
| 8544 | }, {
|
|---|
| 8545 | name: "Vacanța de vară",
|
|---|
| 8546 | 2018: [6, 20, 9, 13],
|
|---|
| 8547 | 2019: [6, 18, 9, 4]
|
|---|
| 8548 | }, {
|
|---|
| 8549 | name: "Vacanța de iarnă",
|
|---|
| 8550 | 2014: [12, 20, 1, 4],
|
|---|
| 8551 | 2018: [12, 19, 1, 3]
|
|---|
| 8552 | }]
|
|---|
| 8553 | },
|
|---|
| 8554 | se: {
|
|---|
| 8555 | PH: {
|
|---|
| 8556 | "nyårsdagen": [1, 1],
|
|---|
| 8557 | "trettondedag jul": [1, 6],
|
|---|
| 8558 | "långfredagen": ["easter", -2],
|
|---|
| 8559 | "påskdagen": ["easter", 0],
|
|---|
| 8560 | "annandag påsk": ["easter", 1],
|
|---|
| 8561 | "första maj": [5, 1],
|
|---|
| 8562 | pingstdagen: ["easter", 49],
|
|---|
| 8563 | nationaldagen: [6, 6],
|
|---|
| 8564 | midsommardagen: ["nextSaturday20Jun", 0],
|
|---|
| 8565 | "alla helgons dag": ["nextSaturday31Oct", 0],
|
|---|
| 8566 | juldagen: [12, 25],
|
|---|
| 8567 | "annandag jul": [12, 26]
|
|---|
| 8568 | }
|
|---|
| 8569 | },
|
|---|
| 8570 | br: {
|
|---|
| 8571 | PH: {
|
|---|
| 8572 | "Ano Novo": [1, 1],
|
|---|
| 8573 | Carnaval: ["easter", -47],
|
|---|
| 8574 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8575 | Tiradentes: [4, 21],
|
|---|
| 8576 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8577 | "Corpus Christi": ["easter", 60],
|
|---|
| 8578 | "Independência": [9, 7],
|
|---|
| 8579 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8580 | Finados: [11, 2],
|
|---|
| 8581 | "Proclamação da República": [11, 15],
|
|---|
| 8582 | Natal: [12, 25]
|
|---|
| 8583 | },
|
|---|
| 8584 | Acre: {
|
|---|
| 8585 | PH: {
|
|---|
| 8586 | "Ano Novo": [1, 1],
|
|---|
| 8587 | "Dia do evangélico": [1, 23],
|
|---|
| 8588 | Carnaval: ["easter", -47],
|
|---|
| 8589 | "Alusivo ao Dia Internacional da Mulher": [3, 8],
|
|---|
| 8590 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8591 | Tiradentes: [4, 21],
|
|---|
| 8592 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8593 | "Corpus Christi": ["easter", 60],
|
|---|
| 8594 | "Aniversário do estado": [6, 15],
|
|---|
| 8595 | "Dia da Amazônia": [9, 5],
|
|---|
| 8596 | "Independência": [9, 7],
|
|---|
| 8597 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8598 | Finados: [11, 2],
|
|---|
| 8599 | "Proclamação da República": [11, 15],
|
|---|
| 8600 | "Assinatura do Tratado de Petrópolis": [11, 17],
|
|---|
| 8601 | Natal: [12, 25]
|
|---|
| 8602 | }
|
|---|
| 8603 | },
|
|---|
| 8604 | Alagoas: {
|
|---|
| 8605 | PH: {
|
|---|
| 8606 | "Ano Novo": [1, 1],
|
|---|
| 8607 | Carnaval: ["easter", -47],
|
|---|
| 8608 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8609 | Tiradentes: [4, 21],
|
|---|
| 8610 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8611 | "Corpus Christi": ["easter", 60],
|
|---|
| 8612 | "São João": [6, 24],
|
|---|
| 8613 | "São Pedro": [6, 29],
|
|---|
| 8614 | "Independência": [9, 7],
|
|---|
| 8615 | "Emancipação política": [9, 16],
|
|---|
| 8616 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8617 | Finados: [11, 2],
|
|---|
| 8618 | "Proclamação da República": [11, 15],
|
|---|
| 8619 | "Morte de Zumbi dos Palmares": [11, 20],
|
|---|
| 8620 | Natal: [12, 25]
|
|---|
| 8621 | }
|
|---|
| 8622 | },
|
|---|
| 8623 | "Amapá": {
|
|---|
| 8624 | PH: {
|
|---|
| 8625 | "Ano Novo": [1, 1],
|
|---|
| 8626 | Carnaval: ["easter", -47],
|
|---|
| 8627 | "Dia de São José": [3, 19],
|
|---|
| 8628 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8629 | Tiradentes: [4, 21],
|
|---|
| 8630 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8631 | "Corpus Christi": ["easter", 60],
|
|---|
| 8632 | "Independência": [9, 7],
|
|---|
| 8633 | "Data Magna do estado": [9, 13],
|
|---|
| 8634 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8635 | Finados: [11, 2],
|
|---|
| 8636 | "Proclamação da República": [11, 15],
|
|---|
| 8637 | Natal: [12, 25]
|
|---|
| 8638 | }
|
|---|
| 8639 | },
|
|---|
| 8640 | Amazonas: {
|
|---|
| 8641 | PH: {
|
|---|
| 8642 | "Ano Novo": [1, 1],
|
|---|
| 8643 | Carnaval: ["easter", -47],
|
|---|
| 8644 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8645 | Tiradentes: [4, 21],
|
|---|
| 8646 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8647 | "Corpus Christi": ["easter", 60],
|
|---|
| 8648 | "Data Magna do estado": [9, 5],
|
|---|
| 8649 | "Independência": [9, 7],
|
|---|
| 8650 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8651 | Finados: [11, 2],
|
|---|
| 8652 | "Proclamação da República": [11, 15],
|
|---|
| 8653 | "Dia da Consciência Negra": [11, 20],
|
|---|
| 8654 | Natal: [12, 25]
|
|---|
| 8655 | }
|
|---|
| 8656 | },
|
|---|
| 8657 | Bahia: {
|
|---|
| 8658 | PH: {
|
|---|
| 8659 | "Ano Novo": [1, 1],
|
|---|
| 8660 | Carnaval: ["easter", -47],
|
|---|
| 8661 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8662 | Tiradentes: [4, 21],
|
|---|
| 8663 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8664 | "Corpus Christi": ["easter", 60],
|
|---|
| 8665 | "Data magna do estado": [2, 7],
|
|---|
| 8666 | "Independência": [9, 7],
|
|---|
| 8667 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8668 | Finados: [11, 2],
|
|---|
| 8669 | "Proclamação da República": [11, 15],
|
|---|
| 8670 | Natal: [12, 25]
|
|---|
| 8671 | }
|
|---|
| 8672 | },
|
|---|
| 8673 | "Ceará": {
|
|---|
| 8674 | PH: {
|
|---|
| 8675 | "Ano Novo": [1, 1],
|
|---|
| 8676 | Carnaval: ["easter", -47],
|
|---|
| 8677 | "Data magna do estado": [3, 25],
|
|---|
| 8678 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8679 | Tiradentes: [4, 21],
|
|---|
| 8680 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8681 | "Corpus Christi": ["easter", 60],
|
|---|
| 8682 | "Independência": [9, 7],
|
|---|
| 8683 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8684 | Finados: [11, 2],
|
|---|
| 8685 | "Proclamação da República": [11, 15],
|
|---|
| 8686 | Natal: [12, 25]
|
|---|
| 8687 | }
|
|---|
| 8688 | },
|
|---|
| 8689 | "Distrito Federal": {
|
|---|
| 8690 | PH: {
|
|---|
| 8691 | "Ano Novo": [1, 1],
|
|---|
| 8692 | Carnaval: ["easter", -47],
|
|---|
| 8693 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8694 | Tiradentes: [4, 21],
|
|---|
| 8695 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8696 | "Corpus Christi": ["easter", 60],
|
|---|
| 8697 | "Independência": [9, 7],
|
|---|
| 8698 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8699 | Finados: [11, 2],
|
|---|
| 8700 | "Proclamação da República": [11, 15],
|
|---|
| 8701 | "Dia do evangélico": [11, 30],
|
|---|
| 8702 | Natal: [12, 25]
|
|---|
| 8703 | }
|
|---|
| 8704 | },
|
|---|
| 8705 | "Espírito Santo": {
|
|---|
| 8706 | PH: {
|
|---|
| 8707 | "Ano Novo": [1, 1],
|
|---|
| 8708 | Carnaval: ["easter", -47],
|
|---|
| 8709 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8710 | Tiradentes: [4, 21],
|
|---|
| 8711 | "Data magna do estado": [4, 21],
|
|---|
| 8712 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8713 | "Corpus Christi": ["easter", 60],
|
|---|
| 8714 | "Independência": [9, 7],
|
|---|
| 8715 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8716 | Finados: [11, 2],
|
|---|
| 8717 | "Proclamação da República": [11, 15],
|
|---|
| 8718 | Natal: [12, 25]
|
|---|
| 8719 | }
|
|---|
| 8720 | },
|
|---|
| 8721 | "Goiás": {
|
|---|
| 8722 | PH: {
|
|---|
| 8723 | "Ano Novo": [1, 1],
|
|---|
| 8724 | Carnaval: ["easter", -47],
|
|---|
| 8725 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8726 | Tiradentes: [4, 21],
|
|---|
| 8727 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8728 | "Corpus Christi": ["easter", 60],
|
|---|
| 8729 | "Independência": [9, 7],
|
|---|
| 8730 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8731 | Finados: [11, 2],
|
|---|
| 8732 | "Proclamação da República": [11, 15],
|
|---|
| 8733 | Natal: [12, 25]
|
|---|
| 8734 | }
|
|---|
| 8735 | },
|
|---|
| 8736 | "Maranhão": {
|
|---|
| 8737 | PH: {
|
|---|
| 8738 | "Ano Novo": [1, 1],
|
|---|
| 8739 | Carnaval: ["easter", -47],
|
|---|
| 8740 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8741 | Tiradentes: [4, 21],
|
|---|
| 8742 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8743 | "Corpus Christi": ["easter", 60],
|
|---|
| 8744 | "Data magna do estado": [7, 28],
|
|---|
| 8745 | "Independência": [9, 7],
|
|---|
| 8746 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8747 | Finados: [11, 2],
|
|---|
| 8748 | "Proclamação da República": [11, 15],
|
|---|
| 8749 | Natal: [12, 25]
|
|---|
| 8750 | }
|
|---|
| 8751 | },
|
|---|
| 8752 | "Mato Grosso": {
|
|---|
| 8753 | _nominatim_url: "https://nominatim.openstreetmap.org/reverse?format=json&lat=-10.4276788&lon=-52.0892082&zoom=18&addressdetails=1&accept-language=pt,en",
|
|---|
| 8754 | PH: {
|
|---|
| 8755 | "Ano Novo": [1, 1],
|
|---|
| 8756 | Carnaval: ["easter", -47],
|
|---|
| 8757 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8758 | Tiradentes: [4, 21],
|
|---|
| 8759 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8760 | "Corpus Christi": ["easter", 60],
|
|---|
| 8761 | "Independência": [9, 7],
|
|---|
| 8762 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8763 | Finados: [11, 2],
|
|---|
| 8764 | "Proclamação da República": [11, 15],
|
|---|
| 8765 | "Dia da Consciência Negra": [11, 20],
|
|---|
| 8766 | Natal: [12, 25]
|
|---|
| 8767 | }
|
|---|
| 8768 | },
|
|---|
| 8769 | "Mato Grosso do Sul": {
|
|---|
| 8770 | PH: {
|
|---|
| 8771 | "Ano Novo": [1, 1],
|
|---|
| 8772 | Carnaval: ["easter", -47],
|
|---|
| 8773 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8774 | Tiradentes: [4, 21],
|
|---|
| 8775 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8776 | "Corpus Christi": ["easter", 60],
|
|---|
| 8777 | "Independência": [9, 7],
|
|---|
| 8778 | "Criação do estado": [10, 11],
|
|---|
| 8779 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8780 | Finados: [11, 2],
|
|---|
| 8781 | "Proclamação da República": [11, 15],
|
|---|
| 8782 | Natal: [12, 25]
|
|---|
| 8783 | }
|
|---|
| 8784 | },
|
|---|
| 8785 | "Minas Gerais": {
|
|---|
| 8786 | PH: {
|
|---|
| 8787 | "Ano Novo": [1, 1],
|
|---|
| 8788 | Carnaval: ["easter", -47],
|
|---|
| 8789 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8790 | Tiradentes: [4, 21],
|
|---|
| 8791 | "Data magna do estado": [4, 21],
|
|---|
| 8792 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8793 | "Corpus Christi": ["easter", 60],
|
|---|
| 8794 | "Independência": [9, 7],
|
|---|
| 8795 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8796 | Finados: [11, 2],
|
|---|
| 8797 | "Proclamação da República": [11, 15],
|
|---|
| 8798 | Natal: [12, 25]
|
|---|
| 8799 | }
|
|---|
| 8800 | },
|
|---|
| 8801 | "Pará": {
|
|---|
| 8802 | PH: {
|
|---|
| 8803 | "Ano Novo": [1, 1],
|
|---|
| 8804 | Carnaval: ["easter", -47],
|
|---|
| 8805 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8806 | Tiradentes: [4, 21],
|
|---|
| 8807 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8808 | "Corpus Christi": ["easter", 60],
|
|---|
| 8809 | "Data magna do estado": [8, 15],
|
|---|
| 8810 | "Independência": [9, 7],
|
|---|
| 8811 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8812 | Finados: [11, 2],
|
|---|
| 8813 | "Proclamação da República": [11, 15],
|
|---|
| 8814 | Natal: [12, 25]
|
|---|
| 8815 | }
|
|---|
| 8816 | },
|
|---|
| 8817 | "Paraíba": {
|
|---|
| 8818 | PH: {
|
|---|
| 8819 | "Ano Novo": [1, 1],
|
|---|
| 8820 | Carnaval: ["easter", -47],
|
|---|
| 8821 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8822 | Tiradentes: [4, 21],
|
|---|
| 8823 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8824 | "Corpus Christi": ["easter", 60],
|
|---|
| 8825 | "Homenagem a João Pessoa": [7, 26],
|
|---|
| 8826 | "Data magna do estado": [8, 5],
|
|---|
| 8827 | "Independência": [9, 7],
|
|---|
| 8828 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8829 | Finados: [11, 2],
|
|---|
| 8830 | "Proclamação da República": [11, 15],
|
|---|
| 8831 | Natal: [12, 25]
|
|---|
| 8832 | }
|
|---|
| 8833 | },
|
|---|
| 8834 | "Paraná": {
|
|---|
| 8835 | PH: {
|
|---|
| 8836 | "Ano Novo": [1, 1],
|
|---|
| 8837 | Carnaval: ["easter", -47],
|
|---|
| 8838 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8839 | Tiradentes: [4, 21],
|
|---|
| 8840 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8841 | "Corpus Christi": ["easter", 60],
|
|---|
| 8842 | "Independência": [9, 7],
|
|---|
| 8843 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8844 | Finados: [11, 2],
|
|---|
| 8845 | "Proclamação da República": [11, 15],
|
|---|
| 8846 | "Data magna do estado": [12, 19],
|
|---|
| 8847 | Natal: [12, 25]
|
|---|
| 8848 | }
|
|---|
| 8849 | },
|
|---|
| 8850 | Pernambuco: {
|
|---|
| 8851 | PH: {
|
|---|
| 8852 | "Ano Novo": [1, 1],
|
|---|
| 8853 | Carnaval: ["easter", -47],
|
|---|
| 8854 | "Data magna do estado": ["firstMarchSunday"],
|
|---|
| 8855 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8856 | Tiradentes: [4, 21],
|
|---|
| 8857 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8858 | "Corpus Christi": ["easter", 60],
|
|---|
| 8859 | "Independência": [9, 7],
|
|---|
| 8860 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8861 | Finados: [11, 2],
|
|---|
| 8862 | "Proclamação da República": [11, 15],
|
|---|
| 8863 | Natal: [12, 25]
|
|---|
| 8864 | }
|
|---|
| 8865 | },
|
|---|
| 8866 | "Piauí": {
|
|---|
| 8867 | PH: {
|
|---|
| 8868 | "Ano Novo": [1, 1],
|
|---|
| 8869 | Carnaval: ["easter", -47],
|
|---|
| 8870 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8871 | Tiradentes: [4, 21],
|
|---|
| 8872 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8873 | "Corpus Christi": ["easter", 60],
|
|---|
| 8874 | "Independência": [9, 7],
|
|---|
| 8875 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8876 | "Data magna do estado": [10, 19],
|
|---|
| 8877 | Finados: [11, 2],
|
|---|
| 8878 | "Proclamação da República": [11, 15],
|
|---|
| 8879 | Natal: [12, 25]
|
|---|
| 8880 | }
|
|---|
| 8881 | },
|
|---|
| 8882 | "Rio de Janeiro": {
|
|---|
| 8883 | PH: {
|
|---|
| 8884 | "Ano Novo": [1, 1],
|
|---|
| 8885 | Carnaval: ["easter", -47],
|
|---|
| 8886 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8887 | Tiradentes: [4, 21],
|
|---|
| 8888 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8889 | "Corpus Christi": ["easter", 60],
|
|---|
| 8890 | "Independência": [9, 7],
|
|---|
| 8891 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8892 | Finados: [11, 2],
|
|---|
| 8893 | "Proclamação da República": [11, 15],
|
|---|
| 8894 | "Dia da Consciência Negra": [11, 20],
|
|---|
| 8895 | Natal: [12, 25]
|
|---|
| 8896 | }
|
|---|
| 8897 | },
|
|---|
| 8898 | "Rio Grande do Norte": {
|
|---|
| 8899 | PH: {
|
|---|
| 8900 | "Ano Novo": [1, 1],
|
|---|
| 8901 | Carnaval: ["easter", -47],
|
|---|
| 8902 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8903 | Tiradentes: [4, 21],
|
|---|
| 8904 | "São Jorge": [4, 23],
|
|---|
| 8905 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8906 | "Corpus Christi": ["easter", 60],
|
|---|
| 8907 | "Independência": [9, 7],
|
|---|
| 8908 | "Mártires de Cunhaú e Uruaçu": [10, 3],
|
|---|
| 8909 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8910 | Finados: [11, 2],
|
|---|
| 8911 | "Proclamação da República": [11, 15],
|
|---|
| 8912 | Natal: [12, 25]
|
|---|
| 8913 | }
|
|---|
| 8914 | },
|
|---|
| 8915 | "Rio Grande do Sul": {
|
|---|
| 8916 | PH: {
|
|---|
| 8917 | "Ano Novo": [1, 1],
|
|---|
| 8918 | Carnaval: ["easter", -47],
|
|---|
| 8919 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8920 | Tiradentes: [4, 21],
|
|---|
| 8921 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8922 | "Corpus Christi": ["easter", 60],
|
|---|
| 8923 | "Independência": [9, 7],
|
|---|
| 8924 | "Proclamação da República Rio-Grandense": [9, 20],
|
|---|
| 8925 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8926 | Finados: [11, 2],
|
|---|
| 8927 | "Proclamação da República": [11, 15],
|
|---|
| 8928 | Natal: [12, 25]
|
|---|
| 8929 | }
|
|---|
| 8930 | },
|
|---|
| 8931 | "Rondônia": {
|
|---|
| 8932 | PH: {
|
|---|
| 8933 | "Ano Novo": [1, 1],
|
|---|
| 8934 | "Data magna do estado": [1, 4],
|
|---|
| 8935 | Carnaval: ["easter", -47],
|
|---|
| 8936 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8937 | Tiradentes: [4, 21],
|
|---|
| 8938 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8939 | "Corpus Christi": ["easter", 60],
|
|---|
| 8940 | "Dia do evangélico": [6, 18],
|
|---|
| 8941 | "Independência": [9, 7],
|
|---|
| 8942 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8943 | Finados: [11, 2],
|
|---|
| 8944 | "Proclamação da República": [11, 15],
|
|---|
| 8945 | Natal: [12, 25]
|
|---|
| 8946 | }
|
|---|
| 8947 | },
|
|---|
| 8948 | Roraima: {
|
|---|
| 8949 | PH: {
|
|---|
| 8950 | "Ano Novo": [1, 1],
|
|---|
| 8951 | Carnaval: ["easter", -47],
|
|---|
| 8952 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8953 | Tiradentes: [4, 21],
|
|---|
| 8954 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8955 | "Corpus Christi": ["easter", 60],
|
|---|
| 8956 | "Independência": [9, 7],
|
|---|
| 8957 | "Data magna do estado": [10, 5],
|
|---|
| 8958 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8959 | Finados: [11, 2],
|
|---|
| 8960 | "Proclamação da República": [11, 15],
|
|---|
| 8961 | Natal: [12, 25]
|
|---|
| 8962 | }
|
|---|
| 8963 | },
|
|---|
| 8964 | "Santa Catarina": {
|
|---|
| 8965 | PH: {
|
|---|
| 8966 | "Ano Novo": [1, 1],
|
|---|
| 8967 | Carnaval: ["easter", -47],
|
|---|
| 8968 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8969 | Tiradentes: [4, 21],
|
|---|
| 8970 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8971 | "Corpus Christi": ["easter", 60],
|
|---|
| 8972 | "Data magna do estado": [8, 11],
|
|---|
| 8973 | "Independência": [9, 7],
|
|---|
| 8974 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8975 | Finados: [11, 2],
|
|---|
| 8976 | "Proclamação da República": [11, 15],
|
|---|
| 8977 | "Santa Catarina de Alexandria": [11, 25],
|
|---|
| 8978 | Natal: [12, 25]
|
|---|
| 8979 | }
|
|---|
| 8980 | },
|
|---|
| 8981 | "São Paulo": {
|
|---|
| 8982 | PH: {
|
|---|
| 8983 | "Ano Novo": [1, 1],
|
|---|
| 8984 | Carnaval: ["easter", -47],
|
|---|
| 8985 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 8986 | Tiradentes: [4, 21],
|
|---|
| 8987 | "Dia do Trabalhador": [5, 1],
|
|---|
| 8988 | "Corpus Christi": ["easter", 60],
|
|---|
| 8989 | "Data magna do estado": [7, 9],
|
|---|
| 8990 | "Independência": [9, 7],
|
|---|
| 8991 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 8992 | Finados: [11, 2],
|
|---|
| 8993 | "Proclamação da República": [11, 15],
|
|---|
| 8994 | Natal: [12, 25]
|
|---|
| 8995 | }
|
|---|
| 8996 | },
|
|---|
| 8997 | Sergipe: {
|
|---|
| 8998 | PH: {
|
|---|
| 8999 | "Ano Novo": [1, 1],
|
|---|
| 9000 | Carnaval: ["easter", -47],
|
|---|
| 9001 | "Aniversário de Aracaju": [3, 17],
|
|---|
| 9002 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 9003 | Tiradentes: [4, 21],
|
|---|
| 9004 | "Dia do Trabalhador": [5, 1],
|
|---|
| 9005 | "Corpus Christi": ["easter", 60],
|
|---|
| 9006 | "São João": [6, 24],
|
|---|
| 9007 | "Data magna do estado": [7, 8],
|
|---|
| 9008 | "Independência": [9, 7],
|
|---|
| 9009 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 9010 | Finados: [11, 2],
|
|---|
| 9011 | "Proclamação da República": [11, 15],
|
|---|
| 9012 | "Nossa Senhora da Conceição": [12, 8],
|
|---|
| 9013 | Natal: [12, 25]
|
|---|
| 9014 | }
|
|---|
| 9015 | },
|
|---|
| 9016 | Tocantins: {
|
|---|
| 9017 | PH: {
|
|---|
| 9018 | "Ano Novo": [1, 1],
|
|---|
| 9019 | Carnaval: ["easter", -47],
|
|---|
| 9020 | "Autonomia do estado": [3, 18],
|
|---|
| 9021 | "Sexta-feira santa": ["easter", -2],
|
|---|
| 9022 | Tiradentes: [4, 21],
|
|---|
| 9023 | "Dia do Trabalhador": [5, 1],
|
|---|
| 9024 | "Corpus Christi": ["easter", 60],
|
|---|
| 9025 | "Independência": [9, 7],
|
|---|
| 9026 | "Nossa Senhora da Natividade": [9, 8],
|
|---|
| 9027 | "Criação do estado": [10, 5],
|
|---|
| 9028 | "Nossa Senhora Aparecida": [10, 12],
|
|---|
| 9029 | Finados: [11, 2],
|
|---|
| 9030 | "Proclamação da República": [11, 15],
|
|---|
| 9031 | Natal: [12, 25]
|
|---|
| 9032 | }
|
|---|
| 9033 | }
|
|---|
| 9034 | },
|
|---|
| 9035 | hu: {
|
|---|
| 9036 | PH: {
|
|---|
| 9037 | "újév": [1, 1],
|
|---|
| 9038 | "az 1848-as forradalom ünnepe": [3, 15],
|
|---|
| 9039 | "nagypéntek": ["easter", -2],
|
|---|
| 9040 | "húsvétvasárnap": ["easter", 0],
|
|---|
| 9041 | "húsvéthétfő": ["easter", 1],
|
|---|
| 9042 | "pünkösdvasárnap": ["easter", 49],
|
|---|
| 9043 | "pünkösdhétfő": ["easter", 50],
|
|---|
| 9044 | "a munka ünnepe": [5, 1],
|
|---|
| 9045 | "az államalapítás ünnepe": [8, 20],
|
|---|
| 9046 | "az 1956-os forradalom ünnepe": [10, 23],
|
|---|
| 9047 | mindenszentek: [11, 1],
|
|---|
| 9048 | "karácsony": [12, 25],
|
|---|
| 9049 | "karácsony másnap": [12, 26]
|
|---|
| 9050 | },
|
|---|
| 9051 | SH: [{
|
|---|
| 9052 | name: "tavaszi szünet",
|
|---|
| 9053 | 2018: [4, 2, 4, 7],
|
|---|
| 9054 | 2019: [3, 24, 3, 29],
|
|---|
| 9055 | 2020: [4, 13, 4, 18]
|
|---|
| 9056 | }, {
|
|---|
| 9057 | name: "nyári szünet",
|
|---|
| 9058 | 2018: [6, 16, 8, 31],
|
|---|
| 9059 | 2019: [6, 16, 8, 31],
|
|---|
| 9060 | 2020: [6, 16, 8, 31]
|
|---|
| 9061 | }, {
|
|---|
| 9062 | name: "őszi szünet",
|
|---|
| 9063 | 2014: [10, 27, 10, 31],
|
|---|
| 9064 | 2018: [10, 26, 10, 30],
|
|---|
| 9065 | 2019: [11, 2, 11, 4]
|
|---|
| 9066 | }, {
|
|---|
| 9067 | name: "téli szünet",
|
|---|
| 9068 | 2014: [12, 22, 1, 2],
|
|---|
| 9069 | 2018: [12, 21, 12, 31],
|
|---|
| 9070 | 2019: [12, 22, 1, 2]
|
|---|
| 9071 | }]
|
|---|
| 9072 | },
|
|---|
| 9073 | sk: {
|
|---|
| 9074 | PH: {
|
|---|
| 9075 | "Deň vzniku Slovenskej republiky": [1, 1],
|
|---|
| 9076 | "Zjavenie Pána": [1, 6],
|
|---|
| 9077 | "Veľký piatok": ["easter", -2],
|
|---|
| 9078 | "Veľkonočný pondelok": ["easter", 1],
|
|---|
| 9079 | "Sviatok práce": [5, 1],
|
|---|
| 9080 | "Deň víťazstva nad fašizmom": [5, 8],
|
|---|
| 9081 | "Sviatok svätého Cyrila a Metoda": [7, 5],
|
|---|
| 9082 | "Výročie Slovenského národného povstania": [8, 29],
|
|---|
| 9083 | "Deň Ústavy Slovenskej republiky": [9, 1],
|
|---|
| 9084 | "Sviatok Panny Márie Sedembolestnej": [9, 15],
|
|---|
| 9085 | "Sviatok všetkých svätých": [11, 1],
|
|---|
| 9086 | "Deň boja za slobodu a demokraciu": [11, 17],
|
|---|
| 9087 | "Štedrý deň": [12, 24],
|
|---|
| 9088 | "Prvý sviatok vianočný": [12, 25],
|
|---|
| 9089 | "Druhý sviatok vianočný": [12, 26]
|
|---|
| 9090 | }
|
|---|
| 9091 | }
|
|---|
| 9092 | };
|
|---|
| 9093 | var word_error_correction = {
|
|---|
| 9094 | wrong_words: {
|
|---|
| 9095 | 'Assuming "<ok>" for "<ko>".': {
|
|---|
| 9096 | daytime: "sunrise-sunset",
|
|---|
| 9097 | spring: "Mar-May",
|
|---|
| 9098 | summer: "Jun-Aug",
|
|---|
| 9099 | autumn: "Sep-Nov",
|
|---|
| 9100 | winter: "Dec-Feb",
|
|---|
| 9101 | _: "-",
|
|---|
| 9102 | "=": "-"
|
|---|
| 9103 | },
|
|---|
| 9104 | '"<ko>" wird als "<ok>" interpertiert.': {
|
|---|
| 9105 | "frühling": "Mar-May",
|
|---|
| 9106 | "frühjahr": "Mar-May",
|
|---|
| 9107 | sommer: "Jun-Aug",
|
|---|
| 9108 | herbst: "Sep-Nov"
|
|---|
| 9109 | },
|
|---|
| 9110 | 'Bitte benutze die englische Schreibweise "<ok>" für "<ko>".': {
|
|---|
| 9111 | "werktags?": "Mo-Fr"
|
|---|
| 9112 | },
|
|---|
| 9113 | 'Bitte benutze "<ok>" für "<ko>". Beispiel: "Mo-Fr 08:00-12:00; Tu off".': {
|
|---|
| 9114 | "ruhetage?": "off",
|
|---|
| 9115 | geschlossen: "off",
|
|---|
| 9116 | geschl: "off"
|
|---|
| 9117 | },
|
|---|
| 9118 | 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
|
|---|
| 9119 | gesloten: "off",
|
|---|
| 9120 | feestdag: "PH",
|
|---|
| 9121 | feestdagen: "PH"
|
|---|
| 9122 | },
|
|---|
| 9123 | 'Assuming "<ok>" for "<ko>". Please avoid using "workday": https://wiki.openstreetmap.org/wiki/Talk:Key:opening_hours#need_syntax_for_holidays_and_workingdays': {
|
|---|
| 9124 | wd: "Mo-Fr",
|
|---|
| 9125 | "on work days?": "Mo-Fr",
|
|---|
| 9126 | "weekdays?": "Mo-Fr",
|
|---|
| 9127 | vardagar: "Mo-Fr"
|
|---|
| 9128 | },
|
|---|
| 9129 | 'Please use something like "Mo off" instead "<ko>".': {
|
|---|
| 9130 | except: "off"
|
|---|
| 9131 | },
|
|---|
| 9132 | 'Please omit "<ko>" or use a colon instead: "12:00-14:00".': {
|
|---|
| 9133 | h: ""
|
|---|
| 9134 | },
|
|---|
| 9135 | 'Please omit "<ko>".': {
|
|---|
| 9136 | season: "",
|
|---|
| 9137 | hs: "",
|
|---|
| 9138 | hrs: "",
|
|---|
| 9139 | hours: ""
|
|---|
| 9140 | },
|
|---|
| 9141 | 'Please omit "<ko>". The key must not be in the value.': {
|
|---|
| 9142 | "opening_hours\\s*=": ""
|
|---|
| 9143 | },
|
|---|
| 9144 | 'Please omit "<ko>". You might want to express open end which can be specified as "12:00+" for example.': {
|
|---|
| 9145 | from: ""
|
|---|
| 9146 | },
|
|---|
| 9147 | 'You can use notation "<ok>" for "<ko>" in the case that you want to express open end times. Example: "12:00+".': {
|
|---|
| 9148 | "(:?bis|till?|-|–)? ?(?:open ?end|late)": "+"
|
|---|
| 9149 | },
|
|---|
| 9150 | 'Please use notation "<ok>" for "<ko>". If the times are unsure or vary consider a comment e.g. 12:00-14:00 "only on sunshine".': {
|
|---|
| 9151 | "~": "-",
|
|---|
| 9152 | "~": "-"
|
|---|
| 9153 | },
|
|---|
| 9154 | 'Please use notation "<ok>" for "<ko>". Fallback rule: 12:00-14:00 || "call us"': {
|
|---|
| 9155 | otherwise: "||"
|
|---|
| 9156 | },
|
|---|
| 9157 | 'You can use notation "<ok>" for "?" temporally if the syntax will still be valid.': {
|
|---|
| 9158 | "\\?": 'unknown "please add this if known"'
|
|---|
| 9159 | },
|
|---|
| 9160 | 'Please use notation "<ok>" for "<ko>". Although using "–" is typographical correct, the opening_hours syntax is defined with the normal hyphen. Correct typography should be done on application level …': {
|
|---|
| 9161 | "–": "-"
|
|---|
| 9162 | },
|
|---|
| 9163 | 'Please use notation "<ok>" for "<ko>".': {
|
|---|
| 9164 | "→": "-",
|
|---|
| 9165 | "−": "-",
|
|---|
| 9166 | "—": "-",
|
|---|
| 9167 | "ー": "-",
|
|---|
| 9168 | to: "-",
|
|---|
| 9169 | "до": "-",
|
|---|
| 9170 | a: "-",
|
|---|
| 9171 | as: "-",
|
|---|
| 9172 | "á": "-",
|
|---|
| 9173 | "ás": "-",
|
|---|
| 9174 | "às": "-",
|
|---|
| 9175 | ate: "-",
|
|---|
| 9176 | "till?": "-",
|
|---|
| 9177 | until: "-",
|
|---|
| 9178 | through: "-",
|
|---|
| 9179 | and: ",",
|
|---|
| 9180 | "&": ",",
|
|---|
| 9181 | ":": ":",
|
|---|
| 9182 | "°°": ":00",
|
|---|
| 9183 | always: "24/7",
|
|---|
| 9184 | "always open": "24/7",
|
|---|
| 9185 | "always closed": "closed",
|
|---|
| 9186 | nonstop: "24/7",
|
|---|
| 9187 | "24x7": "24/7",
|
|---|
| 9188 | anytime: "24/7",
|
|---|
| 9189 | "all day": "24/7",
|
|---|
| 9190 | daily: "Mo-Su",
|
|---|
| 9191 | everyday: "Mo-Su",
|
|---|
| 9192 | "every day": "Mo-Su",
|
|---|
| 9193 | "all days": "Mo-Su",
|
|---|
| 9194 | "7j/7": "Mo-Su",
|
|---|
| 9195 | "7/7": "Mo-Su",
|
|---|
| 9196 | "7days": "Mo-Su",
|
|---|
| 9197 | "7 days": "Mo-Su",
|
|---|
| 9198 | "7 days a week": "Mo-Su",
|
|---|
| 9199 | "7 days/week": "Mo-Su",
|
|---|
| 9200 | "24 hours 7 days a week": "24/7",
|
|---|
| 9201 | "24 hours": "00:00-24:00",
|
|---|
| 9202 | midday: "12:00",
|
|---|
| 9203 | midnight: "00:00",
|
|---|
| 9204 | "(?:public )?holidays?": "PH",
|
|---|
| 9205 | "(?:one )?day after public holiday": "PH +1 day",
|
|---|
| 9206 | "(?:one )?day before public holiday": "PH -1 day",
|
|---|
| 9207 | "school ?holidays?": "SH",
|
|---|
| 9208 | "weekends?": "Sa,Su",
|
|---|
| 9209 | daylight: "sunrise-sunset",
|
|---|
| 9210 | "(?:on|by)?(?:_| )?appointments?": '"on appointment"'
|
|---|
| 9211 | },
|
|---|
| 9212 | 'Please use notation "<ok>" for "<ko>". Those characters look very similar but are not the same!': {
|
|---|
| 9213 | "оff": "off"
|
|---|
| 9214 | },
|
|---|
| 9215 | 'Please use time format in 24 hours notation ("<ko>"). If PM is used you might have to convert the hours to the 24 hours notation.': {
|
|---|
| 9216 | pm: "",
|
|---|
| 9217 | "p.m.": "",
|
|---|
| 9218 | "рм": "",
|
|---|
| 9219 | am: "",
|
|---|
| 9220 | "a.m.": "",
|
|---|
| 9221 | "ам": ""
|
|---|
| 9222 | },
|
|---|
| 9223 | 'Bitte verzichte auf "<ko>".': {
|
|---|
| 9224 | uhr: "",
|
|---|
| 9225 | "geöffnet": "",
|
|---|
| 9226 | zwischen: "",
|
|---|
| 9227 | ist: "",
|
|---|
| 9228 | durchgehend: "",
|
|---|
| 9229 | "öffnungszeit(?:en)?:?": ""
|
|---|
| 9230 | },
|
|---|
| 9231 | 'Bitte verzichte auf "<ko>". Sie möchten eventuell eine Öffnungszeit ohne vorgegebenes Ende (Open End) angeben. Beispiel: "12:00+"': {
|
|---|
| 9232 | ab: "",
|
|---|
| 9233 | von: ""
|
|---|
| 9234 | },
|
|---|
| 9235 | 'Es sieht so aus also möchten Sie zusätzliche Einschränkungen für eine Öffnungszeit geben. Falls sich dies nicht mit der Syntax ausdrücken lässt können Kommentare verwendet werden. Zusätzlich sollte eventuell das Schlüsselwort `open` benutzt werden. Bitte probiere "<ok>" für "<ko>".': {
|
|---|
| 9236 | damen: 'open "Damen"',
|
|---|
| 9237 | herren: 'open "Herren"'
|
|---|
| 9238 | },
|
|---|
| 9239 | 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
|
|---|
| 9240 | bis: "-",
|
|---|
| 9241 | "täglich": "Mo-Su",
|
|---|
| 9242 | "(?:schul)?ferien": "SH",
|
|---|
| 9243 | "(?:an|nur)? ?sonn-?(?: und |/)feiertag(?:s|en?)?": "PH,Su",
|
|---|
| 9244 | "nach(?: |_)vereinbarung": '"Nach Vereinbarung"',
|
|---|
| 9245 | "nach(?: |_)absprache": '"Nach Absprache"'
|
|---|
| 9246 | },
|
|---|
| 9247 | 'Bitte benutze die Schreibweise "<ok>" für "<ko>". Es ist war typografisch korrekt aber laut der Spezifikation für opening_hours nicht erlaubt. Siehe auch: https://wiki.openstreetmap.org/wiki/DE:Key:opening_hours/specification.': {
|
|---|
| 9248 | "„": '"',
|
|---|
| 9249 | "“": '"',
|
|---|
| 9250 | "”": '"'
|
|---|
| 9251 | },
|
|---|
| 9252 | 'Please use notation "<ok>" for "<ko>". The used quote signs might be typographically correct but are not defined in the specification. See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification.': {
|
|---|
| 9253 | "«": '"',
|
|---|
| 9254 | "»": '"',
|
|---|
| 9255 | "‚": '"',
|
|---|
| 9256 | "‘": '"',
|
|---|
| 9257 | "’": '"',
|
|---|
| 9258 | "「": '"',
|
|---|
| 9259 | "」": '"',
|
|---|
| 9260 | "『": '"',
|
|---|
| 9261 | "』": '"'
|
|---|
| 9262 | },
|
|---|
| 9263 | 'Please use notation "<ok>" for "<ko>". The used quote signs are not defined in the specification. See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification.': {
|
|---|
| 9264 | "'": '"'
|
|---|
| 9265 | },
|
|---|
| 9266 | 'You might want to use comments instead of brackets (which are not valid in this context). If you do, replace "<ok>" with "<ko>".': {},
|
|---|
| 9267 | 'Bitte benutze die Schreibweise "<ok>" als Ersatz für "<ko>".': {
|
|---|
| 9268 | und: ",",
|
|---|
| 9269 | u: ",",
|
|---|
| 9270 | auch: ","
|
|---|
| 9271 | },
|
|---|
| 9272 | 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
|
|---|
| 9273 | "(?:an )?feiertag(?:s|en?)?": "PH"
|
|---|
| 9274 | },
|
|---|
| 9275 | 'S\'il vous plaît utiliser "<ok>" pour "<ko>".': {
|
|---|
| 9276 | "fermé": "off",
|
|---|
| 9277 | et: ",",
|
|---|
| 9278 | "à": "-",
|
|---|
| 9279 | "jours fériés": "PH"
|
|---|
| 9280 | }
|
|---|
| 9281 | },
|
|---|
| 9282 | month: {
|
|---|
| 9283 | "default": {
|
|---|
| 9284 | jan: 0,
|
|---|
| 9285 | feb: 1,
|
|---|
| 9286 | mar: 2,
|
|---|
| 9287 | apr: 3,
|
|---|
| 9288 | may: 4,
|
|---|
| 9289 | jun: 5,
|
|---|
| 9290 | jul: 6,
|
|---|
| 9291 | aug: 7,
|
|---|
| 9292 | sep: 8,
|
|---|
| 9293 | oct: 9,
|
|---|
| 9294 | nov: 10,
|
|---|
| 9295 | dec: 11
|
|---|
| 9296 | },
|
|---|
| 9297 | 'Please use the English abbreviation "<ok>" for "<ko>".': {
|
|---|
| 9298 | "jänner": 0,
|
|---|
| 9299 | january: 0,
|
|---|
| 9300 | february: 1,
|
|---|
| 9301 | march: 2,
|
|---|
| 9302 | april: 3,
|
|---|
| 9303 | "june?": 5,
|
|---|
| 9304 | "july?": 6,
|
|---|
| 9305 | august: 7,
|
|---|
| 9306 | september: 8,
|
|---|
| 9307 | sept: 8,
|
|---|
| 9308 | october: 9,
|
|---|
| 9309 | november: 10,
|
|---|
| 9310 | december: 11
|
|---|
| 9311 | },
|
|---|
| 9312 | 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
|
|---|
| 9313 | januar: 0,
|
|---|
| 9314 | februar: 1,
|
|---|
| 9315 | "märz?": 2,
|
|---|
| 9316 | maerz: 2,
|
|---|
| 9317 | mai: 4,
|
|---|
| 9318 | juni: 5,
|
|---|
| 9319 | juli: 6,
|
|---|
| 9320 | okt: 9,
|
|---|
| 9321 | oktober: 9,
|
|---|
| 9322 | dez: 11,
|
|---|
| 9323 | dezember: 11
|
|---|
| 9324 | },
|
|---|
| 9325 | 'S\'il vous plaît utiliser l\'abréviation "<ok>" pour "<ko>".': {
|
|---|
| 9326 | janvier: 0,
|
|---|
| 9327 | "février": 1,
|
|---|
| 9328 | "fév": 1,
|
|---|
| 9329 | mars: 2,
|
|---|
| 9330 | avril: 3,
|
|---|
| 9331 | avr: 3,
|
|---|
| 9332 | mai: 4,
|
|---|
| 9333 | juin: 5,
|
|---|
| 9334 | juillet: 6,
|
|---|
| 9335 | "août": 7,
|
|---|
| 9336 | "aoû": 7,
|
|---|
| 9337 | septembre: 8,
|
|---|
| 9338 | octobre: 9,
|
|---|
| 9339 | novembre: 10,
|
|---|
| 9340 | "décembre": 11
|
|---|
| 9341 | },
|
|---|
| 9342 | 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
|
|---|
| 9343 | januari: 0,
|
|---|
| 9344 | februari: 1,
|
|---|
| 9345 | maart: 2,
|
|---|
| 9346 | mei: 4,
|
|---|
| 9347 | augustus: 7
|
|---|
| 9348 | }
|
|---|
| 9349 | },
|
|---|
| 9350 | calcday: {
|
|---|
| 9351 | "default": {
|
|---|
| 9352 | day: "day",
|
|---|
| 9353 | days: "days"
|
|---|
| 9354 | }
|
|---|
| 9355 | },
|
|---|
| 9356 | weekday: {
|
|---|
| 9357 | "default": {
|
|---|
| 9358 | su: 0,
|
|---|
| 9359 | mo: 1,
|
|---|
| 9360 | tu: 2,
|
|---|
| 9361 | we: 3,
|
|---|
| 9362 | th: 4,
|
|---|
| 9363 | fr: 5,
|
|---|
| 9364 | sa: 6
|
|---|
| 9365 | },
|
|---|
| 9366 | 'Assuming "<ok>" for "<ko>"': {
|
|---|
| 9367 | m: 1,
|
|---|
| 9368 | w: 3,
|
|---|
| 9369 | f: 5
|
|---|
| 9370 | },
|
|---|
| 9371 | 'Please use the abbreviation "<ok>" for "<ko>".': {
|
|---|
| 9372 | sun: 0,
|
|---|
| 9373 | "sundays?": 0,
|
|---|
| 9374 | mon: 1,
|
|---|
| 9375 | "mondays?": 1,
|
|---|
| 9376 | "tues?": 2,
|
|---|
| 9377 | "tuesdays?": 2,
|
|---|
| 9378 | "weds?": 3,
|
|---|
| 9379 | "wednesdays?": 3,
|
|---|
| 9380 | thu: 4,
|
|---|
| 9381 | "thurs?": 4,
|
|---|
| 9382 | "thursdays?": 4,
|
|---|
| 9383 | fri: 5,
|
|---|
| 9384 | "fridays?": 5,
|
|---|
| 9385 | sat: 6,
|
|---|
| 9386 | "saturdays?": 6
|
|---|
| 9387 | },
|
|---|
| 9388 | 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>". Could also mean Saturday in Polish …': {
|
|---|
| 9389 | so: 0
|
|---|
| 9390 | },
|
|---|
| 9391 | 'Bitte benutze die englische Abkürzung "<ok>" für "<ko>".': {
|
|---|
| 9392 | son: 0,
|
|---|
| 9393 | "sonn-": 0,
|
|---|
| 9394 | "sonntags?": 0,
|
|---|
| 9395 | "montags?": 1,
|
|---|
| 9396 | di: 2,
|
|---|
| 9397 | "die?": 2,
|
|---|
| 9398 | "dienstags?": 2,
|
|---|
| 9399 | mi: 3,
|
|---|
| 9400 | "mit?": 3,
|
|---|
| 9401 | "mittwochs?": 3,
|
|---|
| 9402 | "don?": 4,
|
|---|
| 9403 | "donnerstags?": 4,
|
|---|
| 9404 | fre: 5,
|
|---|
| 9405 | "freitags?": 5,
|
|---|
| 9406 | sam: 6,
|
|---|
| 9407 | "samstags?": 6
|
|---|
| 9408 | },
|
|---|
| 9409 | 'S\'il vous plaît utiliser l\'abréviation "<ok>" pour "<ko>".': {
|
|---|
| 9410 | dim: 0,
|
|---|
| 9411 | dimanche: 0,
|
|---|
| 9412 | "lun?": 1,
|
|---|
| 9413 | lundi: 1,
|
|---|
| 9414 | mardi: 2,
|
|---|
| 9415 | mer: 3,
|
|---|
| 9416 | mercredi: 3,
|
|---|
| 9417 | "jeu?": 4,
|
|---|
| 9418 | jeudi: 4,
|
|---|
| 9419 | "ven?": 5,
|
|---|
| 9420 | vendredi: 5,
|
|---|
| 9421 | samedi: 6
|
|---|
| 9422 | },
|
|---|
| 9423 | 'Neem de engelse afkorting "<ok>" voor "<ko>" alstublieft.': {
|
|---|
| 9424 | "zon?": 0,
|
|---|
| 9425 | zontag: 0,
|
|---|
| 9426 | zondag: 0,
|
|---|
| 9427 | maandag: 1,
|
|---|
| 9428 | din: 2,
|
|---|
| 9429 | dinsdag: 2,
|
|---|
| 9430 | "woe?": 3,
|
|---|
| 9431 | woensdag: 3,
|
|---|
| 9432 | donderdag: 4,
|
|---|
| 9433 | "vri?": 5,
|
|---|
| 9434 | vrijdag: 5,
|
|---|
| 9435 | "zat?": 6,
|
|---|
| 9436 | zaterdag: 6
|
|---|
| 9437 | },
|
|---|
| 9438 | 'Please use the English abbreviation "<ok>" for "<ko>".': {
|
|---|
| 9439 | "neděle": 0,
|
|---|
| 9440 | ne: 0,
|
|---|
| 9441 | "pondělí": 1,
|
|---|
| 9442 | po: 1,
|
|---|
| 9443 | "úterý": 2,
|
|---|
| 9444 | "út": 2,
|
|---|
| 9445 | "středa": 3,
|
|---|
| 9446 | st: 3,
|
|---|
| 9447 | "čtvrtek": 4,
|
|---|
| 9448 | "čt": 4,
|
|---|
| 9449 | "pátek": 5,
|
|---|
| 9450 | "pá": 5,
|
|---|
| 9451 | sobota: 6
|
|---|
| 9452 | },
|
|---|
| 9453 | 'Please use the English abbreviation "<ok>" (Spanish) for "<ko>".': {
|
|---|
| 9454 | martes: 0,
|
|---|
| 9455 | "miércoles": 1,
|
|---|
| 9456 | jueves: 2,
|
|---|
| 9457 | viernes: 3,
|
|---|
| 9458 | "sábado": 4,
|
|---|
| 9459 | domingo: 5,
|
|---|
| 9460 | lunes: 6
|
|---|
| 9461 | },
|
|---|
| 9462 | 'Please use the English abbreviation "<ok>" (Indonesian) for "<ko>".': {
|
|---|
| 9463 | selasa: 0,
|
|---|
| 9464 | rabu: 1,
|
|---|
| 9465 | kami: 2,
|
|---|
| 9466 | jumat: 3,
|
|---|
| 9467 | sabtu: 4,
|
|---|
| 9468 | minggu: 5,
|
|---|
| 9469 | senin: 6
|
|---|
| 9470 | },
|
|---|
| 9471 | 'Please use the English abbreviation "<ok>" (Swedish) for "<ko>".': {
|
|---|
| 9472 | "söndag": 0,
|
|---|
| 9473 | "söndagar": 0,
|
|---|
| 9474 | "måndag": 1,
|
|---|
| 9475 | ma: 1,
|
|---|
| 9476 | tisdag: 2,
|
|---|
| 9477 | onsdag: 3,
|
|---|
| 9478 | torsdag: 4,
|
|---|
| 9479 | fredag: 5,
|
|---|
| 9480 | "lördag": 6,
|
|---|
| 9481 | "lördagar": 6
|
|---|
| 9482 | },
|
|---|
| 9483 | 'Please use the English abbreviation "<ok>" (Polish) for "<ko>".': {
|
|---|
| 9484 | niedziela: 0,
|
|---|
| 9485 | niedz: 0,
|
|---|
| 9486 | n: 0,
|
|---|
| 9487 | ndz: 0,
|
|---|
| 9488 | "poniedziałek": 1,
|
|---|
| 9489 | poniedzialek: 1,
|
|---|
| 9490 | pon: 1,
|
|---|
| 9491 | pn: 1,
|
|---|
| 9492 | wtorek: 2,
|
|---|
| 9493 | wt: 2,
|
|---|
| 9494 | "środa": 3,
|
|---|
| 9495 | sroda: 3,
|
|---|
| 9496 | "śr": 3,
|
|---|
| 9497 | sr: 3,
|
|---|
| 9498 | czwartek: 4,
|
|---|
| 9499 | czw: 4,
|
|---|
| 9500 | cz: 4,
|
|---|
| 9501 | "piątek": 5,
|
|---|
| 9502 | piatek: 5,
|
|---|
| 9503 | pt: 5,
|
|---|
| 9504 | sobota: 6,
|
|---|
| 9505 | sob: 6
|
|---|
| 9506 | },
|
|---|
| 9507 | 'Please use the English abbreviation "<ok>" (Russian) for "<ko>".': {
|
|---|
| 9508 | "воскресенье": 0,
|
|---|
| 9509 | "Вс": 0,
|
|---|
| 9510 | "voskresen'ye": 0,
|
|---|
| 9511 | "понедельник": 1,
|
|---|
| 9512 | "Пн": 1,
|
|---|
| 9513 | "ponedel'nik": 1,
|
|---|
| 9514 | "вторник": 2,
|
|---|
| 9515 | vtornik: 2,
|
|---|
| 9516 | "среда": 3,
|
|---|
| 9517 | sreda: 3,
|
|---|
| 9518 | "четверг": 4,
|
|---|
| 9519 | chetverk: 4,
|
|---|
| 9520 | "пятница": 5,
|
|---|
| 9521 | pyatnitsa: 5,
|
|---|
| 9522 | "суббота": 6,
|
|---|
| 9523 | subbota: 6
|
|---|
| 9524 | },
|
|---|
| 9525 | 'Please use the English abbreviation "<ok>" (Danish) for "<ko>".': {
|
|---|
| 9526 | "søndag": 0,
|
|---|
| 9527 | mandag: 1,
|
|---|
| 9528 | tirsdag: 2,
|
|---|
| 9529 | onsdag: 3,
|
|---|
| 9530 | torsdag: 4,
|
|---|
| 9531 | fredag: 5,
|
|---|
| 9532 | "lørdag": 6
|
|---|
| 9533 | }
|
|---|
| 9534 | },
|
|---|
| 9535 | timevar: {
|
|---|
| 9536 | "default": {
|
|---|
| 9537 | sunrise: "sunrise",
|
|---|
| 9538 | sunset: "sunset",
|
|---|
| 9539 | dawn: "dawn",
|
|---|
| 9540 | dusk: "dusk"
|
|---|
| 9541 | },
|
|---|
| 9542 | 'Please use notation "<ok>" for "<ko>".': {
|
|---|
| 9543 | sundown: "sunset"
|
|---|
| 9544 | },
|
|---|
| 9545 | 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
|
|---|
| 9546 | "morgendämmerung": "dawn",
|
|---|
| 9547 | "abenddämmerung": "dusk",
|
|---|
| 9548 | sonnenaufgang: "sunrise",
|
|---|
| 9549 | sonnenuntergang: "sunset"
|
|---|
| 9550 | }
|
|---|
| 9551 | },
|
|---|
| 9552 | event: {
|
|---|
| 9553 | "default": {
|
|---|
| 9554 | easter: "easter"
|
|---|
| 9555 | },
|
|---|
| 9556 | 'Bitte benutze die Schreibweise "<ok>" für "<ko>".': {
|
|---|
| 9557 | ostern: "easter"
|
|---|
| 9558 | }
|
|---|
| 9559 | }
|
|---|
| 9560 | };
|
|---|
| 9561 | var lang = {
|
|---|
| 9562 | "unexpected token": 'Unexpected token: "__token__" This means that the syntax is not valid at that point or it is currently not supported.',
|
|---|
| 9563 | "no string": "The value (first parameter) is not a string.",
|
|---|
| 9564 | nothing: "The value contains nothing meaningful which can be parsed.",
|
|---|
| 9565 | "nothing useful": "This rule does not contain anything useful. Please remove this empty rule.",
|
|---|
| 9566 | "programmers joke": "Might it be possible that you are a programmer and adding a semicolon after each statement is hardwired in your muscle memory ;) ?" + " The thing is that the semicolon in the opening_hours syntax is defined as rule separator." + " So for compatibility reasons you should omit this last semicolon.",
|
|---|
| 9567 | "interpreted as year": "The number __number__ will be interpreted as year." + ' This is probably not intended. Times can be specified as "12:00".',
|
|---|
| 9568 | "rule before fallback empty": "Rule before fallback rule does not contain anything useful",
|
|---|
| 9569 | "hour min separator": 'Please use ":" as hour/minute-separator',
|
|---|
| 9570 | "warnings severity": 'The parameter optional_conf_parm["warnings_severity"] must be an integer number between 0 and 7 (inclusive).' + " Given __severity__" + ", expected one of the following numbers: __allowed__.",
|
|---|
| 9571 | "optional conf parm type": "The optional_conf_parm parameter is of unknown type." + " Given __given__",
|
|---|
| 9572 | "conf param tag key missing": 'The optional_conf_parm["tag_key"] is missing, required by optional_conf_parm["map_value"].',
|
|---|
| 9573 | "conf param mode invalid": 'The optional_conf_parm["mode"] parameter is a invalid number.' + " Gave __given__" + ", expected one of the following numbers: __allowed__.",
|
|---|
| 9574 | "conf param unkown type": 'The optional_conf_parm["__key__"] parameter is of unknown type.' + " Given __given__" + ", expected __expected__.",
|
|---|
| 9575 | "library bug": 'An error occurred during evaluation of the value "__value__".' + " Please file a bug report or pull request: __url__.__message__",
|
|---|
| 9576 | "library bug PR only": 'An error occurred during evaluation of the value "__value__".' + " Please submit a pull request: __url__.__message__",
|
|---|
| 9577 | "use multi": 'You have used __count__ __part2__ Rules can be separated by ";".',
|
|---|
| 9578 | "selector multi 2a": "__what__ in one rule. You may only use one in one rule.",
|
|---|
| 9579 | "selector multi 2b": "not connected __what__ in one rule. This is probably an error." + " Equal selector types can (and should) always be written in conjunction separated by comma." + ' Example for time ranges "12:00-13:00,15:00-18:00".' + ' Example for weekdays "Mo-We,Fr".',
|
|---|
| 9580 | "selector state": "state keywords",
|
|---|
| 9581 | comments: "comments",
|
|---|
| 9582 | "holiday ranges": "holiday ranges",
|
|---|
| 9583 | months: "months",
|
|---|
| 9584 | weekdays: "weekdays",
|
|---|
| 9585 | ranges: "ranges",
|
|---|
| 9586 | "default state": "This rule which changes the default state (which is closed) for all following rules is not the first rule." + " The rule will overwrite all previous rules." + " It can be legitimate to change the default state to open for example" + " and then only specify for which times the facility is closed.",
|
|---|
| 9587 | vague: "This rule is not very explicit because there is no time selector being used." + " Please add a time selector to this rule or use a comment to make it more explicit.",
|
|---|
| 9588 | "empty comment": "You have used an empty comment." + " Please either write something in the comment or use the keyword unknown instead.",
|
|---|
| 9589 | separator_for_readability: "You have used the optional symbol <separator_for_readability> in the wrong place." + " Please check the syntax specification to see where it could be used or remove it.",
|
|---|
| 9590 | "strange 24/7": 'You used 24/7 in a way that is probably not interpreted as "24 hours 7 days a week".' + ' For correctness you might want to use "open" or "closed"' + " for this rule and then write your exceptions which should achieve the same goal and is more clear" + ' e.g. "open; Mo 12:00-14:00 off".',
|
|---|
| 9591 | "public holiday": "There was no PH (public holiday) specified. This is not very explicit.__part2__" + ' Please either append a "PH off" rule if the amenity is closed on all public holidays' + ' or use something like "Sa,Su,PH 12:00-16:00" to say that on Saturdays, Sundays and on public holidays the amenity is open 12:00-16:00.' + ' If the amenity is open everyday including public holidays then you can make this explicit by writing "Mo-Su,PH".' + " If you are not certain try to find it out. If you can’t then do not add PH to the value and ignore this warning.",
|
|---|
| 9592 | "public holiday part2": ' Unfortunately the tag key (e.g. "opening_hours", or "lit") is unknown to opening_hours.js. ' + "This warning only applies to the key __keys__. If your value is for that key than read on. If not you can ignore the following.",
|
|---|
| 9593 | switched: 'The selector "__first__" was switched with' + ' the selector "__second__"' + " for readablitity and compatibiltity reasons.",
|
|---|
| 9594 | "no colon after": 'Please don’t use ":" after __token__.',
|
|---|
| 9595 | "number -5 to 5": "Number between -5 and 5 (except 0) expected.",
|
|---|
| 9596 | "one weekday constraint": "You can not use more than one constrained weekday in a month range",
|
|---|
| 9597 | "range constrained weekdays": "You can not use a range of constrained weekdays in a month range",
|
|---|
| 9598 | expected: '"__symbol__" expected.',
|
|---|
| 9599 | "range zero": "You can not use __type__ ranges with period equals zero.",
|
|---|
| 9600 | "period one year+": "Please don’t use __type__ ranges with period equals one." + ' If you want to express that a facility is open starting from a year without limit use "<year>+".',
|
|---|
| 9601 | "period one": "Please don’t use __type__ ranges with period equals one.",
|
|---|
| 9602 | "month 31": "The day for __month__ must be between 1 and 31.",
|
|---|
| 9603 | "month 30": "Month __month__ doesn't have 31 days. The last day of __month__ is day 30.",
|
|---|
| 9604 | "month feb": "Month __month__ either has 28 or 29 days (leap years).",
|
|---|
| 9605 | "point in time": "hyphen (-) or open end (+) in time range __calc__expected." + " For working with points in time, the mode for __libraryname__ has to be altered." + " Maybe wrong tag?",
|
|---|
| 9606 | calculation: "calculation",
|
|---|
| 9607 | "time range continue": "Time range does not continue as expected",
|
|---|
| 9608 | "period continue": 'Time period does not continue as expected. Example "/01:30".',
|
|---|
| 9609 | "time range mode": '__libraryname__ is running in "time range mode". Found point in time.',
|
|---|
| 9610 | "point in time mode": '__libraryname__ is running in "points in time mode". Found time range.',
|
|---|
| 9611 | "outside current day": "Time range starts outside of the current day",
|
|---|
| 9612 | "two midnights": "Time spanning more than two midnights not supported",
|
|---|
| 9613 | "without minutes": "Time range without minutes specified. Not very explicit!" + ' Please use this syntax instead "__syntax__".',
|
|---|
| 9614 | "outside day": "Time range starts outside of the current day",
|
|---|
| 9615 | "zero calculation": "Adding zero in a variable time calculation does not change the variable time." + ' Please omit the calculation (example: "sunrise-(sunset-00:00)").',
|
|---|
| 9616 | "calculation syntax": "Calculation with variable time is not in the right syntax",
|
|---|
| 9617 | missing: 'Missing "__symbol__"',
|
|---|
| 9618 | "(time)": "(time)",
|
|---|
| 9619 | "bad range": "Bad range: __from__-__to__",
|
|---|
| 9620 | "] or more numbers": '"]" or more numbers expected.',
|
|---|
| 9621 | "additional rule no sense": 'An additional rule does not make sense here. Just use a ";" as rule separator.' + " See https://wiki.openstreetmap.org/wiki/Key:opening_hours/specification#explain:additional_rule_separator",
|
|---|
| 9622 | "unexpected token weekday range": "Unexpected token in weekday range: __token__",
|
|---|
| 9623 | "max differ": "There should be no reason to differ more than __maxdiffer__ days from a __name__. If so tell us …",
|
|---|
| 9624 | "adding 0": "Adding 0 does not change the date. Please omit this.",
|
|---|
| 9625 | "unexpected token holiday": "Unexpected token (holiday parser): __token__",
|
|---|
| 9626 | "no holiday definition": "There are no holidays (__name__) defined for country __cc__.",
|
|---|
| 9627 | "no holiday definition state": "There are no holidays (__name__) defined for country __cc__ and state __state__.",
|
|---|
| 9628 | "no country code": "Country code missing which is needed to select the correct holidays (see README how to provide it)",
|
|---|
| 9629 | "movable no formula": "Movable day __name__ can not not be calculated." + " Please add the formula how to calculate it.",
|
|---|
| 9630 | "movable not in year": "The movable day __name__ plus __days__" + " days is not in the year of the movable day anymore. Currently not supported.",
|
|---|
| 9631 | "year range one year": "A year range in which the start year is equal to the end year does not make sense." + ' Please remove the end year. E.g. "__year__ May 23"',
|
|---|
| 9632 | "year range reverse": "A year range in which the start year is greater than the end year does not make sense." + " Please turn it over.",
|
|---|
| 9633 | "year past": "The year is in the past.",
|
|---|
| 9634 | "unexpected token year range": "Unexpected token in year range: __token__",
|
|---|
| 9635 | "week range reverse": "You have specified a week range in reverse order or leaping over a year. This is (currently) not supported.",
|
|---|
| 9636 | "week negative": "You have specified a week date less then one. A valid week date range is 1-53.",
|
|---|
| 9637 | "week exceed": "You have specified a week date greater then 53. A valid week date range is 1-53.",
|
|---|
| 9638 | "week period less than 2": "You have specified a week period which is less than two." + ' If you want to select the whole range from week __weekfrom__ to week __weekto__ then just omit the "/__period__".',
|
|---|
| 9639 | "week period greater than 26": "You have specified a week period which is greater than 26." + " 26.5 is the half of the maximum 53 week dates per year so a week date period greater than 26 would only apply once per year." + ' Please specify the week selector as "week __weekfrom__" if that is what you want to express.',
|
|---|
| 9640 | "unexpected token week range": "Unexpected token in week range: __token__",
|
|---|
| 9641 | "unexpected token month range": "Unexpected token in month range: __token__",
|
|---|
| 9642 | "day range reverse": "Range in wrong order. From day is greater than to day.",
|
|---|
| 9643 | "open end": "Specified as open end. Closing time was guessed.",
|
|---|
| 9644 | "date parameter needed": "Date parameter needed."
|
|---|
| 9645 | };
|
|---|
| 9646 | if (typeof exports === "object") {
|
|---|
| 9647 | var moment, SunCalc, i18n;
|
|---|
| 9648 | SunCalc = root.SunCalc || require("suncalc");
|
|---|
| 9649 | try {
|
|---|
| 9650 | moment = root.moment || require("moment")
|
|---|
| 9651 | } catch (error_pass) {
|
|---|
| 9652 | error_pass
|
|---|
| 9653 | }
|
|---|
| 9654 | try {
|
|---|
| 9655 | i18n = require("./locales/core")
|
|---|
| 9656 | } catch (error_pass) {
|
|---|
| 9657 | error_pass
|
|---|
| 9658 | }
|
|---|
| 9659 | module.exports = factory(SunCalc, moment, i18n, holiday_definitions, word_error_correction, lang)
|
|---|
| 9660 | } else if (typeof define === "function" && define.amd) {
|
|---|
| 9661 | define(["suncalc", "moment", "./locales/core"], function (SunCalc, moment, i18n) {
|
|---|
| 9662 | root.opening_hours = factory(SunCalc, moment, i18n, holiday_definitions, word_error_correction, lang);
|
|---|
| 9663 | return root.opening_hours
|
|---|
| 9664 | })
|
|---|
| 9665 | } else {
|
|---|
| 9666 | root.opening_hours = factory(root.SunCalc, root.moment, root.i18n, holiday_definitions, word_error_correction, lang)
|
|---|
| 9667 | }
|
|---|
| 9668 | })(this, function (SunCalc, moment, i18n, holiday_definitions, word_error_correction, lang) {
|
|---|
| 9669 | return function (value, nominatim_object, optional_conf_parm) {
|
|---|
| 9670 | var word_value_replacement = {
|
|---|
| 9671 | dawn: 60 * 5 + 30,
|
|---|
| 9672 | sunrise: 60 * 6,
|
|---|
| 9673 | sunset: 60 * 18,
|
|---|
| 9674 | dusk: 60 * 18 + 30
|
|---|
| 9675 | };
|
|---|
| 9676 | var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|---|
| 9677 | var weekdays = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
|
|---|
| 9678 | var default_prettify_conf = {
|
|---|
| 9679 | zero_pad_hour: true,
|
|---|
| 9680 | one_zero_if_hour_zero: false,
|
|---|
| 9681 | leave_off_closed: true,
|
|---|
| 9682 | keyword_for_off_closed: "off",
|
|---|
| 9683 | rule_sep_string: " ",
|
|---|
| 9684 | print_semicolon: true,
|
|---|
| 9685 | leave_weekday_sep_one_day_betw: true,
|
|---|
| 9686 | sep_one_day_between: ",",
|
|---|
| 9687 | zero_pad_month_and_week_numbers: true,
|
|---|
| 9688 | locale: "en"
|
|---|
| 9689 | };
|
|---|
| 9690 | var osm_tag_defaults = {
|
|---|
| 9691 | opening_hours: {
|
|---|
| 9692 | mode: 0,
|
|---|
| 9693 | warn_for_PH_missing: true
|
|---|
| 9694 | },
|
|---|
| 9695 | collection_times: {
|
|---|
| 9696 | mode: 2
|
|---|
| 9697 | },
|
|---|
| 9698 | "opening_hours:.+": {
|
|---|
| 9699 | mode: 0
|
|---|
| 9700 | },
|
|---|
| 9701 | ".+:opening_hours": {
|
|---|
| 9702 | mode: 0
|
|---|
| 9703 | },
|
|---|
| 9704 | ".+:opening_hours:.+": {
|
|---|
| 9705 | mode: 0
|
|---|
| 9706 | },
|
|---|
| 9707 | smoking_hours: {
|
|---|
| 9708 | mode: 0
|
|---|
| 9709 | },
|
|---|
| 9710 | service_times: {
|
|---|
| 9711 | mode: 2
|
|---|
| 9712 | },
|
|---|
| 9713 | happy_hours: {
|
|---|
| 9714 | mode: 0
|
|---|
| 9715 | },
|
|---|
| 9716 | lit: {
|
|---|
| 9717 | mode: 0,
|
|---|
| 9718 | map: {
|
|---|
| 9719 | yes: 'sunset-sunrise open "specified as yes: At night (unknown time schedule or daylight detection)"',
|
|---|
| 9720 | automatic: 'unknown "specified as automatic: When someone enters the way the lights are turned on."',
|
|---|
| 9721 | no: 'off "specified as no: There are no lights installed."',
|
|---|
| 9722 | interval: 'unknown "specified as interval"',
|
|---|
| 9723 | limited: 'unknown "specified as limited"'
|
|---|
| 9724 | }
|
|---|
| 9725 | }
|
|---|
| 9726 | };
|
|---|
| 9727 | var minutes_in_day = 60 * 24;
|
|---|
| 9728 | var msec_in_day = 1e3 * 60 * minutes_in_day;
|
|---|
| 9729 | var library_name = "opening_hours.js";
|
|---|
| 9730 | var repository_url = "https://github.com/ypid/" + library_name;
|
|---|
| 9731 | var locale = "en";
|
|---|
| 9732 | if (typeof i18n === "object") {
|
|---|
| 9733 | locale = i18n.lng()
|
|---|
| 9734 | }
|
|---|
| 9735 | var t = function (str, variables) {
|
|---|
| 9736 | if (typeof i18n === "object" && typeof i18n.t === "function" && typeof locale === "string" && ["de"].indexOf(locale) !== -1) {
|
|---|
| 9737 | var global_locale = i18n.lng();
|
|---|
| 9738 | if (global_locale !== locale) {
|
|---|
| 9739 | i18n.setLng(locale)
|
|---|
| 9740 | }
|
|---|
| 9741 | var text = i18n.t("opening_hours:texts." + str, variables);
|
|---|
| 9742 | if (global_locale !== locale) {
|
|---|
| 9743 | i18n.setLng(global_locale)
|
|---|
| 9744 | }
|
|---|
| 9745 | return text
|
|---|
| 9746 | }
|
|---|
| 9747 | var text = lang[str];
|
|---|
| 9748 | if (typeof text === "undefined") {
|
|---|
| 9749 | text = str
|
|---|
| 9750 | }
|
|---|
| 9751 | return text.replace(/__([^_]*)__/g, function (match, c) {
|
|---|
| 9752 | return typeof variables[c] !== "undefined" ? variables[c] : match
|
|---|
| 9753 | })
|
|---|
| 9754 | };
|
|---|
| 9755 | var location_cc, location_state, lat, lon;
|
|---|
| 9756 | if (typeof nominatim_object === "object" && nominatim_object !== null) {
|
|---|
| 9757 | if (typeof nominatim_object.address === "object") {
|
|---|
| 9758 | if (typeof nominatim_object.address.country_code === "string") {
|
|---|
| 9759 | location_cc = nominatim_object.address.country_code
|
|---|
| 9760 | }
|
|---|
| 9761 | if (typeof nominatim_object.address.state === "string") {
|
|---|
| 9762 | location_state = nominatim_object.address.state
|
|---|
| 9763 | } else if (typeof nominatim_object.address.county === "string") {
|
|---|
| 9764 | location_state = nominatim_object.address.county
|
|---|
| 9765 | }
|
|---|
| 9766 | }
|
|---|
| 9767 | if (typeof nominatim_object.lon === "string" && typeof nominatim_object.lat === "string") {
|
|---|
| 9768 | lat = nominatim_object.lat;
|
|---|
| 9769 | lon = nominatim_object.lon
|
|---|
| 9770 | }
|
|---|
| 9771 | } else if (nominatim_object === null) {
|
|---|
| 9772 | location_cc = "de";
|
|---|
| 9773 | location_state = "Baden-Württemberg";
|
|---|
| 9774 | lat = "49.5400039";
|
|---|
| 9775 | lon = "9.7937133"
|
|---|
| 9776 | } else if (typeof nominatim_object !== "undefined") {
|
|---|
| 9777 | throw "The nominatim_object parameter is of unknown type." + " Given " + typeof nominatim_object + ", expected object."
|
|---|
| 9778 | }
|
|---|
| 9779 | var warnings_severity = 4;
|
|---|
| 9780 | var oh_mode;
|
|---|
| 9781 | var oh_map_value = false;
|
|---|
| 9782 | var oh_key, oh_regex_key;
|
|---|
| 9783 | if (typeof optional_conf_parm === "number") {
|
|---|
| 9784 | oh_mode = optional_conf_parm
|
|---|
| 9785 | } else if (typeof optional_conf_parm === "object") {
|
|---|
| 9786 | locale = optional_conf_parm["locale"];
|
|---|
| 9787 | if (checkOptionalConfParm("mode", "number")) {
|
|---|
| 9788 | oh_mode = optional_conf_parm["mode"]
|
|---|
| 9789 | }
|
|---|
| 9790 | if (checkOptionalConfParm("warnings_severity", "number")) {
|
|---|
| 9791 | warnings_severity = optional_conf_parm["warnings_severity"];
|
|---|
| 9792 | if ([0, 1, 2, 3, 4, 5, 6, 7].indexOf(warnings_severity) === -1) {
|
|---|
| 9793 | throw t("warnings severity", {
|
|---|
| 9794 | severity: warnings_severity,
|
|---|
| 9795 | allowed: "[ 0, 1, 2, 3, 4, 5, 6, 7 ]"
|
|---|
| 9796 | })
|
|---|
| 9797 | }
|
|---|
| 9798 | }
|
|---|
| 9799 | if (checkOptionalConfParm("tag_key", "string")) {
|
|---|
| 9800 | oh_key = optional_conf_parm["tag_key"]
|
|---|
| 9801 | }
|
|---|
| 9802 | if (checkOptionalConfParm("map_value", "boolean")) {
|
|---|
| 9803 | oh_map_value = optional_conf_parm.map_value
|
|---|
| 9804 | }
|
|---|
| 9805 | } else if (typeof optional_conf_parm !== "undefined") {
|
|---|
| 9806 | throw t("optional conf parm type", {
|
|---|
| 9807 | given: typeof optional_conf_parm
|
|---|
| 9808 | })
|
|---|
| 9809 | }
|
|---|
| 9810 | if (typeof oh_key === "string") {
|
|---|
| 9811 | oh_regex_key = getRegexKeyForKeyFromOsmDefaults(oh_key);
|
|---|
| 9812 | if (oh_map_value && typeof osm_tag_defaults[oh_regex_key] === "object" && typeof osm_tag_defaults[oh_regex_key]["map"] === "object" && typeof osm_tag_defaults[oh_regex_key]["map"][value] === "string") {
|
|---|
| 9813 | value = osm_tag_defaults[oh_regex_key]["map"][value]
|
|---|
| 9814 | }
|
|---|
| 9815 | } else if (oh_map_value) {
|
|---|
| 9816 | throw t("conf param tag key missing")
|
|---|
| 9817 | }
|
|---|
| 9818 | if (typeof oh_mode === "undefined") {
|
|---|
| 9819 | if (typeof oh_key === "string") {
|
|---|
| 9820 | if (typeof osm_tag_defaults[oh_regex_key]["mode"] === "number") {
|
|---|
| 9821 | oh_mode = osm_tag_defaults[oh_regex_key]["mode"]
|
|---|
| 9822 | } else {
|
|---|
| 9823 | oh_mode = 0
|
|---|
| 9824 | }
|
|---|
| 9825 | } else {
|
|---|
| 9826 | oh_mode = 0
|
|---|
| 9827 | }
|
|---|
| 9828 | } else if ([0, 1, 2].indexOf(oh_mode) === -1) {
|
|---|
| 9829 | throw t("conf param mode invalid", {
|
|---|
| 9830 | given: oh_mode,
|
|---|
| 9831 | allowed: "[ 0, 1, 2 ]"
|
|---|
| 9832 | })
|
|---|
| 9833 | }
|
|---|
| 9834 | if (typeof value !== "string") {
|
|---|
| 9835 | throw t("no string")
|
|---|
| 9836 | }
|
|---|
| 9837 | if (value.match(/^(?:\s*;?\s*)+$/)) {
|
|---|
| 9838 | throw t("nothing")
|
|---|
| 9839 | }
|
|---|
| 9840 | var parsing_warnings = [];
|
|---|
| 9841 | var done_with_warnings = false;
|
|---|
| 9842 | var done_with_selector_reordering = false;
|
|---|
| 9843 | var done_with_selector_reordering_warnings = false;
|
|---|
| 9844 | var tokens = tokenize(value);
|
|---|
| 9845 | var prettified_value = "";
|
|---|
| 9846 | var week_stable = true;
|
|---|
| 9847 | var rules = [];
|
|---|
| 9848 | var new_tokens = [];
|
|---|
| 9849 | for (var nrule = 0; nrule < tokens.length; nrule++) {
|
|---|
| 9850 | if (tokens[nrule][0].length === 0) {
|
|---|
| 9851 | parsing_warnings.push([nrule, -1, t("nothing useful") + (nrule === tokens.length - 1 && nrule > 0 && !tokens[nrule][1] ? " " + t("programmers joke") : "")]);
|
|---|
| 9852 | continue
|
|---|
| 9853 | }
|
|---|
| 9854 | var continue_at = 0;
|
|---|
| 9855 | var next_rule_is_additional = false;
|
|---|
| 9856 | do {
|
|---|
| 9857 | if (continue_at === tokens[nrule][0].length)
|
|---|
| 9858 | break;
|
|---|
| 9859 | var selectors = {
|
|---|
| 9860 | time: [],
|
|---|
| 9861 | wraptime: [],
|
|---|
| 9862 | weekday: [],
|
|---|
| 9863 | holiday: [],
|
|---|
| 9864 | week: [],
|
|---|
| 9865 | month: [],
|
|---|
| 9866 | monthday: [],
|
|---|
| 9867 | year: [],
|
|---|
| 9868 | date: [],
|
|---|
| 9869 | fallback: tokens[nrule][1],
|
|---|
| 9870 | additional: continue_at ? true : false,
|
|---|
| 9871 | meaning: true,
|
|---|
| 9872 | unknown: false,
|
|---|
| 9873 | comment: undefined,
|
|---|
| 9874 | build_from_token_rule: undefined
|
|---|
| 9875 | };
|
|---|
| 9876 | selectors.build_from_token_rule = [nrule, continue_at, new_tokens.length];
|
|---|
| 9877 | continue_at = parseGroup(tokens[nrule][0], continue_at, selectors, nrule);
|
|---|
| 9878 | if (typeof continue_at === "object") {
|
|---|
| 9879 | continue_at = continue_at[0]
|
|---|
| 9880 | } else {
|
|---|
| 9881 | continue_at = 0
|
|---|
| 9882 | }
|
|---|
| 9883 | new_tokens.push([tokens[nrule][0].slice(selectors.build_from_token_rule[1], continue_at === 0 ? tokens[nrule][0].length : continue_at), tokens[nrule][1], tokens[nrule][2]]);
|
|---|
| 9884 | if (next_rule_is_additional && new_tokens.length > 1) {
|
|---|
| 9885 | new_tokens[new_tokens.length - 1][0].unshift(new_tokens[new_tokens.length - 2][0].pop())
|
|---|
| 9886 | }
|
|---|
| 9887 | next_rule_is_additional = continue_at === 0 ? false : true;
|
|---|
| 9888 | var selector_elements = ["year", "holiday", "month", "monthday", "week", "weekday"];
|
|---|
| 9889 | for (var selector_ind in selector_elements) {
|
|---|
| 9890 | if (selectors[selector_elements[selector_ind]].length > 0) {
|
|---|
| 9891 | selectors.date.push(selectors[selector_elements[selector_ind]]);
|
|---|
| 9892 | selectors[selector_elements[selector_ind]] = []
|
|---|
| 9893 | }
|
|---|
| 9894 | }
|
|---|
| 9895 | rules.push(selectors);
|
|---|
| 9896 | if (selectors.wraptime.length > 0) {
|
|---|
| 9897 | var wrapselectors = {
|
|---|
| 9898 | time: selectors.wraptime,
|
|---|
| 9899 | date: [],
|
|---|
| 9900 | meaning: selectors.meaning,
|
|---|
| 9901 | unknown: selectors.unknown,
|
|---|
| 9902 | comment: selectors.comment,
|
|---|
| 9903 | wrapped: true,
|
|---|
| 9904 | build_from_token_rule: selectors.build_from_token_rule
|
|---|
| 9905 | };
|
|---|
| 9906 | for (var dselg = 0; dselg < selectors.date.length; dselg++) {
|
|---|
| 9907 | wrapselectors.date.push([]);
|
|---|
| 9908 | for (var dsel = 0; dsel < selectors.date[dselg].length; dsel++) {
|
|---|
| 9909 | wrapselectors.date[wrapselectors.date.length - 1].push(generateDateShifter(selectors.date[dselg][dsel], -msec_in_day))
|
|---|
| 9910 | }
|
|---|
| 9911 | }
|
|---|
| 9912 | rules.push(wrapselectors)
|
|---|
| 9913 | }
|
|---|
| 9914 | } while (continue_at)
|
|---|
| 9915 | }
|
|---|
| 9916 |
|
|---|
| 9917 | function getRegexKeyForKeyFromOsmDefaults(key) {
|
|---|
| 9918 | var regex_key;
|
|---|
| 9919 | for (var osm_key in osm_tag_defaults) {
|
|---|
| 9920 | if (key === osm_key) {
|
|---|
| 9921 | regex_key = osm_key;
|
|---|
| 9922 | break
|
|---|
| 9923 | } else if (key.match(osm_key)) {
|
|---|
| 9924 | regex_key = osm_key
|
|---|
| 9925 | }
|
|---|
| 9926 | }
|
|---|
| 9927 | return regex_key
|
|---|
| 9928 | }
|
|---|
| 9929 |
|
|---|
| 9930 | function checkOptionalConfParm(key, expected_type) {
|
|---|
| 9931 | if (typeof optional_conf_parm[key] === expected_type) {
|
|---|
| 9932 | return true
|
|---|
| 9933 | } else if (typeof optional_conf_parm[key] !== "undefined") {
|
|---|
| 9934 | throw t("conf param unkown type", {
|
|---|
| 9935 | key: key,
|
|---|
| 9936 | given: typeof optional_conf_parm[key],
|
|---|
| 9937 | expected: expected_type
|
|---|
| 9938 | })
|
|---|
| 9939 | }
|
|---|
| 9940 | return false
|
|---|
| 9941 | }
|
|---|
| 9942 |
|
|---|
| 9943 | function formatWarnErrorMessage(nrule, at, message) {
|
|---|
| 9944 | if (typeof nrule === "number") {
|
|---|
| 9945 | var pos = 0;
|
|---|
| 9946 | if (nrule === -1) {
|
|---|
| 9947 | pos = value.length - at
|
|---|
| 9948 | } else {
|
|---|
| 9949 | if (typeof tokens[nrule][0][at] === "undefined") {
|
|---|
| 9950 | if (typeof tokens[nrule][0] && at === -1) {
|
|---|
| 9951 | pos = value.length;
|
|---|
| 9952 | if (typeof tokens[nrule + 1] === "object" && typeof tokens[nrule + 1][2] === "number") {
|
|---|
| 9953 | pos -= tokens[nrule + 1][2]
|
|---|
| 9954 | } else if (typeof tokens[nrule][2] === "number") {
|
|---|
| 9955 | pos -= tokens[nrule][2]
|
|---|
| 9956 | }
|
|---|
| 9957 | } else {
|
|---|
| 9958 | formatLibraryBugMessage("Bug in warning generation code which could not determine the exact position of the warning or error in value.");
|
|---|
| 9959 | pos = value.length;
|
|---|
| 9960 | if (typeof tokens[nrule][2] === "number") {
|
|---|
| 9961 | pos -= tokens[nrule][2];
|
|---|
| 9962 | console.warn("Last token for rule: " + tokens[nrule]);
|
|---|
| 9963 | console.log(value.substring(0, pos) + " <--- (" + message + ")");
|
|---|
| 9964 | console.log("\n")
|
|---|
| 9965 | }
|
|---|
| 9966 | {
|
|---|
| 9967 | console.warn("tokens[nrule][2] is undefined. This is ok if nrule is the last rule.")
|
|---|
| 9968 | }
|
|---|
| 9969 | }
|
|---|
| 9970 | } else {
|
|---|
| 9971 | pos = value.length;
|
|---|
| 9972 | if (typeof tokens[nrule][0][at + 1] === "object") {
|
|---|
| 9973 | pos -= tokens[nrule][0][at + 1][2]
|
|---|
| 9974 | } else if (typeof tokens[nrule][2] === "number") {
|
|---|
| 9975 | pos -= tokens[nrule][2]
|
|---|
| 9976 | }
|
|---|
| 9977 | }
|
|---|
| 9978 | }
|
|---|
| 9979 | return value.substring(0, pos) + " <--- (" + message + ")"
|
|---|
| 9980 | } else if (typeof nrule === "string") {
|
|---|
| 9981 | return nrule.substring(0, at) + " <--- (" + message + ")"
|
|---|
| 9982 | }
|
|---|
| 9983 | }
|
|---|
| 9984 |
|
|---|
| 9985 | function formatLibraryBugMessage(message, text_template) {
|
|---|
| 9986 | if (typeof message === "undefined") {
|
|---|
| 9987 | message = ""
|
|---|
| 9988 | } else {
|
|---|
| 9989 | message = " " + message
|
|---|
| 9990 | }
|
|---|
| 9991 | if (typeof text_template !== "string") {
|
|---|
| 9992 | text_template = "library bug"
|
|---|
| 9993 | }
|
|---|
| 9994 | message = t(text_template, {
|
|---|
| 9995 | value: value,
|
|---|
| 9996 | url: repository_url,
|
|---|
| 9997 | message: message
|
|---|
| 9998 | });
|
|---|
| 9999 | console.error(message);
|
|---|
| 10000 | return message
|
|---|
| 10001 | }
|
|---|
| 10002 |
|
|---|
| 10003 | function tokenize(value) {
|
|---|
| 10004 | var all_tokens = [];
|
|---|
| 10005 | var curr_rule_tokens = [];
|
|---|
| 10006 | var last_rule_fallback_terminated = false;
|
|---|
| 10007 | while (value !== "") {
|
|---|
| 10008 | var tmp;
|
|---|
| 10009 | if (tmp = value.match(/^week\b/i)) {
|
|---|
| 10010 | curr_rule_tokens.push([tmp[0].toLowerCase(), tmp[0].toLowerCase(), value.length]);
|
|---|
| 10011 | value = value.substr(tmp[0].length)
|
|---|
| 10012 | } else if (tmp = value.match(/^(?:off|closed|open|unknown)\b/i)) {
|
|---|
| 10013 | curr_rule_tokens.push([tmp[0].toLowerCase(), "state", value.length]);
|
|---|
| 10014 | value = value.substr(tmp[0].length)
|
|---|
| 10015 | } else if (tmp = value.match(/^24\/7/i)) {
|
|---|
| 10016 | curr_rule_tokens.push([tmp[0], tmp[0], value.length]);
|
|---|
| 10017 | value = value.substr(tmp[0].length)
|
|---|
| 10018 | } else if (tmp = value.match(/^(?:PH|SH)/i)) {
|
|---|
| 10019 | curr_rule_tokens.push([tmp[0].toUpperCase(), "holiday", value.length]);
|
|---|
| 10020 | value = value.substr(2)
|
|---|
| 10021 | } else if (tmp = value.match(/^(&|_|→|–|−|—|ー|=|·|öffnungszeit(?:en)?:?|opening_hours\s*=|\?|~|~|:|°°|always (?:open|closed)|24x7|24 hours 7 days a week|24 hours|7 ?days(?:(?: a |\/)week)?|7j?\/7|all days?|every day|(:?bis|till?|-|–)? ?(?:open ?end|late)|(?:(?:one )?day (?:before|after) )?(?:school|public) holidays?|days?\b|до|рм|ам|jours fériés|on work days?|sonntags?|(?:nur |an )?sonn-?(?:(?: und |\/)feiertag(?:s|en?)?)?|(?:an )?feiertag(?:s|en?)?|(?:nach|on|by) (?:appointments?|vereinbarung|absprache)|p\.m\.|a\.m\.|[_a-zäößàáéøčěíúýřПнВсо]+\b|à|á|mo|tu|we|th|fr|sa|su|jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\.?/i)) {
|
|---|
| 10022 | var correct_val = returnCorrectWordOrToken(tmp[1].toLowerCase(), value.length);
|
|---|
| 10023 | if (typeof correct_val === "object") {
|
|---|
| 10024 | curr_rule_tokens.push([correct_val[0], correct_val[1], value.length]);
|
|---|
| 10025 | value = value.substr(tmp[0].length)
|
|---|
| 10026 | } else if (typeof correct_val === "string") {
|
|---|
| 10027 | if (tmp[1].toLowerCase() === "a.m.") {
|
|---|
| 10028 | tmp[1] = "am"
|
|---|
| 10029 | }
|
|---|
| 10030 | if (tmp[1].toLowerCase() === "p.m.") {
|
|---|
| 10031 | tmp[1] = "pm"
|
|---|
| 10032 | }
|
|---|
| 10033 | if (tmp[1].toLowerCase() === "am" || tmp[1].toLowerCase() === "pm") {
|
|---|
| 10034 | var hours_token_at = curr_rule_tokens.length - 1;
|
|---|
| 10035 | var hours_token;
|
|---|
| 10036 | if (hours_token_at >= 0) {
|
|---|
| 10037 | if (hours_token_at - 2 >= 0 && matchTokens(curr_rule_tokens, hours_token_at - 2, "number", "timesep", "number")) {
|
|---|
| 10038 | hours_token_at -= 2;
|
|---|
| 10039 | hours_token = curr_rule_tokens[hours_token_at]
|
|---|
| 10040 | } else if (matchTokens(curr_rule_tokens, hours_token_at, "number")) {
|
|---|
| 10041 | hours_token = curr_rule_tokens[hours_token_at]
|
|---|
| 10042 | }
|
|---|
| 10043 | if (typeof hours_token === "object") {
|
|---|
| 10044 | if (tmp[1].toLowerCase() === "pm" && hours_token[0] < 12) {
|
|---|
| 10045 | hours_token[0] += 12
|
|---|
| 10046 | }
|
|---|
| 10047 | if (tmp[1].toLowerCase() === "am" && hours_token[0] === 12) {
|
|---|
| 10048 | hours_token[0] = 0
|
|---|
| 10049 | }
|
|---|
| 10050 | curr_rule_tokens[hours_token_at] = hours_token
|
|---|
| 10051 | }
|
|---|
| 10052 | }
|
|---|
| 10053 | }
|
|---|
| 10054 | var correct_tokens = tokenize(correct_val)[0];
|
|---|
| 10055 | if (correct_tokens[1] === true) {
|
|---|
| 10056 | throw formatLibraryBugMessage()
|
|---|
| 10057 | }
|
|---|
| 10058 | for (var i = 0; i < correct_tokens[0].length; i++) {
|
|---|
| 10059 | curr_rule_tokens.push([correct_tokens[0][i][0], correct_tokens[0][i][1], value.length])
|
|---|
| 10060 | }
|
|---|
| 10061 | value = value.substr(tmp[0].length)
|
|---|
| 10062 | } else {
|
|---|
| 10063 | curr_rule_tokens.push([value[0].toLowerCase(), value[0].toLowerCase(), value.length - 1]);
|
|---|
| 10064 | value = value.substr(1)
|
|---|
| 10065 | }
|
|---|
| 10066 | } else if (tmp = value.match(/^\d+/)) {
|
|---|
| 10067 | if (Number(tmp[0]) > 1900) {
|
|---|
| 10068 | curr_rule_tokens.push([Number(tmp[0]), "year", value.length]);
|
|---|
| 10069 | if (Number(tmp[0]) >= 2100)
|
|---|
| 10070 | parsing_warnings.push([-1, value.length - 1, t("interpreted as year", {
|
|---|
| 10071 | number: Number(tmp[0])
|
|---|
| 10072 | })])
|
|---|
| 10073 | } else {
|
|---|
| 10074 | curr_rule_tokens.push([Number(tmp[0]), "number", value.length])
|
|---|
| 10075 | }
|
|---|
| 10076 | value = value.substr(tmp[0].length)
|
|---|
| 10077 | } else if (tmp = value.match(/^"([^"]+)"/)) {
|
|---|
| 10078 | curr_rule_tokens.push([tmp[1], "comment", value.length]);
|
|---|
| 10079 | value = value.substr(tmp[0].length)
|
|---|
| 10080 | } else if (tmp = value.match(/^(["'„“‚‘’«「『])([^"'“”‘’»」』;|]*)(["'”“‘’»」』])/)) {
|
|---|
| 10081 | for (var pos = 1; pos <= 3; pos += 2) {
|
|---|
| 10082 | var correct_val = returnCorrectWordOrToken(tmp[pos], value.length - (pos === 3 ? tmp[1].length + tmp[2].length : 0));
|
|---|
| 10083 | if (typeof correct_val !== "string" && tmp[pos] !== '"') {
|
|---|
| 10084 | throw formatLibraryBugMessage("A character for error tolerance was allowed in the regular expression" + " but is not covered by word_error_correction" + " which is needed to format a proper message for the user.")
|
|---|
| 10085 | }
|
|---|
| 10086 | }
|
|---|
| 10087 | curr_rule_tokens.push([tmp[2], "comment", value.length]);
|
|---|
| 10088 | value = value.substr(tmp[0].length)
|
|---|
| 10089 | } else if (value.match(/^;/)) {
|
|---|
| 10090 | all_tokens.push([curr_rule_tokens, last_rule_fallback_terminated, value.length]);
|
|---|
| 10091 | value = value.substr(1);
|
|---|
| 10092 | curr_rule_tokens = [];
|
|---|
| 10093 | last_rule_fallback_terminated = false
|
|---|
| 10094 | } else if (value.match(/^\|\|/)) {
|
|---|
| 10095 | if (curr_rule_tokens.length === 0) {
|
|---|
| 10096 | throw formatWarnErrorMessage(-1, value.length - 2, t("rule before fallback empty"))
|
|---|
| 10097 | }
|
|---|
| 10098 | all_tokens.push([curr_rule_tokens, last_rule_fallback_terminated, value.length]);
|
|---|
| 10099 | curr_rule_tokens = [];
|
|---|
| 10100 | value = value.substr(2);
|
|---|
| 10101 | last_rule_fallback_terminated = true
|
|---|
| 10102 | } else if (value.match(/^(?:␣|\s)/)) {
|
|---|
| 10103 | value = value.substr(1)
|
|---|
| 10104 | } else if (tmp = value.match(/^\s+/)) {
|
|---|
| 10105 | value = value.substr(tmp[0].length)
|
|---|
| 10106 | } else if (value.match(/^[:.]/)) {
|
|---|
| 10107 | if (value[0] === "." && !done_with_warnings) {
|
|---|
| 10108 | parsing_warnings.push([-1, value.length - 1, t("hour min separator")])
|
|---|
| 10109 | }
|
|---|
| 10110 | curr_rule_tokens.push([":", "timesep", value.length]);
|
|---|
| 10111 | value = value.substr(1)
|
|---|
| 10112 | } else {
|
|---|
| 10113 | curr_rule_tokens.push([value[0].toLowerCase(), value[0].toLowerCase(), value.length]);
|
|---|
| 10114 | value = value.substr(1)
|
|---|
| 10115 | }
|
|---|
| 10116 | }
|
|---|
| 10117 | all_tokens.push([curr_rule_tokens, last_rule_fallback_terminated]);
|
|---|
| 10118 | return all_tokens
|
|---|
| 10119 | }
|
|---|
| 10120 |
|
|---|
| 10121 | function returnCorrectWordOrToken(word, value_length) {
|
|---|
| 10122 | for (var token_name in word_error_correction) {
|
|---|
| 10123 | for (var comment in word_error_correction[token_name]) {
|
|---|
| 10124 | for (var old_val in word_error_correction[token_name][comment]) {
|
|---|
| 10125 | if (word.match(new RegExp("^" + old_val + "$"))) {
|
|---|
| 10126 | var val = word_error_correction[token_name][comment][old_val];
|
|---|
| 10127 | if (comment === "default") {
|
|---|
| 10128 | return [val, token_name]
|
|---|
| 10129 | } else if (token_name === "wrong_words" && !done_with_warnings) {
|
|---|
| 10130 | parsing_warnings.push([-1, value_length - word.length, comment.replace(/<ko>/, word).replace(/<ok>/, val)]);
|
|---|
| 10131 | return val
|
|---|
| 10132 | } else {
|
|---|
| 10133 | var correct_abbr;
|
|---|
| 10134 | for (correct_abbr in word_error_correction[token_name]["default"]) {
|
|---|
| 10135 | if (word_error_correction[token_name]["default"][correct_abbr] === val)
|
|---|
| 10136 | break
|
|---|
| 10137 | }
|
|---|
| 10138 | if (typeof correct_abbr === "undefined") {
|
|---|
| 10139 | throw formatLibraryBugMessage("Please also include the stacktrace.")
|
|---|
| 10140 | }
|
|---|
| 10141 | if (token_name !== "timevar") {
|
|---|
| 10142 | correct_abbr = correct_abbr.charAt(0).toUpperCase() + correct_abbr.slice(1)
|
|---|
| 10143 | }
|
|---|
| 10144 | if (!done_with_warnings)
|
|---|
| 10145 | parsing_warnings.push([-1, value_length - word.length, comment.replace(/<ko>/, word).replace(/<ok>/, correct_abbr)]);
|
|---|
| 10146 | return [val, token_name]
|
|---|
| 10147 | }
|
|---|
| 10148 | }
|
|---|
| 10149 | }
|
|---|
| 10150 | }
|
|---|
| 10151 | }
|
|---|
| 10152 | return undefined
|
|---|
| 10153 | }
|
|---|
| 10154 |
|
|---|
| 10155 | function getWarnings(it) {
|
|---|
| 10156 | if (warnings_severity < 4) {
|
|---|
| 10157 | return []
|
|---|
| 10158 | }
|
|---|
| 10159 | if (!done_with_warnings && typeof it === "object") {
|
|---|
| 10160 | var wide_range_selector_order = ["year", "month", "week", "holiday"];
|
|---|
| 10161 | var small_range_selector_order = ["weekday", "time", "24/7", "state", "comment"];
|
|---|
| 10162 | var used_selectors = [];
|
|---|
| 10163 | var used_selectors_types_array = [];
|
|---|
| 10164 | var has_token = {};
|
|---|
| 10165 | for (var nrule = 0; nrule < new_tokens.length; nrule++) {
|
|---|
| 10166 | if (new_tokens[nrule][0].length === 0)
|
|---|
| 10167 | continue;
|
|---|
| 10168 | var selector_start_end_type = [0, 0, undefined];
|
|---|
| 10169 | used_selectors[nrule] = {};
|
|---|
| 10170 | used_selectors_types_array[nrule] = [];
|
|---|
| 10171 | do {
|
|---|
| 10172 | selector_start_end_type = getSelectorRange(new_tokens[nrule][0], selector_start_end_type[1]);
|
|---|
| 10173 | for (var token_pos = 0; token_pos <= selector_start_end_type[1]; token_pos++) {
|
|---|
| 10174 | if (typeof new_tokens[nrule][0][token_pos] === "object" && new_tokens[nrule][0][token_pos][0] === "PH") {
|
|---|
| 10175 | has_token["PH"] = true
|
|---|
| 10176 | }
|
|---|
| 10177 | }
|
|---|
| 10178 | if (selector_start_end_type[0] === selector_start_end_type[1] && new_tokens[nrule][0][selector_start_end_type[0]][0] === "24/7") {
|
|---|
| 10179 | has_token["24/7"] = true
|
|---|
| 10180 | }
|
|---|
| 10181 | if (typeof used_selectors[nrule][selector_start_end_type[2]] !== "object") {
|
|---|
| 10182 | used_selectors[nrule][selector_start_end_type[2]] = [selector_start_end_type[1]]
|
|---|
| 10183 | } else {
|
|---|
| 10184 | used_selectors[nrule][selector_start_end_type[2]].push(selector_start_end_type[1])
|
|---|
| 10185 | }
|
|---|
| 10186 | used_selectors_types_array[nrule].push(selector_start_end_type[2]);
|
|---|
| 10187 | selector_start_end_type[1]++
|
|---|
| 10188 | } while (selector_start_end_type[1] < new_tokens[nrule][0].length)
|
|---|
| 10189 | }
|
|---|
| 10190 | for (var nrule = 0; nrule < used_selectors.length; nrule++) {
|
|---|
| 10191 | for (var selector_type in used_selectors[nrule]) {
|
|---|
| 10192 | if (used_selectors[nrule][selector_type].length > 1) {
|
|---|
| 10193 | parsing_warnings.push([nrule, used_selectors[nrule][selector_type][used_selectors[nrule][selector_type].length - 1], t("use multi", {
|
|---|
| 10194 | count: used_selectors[nrule][selector_type].length,
|
|---|
| 10195 | part2: selector_type.match(/^(?:comment|state)/) ? t("selector multi 2a", {
|
|---|
| 10196 | what: selector_type === "state" ? t("selector state") : t("comments")
|
|---|
| 10197 | }) : t("selector multi 2b", {
|
|---|
| 10198 | what: t(selector_type + (selector_type.match(/^(?:month|weekday)$/) ? "s" : " ranges"))
|
|---|
| 10199 | })
|
|---|
| 10200 | })]);
|
|---|
| 10201 | done_with_selector_reordering = true
|
|---|
| 10202 | }
|
|---|
| 10203 | }
|
|---|
| 10204 | if (typeof used_selectors[nrule].state === "object" && Object.keys(used_selectors[nrule]).length === 1) {
|
|---|
| 10205 | if (nrule !== 0) {
|
|---|
| 10206 | parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t("default state")])
|
|---|
| 10207 | }
|
|---|
| 10208 | } else if (typeof used_selectors[nrule].time === "undefined") {
|
|---|
| 10209 | if (typeof used_selectors[nrule].state === "object" && new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === "open" && typeof used_selectors[nrule].comment === "undefined" || typeof used_selectors[nrule].comment === "undefined" && typeof used_selectors[nrule].state === "undefined" && typeof used_selectors[nrule]["24/7"] === "undefined") {
|
|---|
| 10210 | parsing_warnings.push([nrule, new_tokens[nrule][0].length - 1, t("vague")])
|
|---|
| 10211 | }
|
|---|
| 10212 | }
|
|---|
| 10213 | if (typeof used_selectors[nrule].comment === "object" && new_tokens[nrule][0][used_selectors[nrule].comment[0]][0].length === 0) {
|
|---|
| 10214 | parsing_warnings.push([nrule, used_selectors[nrule].comment[0], t("empty comment")])
|
|---|
| 10215 | }
|
|---|
| 10216 | for (var i = 0; i < used_selectors_types_array[nrule].length - 1; i++) {
|
|---|
| 10217 | var selector_type = used_selectors_types_array[nrule][i];
|
|---|
| 10218 | var next_selector_type = used_selectors_types_array[nrule][i + 1];
|
|---|
| 10219 | if (wide_range_selector_order.indexOf(selector_type) !== -1 && wide_range_selector_order.indexOf(next_selector_type) !== -1 || small_range_selector_order.indexOf(selector_type) !== -1 && small_range_selector_order.indexOf(next_selector_type) !== -1) {
|
|---|
| 10220 | if (new_tokens[nrule][0][used_selectors[nrule][selector_type][0]][0] === ":") {
|
|---|
| 10221 | parsing_warnings.push([nrule, used_selectors[nrule][selector_type][0], t("separator_for_readability")])
|
|---|
| 10222 | }
|
|---|
| 10223 | }
|
|---|
| 10224 | }
|
|---|
| 10225 | if (typeof new_tokens[nrule][0][0] === "object" && new_tokens[nrule][0][0][0] === "," && new_tokens[nrule][0][0][1] === "rule separator" && typeof used_selectors[nrule].state === "object" && (new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === "closed" || new_tokens[nrule][0][used_selectors[nrule].state[0]][0] === "off")) {
|
|---|
| 10226 | }
|
|---|
| 10227 | }
|
|---|
| 10228 | var has_advanced = it.advance();
|
|---|
| 10229 | if (has_advanced === true && has_token["24/7"] && !done_with_warnings) {
|
|---|
| 10230 | parsing_warnings.push([-1, 0, t("strange 24/7")])
|
|---|
| 10231 | }
|
|---|
| 10232 | if (warnings_severity >= 5 && !has_token["PH"] && !has_token["24/7"] && !done_with_warnings && (typeof oh_key === "string" && osm_tag_defaults[oh_regex_key]["warn_for_PH_missing"] || typeof oh_key !== "string")) {
|
|---|
| 10233 | var keys_with_warn_for_PH_missing = [];
|
|---|
| 10234 | for (var key in osm_tag_defaults) {
|
|---|
| 10235 | if (osm_tag_defaults[key]["warn_for_PH_missing"]) {
|
|---|
| 10236 | keys_with_warn_for_PH_missing.push(key)
|
|---|
| 10237 | }
|
|---|
| 10238 | }
|
|---|
| 10239 | parsing_warnings.push([-1, 0, t("public holiday", {
|
|---|
| 10240 | part2: typeof oh_key !== "string" ? t("public holiday part2", {
|
|---|
| 10241 | keys: keys_with_warn_for_PH_missing.join(", ")
|
|---|
| 10242 | }) : ""
|
|---|
| 10243 | })])
|
|---|
| 10244 | }
|
|---|
| 10245 | prettifyValue()
|
|---|
| 10246 | }
|
|---|
| 10247 | done_with_warnings = true;
|
|---|
| 10248 | var warnings = [];
|
|---|
| 10249 | for (var i = 0; i < parsing_warnings.length; i++) {
|
|---|
| 10250 | warnings.push(formatWarnErrorMessage(parsing_warnings[i][0], parsing_warnings[i][1], parsing_warnings[i][2]))
|
|---|
| 10251 | }
|
|---|
| 10252 | return warnings
|
|---|
| 10253 | }
|
|---|
| 10254 |
|
|---|
| 10255 | function tokenIsTheBeginOfSelector(tokens, at) {
|
|---|
| 10256 | if (typeof tokens[at][3] === "string") {
|
|---|
| 10257 | return 3
|
|---|
| 10258 | } else if (tokens[at][1] === "comment" || tokens[at][1] === "state" || tokens[at][1] === "24/7" || tokens[at][1] === "rule separator") {
|
|---|
| 10259 | return 1
|
|---|
| 10260 | } else {
|
|---|
| 10261 | return false
|
|---|
| 10262 | }
|
|---|
| 10263 | }
|
|---|
| 10264 |
|
|---|
| 10265 | function getSelectorRange(tokens, at) {
|
|---|
| 10266 | var selector_start = at,
|
|---|
| 10267 | selector_end, pos_in_token_array;
|
|---|
| 10268 | for (; selector_start >= 0; selector_start--) {
|
|---|
| 10269 | pos_in_token_array = tokenIsTheBeginOfSelector(tokens, selector_start);
|
|---|
| 10270 | if (pos_in_token_array)
|
|---|
| 10271 | break
|
|---|
| 10272 | }
|
|---|
| 10273 | selector_end = selector_start;
|
|---|
| 10274 | if (pos_in_token_array === 1) {
|
|---|
| 10275 | if (selector_end + 1 < tokens.length && tokens[selector_end + 1][0] === ":")
|
|---|
| 10276 | selector_end++;
|
|---|
| 10277 | return [selector_start, selector_end, tokens[selector_start][pos_in_token_array]]
|
|---|
| 10278 | }
|
|---|
| 10279 | for (selector_end++; selector_end < tokens.length; selector_end++) {
|
|---|
| 10280 | if (tokenIsTheBeginOfSelector(tokens, selector_end))
|
|---|
| 10281 | return [selector_start, selector_end - 1, tokens[selector_start][pos_in_token_array]]
|
|---|
| 10282 | }
|
|---|
| 10283 | return [selector_start, selector_end - 1, tokens[selector_start][pos_in_token_array]]
|
|---|
| 10284 | }
|
|---|
| 10285 |
|
|---|
| 10286 | function prettifyValue(argument_hash) {
|
|---|
| 10287 | var user_conf = {};
|
|---|
| 10288 | var get_internals = false;
|
|---|
| 10289 | var rule_index;
|
|---|
| 10290 | prettified_value = "";
|
|---|
| 10291 | var prettified_value_array = [];
|
|---|
| 10292 | if (typeof argument_hash === "object") {
|
|---|
| 10293 | if (typeof argument_hash.conf === "object") {
|
|---|
| 10294 | user_conf = argument_hash.conf
|
|---|
| 10295 | }
|
|---|
| 10296 | if (typeof argument_hash.rule_index === "number") {
|
|---|
| 10297 | rule_index = argument_hash.rule_index
|
|---|
| 10298 | }
|
|---|
| 10299 | if (argument_hash.get_internals === true) {
|
|---|
| 10300 | get_internals = true
|
|---|
| 10301 | }
|
|---|
| 10302 | }
|
|---|
| 10303 | for (var key in default_prettify_conf) {
|
|---|
| 10304 | if (typeof user_conf[key] === "undefined") {
|
|---|
| 10305 | user_conf[key] = default_prettify_conf[key]
|
|---|
| 10306 | }
|
|---|
| 10307 | }
|
|---|
| 10308 | if (typeof moment !== "undefined" && typeof user_conf["locale"] === "string" && user_conf["locale"] !== "en") {
|
|---|
| 10309 | var global_locale = moment.locale();
|
|---|
| 10310 | moment.locale("en");
|
|---|
| 10311 | var weekdays_en = moment.weekdaysMin();
|
|---|
| 10312 | var months_en = moment.months().map(function (month) {
|
|---|
| 10313 | return month.substr(0, 3)
|
|---|
| 10314 | });
|
|---|
| 10315 | moment.locale(user_conf["locale"]);
|
|---|
| 10316 | var weekdays_local = moment.weekdaysMin();
|
|---|
| 10317 | var months_local = moment.months().map(function (month) {
|
|---|
| 10318 | return month.substr(0, 3)
|
|---|
| 10319 | });
|
|---|
| 10320 | moment.locale(global_locale)
|
|---|
| 10321 | }
|
|---|
| 10322 | for (var nrule = 0; nrule < new_tokens.length; nrule++) {
|
|---|
| 10323 | if (new_tokens[nrule][0].length === 0)
|
|---|
| 10324 | continue;
|
|---|
| 10325 | if (typeof rule_index === "number") {
|
|---|
| 10326 | if (rule_index !== nrule)
|
|---|
| 10327 | continue
|
|---|
| 10328 | } else {
|
|---|
| 10329 | if (nrule !== 0)
|
|---|
| 10330 | prettified_value += new_tokens[nrule][1] ? user_conf.rule_sep_string + "|| " : (new_tokens[nrule][0][0][1] === "rule separator" ? "," : user_conf.print_semicolon ? ";" : "") + user_conf.rule_sep_string
|
|---|
| 10331 | }
|
|---|
| 10332 | var selector_start_end_type = [0, 0, undefined];
|
|---|
| 10333 | var prettified_group_value = [];
|
|---|
| 10334 | var count = 0;
|
|---|
| 10335 | do {
|
|---|
| 10336 | selector_start_end_type = getSelectorRange(new_tokens[nrule][0], selector_start_end_type[1]);
|
|---|
| 10337 | if (count > 50) {
|
|---|
| 10338 | throw formatLibraryBugMessage("Infinite loop.")
|
|---|
| 10339 | }
|
|---|
| 10340 | if (selector_start_end_type[2] !== "rule separator") {
|
|---|
| 10341 | prettified_group_value.push([selector_start_end_type, prettifySelector(new_tokens[nrule][0], selector_start_end_type[0], selector_start_end_type[1], selector_start_end_type[2], user_conf)])
|
|---|
| 10342 | }
|
|---|
| 10343 | selector_start_end_type[1]++;
|
|---|
| 10344 | count++
|
|---|
| 10345 | } while (selector_start_end_type[1] < new_tokens[nrule][0].length);
|
|---|
| 10346 | var not_sorted_prettified_group_value = prettified_group_value.slice();
|
|---|
| 10347 | if (!done_with_selector_reordering) {
|
|---|
| 10348 | prettified_group_value.sort(function (a, b) {
|
|---|
| 10349 | var selector_order = ["year", "month", "week", "holiday", "weekday", "time", "24/7", "state", "comment"];
|
|---|
| 10350 | return selector_order.indexOf(a[0][2]) - selector_order.indexOf(b[0][2])
|
|---|
| 10351 | })
|
|---|
| 10352 | }
|
|---|
| 10353 | var old_prettified_value_length = prettified_value.length;
|
|---|
| 10354 | if (typeof user_conf["locale"] === "string" && user_conf["locale"] !== "en") {
|
|---|
| 10355 | var global_locale = i18n.lng();
|
|---|
| 10356 | if (global_locale !== user_conf["locale"]) {
|
|---|
| 10357 | i18n.setLng(user_conf["locale"])
|
|---|
| 10358 | }
|
|---|
| 10359 | for (var i = 0; i < prettified_group_value.length; i++) {
|
|---|
| 10360 | var type = prettified_group_value[i][0][2];
|
|---|
| 10361 | if (type === "weekday") {
|
|---|
| 10362 | for (var key in weekdays_en) {
|
|---|
| 10363 | prettified_group_value[i][1] = prettified_group_value[i][1].replace(new RegExp(weekdays_en[key], "g"), weekdays_local[key])
|
|---|
| 10364 | }
|
|---|
| 10365 | } else if (type === "month") {
|
|---|
| 10366 | for (var key in months_en) {
|
|---|
| 10367 | prettified_group_value[i][1] = prettified_group_value[i][1].replace(new RegExp(months_en[key], "g"), months_local[key])
|
|---|
| 10368 | }
|
|---|
| 10369 | } else {
|
|---|
| 10370 | prettified_group_value[i][1] = i18n.t(["opening_hours:pretty." + prettified_group_value[i][1], prettified_group_value[i][1]])
|
|---|
| 10371 | }
|
|---|
| 10372 | }
|
|---|
| 10373 | if (global_locale !== locale) {
|
|---|
| 10374 | i18n.setLng(global_locale)
|
|---|
| 10375 | }
|
|---|
| 10376 | }
|
|---|
| 10377 | prettified_value += prettified_group_value.map(function (array) {
|
|---|
| 10378 | return array[1]
|
|---|
| 10379 | }).join(" ");
|
|---|
| 10380 | prettified_value_array.push(prettified_group_value);
|
|---|
| 10381 | if (!done_with_selector_reordering_warnings) {
|
|---|
| 10382 | for (var i = 0, l = not_sorted_prettified_group_value.length; i < l; i++) {
|
|---|
| 10383 | if (not_sorted_prettified_group_value[i] !== prettified_group_value[i]) {
|
|---|
| 10384 | var length = i + old_prettified_value_length;
|
|---|
| 10385 | for (var x = 0; x <= i; x++) {
|
|---|
| 10386 | length += prettified_group_value[x][1].length
|
|---|
| 10387 | }
|
|---|
| 10388 | parsing_warnings.push([prettified_value, length, t("switched", {
|
|---|
| 10389 | first: prettified_group_value[i][0][2],
|
|---|
| 10390 | second: not_sorted_prettified_group_value[i][0][2]
|
|---|
| 10391 | })])
|
|---|
| 10392 | }
|
|---|
| 10393 | }
|
|---|
| 10394 | }
|
|---|
| 10395 | }
|
|---|
| 10396 | done_with_selector_reordering_warnings = true;
|
|---|
| 10397 | if (get_internals) {
|
|---|
| 10398 | return [prettified_value_array, new_tokens]
|
|---|
| 10399 | } else {
|
|---|
| 10400 | return prettified_value
|
|---|
| 10401 | }
|
|---|
| 10402 | }
|
|---|
| 10403 |
|
|---|
| 10404 | function matchTokens(tokens, at) {
|
|---|
| 10405 | if (at + arguments.length - 2 > tokens.length)
|
|---|
| 10406 | return false;
|
|---|
| 10407 | for (var i = 0; i < arguments.length - 2; i++) {
|
|---|
| 10408 | if (tokens[at + i][1] !== arguments[i + 2])
|
|---|
| 10409 | return false
|
|---|
| 10410 | }
|
|---|
| 10411 | return true
|
|---|
| 10412 | }
|
|---|
| 10413 |
|
|---|
| 10414 | function generateDateShifter(func, shift) {
|
|---|
| 10415 | return function (date) {
|
|---|
| 10416 | var res = func(new Date(date.getTime() + shift));
|
|---|
| 10417 | if (typeof res[1] === "undefined")
|
|---|
| 10418 | return res;
|
|---|
| 10419 | return [res[0], new Date(res[1].getTime() - shift)]
|
|---|
| 10420 | }
|
|---|
| 10421 | }
|
|---|
| 10422 |
|
|---|
| 10423 | function parseGroup(tokens, at, selectors, nrule) {
|
|---|
| 10424 | var rule_modifier_specified = false;
|
|---|
| 10425 | var last_selector = [];
|
|---|
| 10426 | while (at < tokens.length) {
|
|---|
| 10427 | if (matchTokens(tokens, at, "weekday")) {
|
|---|
| 10428 | at = parseWeekdayRange(tokens, at, selectors)
|
|---|
| 10429 | } else if (matchTokens(tokens, at, "24/7")) {
|
|---|
| 10430 | selectors.time.push(function () {
|
|---|
| 10431 | return [true]
|
|---|
| 10432 | });
|
|---|
| 10433 | at++
|
|---|
| 10434 | } else if (matchTokens(tokens, at, "holiday")) {
|
|---|
| 10435 | if (matchTokens(tokens, at + 1, ",")) {
|
|---|
| 10436 | at = parseHoliday(tokens, at, selectors, true)
|
|---|
| 10437 | } else {
|
|---|
| 10438 | at = parseHoliday(tokens, at, selectors, false)
|
|---|
| 10439 | }
|
|---|
| 10440 | week_stable = false
|
|---|
| 10441 | } else if (matchTokens(tokens, at, "month", "number") || matchTokens(tokens, at, "month", "weekday") || matchTokens(tokens, at, "year", "month", "number") || matchTokens(tokens, at, "year", "event") || matchTokens(tokens, at, "event")) {
|
|---|
| 10442 | at = parseMonthdayRange(tokens, at, nrule);
|
|---|
| 10443 | week_stable = false
|
|---|
| 10444 | } else if (matchTokens(tokens, at, "year")) {
|
|---|
| 10445 | at = parseYearRange(tokens, at);
|
|---|
| 10446 | week_stable = false
|
|---|
| 10447 | } else if (matchTokens(tokens, at, "month")) {
|
|---|
| 10448 | at = parseMonthRange(tokens, at)
|
|---|
| 10449 | } else if (matchTokens(tokens, at, "week")) {
|
|---|
| 10450 | tokens[at][3] = "week";
|
|---|
| 10451 | at = parseWeekRange(tokens, at)
|
|---|
| 10452 | } else if (at !== 0 && at !== tokens.length - 1 && tokens[at][0] === ":" && !(typeof last_selector[1] === "string" && last_selector[1] === "time")) {
|
|---|
| 10453 | if (!done_with_warnings && matchTokens(tokens, at - 1, "holiday")) {
|
|---|
| 10454 | parsing_warnings.push([nrule, at, t("no colon after", {
|
|---|
| 10455 | token: tokens[at - 1][1]
|
|---|
| 10456 | })])
|
|---|
| 10457 | }
|
|---|
| 10458 | at++
|
|---|
| 10459 | } else if (matchTokens(tokens, at, "number", "timesep") || matchTokens(tokens, at, "timevar") || matchTokens(tokens, at, "(", "timevar") || matchTokens(tokens, at, "number", "-")) {
|
|---|
| 10460 | at = parseTimeRange(tokens, at, selectors, false);
|
|---|
| 10461 | last_selector = [at, "time"]
|
|---|
| 10462 | } else if (matchTokens(tokens, at, "state")) {
|
|---|
| 10463 | if (tokens[at][0] === "open") {
|
|---|
| 10464 | selectors.meaning = true
|
|---|
| 10465 | } else if (tokens[at][0] === "closed" || tokens[at][0] === "off") {
|
|---|
| 10466 | selectors.meaning = false
|
|---|
| 10467 | } else {
|
|---|
| 10468 | selectors.meaning = false;
|
|---|
| 10469 | selectors.unknown = true
|
|---|
| 10470 | }
|
|---|
| 10471 | rule_modifier_specified = true;
|
|---|
| 10472 | at++;
|
|---|
| 10473 | if (typeof tokens[at] === "object" && tokens[at][0] === ",")
|
|---|
| 10474 | at = [at + 1]
|
|---|
| 10475 | } else if (matchTokens(tokens, at, "comment")) {
|
|---|
| 10476 | selectors.comment = tokens[at][0];
|
|---|
| 10477 | if (!rule_modifier_specified) {
|
|---|
| 10478 | selectors.meaning = false;
|
|---|
| 10479 | selectors.unknown = true
|
|---|
| 10480 | }
|
|---|
| 10481 | rule_modifier_specified = true;
|
|---|
| 10482 | at++;
|
|---|
| 10483 | if (typeof tokens[at] === "object" && tokens[at][0] === ",") {
|
|---|
| 10484 | at = [at + 1]
|
|---|
| 10485 | }
|
|---|
| 10486 | } else if ((at === 0 || at === tokens.length - 1) && matchTokens(tokens, at, "rule separator")) {
|
|---|
| 10487 | at++
|
|---|
| 10488 | } else {
|
|---|
| 10489 | var warnings = getWarnings();
|
|---|
| 10490 | throw formatWarnErrorMessage(nrule, at, t("unexpected token", {
|
|---|
| 10491 | token: tokens[at][1]
|
|---|
| 10492 | })) + (warnings ? " " + warnings.join("; ") : "")
|
|---|
| 10493 | }
|
|---|
| 10494 | if (typeof at === "object") {
|
|---|
| 10495 | tokens[at[0] - 1][1] = "rule separator";
|
|---|
| 10496 | break
|
|---|
| 10497 | }
|
|---|
| 10498 | if (typeof last_selector[0] === "number" && last_selector[0] !== at) {
|
|---|
| 10499 | last_selector = []
|
|---|
| 10500 | }
|
|---|
| 10501 | }
|
|---|
| 10502 | return at
|
|---|
| 10503 | }
|
|---|
| 10504 |
|
|---|
| 10505 | function dateAtDayMinutes(date, minutes) {
|
|---|
| 10506 | return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, minutes)
|
|---|
| 10507 | }
|
|---|
| 10508 |
|
|---|
| 10509 | function dateAtNextWeekday(date, weekday) {
|
|---|
| 10510 | var delta = weekday - date.getDay();
|
|---|
| 10511 | return new Date(date.getFullYear(), date.getMonth(), date.getDate() + delta + (delta < 0 ? 7 : 0))
|
|---|
| 10512 | }
|
|---|
| 10513 |
|
|---|
| 10514 | function indexOf(needle) {
|
|---|
| 10515 | if (typeof Array.prototype.indexOf === "function") {
|
|---|
| 10516 | indexOf = Array.prototype.indexOf
|
|---|
| 10517 | } else {
|
|---|
| 10518 | indexOf = function (needle) {
|
|---|
| 10519 | var i = -1,
|
|---|
| 10520 | index = -1;
|
|---|
| 10521 | for (i = 0; i < this.length; i++) {
|
|---|
| 10522 | if (this[i] === needle) {
|
|---|
| 10523 | index = i;
|
|---|
| 10524 | break
|
|---|
| 10525 | }
|
|---|
| 10526 | }
|
|---|
| 10527 | return index
|
|---|
| 10528 | }
|
|---|
| 10529 | }
|
|---|
| 10530 | return indexOf.call(this, needle)
|
|---|
| 10531 | }
|
|---|
| 10532 |
|
|---|
| 10533 | function parseNumRange(tokens, at, func) {
|
|---|
| 10534 | for (; at < tokens.length; at++) {
|
|---|
| 10535 | if (matchTokens(tokens, at, "number", "-", "number")) {
|
|---|
| 10536 | func(tokens[at][0], tokens[at + 2][0], at);
|
|---|
| 10537 | at += 3
|
|---|
| 10538 | } else if (matchTokens(tokens, at, "-", "number")) {
|
|---|
| 10539 | func(-tokens[at + 1][0], -tokens[at + 1][0], at);
|
|---|
| 10540 | at += 2
|
|---|
| 10541 | } else if (matchTokens(tokens, at, "number")) {
|
|---|
| 10542 | func(tokens[at][0], tokens[at][0], at);
|
|---|
| 10543 | at++
|
|---|
| 10544 | } else {
|
|---|
| 10545 | throw formatWarnErrorMessage(nrule, at + matchTokens(tokens, at, "-"), "Unexpected token in number range: " + tokens[at][1])
|
|---|
| 10546 | }
|
|---|
| 10547 | if (!matchTokens(tokens, at, ","))
|
|---|
| 10548 | break
|
|---|
| 10549 | }
|
|---|
| 10550 | return at
|
|---|
| 10551 | }
|
|---|
| 10552 |
|
|---|
| 10553 | function getConstrainedWeekday(tokens, at) {
|
|---|
| 10554 | var number = 0;
|
|---|
| 10555 | var endat = parseNumRange(tokens, at, function (from, to, at) {
|
|---|
| 10556 | if (from === 0 || from < -5 || from > 5)
|
|---|
| 10557 | throw formatWarnErrorMessage(nrule, at, t("number -5 to 5"));
|
|---|
| 10558 | if (from === to) {
|
|---|
| 10559 | if (number !== 0)
|
|---|
| 10560 | throw formatWarnErrorMessage(nrule, at, t("one weekday constraint"));
|
|---|
| 10561 | number = from
|
|---|
| 10562 | } else {
|
|---|
| 10563 | throw formatWarnErrorMessage(nrule, at + 2, t("range constrained weekdays"))
|
|---|
| 10564 | }
|
|---|
| 10565 | });
|
|---|
| 10566 | if (!matchTokens(tokens, endat, "]"))
|
|---|
| 10567 | throw formatWarnErrorMessage(nrule, endat, t("expected", {
|
|---|
| 10568 | symbol: "]"
|
|---|
| 10569 | }));
|
|---|
| 10570 | return [number, endat + 1]
|
|---|
| 10571 | }
|
|---|
| 10572 |
|
|---|
| 10573 | function checkPeriod(at, period, period_type, parm_string) {
|
|---|
| 10574 | if (done_with_warnings)
|
|---|
| 10575 | return;
|
|---|
| 10576 | if (period === 0) {
|
|---|
| 10577 | throw formatWarnErrorMessage(nrule, at, t("range zero", {
|
|---|
| 10578 | type: period_type
|
|---|
| 10579 | }))
|
|---|
| 10580 | } else if (period === 1) {
|
|---|
| 10581 | if (typeof parm_string === "string" && parm_string === "no_end_year")
|
|---|
| 10582 | parsing_warnings.push([nrule, at, t("period one year+", {
|
|---|
| 10583 | type: period_type
|
|---|
| 10584 | })]);
|
|---|
| 10585 | else
|
|---|
| 10586 | parsing_warnings.push([nrule, at, t("period one", {
|
|---|
| 10587 | type: period_type
|
|---|
| 10588 | })])
|
|---|
| 10589 | }
|
|---|
| 10590 | }
|
|---|
| 10591 |
|
|---|
| 10592 | function getDateForConstrainedWeekday(year, month, weekday, constrained_weekday, add_days) {
|
|---|
| 10593 | var tmp_date = dateAtNextWeekday(new Date(year, month + (constrained_weekday[0] > 0 ? 0 : 1), 1), weekday);
|
|---|
| 10594 | tmp_date.setDate(tmp_date.getDate() + (constrained_weekday[0] + (constrained_weekday[0] > 0 ? -1 : 0)) * 7);
|
|---|
| 10595 | if (typeof add_days === "object" && add_days[1])
|
|---|
| 10596 | tmp_date.setDate(tmp_date.getDate() + add_days[0]);
|
|---|
| 10597 | return tmp_date
|
|---|
| 10598 | }
|
|---|
| 10599 |
|
|---|
| 10600 | function checkIfDateIsValid(month, day, nrule, at) {
|
|---|
| 10601 | if (day < 1 || day > 31) {
|
|---|
| 10602 | throw formatWarnErrorMessage(nrule, at, t("month 31", {
|
|---|
| 10603 | month: months[month]
|
|---|
| 10604 | }))
|
|---|
| 10605 | } else if ((month === 3 || month === 5 || month === 8 || month === 10) && day === 31) {
|
|---|
| 10606 | throw formatWarnErrorMessage(nrule, at, t("month 30", {
|
|---|
| 10607 | month: months[month]
|
|---|
| 10608 | }))
|
|---|
| 10609 | } else if (month === 1 && day === 30) {
|
|---|
| 10610 | throw formatWarnErrorMessage(nrule, at, t("month feb", {
|
|---|
| 10611 | month: months[month]
|
|---|
| 10612 | }))
|
|---|
| 10613 | }
|
|---|
| 10614 | }
|
|---|
| 10615 |
|
|---|
| 10616 | function parseTimeRange(tokens, at, selectors, extended_open_end) {
|
|---|
| 10617 | if (!extended_open_end)
|
|---|
| 10618 | tokens[at][3] = "time";
|
|---|
| 10619 | for (; at < tokens.length; at++) {
|
|---|
| 10620 | var has_time_var_calc = [],
|
|---|
| 10621 | has_normal_time = [];
|
|---|
| 10622 | has_normal_time[0] = matchTokens(tokens, at, "number", "timesep", "number");
|
|---|
| 10623 | has_time_var_calc[0] = matchTokens(tokens, at, "(", "timevar");
|
|---|
| 10624 | var minutes_from, minutes_to;
|
|---|
| 10625 | if (has_normal_time[0] || matchTokens(tokens, at, "timevar") || has_time_var_calc[0]) {
|
|---|
| 10626 | var is_point_in_time = false;
|
|---|
| 10627 | var has_open_end = false;
|
|---|
| 10628 | var timevar_add = [0, 0];
|
|---|
| 10629 | var timevar_string = [];
|
|---|
| 10630 | var point_in_time_period;
|
|---|
| 10631 | if (has_normal_time[0]) {
|
|---|
| 10632 | minutes_from = getMinutesByHoursMinutes(tokens, nrule, at + has_time_var_calc[0])
|
|---|
| 10633 | } else {
|
|---|
| 10634 | timevar_string[0] = tokens[at + has_time_var_calc[0]][0];
|
|---|
| 10635 | minutes_from = word_value_replacement[timevar_string[0]];
|
|---|
| 10636 | if (has_time_var_calc[0]) {
|
|---|
| 10637 | timevar_add[0] = parseTimevarCalc(tokens, at);
|
|---|
| 10638 | minutes_from += timevar_add[0]
|
|---|
| 10639 | }
|
|---|
| 10640 | }
|
|---|
| 10641 | var at_end_time = at + (has_normal_time[0] ? 3 : has_time_var_calc[0] ? 7 : 1) + 1;
|
|---|
| 10642 | if (!matchTokens(tokens, at_end_time - 1, "-")) {
|
|---|
| 10643 | if (matchTokens(tokens, at_end_time - 1, "+")) {
|
|---|
| 10644 | has_open_end = true
|
|---|
| 10645 | } else {
|
|---|
| 10646 | if (oh_mode === 0) {
|
|---|
| 10647 | throw formatWarnErrorMessage(nrule, at + (has_normal_time[0] ? typeof tokens[at + 3] === "object" ? 3 : 2 : has_time_var_calc[0] ? 2 : typeof tokens[at + 1] === "object" ? 1 : 0), t("point in time", {
|
|---|
| 10648 | calc: has_time_var_calc[0] ? t("calculation") + " " : "",
|
|---|
| 10649 | libraryname: library_name
|
|---|
| 10650 | }))
|
|---|
| 10651 | } else {
|
|---|
| 10652 | minutes_to = minutes_from + 1;
|
|---|
| 10653 | is_point_in_time = true
|
|---|
| 10654 | }
|
|---|
| 10655 | }
|
|---|
| 10656 | }
|
|---|
| 10657 | if (has_open_end) {
|
|---|
| 10658 | if (extended_open_end === 1) {
|
|---|
| 10659 | minutes_from += minutes_in_day
|
|---|
| 10660 | }
|
|---|
| 10661 | if (minutes_from >= 22 * 60) {
|
|---|
| 10662 | minutes_to = minutes_from + 8 * 60
|
|---|
| 10663 | } else if (minutes_from >= 17 * 60) {
|
|---|
| 10664 | minutes_to = minutes_from + 10 * 60
|
|---|
| 10665 | } else {
|
|---|
| 10666 | minutes_to = minutes_in_day
|
|---|
| 10667 | }
|
|---|
| 10668 | } else if (!is_point_in_time) {
|
|---|
| 10669 | has_normal_time[1] = matchTokens(tokens, at_end_time, "number", "timesep", "number");
|
|---|
| 10670 | has_time_var_calc[1] = matchTokens(tokens, at_end_time, "(", "timevar");
|
|---|
| 10671 | if (!has_normal_time[1] && !matchTokens(tokens, at_end_time, "timevar") && !has_time_var_calc[1]) {
|
|---|
| 10672 | throw formatWarnErrorMessage(nrule, at_end_time - (typeof tokens[at_end_time] === "object" ? 0 : 1), t("time range continue"))
|
|---|
| 10673 | } else {
|
|---|
| 10674 | if (has_normal_time[1]) {
|
|---|
| 10675 | minutes_to = getMinutesByHoursMinutes(tokens, nrule, at_end_time)
|
|---|
| 10676 | } else {
|
|---|
| 10677 | timevar_string[1] = tokens[at_end_time + has_time_var_calc[1]][0];
|
|---|
| 10678 | minutes_to = word_value_replacement[timevar_string[1]]
|
|---|
| 10679 | }
|
|---|
| 10680 | if (has_time_var_calc[1]) {
|
|---|
| 10681 | timevar_add[1] = parseTimevarCalc(tokens, at_end_time);
|
|---|
| 10682 | minutes_to += timevar_add[1]
|
|---|
| 10683 | }
|
|---|
| 10684 | }
|
|---|
| 10685 | }
|
|---|
| 10686 | at = at_end_time + (is_point_in_time ? -1 : has_normal_time[1] ? 3 : has_time_var_calc[1] ? 7 : !has_open_end);
|
|---|
| 10687 | if (matchTokens(tokens, at, "/", "number")) {
|
|---|
| 10688 | if (matchTokens(tokens, at + 2, "timesep", "number")) {
|
|---|
| 10689 | point_in_time_period = getMinutesByHoursMinutes(tokens, nrule, at + 1);
|
|---|
| 10690 | at += 4
|
|---|
| 10691 | } else {
|
|---|
| 10692 | point_in_time_period = tokens[at + 1][0];
|
|---|
| 10693 | at += 2;
|
|---|
| 10694 | if (matchTokens(tokens, at, "timesep"))
|
|---|
| 10695 | throw formatWarnErrorMessage(nrule, at, t("period continue"))
|
|---|
| 10696 | }
|
|---|
| 10697 | if (oh_mode === 0) {
|
|---|
| 10698 | throw formatWarnErrorMessage(nrule, at - 1, t("time range mode", {
|
|---|
| 10699 | libraryname: library_name
|
|---|
| 10700 | }))
|
|---|
| 10701 | }
|
|---|
| 10702 | is_point_in_time = true
|
|---|
| 10703 | } else if (matchTokens(tokens, at, "+")) {
|
|---|
| 10704 | parseTimeRange(tokens, at_end_time, selectors, minutes_to < minutes_from ? 1 : true);
|
|---|
| 10705 | at++
|
|---|
| 10706 | } else if (oh_mode === 1 && !is_point_in_time) {
|
|---|
| 10707 | throw formatWarnErrorMessage(nrule, at_end_time, t("point in time mode", {
|
|---|
| 10708 | libraryname: library_name
|
|---|
| 10709 | }))
|
|---|
| 10710 | }
|
|---|
| 10711 | if (typeof lat === "string") {
|
|---|
| 10712 | if (!has_normal_time[0] || !(has_normal_time[1] || has_open_end || is_point_in_time)) {
|
|---|
| 10713 | week_stable = false
|
|---|
| 10714 | }
|
|---|
| 10715 | } else {
|
|---|
| 10716 | timevar_string = []
|
|---|
| 10717 | }
|
|---|
| 10718 | if (!extended_open_end && minutes_from >= minutes_in_day) {
|
|---|
| 10719 | throw formatWarnErrorMessage(nrule, at_end_time - 2, t("outside current day"))
|
|---|
| 10720 | }
|
|---|
| 10721 | if (minutes_to < minutes_from || has_normal_time[0] && has_normal_time[1] && minutes_from === minutes_to) {
|
|---|
| 10722 | minutes_to += minutes_in_day
|
|---|
| 10723 | }
|
|---|
| 10724 | if (minutes_to > minutes_in_day * 2) {
|
|---|
| 10725 | throw formatWarnErrorMessage(nrule, at_end_time + (has_normal_time[1] ? 4 : has_time_var_calc[1] ? 7 : 1) - 2, t("two midnights"))
|
|---|
| 10726 | }
|
|---|
| 10727 | if (minutes_from === 0 && minutes_to === minutes_in_day) {
|
|---|
| 10728 | selectors.time.push(function () {
|
|---|
| 10729 | return [true]
|
|---|
| 10730 | })
|
|---|
| 10731 | } else {
|
|---|
| 10732 | if (minutes_to > minutes_in_day) {
|
|---|
| 10733 | selectors.time.push(function (minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end) {
|
|---|
| 10734 | return function (date) {
|
|---|
| 10735 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10736 | if (timevar_string[0]) {
|
|---|
| 10737 | var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
|
|---|
| 10738 | minutes_from = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0]
|
|---|
| 10739 | }
|
|---|
| 10740 | if (timevar_string[1]) {
|
|---|
| 10741 | var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
|
|---|
| 10742 | minutes_to = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1];
|
|---|
| 10743 | minutes_to += minutes_in_day
|
|---|
| 10744 | } else if (is_point_in_time && typeof point_in_time_period !== "number") {
|
|---|
| 10745 | minutes_to = minutes_from + 1
|
|---|
| 10746 | }
|
|---|
| 10747 | if (typeof point_in_time_period === "number") {
|
|---|
| 10748 | if (ourminutes < minutes_from) {
|
|---|
| 10749 | return [false, dateAtDayMinutes(date, minutes_from)]
|
|---|
| 10750 | } else if (ourminutes <= minutes_to) {
|
|---|
| 10751 | for (var cur_min = minutes_from; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
|
|---|
| 10752 | if (cur_min === ourminutes) {
|
|---|
| 10753 | return [true, dateAtDayMinutes(date, ourminutes + 1)]
|
|---|
| 10754 | } else if (ourminutes < cur_min) {
|
|---|
| 10755 | return [false, dateAtDayMinutes(date, cur_min)]
|
|---|
| 10756 | }
|
|---|
| 10757 | }
|
|---|
| 10758 | }
|
|---|
| 10759 | return [false, dateAtDayMinutes(date, minutes_in_day)]
|
|---|
| 10760 | } else {
|
|---|
| 10761 | if (ourminutes < minutes_from)
|
|---|
| 10762 | return [false, dateAtDayMinutes(date, minutes_from)];
|
|---|
| 10763 | else
|
|---|
| 10764 | return [true, dateAtDayMinutes(date, minutes_to), has_open_end, extended_open_end]
|
|---|
| 10765 | }
|
|---|
| 10766 | }
|
|---|
| 10767 | }(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period, extended_open_end));
|
|---|
| 10768 | selectors.wraptime.push(function (minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, point_in_time_period, extended_open_end) {
|
|---|
| 10769 | return function (date) {
|
|---|
| 10770 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10771 | if (timevar_string[0]) {
|
|---|
| 10772 | var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
|
|---|
| 10773 | minutes_from = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0]
|
|---|
| 10774 | }
|
|---|
| 10775 | if (timevar_string[1]) {
|
|---|
| 10776 | var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
|
|---|
| 10777 | minutes_to = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1]
|
|---|
| 10778 | }
|
|---|
| 10779 | if (typeof point_in_time_period === "number") {
|
|---|
| 10780 | if (ourminutes <= minutes_to) {
|
|---|
| 10781 | for (var cur_min = 0; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
|
|---|
| 10782 | if (cur_min === ourminutes) {
|
|---|
| 10783 | return [true, dateAtDayMinutes(date, ourminutes + 1)]
|
|---|
| 10784 | } else if (ourminutes < cur_min) {
|
|---|
| 10785 | return [false, dateAtDayMinutes(date, cur_min)]
|
|---|
| 10786 | }
|
|---|
| 10787 | }
|
|---|
| 10788 | }
|
|---|
| 10789 | } else {
|
|---|
| 10790 | if (ourminutes < minutes_to)
|
|---|
| 10791 | return [true, dateAtDayMinutes(date, minutes_to), has_open_end, extended_open_end]
|
|---|
| 10792 | }
|
|---|
| 10793 | return [false, undefined]
|
|---|
| 10794 | }
|
|---|
| 10795 | }(minutes_from, minutes_to - minutes_in_day, timevar_string, timevar_add, has_open_end, point_in_time_period, extended_open_end))
|
|---|
| 10796 | } else {
|
|---|
| 10797 | selectors.time.push(function (minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period) {
|
|---|
| 10798 | return function (date) {
|
|---|
| 10799 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10800 | if (timevar_string[0]) {
|
|---|
| 10801 | var date_from = SunCalc.getTimes(date, lat, lon)[timevar_string[0]];
|
|---|
| 10802 | minutes_from = date_from.getHours() * 60 + date_from.getMinutes() + timevar_add[0]
|
|---|
| 10803 | }
|
|---|
| 10804 | if (timevar_string[1]) {
|
|---|
| 10805 | var date_to = SunCalc.getTimes(date, lat, lon)[timevar_string[1]];
|
|---|
| 10806 | minutes_to = date_to.getHours() * 60 + date_to.getMinutes() + timevar_add[1]
|
|---|
| 10807 | } else if (is_point_in_time && typeof point_in_time_period !== "number") {
|
|---|
| 10808 | minutes_to = minutes_from + 1
|
|---|
| 10809 | }
|
|---|
| 10810 | if (typeof point_in_time_period === "number") {
|
|---|
| 10811 | if (ourminutes < minutes_from) {
|
|---|
| 10812 | return [false, dateAtDayMinutes(date, minutes_from)]
|
|---|
| 10813 | } else if (ourminutes <= minutes_to) {
|
|---|
| 10814 | for (var cur_min = minutes_from; ourminutes + point_in_time_period >= cur_min; cur_min += point_in_time_period) {
|
|---|
| 10815 | if (cur_min === ourminutes) {
|
|---|
| 10816 | return [true, dateAtDayMinutes(date, ourminutes + 1)]
|
|---|
| 10817 | } else if (ourminutes < cur_min) {
|
|---|
| 10818 | return [false, dateAtDayMinutes(date, cur_min)]
|
|---|
| 10819 | }
|
|---|
| 10820 | }
|
|---|
| 10821 | }
|
|---|
| 10822 | return [false, dateAtDayMinutes(date, minutes_in_day)]
|
|---|
| 10823 | } else {
|
|---|
| 10824 | if (ourminutes < minutes_from)
|
|---|
| 10825 | return [false, dateAtDayMinutes(date, minutes_from)];
|
|---|
| 10826 | else if (ourminutes < minutes_to)
|
|---|
| 10827 | return [true, dateAtDayMinutes(date, minutes_to), has_open_end];
|
|---|
| 10828 | else
|
|---|
| 10829 | return [false, dateAtDayMinutes(date, minutes_from + minutes_in_day)]
|
|---|
| 10830 | }
|
|---|
| 10831 | }
|
|---|
| 10832 | }(minutes_from, minutes_to, timevar_string, timevar_add, has_open_end, is_point_in_time, point_in_time_period))
|
|---|
| 10833 | }
|
|---|
| 10834 | }
|
|---|
| 10835 | } else if (matchTokens(tokens, at, "number", "-", "number")) {
|
|---|
| 10836 | minutes_from = tokens[at][0] * 60;
|
|---|
| 10837 | minutes_to = tokens[at + 2][0] * 60;
|
|---|
| 10838 | if (!done_with_warnings)
|
|---|
| 10839 | parsing_warnings.push([nrule, at + 2, t("without minutes", {
|
|---|
| 10840 | syntax: (tokens[at][0] < 10 ? "0" : "") + tokens[at][0] + ":00-" + (tokens[at + 2][0] < 10 ? "0" : "") + tokens[at + 2][0] + ":00"
|
|---|
| 10841 | })]);
|
|---|
| 10842 | if (minutes_from >= minutes_in_day)
|
|---|
| 10843 | throw formatWarnErrorMessage(nrule, at, t("outside day"));
|
|---|
| 10844 | if (minutes_to < minutes_from)
|
|---|
| 10845 | minutes_to += minutes_in_day;
|
|---|
| 10846 | if (minutes_to > minutes_in_day * 2)
|
|---|
| 10847 | throw formatWarnErrorMessage(nrule, at + 2, t("two midnights"));
|
|---|
| 10848 | if (minutes_to > minutes_in_day) {
|
|---|
| 10849 | selectors.time.push(function (minutes_from, minutes_to) {
|
|---|
| 10850 | return function (date) {
|
|---|
| 10851 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10852 | if (ourminutes < minutes_from)
|
|---|
| 10853 | return [false, dateAtDayMinutes(date, minutes_from)];
|
|---|
| 10854 | else
|
|---|
| 10855 | return [true, dateAtDayMinutes(date, minutes_to)]
|
|---|
| 10856 | }
|
|---|
| 10857 | }(minutes_from, minutes_to));
|
|---|
| 10858 | selectors.wraptime.push(function (minutes_to) {
|
|---|
| 10859 | return function (date) {
|
|---|
| 10860 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10861 | if (ourminutes < minutes_to) {
|
|---|
| 10862 | return [true, dateAtDayMinutes(date, minutes_to)]
|
|---|
| 10863 | } else {
|
|---|
| 10864 | return [false, undefined]
|
|---|
| 10865 | }
|
|---|
| 10866 | }
|
|---|
| 10867 | }(minutes_to - minutes_in_day))
|
|---|
| 10868 | } else {
|
|---|
| 10869 | selectors.time.push(function (minutes_from, minutes_to) {
|
|---|
| 10870 | return function (date) {
|
|---|
| 10871 | var ourminutes = date.getHours() * 60 + date.getMinutes();
|
|---|
| 10872 | if (ourminutes < minutes_from)
|
|---|
| 10873 | return [false, dateAtDayMinutes(date, minutes_from)];
|
|---|
| 10874 | else if (ourminutes < minutes_to)
|
|---|
| 10875 | return [true, dateAtDayMinutes(date, minutes_to), has_open_end];
|
|---|
| 10876 | else
|
|---|
| 10877 | return [false, dateAtDayMinutes(date, minutes_from + minutes_in_day)]
|
|---|
| 10878 | }
|
|---|
| 10879 | }(minutes_from, minutes_to))
|
|---|
| 10880 | }
|
|---|
| 10881 | at += 3
|
|---|
| 10882 | } else {
|
|---|
| 10883 | if (matchTokens(tokens, at, "("))
|
|---|
| 10884 | throw formatWarnErrorMessage(nrule, at, 'Missing variable time (e.g. sunrise) after: "' + tokens[at][1] + '"');
|
|---|
| 10885 | if (matchTokens(tokens, at, "number", "timesep"))
|
|---|
| 10886 | throw formatWarnErrorMessage(nrule, at + 1, 'Missing minutes in time range after: "' + tokens[at + 1][1] + '"');
|
|---|
| 10887 | if (matchTokens(tokens, at, "number"))
|
|---|
| 10888 | throw formatWarnErrorMessage(nrule, at + (typeof tokens[at + 1] === "object" ? 1 : 0), 'Missing time separator in time range after: "' + tokens[at][1] + '"');
|
|---|
| 10889 | return [at]
|
|---|
| 10890 | }
|
|---|
| 10891 | if (!matchTokens(tokens, at, ","))
|
|---|
| 10892 | break
|
|---|
| 10893 | }
|
|---|
| 10894 | return at
|
|---|
| 10895 | }
|
|---|
| 10896 |
|
|---|
| 10897 | function getMinutesByHoursMinutes(tokens, nrule, at) {
|
|---|
| 10898 | if (tokens[at + 2][0] > 59)
|
|---|
| 10899 | throw formatWarnErrorMessage(nrule, at + 2, "Minutes are greater than 59.");
|
|---|
| 10900 | return tokens[at][0] * 60 + tokens[at + 2][0]
|
|---|
| 10901 | }
|
|---|
| 10902 |
|
|---|
| 10903 | function parseTimevarCalc(tokens, at) {
|
|---|
| 10904 | var error;
|
|---|
| 10905 | if (matchTokens(tokens, at + 2, "+") || matchTokens(tokens, at + 2, "-")) {
|
|---|
| 10906 | if (matchTokens(tokens, at + 3, "number", "timesep", "number")) {
|
|---|
| 10907 | if (matchTokens(tokens, at + 6, ")")) {
|
|---|
| 10908 | var add_or_subtract = tokens[at + 2][0] === "+" ? "1" : "-1";
|
|---|
| 10909 | var minutes = getMinutesByHoursMinutes(tokens, nrule, at + 3) * add_or_subtract;
|
|---|
| 10910 | if (minutes === 0)
|
|---|
| 10911 | parsing_warnings.push([nrule, at + 5, t("zero calculation")]);
|
|---|
| 10912 | return minutes
|
|---|
| 10913 | } else {
|
|---|
| 10914 | error = [at + 6, ". " + t("missing", {
|
|---|
| 10915 | symbol: ")"
|
|---|
| 10916 | }) + "."]
|
|---|
| 10917 | }
|
|---|
| 10918 | } else {
|
|---|
| 10919 | error = [at + 5, " " + t("(time)") + "."]
|
|---|
| 10920 | }
|
|---|
| 10921 | } else {
|
|---|
| 10922 | error = [at + 2, ". " + t("expected", {
|
|---|
| 10923 | symbol: '+" or "-'
|
|---|
| 10924 | })]
|
|---|
| 10925 | }
|
|---|
| 10926 | if (error)
|
|---|
| 10927 | throw formatWarnErrorMessage(nrule, error[0], t("calculation syntax") + error[1])
|
|---|
| 10928 | }
|
|---|
| 10929 |
|
|---|
| 10930 | function parseWeekdayRange(tokens, at, selectors, in_holiday_selector) {
|
|---|
| 10931 | if (!in_holiday_selector) {
|
|---|
| 10932 | in_holiday_selector = true;
|
|---|
| 10933 | tokens[at][3] = "weekday"
|
|---|
| 10934 | }
|
|---|
| 10935 | for (; at < tokens.length; at++) {
|
|---|
| 10936 | if (matchTokens(tokens, at, "weekday", "[")) {
|
|---|
| 10937 | var numbers = [];
|
|---|
| 10938 | var endat = parseNumRange(tokens, at + 2, function (from, to, at) {
|
|---|
| 10939 | if (from === 0 || from < -5 || from > 5)
|
|---|
| 10940 | throw formatWarnErrorMessage(nrule, at, t("number -5 to 5"));
|
|---|
| 10941 | if (from === to) {
|
|---|
| 10942 | numbers.push(from)
|
|---|
| 10943 | } else if (from < to) {
|
|---|
| 10944 | for (var i = from; i <= to; i++) {
|
|---|
| 10945 | if (i === 0 || i < -5 || i > 5)
|
|---|
| 10946 | throw formatWarnErrorMessage(nrule, at + 2, t("number -5 to 5"));
|
|---|
| 10947 | numbers.push(i)
|
|---|
| 10948 | }
|
|---|
| 10949 | } else {
|
|---|
| 10950 | throw formatWarnErrorMessage(nrule, at + 2, t("bad range", {
|
|---|
| 10951 | from: from,
|
|---|
| 10952 | to: to
|
|---|
| 10953 | }))
|
|---|
| 10954 | }
|
|---|
| 10955 | });
|
|---|
| 10956 | if (!matchTokens(tokens, endat, "]"))
|
|---|
| 10957 | throw formatWarnErrorMessage(nrule, endat, t("] or more numbers"));
|
|---|
| 10958 | var add_days = getMoveDays(tokens, endat + 1, 6, "constrained weekdays");
|
|---|
| 10959 | week_stable = false;
|
|---|
| 10960 | for (var nnumber = 0; nnumber < numbers.length; nnumber++) {
|
|---|
| 10961 | selectors.weekday.push(function (weekday, number, add_days) {
|
|---|
| 10962 | return function (date) {
|
|---|
| 10963 | var date_num = getValueForDate(date, false);
|
|---|
| 10964 | var start_of_this_month = new Date(date.getFullYear(), date.getMonth(), 1);
|
|---|
| 10965 | var start_of_next_month = new Date(date.getFullYear(), date.getMonth() + 1, 1);
|
|---|
| 10966 | var target_day_this_month;
|
|---|
| 10967 | target_day_this_month = getDateForConstrainedWeekday(date.getFullYear(), date.getMonth(), weekday, [number]);
|
|---|
| 10968 | var target_day_with_added_days_this_month = new Date(target_day_this_month.getFullYear(), target_day_this_month.getMonth(), target_day_this_month.getDate() + add_days);
|
|---|
| 10969 | if (target_day_with_added_days_this_month.getTime() < start_of_this_month.getTime()) {
|
|---|
| 10970 | if (target_day_this_month.getTime() >= start_of_this_month.getTime()) {
|
|---|
| 10971 | target_day_with_added_days_this_month = dateAtNextWeekday(new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) + 1, 1), weekday);
|
|---|
| 10972 | target_day_this_month.setDate(target_day_with_added_days_this_month.getDate() + (number + (number > 0 ? -1 : 0)) * 7 + add_days)
|
|---|
| 10973 | } else {
|
|---|
| 10974 | return [false, start_of_next_month]
|
|---|
| 10975 | }
|
|---|
| 10976 | } else if (target_day_with_added_days_this_month.getTime() >= start_of_next_month.getTime()) {
|
|---|
| 10977 | if (target_day_this_month.getTime() >= start_of_next_month.getTime())
|
|---|
| 10978 | return [false, start_of_next_month]
|
|---|
| 10979 | }
|
|---|
| 10980 | var target_day_with_added_moved_days_this_month;
|
|---|
| 10981 | if (add_days > 0) {
|
|---|
| 10982 | target_day_with_added_moved_days_this_month = dateAtNextWeekday(new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) - 1, 1), weekday);
|
|---|
| 10983 | target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate() + (number + (number > 0 ? -1 : 0)) * 7 + add_days);
|
|---|
| 10984 | if (date_num === getValueForDate(target_day_with_added_moved_days_this_month, false))
|
|---|
| 10985 | return [true, dateAtDayMinutes(date, minutes_in_day)]
|
|---|
| 10986 | } else if (add_days < 0) {
|
|---|
| 10987 | target_day_with_added_moved_days_this_month = dateAtNextWeekday(new Date(date.getFullYear(), date.getMonth() + (number > 0 ? 0 : 1) + 1, 1), weekday);
|
|---|
| 10988 | target_day_with_added_moved_days_this_month.setDate(target_day_with_added_moved_days_this_month.getDate() + (number + (number > 0 ? -1 : 0)) * 7 + add_days);
|
|---|
| 10989 | if (target_day_with_added_moved_days_this_month.getTime() >= start_of_next_month.getTime()) {
|
|---|
| 10990 | if (target_day_with_added_days_this_month.getTime() >= start_of_next_month.getTime())
|
|---|
| 10991 | return [false, target_day_with_added_moved_days_this_month]
|
|---|
| 10992 | } else {
|
|---|
| 10993 | if (target_day_with_added_days_this_month.getTime() < start_of_next_month.getTime() && getValueForDate(target_day_with_added_days_this_month, false) === date_num)
|
|---|
| 10994 | return [true, dateAtDayMinutes(date, minutes_in_day)];
|
|---|
| 10995 | target_day_with_added_days_this_month = target_day_with_added_moved_days_this_month
|
|---|
| 10996 | }
|
|---|
| 10997 | }
|
|---|
| 10998 | if (date.getDate() === target_day_with_added_days_this_month.getDate()) {
|
|---|
| 10999 | return [true, dateAtDayMinutes(date, minutes_in_day)]
|
|---|
| 11000 | }
|
|---|
| 11001 | if (date.getDate() < target_day_with_added_days_this_month.getDate()) {
|
|---|
| 11002 | return [false, target_day_with_added_days_this_month]
|
|---|
| 11003 | }
|
|---|
| 11004 | return [false, start_of_next_month]
|
|---|
| 11005 | }
|
|---|
| 11006 | }(tokens[at][0], numbers[nnumber], add_days[0]))
|
|---|
| 11007 | }
|
|---|
| 11008 | at = endat + 1 + add_days[1]
|
|---|
| 11009 | } else if (matchTokens(tokens, at, "weekday")) {
|
|---|
| 11010 | var is_range = matchTokens(tokens, at + 1, "-", "weekday");
|
|---|
| 11011 | var weekday_from = tokens[at][0];
|
|---|
| 11012 | var weekday_to = is_range ? tokens[at + 2][0] : weekday_from;
|
|---|
| 11013 | var inside = true;
|
|---|
| 11014 | if (weekday_to < weekday_from) {
|
|---|
| 11015 | var tmp = weekday_to;
|
|---|
| 11016 | weekday_to = weekday_from - 1;
|
|---|
| 11017 | weekday_from = tmp + 1;
|
|---|
| 11018 | inside = false
|
|---|
| 11019 | }
|
|---|
| 11020 | if (weekday_to < weekday_from) {
|
|---|
| 11021 | selectors.weekday.push(function () {
|
|---|
| 11022 | return [true]
|
|---|
| 11023 | })
|
|---|
| 11024 | } else {
|
|---|
| 11025 | selectors.weekday.push(function (weekday_from, weekday_to, inside) {
|
|---|
| 11026 | return function (date) {
|
|---|
| 11027 | var ourweekday = date.getDay();
|
|---|
| 11028 | if (ourweekday < weekday_from || ourweekday > weekday_to) {
|
|---|
| 11029 | return [!inside, dateAtNextWeekday(date, weekday_from)]
|
|---|
| 11030 | } else {
|
|---|
| 11031 | return [inside, dateAtNextWeekday(date, weekday_to + 1)]
|
|---|
| 11032 | }
|
|---|
| 11033 | }
|
|---|
| 11034 | }(weekday_from, weekday_to, inside))
|
|---|
| 11035 | }
|
|---|
| 11036 | at += is_range ? 3 : 1
|
|---|
| 11037 | } else if (matchTokens(tokens, at, "holiday")) {
|
|---|
| 11038 | week_stable = false;
|
|---|
| 11039 | return parseHoliday(tokens, at, selectors, true, in_holiday_selector)
|
|---|
| 11040 | } else if (matchTokens(tokens, at - 1, ",")) {
|
|---|
| 11041 | throw formatWarnErrorMessage(nrule, at - 1, t("additional rule no sense"))
|
|---|
| 11042 | } else {
|
|---|
| 11043 | throw formatWarnErrorMessage(nrule, at, t("unexpected token weekday range", {
|
|---|
| 11044 | token: tokens[at][1]
|
|---|
| 11045 | }))
|
|---|
| 11046 | }
|
|---|
| 11047 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11048 | break
|
|---|
| 11049 | }
|
|---|
| 11050 | return at
|
|---|
| 11051 | }
|
|---|
| 11052 |
|
|---|
| 11053 | function getMoveDays(tokens, at, max_differ, name) {
|
|---|
| 11054 | var add_days = [0, 0];
|
|---|
| 11055 | add_days[0] = matchTokens(tokens, at, "+") || (matchTokens(tokens, at, "-") ? -1 : 0);
|
|---|
| 11056 | if (add_days[0] !== 0 && matchTokens(tokens, at + 1, "number", "calcday")) {
|
|---|
| 11057 | if (tokens[at + 1][0] > max_differ)
|
|---|
| 11058 | throw formatWarnErrorMessage(nrule, at + 2, t("max differ", {
|
|---|
| 11059 | maxdiffer: max_differ,
|
|---|
| 11060 | name: name
|
|---|
| 11061 | }));
|
|---|
| 11062 | add_days[0] *= tokens[at + 1][0];
|
|---|
| 11063 | if (add_days[0] === 0 && !done_with_warnings)
|
|---|
| 11064 | parsing_warnings.push([nrule, at + 2, t("adding 0")]);
|
|---|
| 11065 | add_days[1] = 3
|
|---|
| 11066 | } else {
|
|---|
| 11067 | add_days[0] = 0
|
|---|
| 11068 | }
|
|---|
| 11069 | return add_days
|
|---|
| 11070 | }
|
|---|
| 11071 |
|
|---|
| 11072 | function parseHoliday(tokens, at, selectors, push_to_weekday, in_holiday_selector) {
|
|---|
| 11073 | if (!in_holiday_selector) {
|
|---|
| 11074 | if (push_to_weekday)
|
|---|
| 11075 | tokens[at][3] = "weekday";
|
|---|
| 11076 | else
|
|---|
| 11077 | tokens[at][3] = "holiday"
|
|---|
| 11078 | }
|
|---|
| 11079 | for (; at < tokens.length; at++) {
|
|---|
| 11080 | if (matchTokens(tokens, at, "holiday")) {
|
|---|
| 11081 | if (tokens[at][0] === "PH") {
|
|---|
| 11082 | var applying_holidays = getMatchingHoliday(tokens[at][0]);
|
|---|
| 11083 | var add_days = getMoveDays(tokens, at + 1, 1, "public holiday");
|
|---|
| 11084 | var selector = function (applying_holidays, add_days) {
|
|---|
| 11085 | return function (date) {
|
|---|
| 11086 | var holidays = getApplyingHolidaysForYear(applying_holidays, date.getFullYear(), add_days);
|
|---|
| 11087 | var date_num = getValueForDate(date, true);
|
|---|
| 11088 | for (var i = 0; i < holidays.length; i++) {
|
|---|
| 11089 | var next_holiday_date_num = getValueForDate(holidays[i][0], true);
|
|---|
| 11090 | if (date_num < next_holiday_date_num) {
|
|---|
| 11091 | if (add_days[0] > 0) {
|
|---|
| 11092 | var holidays_last_year = getApplyingHolidaysForYear(applying_holidays, date.getFullYear() - 1, add_days);
|
|---|
| 11093 | var last_holiday_last_year = holidays_last_year[holidays_last_year.length - 1];
|
|---|
| 11094 | var last_holiday_last_year_num = getValueForDate(last_holiday_last_year[0], true);
|
|---|
| 11095 | if (date_num < last_holiday_last_year_num) {
|
|---|
| 11096 | return [false, last_holiday_last_year[0]]
|
|---|
| 11097 | } else if (date_num === last_holiday_last_year_num) {
|
|---|
| 11098 | return [true, dateAtDayMinutes(last_holiday_last_year[0], minutes_in_day), "Day after " + last_holiday_last_year[1]]
|
|---|
| 11099 | }
|
|---|
| 11100 | }
|
|---|
| 11101 | return [false, holidays[i][0]]
|
|---|
| 11102 | } else if (date_num === next_holiday_date_num) {
|
|---|
| 11103 | return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1), (add_days[0] > 0 ? "Day after " : add_days[0] < 0 ? "Day before " : "") + holidays[i][1]]
|
|---|
| 11104 | }
|
|---|
| 11105 | }
|
|---|
| 11106 | if (add_days[0] < 0) {
|
|---|
| 11107 | var holidays_next_year = getApplyingHolidaysForYear(applying_holidays, date.getFullYear() + 1, add_days);
|
|---|
| 11108 | var first_holidays_next_year = holidays_next_year[0];
|
|---|
| 11109 | var first_holidays_next_year_num = getValueForDate(first_holidays_next_year[0], true);
|
|---|
| 11110 | if (date_num === first_holidays_next_year_num) {
|
|---|
| 11111 | return [true, dateAtDayMinutes(first_holidays_next_year[0], minutes_in_day), "Day before " + first_holidays_next_year[1]]
|
|---|
| 11112 | }
|
|---|
| 11113 | }
|
|---|
| 11114 | return [false, new Date(holidays[0][0].getFullYear() + 1, holidays[0][0].getMonth(), holidays[0][0].getDate())]
|
|---|
| 11115 | }
|
|---|
| 11116 | }(applying_holidays, add_days);
|
|---|
| 11117 | if (push_to_weekday)
|
|---|
| 11118 | selectors.weekday.push(selector);
|
|---|
| 11119 | else
|
|---|
| 11120 | selectors.holiday.push(selector);
|
|---|
| 11121 | at += 1 + add_days[1]
|
|---|
| 11122 | } else if (tokens[at][0] === "SH") {
|
|---|
| 11123 | var applying_holidays = getMatchingHoliday(tokens[at][0]);
|
|---|
| 11124 | var selector = function (applying_holidays) {
|
|---|
| 11125 | return function (date) {
|
|---|
| 11126 | var date_num = getValueForDate(date);
|
|---|
| 11127 | for (var i = 0; i < applying_holidays.length; i++) {
|
|---|
| 11128 | var holiday = getSHForYear(applying_holidays[i], date.getFullYear());
|
|---|
| 11129 | for (var h = 0; h < holiday.length; h += 4) {
|
|---|
| 11130 | var holiday_to_plus = new Date(date.getFullYear(), holiday[2 + h] - 1, holiday[3 + h] + 1);
|
|---|
| 11131 | var holiday_from = (holiday[0 + h] - 1) * 100 + holiday[1 + h];
|
|---|
| 11132 | var holiday_to = (holiday[2 + h] - 1) * 100 + holiday[3 + h];
|
|---|
| 11133 | holiday_to_plus = getValueForDate(holiday_to_plus);
|
|---|
| 11134 | var holiday_ends_next_year = holiday_to < holiday_from;
|
|---|
| 11135 | if (date_num < holiday_from) {
|
|---|
| 11136 | var last_year_holiday = getSHForYear(applying_holidays[applying_holidays.length - 1], date.getFullYear() - 1, false);
|
|---|
| 11137 | if (typeof last_year_holiday === "object") {
|
|---|
| 11138 | var last_year_holiday_from = (last_year_holiday[last_year_holiday.length - 4] - 1) * 100 + last_year_holiday[last_year_holiday.length - 3];
|
|---|
| 11139 | var last_year_holiday_to = (last_year_holiday[last_year_holiday.length - 2] - 1) * 100 + last_year_holiday[last_year_holiday.length - 1];
|
|---|
| 11140 | if (last_year_holiday_from > last_year_holiday_to && date_num <= last_year_holiday_to)
|
|---|
| 11141 | return [true, new Date(date.getFullYear(), last_year_holiday[last_year_holiday.length - 2] - 1, last_year_holiday[last_year_holiday.length - 1] + 1), applying_holidays[applying_holidays.length - 1].name];
|
|---|
| 11142 | else
|
|---|
| 11143 | return [false, new Date(date.getFullYear(), holiday[0 + h] - 1, holiday[1 + h])]
|
|---|
| 11144 | } else {
|
|---|
| 11145 | return [false, new Date(date.getFullYear(), holiday[0 + h] - 1, holiday[1 + h])]
|
|---|
| 11146 | }
|
|---|
| 11147 | } else if (holiday_from <= date_num && (date_num < holiday_to_plus || holiday_ends_next_year)) {
|
|---|
| 11148 | return [true, new Date(date.getFullYear() + holiday_ends_next_year, holiday[2 + h] - 1, holiday[3 + h] + 1), applying_holidays[i].name]
|
|---|
| 11149 | } else if (holiday_to_plus === date_num) {
|
|---|
| 11150 | if (h + 4 < holiday.length) {
|
|---|
| 11151 | h += 4;
|
|---|
| 11152 | return [false, new Date(date.getFullYear(), holiday[0 + h] - 1, holiday[1 + h])]
|
|---|
| 11153 | } else {
|
|---|
| 11154 | if (i + 1 === applying_holidays.length) {
|
|---|
| 11155 | var holiday = getSHForYear(applying_holidays[0], date.getFullYear() + 1);
|
|---|
| 11156 | return [false, new Date(date.getFullYear() + !holiday_ends_next_year, holiday[0 + h] - 1, holiday[1 + h])]
|
|---|
| 11157 | } else {
|
|---|
| 11158 | var holiday = getSHForYear(applying_holidays[i + 1], date.getFullYear());
|
|---|
| 11159 | return [false, new Date(date.getFullYear(), holiday[0] - 1, holiday[1])]
|
|---|
| 11160 | }
|
|---|
| 11161 | }
|
|---|
| 11162 | }
|
|---|
| 11163 | }
|
|---|
| 11164 | }
|
|---|
| 11165 | return [false]
|
|---|
| 11166 | }
|
|---|
| 11167 | }(applying_holidays);
|
|---|
| 11168 | if (push_to_weekday)
|
|---|
| 11169 | selectors.weekday.push(selector);
|
|---|
| 11170 | else
|
|---|
| 11171 | selectors.holiday.push(selector);
|
|---|
| 11172 | at += 1
|
|---|
| 11173 | }
|
|---|
| 11174 | } else if (matchTokens(tokens, at, "weekday")) {
|
|---|
| 11175 | return parseWeekdayRange(tokens, at, selectors, true)
|
|---|
| 11176 | } else if (matchTokens(tokens, at - 1, ",")) {
|
|---|
| 11177 | throw formatWarnErrorMessage(nrule, at - 1, t("additional rule no sense"))
|
|---|
| 11178 | } else {
|
|---|
| 11179 | throw formatWarnErrorMessage(nrule, at, t("unexpected token holiday", {
|
|---|
| 11180 | token: tokens[at][1]
|
|---|
| 11181 | }))
|
|---|
| 11182 | }
|
|---|
| 11183 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11184 | break
|
|---|
| 11185 | }
|
|---|
| 11186 | return at
|
|---|
| 11187 | }
|
|---|
| 11188 |
|
|---|
| 11189 | function getValueForDate(date, include_year) {
|
|---|
| 11190 | return (include_year ? date.getFullYear() * 1e4 : 0) + date.getMonth() * 100 + date.getDate()
|
|---|
| 11191 | }
|
|---|
| 11192 |
|
|---|
| 11193 | function getSHForYear(SH_hash, year, fatal) {
|
|---|
| 11194 | if (typeof fatal !== "boolean") {
|
|---|
| 11195 | fatal = true
|
|---|
| 11196 | }
|
|---|
| 11197 | var holiday = SH_hash[year];
|
|---|
| 11198 | if (typeof holiday === "undefined") {
|
|---|
| 11199 | holiday = SH_hash["default"];
|
|---|
| 11200 | if (typeof holiday === "undefined") {
|
|---|
| 11201 | if (fatal) {
|
|---|
| 11202 | throw formatLibraryBugMessage(t("no SH definition", {
|
|---|
| 11203 | name: SH_hash.name,
|
|---|
| 11204 | year: year,
|
|---|
| 11205 | repository_url: repository_url
|
|---|
| 11206 | }), "library bug PR only")
|
|---|
| 11207 | } else {
|
|---|
| 11208 | return undefined
|
|---|
| 11209 | }
|
|---|
| 11210 | }
|
|---|
| 11211 | }
|
|---|
| 11212 | return holiday
|
|---|
| 11213 | }
|
|---|
| 11214 |
|
|---|
| 11215 | function getMatchingHoliday(type_of_holidays) {
|
|---|
| 11216 | if (typeof location_cc === "string") {
|
|---|
| 11217 | if (holiday_definitions.hasOwnProperty(location_cc)) {
|
|---|
| 11218 | if (typeof location_state === "string" && typeof holiday_definitions[location_cc][location_state] === "object" && typeof holiday_definitions[location_cc][location_state][type_of_holidays] === "object") {
|
|---|
| 11219 | return holiday_definitions[location_cc][location_state][type_of_holidays]
|
|---|
| 11220 | } else if (holiday_definitions[location_cc][type_of_holidays]) {
|
|---|
| 11221 | var applying_holidays_for_country = holiday_definitions[location_cc][type_of_holidays];
|
|---|
| 11222 | var matching_holiday = {};
|
|---|
| 11223 | switch (type_of_holidays) {
|
|---|
| 11224 | case "PH":
|
|---|
| 11225 | for (var holiday_name in applying_holidays_for_country) {
|
|---|
| 11226 | if (typeof applying_holidays_for_country[holiday_name][2] === "object") {
|
|---|
| 11227 | if (-1 !== applying_holidays_for_country[holiday_name][2].indexOf(location_state)) {
|
|---|
| 11228 | matching_holiday[holiday_name] = applying_holidays_for_country[holiday_name]
|
|---|
| 11229 | }
|
|---|
| 11230 | } else {
|
|---|
| 11231 | matching_holiday[holiday_name] = applying_holidays_for_country[holiday_name]
|
|---|
| 11232 | }
|
|---|
| 11233 | }
|
|---|
| 11234 | break;
|
|---|
| 11235 | case "SH":
|
|---|
| 11236 | matching_holiday = applying_holidays_for_country;
|
|---|
| 11237 | break
|
|---|
| 11238 | }
|
|---|
| 11239 | if (Object.keys(matching_holiday).length === 0) {
|
|---|
| 11240 | throw formatLibraryBugMessage(t("no holiday definition", {
|
|---|
| 11241 | name: type_of_holidays,
|
|---|
| 11242 | cc: location_cc
|
|---|
| 11243 | }), "library bug PR only")
|
|---|
| 11244 | }
|
|---|
| 11245 | return matching_holiday
|
|---|
| 11246 | } else {
|
|---|
| 11247 | throw formatLibraryBugMessage(t("no holiday definition state", {
|
|---|
| 11248 | name: type_of_holidays,
|
|---|
| 11249 | cc: location_cc,
|
|---|
| 11250 | state: location_state
|
|---|
| 11251 | }), "library bug PR only")
|
|---|
| 11252 | }
|
|---|
| 11253 | } else {
|
|---|
| 11254 | throw formatLibraryBugMessage(t("no holiday definition", {
|
|---|
| 11255 | name: type_of_holidays,
|
|---|
| 11256 | cc: location_cc
|
|---|
| 11257 | }), "library bug PR only")
|
|---|
| 11258 | }
|
|---|
| 11259 | } else {
|
|---|
| 11260 | throw t("no country code")
|
|---|
| 11261 | }
|
|---|
| 11262 | }
|
|---|
| 11263 |
|
|---|
| 11264 | function getMovableEventsForYear(year) {
|
|---|
| 11265 | var C = Math.floor(year / 100);
|
|---|
| 11266 | var N = year - 19 * Math.floor(year / 19);
|
|---|
| 11267 | var K = Math.floor((C - 17) / 25);
|
|---|
| 11268 | var I = C - Math.floor(C / 4) - Math.floor((C - K) / 3) + 19 * N + 15;
|
|---|
| 11269 | I = I - 30 * Math.floor(I / 30);
|
|---|
| 11270 | I = I - Math.floor(I / 28) * (1 - Math.floor(I / 28) * Math.floor(29 / (I + 1)) * Math.floor((21 - N) / 11));
|
|---|
| 11271 | var J = year + Math.floor(year / 4) + I + 2 - C + Math.floor(C / 4);
|
|---|
| 11272 | J = J - 7 * Math.floor(J / 7);
|
|---|
| 11273 | var L = I - J;
|
|---|
| 11274 | var M = 3 + Math.floor((L + 40) / 44);
|
|---|
| 11275 | var D = L + 28 - 31 * Math.floor(M / 4);
|
|---|
| 11276 | var oA = year % 4;
|
|---|
| 11277 | var oB = year % 7;
|
|---|
| 11278 | var oC = year % 19;
|
|---|
| 11279 | var oD = (19 * oC + 15) % 30;
|
|---|
| 11280 | var oE = (2 * oA + 4 * oB - oD + 34) % 7;
|
|---|
| 11281 | var oF = oD + oE;
|
|---|
| 11282 | var oDate;
|
|---|
| 11283 | if (oF < 9) {
|
|---|
| 11284 | oDate = new Date(year, 4 - 1, oF + 4)
|
|---|
| 11285 | } else {
|
|---|
| 11286 | if (oF + 4 < 31) {
|
|---|
| 11287 | oDate = new Date(year, 4 - 1, oF + 4)
|
|---|
| 11288 | } else {
|
|---|
| 11289 | oDate = new Date(year, 5 - 1, oF - 26)
|
|---|
| 11290 | }
|
|---|
| 11291 | }
|
|---|
| 11292 | var lastFebruaryDay = new Date(year, 2, 0);
|
|---|
| 11293 | var lastFebruarySunday = lastFebruaryDay.getDate() - lastFebruaryDay.getDay();
|
|---|
| 11294 | var may_24 = new Date(year, 4, 24);
|
|---|
| 11295 | var victoriaDay = 24 - (6 + may_24.getDay()) % 7;
|
|---|
| 11296 | var july_1 = new Date(year, 6, 1);
|
|---|
| 11297 | var canadaDay = july_1.getDay() === 0 ? 2 : 1;
|
|---|
| 11298 |
|
|---|
| 11299 | function firstWeekdayOfMonth(month, weekday) {
|
|---|
| 11300 | var first = new Date(year, month, 1);
|
|---|
| 11301 | return 1 + (7 + weekday - first.getDay()) % 7
|
|---|
| 11302 | }
|
|---|
| 11303 |
|
|---|
| 11304 | function lastWeekdayOfMonth(month, weekday) {
|
|---|
| 11305 | var last = new Date(year, month + 1, 0);
|
|---|
| 11306 | var offset = (7 + last.getDay() - weekday) % 7;
|
|---|
| 11307 | return last.getDate() - offset
|
|---|
| 11308 | }
|
|---|
| 11309 |
|
|---|
| 11310 | function getDateOfWeekdayInDateRange(weekday, start_date) {
|
|---|
| 11311 | var days_to_dest_date = weekday - start_date.getDay();
|
|---|
| 11312 | if (days_to_dest_date < 0) {
|
|---|
| 11313 | days_to_dest_date += 7
|
|---|
| 11314 | }
|
|---|
| 11315 | start_date.setDate(start_date.getDate() + days_to_dest_date);
|
|---|
| 11316 | return start_date
|
|---|
| 11317 | }
|
|---|
| 11318 | return {
|
|---|
| 11319 | easter: new Date(year, M - 1, D),
|
|---|
| 11320 | "orthodox easter": oDate,
|
|---|
| 11321 | victoriaDay: new Date(year, 4, victoriaDay),
|
|---|
| 11322 | canadaDay: new Date(year, 6, canadaDay),
|
|---|
| 11323 | firstJanuaryMonday: new Date(year, 0, firstWeekdayOfMonth(0, 1)),
|
|---|
| 11324 | firstFebruaryMonday: new Date(year, 1, firstWeekdayOfMonth(1, 1)),
|
|---|
| 11325 | lastFebruarySunday: new Date(year, 1, lastFebruarySunday),
|
|---|
| 11326 | firstMarchMonday: new Date(year, 2, firstWeekdayOfMonth(2, 1)),
|
|---|
| 11327 | firstAprilMonday: new Date(year, 3, firstWeekdayOfMonth(3, 1)),
|
|---|
| 11328 | firstMayMonday: new Date(year, 4, firstWeekdayOfMonth(4, 1)),
|
|---|
| 11329 | firstJuneMonday: new Date(year, 5, firstWeekdayOfMonth(5, 1)),
|
|---|
| 11330 | firstJulyMonday: new Date(year, 6, firstWeekdayOfMonth(6, 1)),
|
|---|
| 11331 | firstAugustMonday: new Date(year, 7, firstWeekdayOfMonth(7, 1)),
|
|---|
| 11332 | firstSeptemberMonday: new Date(year, 8, firstWeekdayOfMonth(8, 1)),
|
|---|
| 11333 | firstSeptemberSunday: new Date(year, 8, firstWeekdayOfMonth(8, 0)),
|
|---|
| 11334 | firstOctoberMonday: new Date(year, 9, firstWeekdayOfMonth(9, 1)),
|
|---|
| 11335 | firstNovemberMonday: new Date(year, 10, firstWeekdayOfMonth(10, 1)),
|
|---|
| 11336 | firstMarchTuesday: new Date(year, 2, firstWeekdayOfMonth(2, 2)),
|
|---|
| 11337 | firstAugustTuesday: new Date(year, 7, firstWeekdayOfMonth(7, 2)),
|
|---|
| 11338 | firstAugustFriday: new Date(year, 7, firstWeekdayOfMonth(7, 5)),
|
|---|
| 11339 | firstNovemberThursday: new Date(year, 10, firstWeekdayOfMonth(10, 4)),
|
|---|
| 11340 | lastMayMonday: new Date(year, 4, lastWeekdayOfMonth(4, 1)),
|
|---|
| 11341 | lastMarchMonday: new Date(year, 2, lastWeekdayOfMonth(2, 1)),
|
|---|
| 11342 | lastAprilMonday: new Date(year, 3, lastWeekdayOfMonth(3, 1)),
|
|---|
| 11343 | lastAprilFriday: new Date(year, 3, lastWeekdayOfMonth(3, 5)),
|
|---|
| 11344 | lastOctoberFriday: new Date(year, 9, lastWeekdayOfMonth(9, 5)),
|
|---|
| 11345 | nextSaturday20Jun: getDateOfWeekdayInDateRange(6, new Date(year, 5, 20)),
|
|---|
| 11346 | nextSaturday31Oct: getDateOfWeekdayInDateRange(6, new Date(year, 9, 31)),
|
|---|
| 11347 | nextWednesday16Nov: getDateOfWeekdayInDateRange(3, new Date(year, 10, 16))
|
|---|
| 11348 | }
|
|---|
| 11349 | }
|
|---|
| 11350 |
|
|---|
| 11351 | function getApplyingHolidaysForYear(applying_holidays, year, add_days) {
|
|---|
| 11352 | var movableDays = getMovableEventsForYear(year);
|
|---|
| 11353 | var sorted_holidays = [];
|
|---|
| 11354 | var next_holiday;
|
|---|
| 11355 | for (var holiday_name in applying_holidays) {
|
|---|
| 11356 | if (typeof applying_holidays[holiday_name][0] === "string") {
|
|---|
| 11357 | var selected_movableDay = movableDays[applying_holidays[holiday_name][0]];
|
|---|
| 11358 | if (!selected_movableDay)
|
|---|
| 11359 | throw t("movable no formula", {
|
|---|
| 11360 | name: applying_holidays[holiday_name][0]
|
|---|
| 11361 | });
|
|---|
| 11362 | next_holiday = new Date(selected_movableDay.getFullYear(), selected_movableDay.getMonth(), selected_movableDay.getDate() + applying_holidays[holiday_name][1]);
|
|---|
| 11363 | if (year !== next_holiday.getFullYear())
|
|---|
| 11364 | throw t("movable not in year", {
|
|---|
| 11365 | name: applying_holidays[holiday_name][0],
|
|---|
| 11366 | days: applying_holidays[holiday_name][1]
|
|---|
| 11367 | })
|
|---|
| 11368 | } else {
|
|---|
| 11369 | next_holiday = new Date(year, applying_holidays[holiday_name][0] - 1, applying_holidays[holiday_name][1])
|
|---|
| 11370 | }
|
|---|
| 11371 | if (add_days[0])
|
|---|
| 11372 | next_holiday.setDate(next_holiday.getDate() + add_days[0]);
|
|---|
| 11373 | sorted_holidays.push([next_holiday, holiday_name])
|
|---|
| 11374 | }
|
|---|
| 11375 | sorted_holidays = sorted_holidays.sort(function (a, b) {
|
|---|
| 11376 | if (a[0].getTime() < b[0].getTime())
|
|---|
| 11377 | return -1;
|
|---|
| 11378 | if (a[0].getTime() > b[0].getTime())
|
|---|
| 11379 | return 1;
|
|---|
| 11380 | return 0
|
|---|
| 11381 | });
|
|---|
| 11382 | return sorted_holidays
|
|---|
| 11383 | }
|
|---|
| 11384 |
|
|---|
| 11385 | function parseYearRange(tokens, at) {
|
|---|
| 11386 | tokens[at][3] = "year";
|
|---|
| 11387 | for (; at < tokens.length; at++) {
|
|---|
| 11388 | if (matchTokens(tokens, at, "year")) {
|
|---|
| 11389 | var is_range = false,
|
|---|
| 11390 | has_period, period;
|
|---|
| 11391 | if (matchTokens(tokens, at + 1, "-", "year", "/", "number")) {
|
|---|
| 11392 | is_range = true;
|
|---|
| 11393 | has_period = true;
|
|---|
| 11394 | period = parseInt(tokens[at + 4][0]);
|
|---|
| 11395 | checkPeriod(at + 4, period, "year")
|
|---|
| 11396 | } else {
|
|---|
| 11397 | is_range = matchTokens(tokens, at + 1, "-", "year");
|
|---|
| 11398 | has_period = matchTokens(tokens, at + 1, "/", "number");
|
|---|
| 11399 | if (has_period) {
|
|---|
| 11400 | period = parseInt(tokens[at + 2][0]);
|
|---|
| 11401 | checkPeriod(at + 2, period, "year", "no_end_year")
|
|---|
| 11402 | } else if (matchTokens(tokens, at + 1, "+")) {
|
|---|
| 11403 | period = 1;
|
|---|
| 11404 | has_period = 2
|
|---|
| 11405 | }
|
|---|
| 11406 | }
|
|---|
| 11407 | var year_from = parseInt(tokens[at][0]);
|
|---|
| 11408 | if (is_range && tokens[at + 2][0] <= year_from) {
|
|---|
| 11409 | if (tokens[at + 2][0] === year_from) {
|
|---|
| 11410 | throw formatWarnErrorMessage(nrule, at, t("year range one year", {
|
|---|
| 11411 | year: year_from
|
|---|
| 11412 | }))
|
|---|
| 11413 | } else {
|
|---|
| 11414 | throw formatWarnErrorMessage(nrule, at, t("year range reverse"))
|
|---|
| 11415 | }
|
|---|
| 11416 | }
|
|---|
| 11417 | if (!is_range && year_from < (new Date).getFullYear()) {
|
|---|
| 11418 | parsing_warnings.push([nrule, at, t("year past")])
|
|---|
| 11419 | }
|
|---|
| 11420 | if (is_range && tokens[at + 2][0] < (new Date).getFullYear()) {
|
|---|
| 11421 | parsing_warnings.push([nrule, at + 2, t("year past")])
|
|---|
| 11422 | }
|
|---|
| 11423 | selectors.year.push(function (tokens, at, year_from, is_range, has_period, period) {
|
|---|
| 11424 | return function (date) {
|
|---|
| 11425 | var ouryear = date.getFullYear();
|
|---|
| 11426 | var year_to = is_range ? parseInt(tokens[at + 2][0]) : year_from;
|
|---|
| 11427 | if (ouryear < year_from) {
|
|---|
| 11428 | return [false, new Date(year_from, 0, 1)]
|
|---|
| 11429 | } else if (has_period) {
|
|---|
| 11430 | if (year_from <= ouryear) {
|
|---|
| 11431 | if (is_range && ouryear > year_to)
|
|---|
| 11432 | return [false];
|
|---|
| 11433 | if (period > 0) {
|
|---|
| 11434 | if ((ouryear - year_from) % period === 0) {
|
|---|
| 11435 | return [true, new Date(ouryear + 1, 0, 1)]
|
|---|
| 11436 | } else {
|
|---|
| 11437 | return [false, new Date(ouryear + period - 1, 0, 1)]
|
|---|
| 11438 | }
|
|---|
| 11439 | }
|
|---|
| 11440 | }
|
|---|
| 11441 | } else if (is_range) {
|
|---|
| 11442 | if (ouryear <= year_to)
|
|---|
| 11443 | return [true, new Date(year_to + 1, 0, 1)]
|
|---|
| 11444 | } else if (ouryear === year_from) {
|
|---|
| 11445 | return [true]
|
|---|
| 11446 | }
|
|---|
| 11447 | return [false]
|
|---|
| 11448 | }
|
|---|
| 11449 | }(tokens, at, year_from, is_range, has_period, period));
|
|---|
| 11450 | at += 1 + (is_range ? 2 : 0) + (has_period ? has_period === 2 ? 1 : 2 : 0)
|
|---|
| 11451 | } else if (matchTokens(tokens, at - 1, ",")) {
|
|---|
| 11452 | throw formatWarnErrorMessage(nrule, at - 1, t("additional rule no sense"))
|
|---|
| 11453 | } else {
|
|---|
| 11454 | throw formatWarnErrorMessage(nrule, at, t("unexpected token year range", {
|
|---|
| 11455 | token: tokens[at][1]
|
|---|
| 11456 | }))
|
|---|
| 11457 | }
|
|---|
| 11458 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11459 | break
|
|---|
| 11460 | }
|
|---|
| 11461 | return at
|
|---|
| 11462 | }
|
|---|
| 11463 |
|
|---|
| 11464 | function parseWeekRange(tokens, at) {
|
|---|
| 11465 | for (; at < tokens.length; at++) {
|
|---|
| 11466 | if (matchTokens(tokens, at, "week")) {
|
|---|
| 11467 | at++
|
|---|
| 11468 | }
|
|---|
| 11469 | if (matchTokens(tokens, at, "number")) {
|
|---|
| 11470 | var is_range = matchTokens(tokens, at + 1, "-", "number"),
|
|---|
| 11471 | period = 0;
|
|---|
| 11472 | var week_from = tokens[at][0];
|
|---|
| 11473 | var week_to = is_range ? tokens[at + 2][0] : week_from;
|
|---|
| 11474 | if (week_from > week_to) {
|
|---|
| 11475 | throw formatWarnErrorMessage(nrule, at + 2, t("week range reverse"))
|
|---|
| 11476 | }
|
|---|
| 11477 | if (week_from < 1) {
|
|---|
| 11478 | throw formatWarnErrorMessage(nrule, at, t("week negative"))
|
|---|
| 11479 | }
|
|---|
| 11480 | if (week_to > 53) {
|
|---|
| 11481 | throw formatWarnErrorMessage(nrule, is_range ? at + 2 : at, t("week exceed"))
|
|---|
| 11482 | }
|
|---|
| 11483 | if (is_range) {
|
|---|
| 11484 | period = matchTokens(tokens, at + 3, "/", "number");
|
|---|
| 11485 | if (period) {
|
|---|
| 11486 | period = tokens[at + 4][0];
|
|---|
| 11487 | if (period < 2) {
|
|---|
| 11488 | throw formatWarnErrorMessage(nrule, at + 4, t("week period less than 2", {
|
|---|
| 11489 | weekfrom: week_from,
|
|---|
| 11490 | weekto: week_to,
|
|---|
| 11491 | period: period
|
|---|
| 11492 | }))
|
|---|
| 11493 | } else if (period > 26) {
|
|---|
| 11494 | throw formatWarnErrorMessage(nrule, at + 4, t("week period greater than 26", {
|
|---|
| 11495 | weekfrom: week_from
|
|---|
| 11496 | }))
|
|---|
| 11497 | }
|
|---|
| 11498 | }
|
|---|
| 11499 | }
|
|---|
| 11500 | if (week_stable && (!(week_from <= 1 && week_to >= 53) || period)) {
|
|---|
| 11501 | week_stable = false
|
|---|
| 11502 | }
|
|---|
| 11503 | if (!period && week_from === 1 && week_to === 53) {
|
|---|
| 11504 | selectors.week.push(function () {
|
|---|
| 11505 | return [true]
|
|---|
| 11506 | })
|
|---|
| 11507 | } else {
|
|---|
| 11508 | selectors.week.push(function (week_from, week_to, period) {
|
|---|
| 11509 | return function (date) {
|
|---|
| 11510 | var ourweek = getWeekNumber(date);
|
|---|
| 11511 | if (ourweek < week_from) {
|
|---|
| 11512 | return [false, getNextDateOfISOWeek(week_from, date)]
|
|---|
| 11513 | }
|
|---|
| 11514 | if (ourweek > week_to) {
|
|---|
| 11515 | return [false, getNextDateOfISOWeek(week_from, date)]
|
|---|
| 11516 | }
|
|---|
| 11517 | if (period) {
|
|---|
| 11518 | var in_period = (ourweek - week_from) % period === 0;
|
|---|
| 11519 | if (in_period) {
|
|---|
| 11520 | return [true, getNextDateOfISOWeek(ourweek + 1, date)]
|
|---|
| 11521 | } else {
|
|---|
| 11522 | return [false, getNextDateOfISOWeek(ourweek + period - 1, date)]
|
|---|
| 11523 | }
|
|---|
| 11524 | }
|
|---|
| 11525 | return [true, getNextDateOfISOWeek(week_to === 53 ? 1 : week_to + 1, date)]
|
|---|
| 11526 | }
|
|---|
| 11527 | }(week_from, week_to, period))
|
|---|
| 11528 | }
|
|---|
| 11529 | at += 1 + (is_range ? 2 : 0) + (period ? 2 : 0)
|
|---|
| 11530 | } else if (matchTokens(tokens, at - 1, ",")) {
|
|---|
| 11531 | throw formatWarnErrorMessage(nrule, at - 1, t("additional rule no sense"))
|
|---|
| 11532 | } else {
|
|---|
| 11533 | throw formatWarnErrorMessage(nrule, at, t("unexpected token week range", {
|
|---|
| 11534 | token: tokens[at][1]
|
|---|
| 11535 | }))
|
|---|
| 11536 | }
|
|---|
| 11537 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11538 | break
|
|---|
| 11539 | }
|
|---|
| 11540 | return at
|
|---|
| 11541 | }
|
|---|
| 11542 |
|
|---|
| 11543 | function getWeekNumber(d) {
|
|---|
| 11544 | d = new Date(+d);
|
|---|
| 11545 | d.setHours(0, 0, 0, 0);
|
|---|
| 11546 | d.setDate(d.getDate() + 4 - (d.getDay() || 7));
|
|---|
| 11547 | var yearStart = new Date(d.getFullYear(), 0, 1);
|
|---|
| 11548 | return Math.ceil(((d - yearStart) / 864e5 + 1) / 7)
|
|---|
| 11549 | }
|
|---|
| 11550 |
|
|---|
| 11551 | function getDateOfISOWeek(w, year) {
|
|---|
| 11552 | var simple = new Date(year, 0, 1 + (w - 1) * 7);
|
|---|
| 11553 | var dow = simple.getDay();
|
|---|
| 11554 | var ISOweekStart = simple;
|
|---|
| 11555 | if (dow <= 4)
|
|---|
| 11556 | ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
|
|---|
| 11557 | else
|
|---|
| 11558 | ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
|
|---|
| 11559 | return ISOweekStart
|
|---|
| 11560 | }
|
|---|
| 11561 |
|
|---|
| 11562 | function getNextDateOfISOWeek(week, date) {
|
|---|
| 11563 | var next_date;
|
|---|
| 11564 | for (var i = -1; i <= 1; i++) {
|
|---|
| 11565 | next_date = getDateOfISOWeek(week, date.getFullYear() + i);
|
|---|
| 11566 | if (next_date.getTime() > date.getTime()) {
|
|---|
| 11567 | return next_date
|
|---|
| 11568 | }
|
|---|
| 11569 | }
|
|---|
| 11570 | throw formatLibraryBugMessage()
|
|---|
| 11571 | }
|
|---|
| 11572 |
|
|---|
| 11573 | function parseMonthRange(tokens, at, push_to_monthday, in_selector) {
|
|---|
| 11574 | if (!in_selector)
|
|---|
| 11575 | tokens[at][3] = "month";
|
|---|
| 11576 | for (; at < tokens.length; at++) {
|
|---|
| 11577 | if (matchTokens(tokens, at, "month", "number") && !matchTokens(tokens, at + 2, "timesep", "number")) {
|
|---|
| 11578 | return parseMonthdayRange(tokens, at, nrule, true)
|
|---|
| 11579 | } else if (matchTokens(tokens, at, "month")) {
|
|---|
| 11580 | var is_range = matchTokens(tokens, at + 1, "-", "month");
|
|---|
| 11581 | var month_from = tokens[at][0];
|
|---|
| 11582 | var month_to = is_range ? tokens[at + 2][0] : month_from;
|
|---|
| 11583 | if (is_range && week_stable) {
|
|---|
| 11584 | if (month_from !== (month_to + 1) % 12)
|
|---|
| 11585 | week_stable = false
|
|---|
| 11586 | } else {
|
|---|
| 11587 | week_stable = false
|
|---|
| 11588 | }
|
|---|
| 11589 | var inside = true;
|
|---|
| 11590 | if (month_to < month_from) {
|
|---|
| 11591 | var tmp = month_to;
|
|---|
| 11592 | month_to = month_from - 1;
|
|---|
| 11593 | month_from = tmp + 1;
|
|---|
| 11594 | inside = false
|
|---|
| 11595 | }
|
|---|
| 11596 | var selector = function (month_from, month_to, inside) {
|
|---|
| 11597 | return function (date) {
|
|---|
| 11598 | var ourmonth = date.getMonth();
|
|---|
| 11599 | if (month_to < month_from) {
|
|---|
| 11600 | return [!inside]
|
|---|
| 11601 | }
|
|---|
| 11602 | if (ourmonth < month_from || ourmonth > month_to) {
|
|---|
| 11603 | return [!inside, dateAtNextMonth(date, month_from)]
|
|---|
| 11604 | } else {
|
|---|
| 11605 | return [inside, dateAtNextMonth(date, month_to + 1)]
|
|---|
| 11606 | }
|
|---|
| 11607 | }
|
|---|
| 11608 | }(month_from, month_to, inside);
|
|---|
| 11609 | if (push_to_monthday === true)
|
|---|
| 11610 | selectors.monthday.push(selector);
|
|---|
| 11611 | else
|
|---|
| 11612 | selectors.month.push(selector);
|
|---|
| 11613 | at += is_range ? 3 : 1
|
|---|
| 11614 | } else {
|
|---|
| 11615 | throw formatWarnErrorMessage(nrule, at, t("unexpected token month range", {
|
|---|
| 11616 | token: tokens[at][1]
|
|---|
| 11617 | }))
|
|---|
| 11618 | }
|
|---|
| 11619 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11620 | break
|
|---|
| 11621 | }
|
|---|
| 11622 | return at
|
|---|
| 11623 | }
|
|---|
| 11624 |
|
|---|
| 11625 | function dateAtNextMonth(date, month) {
|
|---|
| 11626 | return new Date(date.getFullYear(), month < date.getMonth() ? month + 12 : month)
|
|---|
| 11627 | }
|
|---|
| 11628 |
|
|---|
| 11629 | function parseMonthdayRange(tokens, at, nrule, push_to_month) {
|
|---|
| 11630 | if (!push_to_month)
|
|---|
| 11631 | tokens[at][3] = "month";
|
|---|
| 11632 | for (; at < tokens.length; at++) {
|
|---|
| 11633 | var has_year = [],
|
|---|
| 11634 | has_month = [],
|
|---|
| 11635 | has_event = [],
|
|---|
| 11636 | has_calc = [],
|
|---|
| 11637 | has_constrained_weekday = [];
|
|---|
| 11638 | has_year[0] = matchTokens(tokens, at, "year");
|
|---|
| 11639 | has_month[0] = matchTokens(tokens, at + has_year[0], "month", "number");
|
|---|
| 11640 | has_event[0] = matchTokens(tokens, at + has_year[0], "event");
|
|---|
| 11641 | if (has_event[0])
|
|---|
| 11642 | has_calc[0] = getMoveDays(tokens, at + has_year[0] + 1, 200, "event like easter");
|
|---|
| 11643 | var at_range_sep;
|
|---|
| 11644 | if (matchTokens(tokens, at + has_year[0], "month", "weekday", "[")) {
|
|---|
| 11645 | has_constrained_weekday[0] = getConstrainedWeekday(tokens, at + has_year[0] + 3);
|
|---|
| 11646 | has_calc[0] = getMoveDays(tokens, has_constrained_weekday[0][1], 6, "constrained weekdays");
|
|---|
| 11647 | at_range_sep = has_constrained_weekday[0][1] + (typeof has_calc[0] === "object" && has_calc[0][1] ? 3 : 0)
|
|---|
| 11648 | } else {
|
|---|
| 11649 | at_range_sep = at + has_year[0] + (has_event[0] ? typeof has_calc[0] === "object" && has_calc[0][1] ? 4 : 1 : 2)
|
|---|
| 11650 | }
|
|---|
| 11651 | var at_sec_event_or_month;
|
|---|
| 11652 | if ((has_month[0] || has_event[0] || has_constrained_weekday[0]) && matchTokens(tokens, at_range_sep, "-")) {
|
|---|
| 11653 | has_year[1] = matchTokens(tokens, at_range_sep + 1, "year");
|
|---|
| 11654 | at_sec_event_or_month = at_range_sep + 1 + has_year[1];
|
|---|
| 11655 | has_month[1] = matchTokens(tokens, at_sec_event_or_month, "month", "number");
|
|---|
| 11656 | if (!has_month[1]) {
|
|---|
| 11657 | has_event[1] = matchTokens(tokens, at_sec_event_or_month, "event");
|
|---|
| 11658 | if (has_event[1]) {
|
|---|
| 11659 | has_calc[1] = getMoveDays(tokens, at_sec_event_or_month + 1, 366, "event like easter")
|
|---|
| 11660 | } else if (matchTokens(tokens, at_sec_event_or_month, "month", "weekday", "[")) {
|
|---|
| 11661 | has_constrained_weekday[1] = getConstrainedWeekday(tokens, at_sec_event_or_month + 3);
|
|---|
| 11662 | has_calc[1] = getMoveDays(tokens, has_constrained_weekday[1][1], 6, "constrained weekdays")
|
|---|
| 11663 | }
|
|---|
| 11664 | }
|
|---|
| 11665 | }
|
|---|
| 11666 | if (has_year[0] === has_year[1] && (has_month[1] || has_event[1] || has_constrained_weekday[1])) {
|
|---|
| 11667 | if (has_month[0])
|
|---|
| 11668 | checkIfDateIsValid(tokens[at + has_year[0]][0], tokens[at + has_year[0] + 1][0], nrule, at + has_year[0] + 1);
|
|---|
| 11669 | if (has_month[1])
|
|---|
| 11670 | checkIfDateIsValid(tokens[at_sec_event_or_month][0], tokens[at_sec_event_or_month + 1][0], nrule, at_sec_event_or_month + 1);
|
|---|
| 11671 | var selector = function (tokens, at, nrule, has_year, has_event, has_calc, at_sec_event_or_month, has_constrained_weekday) {
|
|---|
| 11672 | return function (date) {
|
|---|
| 11673 | var start_of_next_year = new Date(date.getFullYear() + 1, 0, 1);
|
|---|
| 11674 | var movableDays, from_date;
|
|---|
| 11675 | if (has_event[0]) {
|
|---|
| 11676 | movableDays = getMovableEventsForYear(has_year[0] ? parseInt(tokens[at][0]) : date.getFullYear());
|
|---|
| 11677 | from_date = movableDays[tokens[at + has_year[0]][0]];
|
|---|
| 11678 | if (typeof has_calc[0] === "object" && has_calc[0][1]) {
|
|---|
| 11679 | var from_year_before_calc = from_date.getFullYear();
|
|---|
| 11680 | from_date.setDate(from_date.getDate() + has_calc[0][0]);
|
|---|
| 11681 | if (from_year_before_calc !== from_date.getFullYear())
|
|---|
| 11682 | throw formatWarnErrorMessage(nrule, at + has_year[0] + has_calc[0][1] * 3, t("movable not in year", {
|
|---|
| 11683 | name: tokens[at + has_year[0]][0],
|
|---|
| 11684 | days: has_calc[0][0]
|
|---|
| 11685 | }))
|
|---|
| 11686 | }
|
|---|
| 11687 | } else if (has_constrained_weekday[0]) {
|
|---|
| 11688 | from_date = getDateForConstrainedWeekday(has_year[0] ? tokens[at][0] : date.getFullYear(), tokens[at + has_year[0]][0], tokens[at + has_year[0] + 1][0], has_constrained_weekday[0], has_calc[0])
|
|---|
| 11689 | } else {
|
|---|
| 11690 | from_date = new Date(has_year[0] ? tokens[at][0] : date.getFullYear(), tokens[at + has_year[0]][0], tokens[at + has_year[0] + 1][0])
|
|---|
| 11691 | }
|
|---|
| 11692 | var to_date;
|
|---|
| 11693 | if (has_event[1]) {
|
|---|
| 11694 | movableDays = getMovableEventsForYear(has_year[1] ? parseInt(tokens[at_sec_event_or_month - 1][0]) : date.getFullYear());
|
|---|
| 11695 | to_date = movableDays[tokens[at_sec_event_or_month][0]];
|
|---|
| 11696 | if (typeof has_calc[1] === "object" && has_calc[1][1]) {
|
|---|
| 11697 | var to_year_before_calc = to_date.getFullYear();
|
|---|
| 11698 | to_date.setDate(to_date.getDate() + has_calc[1][0]);
|
|---|
| 11699 | if (to_year_before_calc !== to_date.getFullYear()) {
|
|---|
| 11700 | throw formatWarnErrorMessage(nrule, at_sec_event_or_month + has_calc[1][1], t("movable not in year", {
|
|---|
| 11701 | name: tokens[at_sec_event_or_month][0],
|
|---|
| 11702 | days: has_calc[1][0]
|
|---|
| 11703 | }))
|
|---|
| 11704 | }
|
|---|
| 11705 | }
|
|---|
| 11706 | } else if (has_constrained_weekday[1]) {
|
|---|
| 11707 | to_date = getDateForConstrainedWeekday(has_year[1] ? tokens[at_sec_event_or_month - 1][0] : date.getFullYear(), tokens[at_sec_event_or_month][0], tokens[at_sec_event_or_month + 1][0], has_constrained_weekday[1], has_calc[1])
|
|---|
| 11708 | } else {
|
|---|
| 11709 | to_date = new Date(has_year[1] ? tokens[at_sec_event_or_month - 1][0] : date.getFullYear(), tokens[at_sec_event_or_month][0], tokens[at_sec_event_or_month + 1][0] + 1)
|
|---|
| 11710 | }
|
|---|
| 11711 | var inside = true;
|
|---|
| 11712 | if (to_date < from_date) {
|
|---|
| 11713 | var tmp = to_date;
|
|---|
| 11714 | to_date = from_date;
|
|---|
| 11715 | from_date = tmp;
|
|---|
| 11716 | inside = false
|
|---|
| 11717 | }
|
|---|
| 11718 | if (date.getTime() < from_date.getTime()) {
|
|---|
| 11719 | return [!inside, from_date]
|
|---|
| 11720 | } else if (date.getTime() < to_date.getTime()) {
|
|---|
| 11721 | return [inside, to_date]
|
|---|
| 11722 | } else {
|
|---|
| 11723 | if (has_year[0]) {
|
|---|
| 11724 | return [!inside]
|
|---|
| 11725 | } else {
|
|---|
| 11726 | return [!inside, start_of_next_year]
|
|---|
| 11727 | }
|
|---|
| 11728 | }
|
|---|
| 11729 | }
|
|---|
| 11730 | }(tokens, at, nrule, has_year, has_event, has_calc, at_sec_event_or_month, has_constrained_weekday);
|
|---|
| 11731 | if (push_to_month === true)
|
|---|
| 11732 | selectors.month.push(selector);
|
|---|
| 11733 | else
|
|---|
| 11734 | selectors.monthday.push(selector);
|
|---|
| 11735 | at = (has_constrained_weekday[1] ? has_constrained_weekday[1][1] : at_sec_event_or_month + (has_event[1] ? 1 : 2)) + (typeof has_calc[1] === "object" ? has_calc[1][1] : 0)
|
|---|
| 11736 | } else if (has_month[0]) {
|
|---|
| 11737 | has_year = has_year[0];
|
|---|
| 11738 | var year = tokens[at][0];
|
|---|
| 11739 | var month = tokens[at + has_year][0];
|
|---|
| 11740 | var first_round = true;
|
|---|
| 11741 | do {
|
|---|
| 11742 | var range_from = tokens[at + 1 + has_year][0];
|
|---|
| 11743 | var is_range = matchTokens(tokens, at + 2 + has_year, "-", "number");
|
|---|
| 11744 | var period = undefined;
|
|---|
| 11745 | var range_to = tokens[at + has_year + (is_range ? 3 : 1)][0] + 1;
|
|---|
| 11746 | if (is_range && matchTokens(tokens, at + has_year + 4, "/", "number")) {
|
|---|
| 11747 | period = tokens[at + has_year + 5][0];
|
|---|
| 11748 | checkPeriod(at + has_year + 5, period, "day")
|
|---|
| 11749 | }
|
|---|
| 11750 | if (first_round) {
|
|---|
| 11751 | var at_timesep_if_monthRange = at + has_year + 1 + (is_range ? 2 : 0) + (period ? 2 : 0) + !(is_range || period);
|
|---|
| 11752 | if (matchTokens(tokens, at_timesep_if_monthRange, "timesep", "number") && (matchTokens(tokens, at_timesep_if_monthRange + 2, "+") || matchTokens(tokens, at_timesep_if_monthRange + 2, "-") || oh_mode !== 0)) {
|
|---|
| 11753 | return parseMonthRange(tokens, at, true, true)
|
|---|
| 11754 | }
|
|---|
| 11755 | }
|
|---|
| 11756 | if (range_to < range_from)
|
|---|
| 11757 | throw formatWarnErrorMessage(nrule, at + has_year + 3, t("day range reverse"));
|
|---|
| 11758 | checkIfDateIsValid(month, range_from, nrule, at + 1 + has_year);
|
|---|
| 11759 | checkIfDateIsValid(month, range_to - 1, nrule, at + has_year + (is_range ? 3 : 1));
|
|---|
| 11760 | var selector = function (year, has_year, month, range_from, range_to, period) {
|
|---|
| 11761 | return function (date) {
|
|---|
| 11762 | var start_of_next_year = new Date(date.getFullYear() + 1, 0, 1);
|
|---|
| 11763 | var from_date = new Date(has_year ? year : date.getFullYear(), month, range_from);
|
|---|
| 11764 | if (month === 1 && range_from !== from_date.getDate())
|
|---|
| 11765 | return [false];
|
|---|
| 11766 | var to_date = new Date(from_date.getFullYear(), month, range_to);
|
|---|
| 11767 | if (month === 1 && is_range && range_to !== to_date.getDate())
|
|---|
| 11768 | return [false];
|
|---|
| 11769 | if (date.getTime() < from_date.getTime())
|
|---|
| 11770 | return [false, from_date];
|
|---|
| 11771 | else if (date.getTime() >= to_date.getTime())
|
|---|
| 11772 | return [false, start_of_next_year];
|
|---|
| 11773 | else if (!period)
|
|---|
| 11774 | return [true, to_date];
|
|---|
| 11775 | var nday = Math.floor((date.getTime() - from_date.getTime()) / msec_in_day);
|
|---|
| 11776 | var in_period = nday % period;
|
|---|
| 11777 | if (in_period === 0)
|
|---|
| 11778 | return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)];
|
|---|
| 11779 | else
|
|---|
| 11780 | return [false, new Date(date.getFullYear(), date.getMonth(), date.getDate() + period - in_period)]
|
|---|
| 11781 | }
|
|---|
| 11782 | }(year, has_year, month, range_from, range_to, period);
|
|---|
| 11783 | if (push_to_month === true)
|
|---|
| 11784 | selectors.month.push(selector);
|
|---|
| 11785 | else
|
|---|
| 11786 | selectors.monthday.push(selector);
|
|---|
| 11787 | at += 2 + has_year + (is_range ? 2 : 0) + (period ? 2 : 0);
|
|---|
| 11788 | first_round = false
|
|---|
| 11789 | } while (matchTokens(tokens, at, ",", "number"))
|
|---|
| 11790 | } else if (has_event[0]) {
|
|---|
| 11791 | var selector = function (tokens, at, nrule, has_year, add_days) {
|
|---|
| 11792 | return function (date) {
|
|---|
| 11793 | var movableDays = getMovableEventsForYear(has_year ? tokens[at][0] : date.getFullYear());
|
|---|
| 11794 | var event_date = movableDays[tokens[at + has_year][0]];
|
|---|
| 11795 | if (!event_date)
|
|---|
| 11796 | throw t("movable no formula", {
|
|---|
| 11797 | name: tokens[at + has_year][0]
|
|---|
| 11798 | });
|
|---|
| 11799 | if (add_days[0]) {
|
|---|
| 11800 | event_date.setDate(event_date.getDate() + add_days[0]);
|
|---|
| 11801 | if (date.getFullYear() !== event_date.getFullYear())
|
|---|
| 11802 | throw formatWarnErrorMessage(nrule, at + has_year + add_days[1], t("movable not in year", {
|
|---|
| 11803 | name: tokens[at + has_year][0],
|
|---|
| 11804 | days: add_days[0]
|
|---|
| 11805 | }))
|
|---|
| 11806 | }
|
|---|
| 11807 | if (date.getTime() < event_date.getTime())
|
|---|
| 11808 | return [false, event_date];
|
|---|
| 11809 | else if (event_date.getMonth() * 100 + event_date.getDate() === date.getMonth() * 100 + date.getDate())
|
|---|
| 11810 | return [true, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)];
|
|---|
| 11811 | else
|
|---|
| 11812 | return [false, new Date(date.getFullYear() + 1, 0, 1)]
|
|---|
| 11813 | }
|
|---|
| 11814 | }(tokens, at, nrule, has_year[0], has_calc[0]);
|
|---|
| 11815 | if (push_to_month === true)
|
|---|
| 11816 | selectors.month.push(selector);
|
|---|
| 11817 | else
|
|---|
| 11818 | selectors.monthday.push(selector);
|
|---|
| 11819 | at += has_year[0] + has_event[0] + (typeof has_calc[0][1] === "number" && has_calc[0][1] ? 3 : 0)
|
|---|
| 11820 | } else if (has_constrained_weekday[0]) {
|
|---|
| 11821 | at = parseMonthRange(tokens, at)
|
|---|
| 11822 | } else if (matchTokens(tokens, at, "month")) {
|
|---|
| 11823 | return parseMonthRange(tokens, at, true, true)
|
|---|
| 11824 | } else {
|
|---|
| 11825 | return at
|
|---|
| 11826 | }
|
|---|
| 11827 | if (!matchTokens(tokens, at, ","))
|
|---|
| 11828 | break
|
|---|
| 11829 | }
|
|---|
| 11830 | return at
|
|---|
| 11831 | }
|
|---|
| 11832 | this.getStatePair = function (date) {
|
|---|
| 11833 | var resultstate = false;
|
|---|
| 11834 | var changedate;
|
|---|
| 11835 | var unknown = false;
|
|---|
| 11836 | var comment;
|
|---|
| 11837 | var match_rule;
|
|---|
| 11838 | var date_matching_rules = [];
|
|---|
| 11839 | for (var nrule = 0; nrule < rules.length; nrule++) {
|
|---|
| 11840 | var matching_date_rule = true;
|
|---|
| 11841 | for (var ndateselector = 0; ndateselector < rules[nrule].date.length; ndateselector++) {
|
|---|
| 11842 | var dateselectors = rules[nrule].date[ndateselector];
|
|---|
| 11843 | var has_matching_selector = false;
|
|---|
| 11844 | for (var datesel = 0; datesel < dateselectors.length; datesel++) {
|
|---|
| 11845 | var res = dateselectors[datesel](date);
|
|---|
| 11846 | if (res[0]) {
|
|---|
| 11847 | has_matching_selector = true;
|
|---|
| 11848 | if (typeof res[2] === "string") {
|
|---|
| 11849 | comment = [res[2], nrule]
|
|---|
| 11850 | }
|
|---|
| 11851 | }
|
|---|
| 11852 | if (typeof changedate === "undefined" || typeof res[1] === "object" && res[1].getTime() < changedate.getTime())
|
|---|
| 11853 | changedate = res[1]
|
|---|
| 11854 | }
|
|---|
| 11855 | if (!has_matching_selector) {
|
|---|
| 11856 | matching_date_rule = false;
|
|---|
| 11857 | break
|
|---|
| 11858 | }
|
|---|
| 11859 | }
|
|---|
| 11860 | if (matching_date_rule) {
|
|---|
| 11861 | if ((rules[nrule].date.length > 0 || nrule > 0 && rules[nrule].meaning && rules[nrule - 1].date.length === 0) && (rules[nrule].meaning || rules[nrule].unknown) && !rules[nrule].wrapped && !rules[nrule].additional && !rules[nrule].fallback) {
|
|---|
| 11862 | date_matching_rules = []
|
|---|
| 11863 | }
|
|---|
| 11864 | date_matching_rules.push(nrule)
|
|---|
| 11865 | }
|
|---|
| 11866 | }
|
|---|
| 11867 | for (var nrule = 0; nrule < date_matching_rules.length; nrule++) {
|
|---|
| 11868 | var rule = date_matching_rules[nrule];
|
|---|
| 11869 | if (rules[rule].time.length === 0) {
|
|---|
| 11870 | if (!rules[rule].fallback || rules[rule].fallback && !(resultstate || unknown)) {
|
|---|
| 11871 | resultstate = rules[rule].meaning;
|
|---|
| 11872 | unknown = rules[rule].unknown;
|
|---|
| 11873 | match_rule = rule
|
|---|
| 11874 | }
|
|---|
| 11875 | }
|
|---|
| 11876 | for (var timesel = 0; timesel < rules[rule].time.length; timesel++) {
|
|---|
| 11877 | var res = rules[rule].time[timesel](date);
|
|---|
| 11878 | if (res[0]) {
|
|---|
| 11879 | if (!rules[rule].fallback || rules[rule].fallback && !(resultstate || unknown)) {
|
|---|
| 11880 | resultstate = rules[rule].meaning;
|
|---|
| 11881 | unknown = rules[rule].unknown;
|
|---|
| 11882 | match_rule = rule;
|
|---|
| 11883 | if (typeof comment === "object" && comment[0] === t("open end"))
|
|---|
| 11884 | comment = undefined;
|
|---|
| 11885 | if (res[2] === true && (resultstate || unknown)) {
|
|---|
| 11886 | comment = [t("open end"), match_rule];
|
|---|
| 11887 | resultstate = false;
|
|---|
| 11888 | unknown = true;
|
|---|
| 11889 | if (typeof rules[rule].time[timesel + 1] === "function") {
|
|---|
| 11890 | var next_res = rules[rule].time[timesel + 1](date);
|
|---|
| 11891 | if (!next_res[0] && typeof next_res[1] === "object" && rules[rule].time[timesel](new Date(date.getTime() - 1))[0]) {
|
|---|
| 11892 | resultstate = false;
|
|---|
| 11893 | unknown = false
|
|---|
| 11894 | }
|
|---|
| 11895 | }
|
|---|
| 11896 | if (false && typeof rules[rule - 1] === "object" && rules[rule].build_from_token_rule.toString() === rules[rule - 1].build_from_token_rule.toString() && typeof rules[rule] === "object" && rules[rule].build_from_token_rule.toString() === rules[rule].build_from_token_rule.toString()) {
|
|---|
| 11897 | var last_wrapping_time_selector = rules[rule].time[rules[rule].time.length - 1];
|
|---|
| 11898 | var last_w_res = last_wrapping_time_selector(new Date(date.getTime() - 1));
|
|---|
| 11899 | if (last_w_res[0] && typeof last_w_res[2] === "undefined" && (typeof last_w_res[2] === "undefined" || last_w_res[2] === false) && typeof last_w_res[1] === "object" && date.getTime() === last_w_res[1].getTime()) {
|
|---|
| 11900 | resultstate = false;
|
|---|
| 11901 | unknown = false
|
|---|
| 11902 | }
|
|---|
| 11903 | }
|
|---|
| 11904 | }
|
|---|
| 11905 | if (rules[rule].fallback) {
|
|---|
| 11906 | if (typeof changedate === "undefined" || typeof res[1] !== "undefined" && res[1] < changedate) {
|
|---|
| 11907 | changedate = res[1]
|
|---|
| 11908 | }
|
|---|
| 11909 | }
|
|---|
| 11910 | }
|
|---|
| 11911 | }
|
|---|
| 11912 | if (typeof changedate === "undefined" || typeof res[1] === "object" && res[1] < changedate)
|
|---|
| 11913 | changedate = res[1]
|
|---|
| 11914 | }
|
|---|
| 11915 | }
|
|---|
| 11916 | if (typeof rules[match_rule] === "object" && typeof rules[match_rule].comment === "string") {
|
|---|
| 11917 | comment = rules[match_rule].comment
|
|---|
| 11918 | } else if (typeof comment === "object") {
|
|---|
| 11919 | if (comment[1] === match_rule) {
|
|---|
| 11920 | comment = comment[0]
|
|---|
| 11921 | } else {
|
|---|
| 11922 | comment = undefined
|
|---|
| 11923 | }
|
|---|
| 11924 | }
|
|---|
| 11925 | return [resultstate, changedate, unknown, comment, match_rule]
|
|---|
| 11926 | };
|
|---|
| 11927 |
|
|---|
| 11928 | function prettifySelector(tokens, selector_start, selector_end, selector_type, conf) {
|
|---|
| 11929 | var prettified_value = "";
|
|---|
| 11930 | var at = selector_start;
|
|---|
| 11931 | while (at <= selector_end) {
|
|---|
| 11932 | if (matchTokens(tokens, at, "weekday")) {
|
|---|
| 11933 | if (!conf.leave_weekday_sep_one_day_betw && at - selector_start > 1 && (matchTokens(tokens, at - 1, ",") || matchTokens(tokens, at - 1, "-")) && matchTokens(tokens, at - 2, "weekday") && tokens[at][0] === (tokens[at - 2][0] + 1) % 7) {
|
|---|
| 11934 | prettified_value = prettified_value.substring(0, prettified_value.length - 1) + conf.sep_one_day_between
|
|---|
| 11935 | }
|
|---|
| 11936 | prettified_value += weekdays[tokens[at][0]]
|
|---|
| 11937 | } else if (at - selector_start > 0 && selector_type === "time" && matchTokens(tokens, at - 1, "timesep") && matchTokens(tokens, at, "number")) {
|
|---|
| 11938 | prettified_value += (tokens[at][0] < 10 ? "0" : "") + tokens[at][0].toString()
|
|---|
| 11939 | } else if (selector_type === "time" && conf.zero_pad_hour && at !== tokens.length && matchTokens(tokens, at, "number") && matchTokens(tokens, at + 1, "timesep")) {
|
|---|
| 11940 | prettified_value += (tokens[at][0] < 10 ? tokens[at][0] === 0 && conf.one_zero_if_hour_zero ? "" : "0" : "") + tokens[at][0].toString()
|
|---|
| 11941 | } else if (selector_type === "time" && at + 2 <= selector_end && matchTokens(tokens, at, "number") && matchTokens(tokens, at + 1, "-") && matchTokens(tokens, at + 2, "number")) {
|
|---|
| 11942 | prettified_value += (tokens[at][0] < 10 ? tokens[at][0] === 0 && conf.one_zero_if_hour_zero ? "" : "0" : "") + tokens[at][0].toString();
|
|---|
| 11943 | prettified_value += ":00-" + (tokens[at + 2][0] < 10 ? "0" : "") + tokens[at + 2][0].toString() + ":00";
|
|---|
| 11944 | at += 2
|
|---|
| 11945 | } else if (matchTokens(tokens, at, "comment")) {
|
|---|
| 11946 | prettified_value += '"' + tokens[at][0].toString() + '"'
|
|---|
| 11947 | } else if (matchTokens(tokens, at, "closed")) {
|
|---|
| 11948 | prettified_value += conf.leave_off_closed ? tokens[at][0] : conf.keyword_for_off_closed
|
|---|
| 11949 | } else if (at - selector_start > 0 && matchTokens(tokens, at, "number") && (matchTokens(tokens, at - 1, "month") && selector_type === "month" || matchTokens(tokens, at - 1, "week") && selector_type === "week")) {
|
|---|
| 11950 | prettified_value += " " + (conf.zero_pad_month_and_week_numbers && tokens[at][0] < 10 ? "0" : "") + tokens[at][0]
|
|---|
| 11951 | } else if (at - selector_start > 0 && matchTokens(tokens, at, "month") && matchTokens(tokens, at - 1, "year")) {
|
|---|
| 11952 | prettified_value += " " + months[[tokens[at][0]]]
|
|---|
| 11953 | } else if (at - selector_start > 0 && matchTokens(tokens, at, "event") && matchTokens(tokens, at - 1, "year")) {
|
|---|
| 11954 | prettified_value += " " + tokens[at][0]
|
|---|
| 11955 | } else if (matchTokens(tokens, at, "month")) {
|
|---|
| 11956 | prettified_value += months[[tokens[at][0]]];
|
|---|
| 11957 | if (at + 1 <= selector_end && matchTokens(tokens, at + 1, "weekday"))
|
|---|
| 11958 | prettified_value += " "
|
|---|
| 11959 | } else if (at + 2 <= selector_end && (matchTokens(tokens, at, "-") || matchTokens(tokens, at, "+")) && matchTokens(tokens, at + 1, "number", "calcday")) {
|
|---|
| 11960 | prettified_value += " " + tokens[at][0] + tokens[at + 1][0] + " day" + (Math.abs(tokens[at + 1][0]) === 1 ? "" : "s");
|
|---|
| 11961 | at += 2
|
|---|
| 11962 | } else if (at === selector_end && selector_type === "weekday" && tokens[at][0] === ":") {
|
|---|
| 11963 | } else {
|
|---|
| 11964 | prettified_value += tokens[at][0].toString()
|
|---|
| 11965 | }
|
|---|
| 11966 | at++
|
|---|
| 11967 | }
|
|---|
| 11968 | return prettified_value
|
|---|
| 11969 | }
|
|---|
| 11970 | this.getState = function (date) {
|
|---|
| 11971 | var it = this.getIterator(date);
|
|---|
| 11972 | return it.getState()
|
|---|
| 11973 | };
|
|---|
| 11974 | this.getUnknown = function (date) {
|
|---|
| 11975 | var it = this.getIterator(date);
|
|---|
| 11976 | return it.getUnknown()
|
|---|
| 11977 | };
|
|---|
| 11978 | this.getStateString = function (date, past) {
|
|---|
| 11979 | var it = this.getIterator(date);
|
|---|
| 11980 | return it.getStateString(past)
|
|---|
| 11981 | };
|
|---|
| 11982 | this.getComment = function (date) {
|
|---|
| 11983 | var it = this.getIterator(date);
|
|---|
| 11984 | return it.getComment()
|
|---|
| 11985 | };
|
|---|
| 11986 | this.getMatchingRule = function (date) {
|
|---|
| 11987 | var it = this.getIterator(date);
|
|---|
| 11988 | return it.getMatchingRule()
|
|---|
| 11989 | };
|
|---|
| 11990 | this.getWarnings = function () {
|
|---|
| 11991 | var it = this.getIterator();
|
|---|
| 11992 | return getWarnings(it)
|
|---|
| 11993 | };
|
|---|
| 11994 | this.prettifyValue = function (argument_hash) {
|
|---|
| 11995 | this.getWarnings();
|
|---|
| 11996 | return prettifyValue(argument_hash)
|
|---|
| 11997 | };
|
|---|
| 11998 | this.getNextChange = function (date, maxdate) {
|
|---|
| 11999 | var it = this.getIterator(date);
|
|---|
| 12000 | if (!it.advance(maxdate))
|
|---|
| 12001 | return undefined;
|
|---|
| 12002 | return it.getDate()
|
|---|
| 12003 | };
|
|---|
| 12004 | this.isWeekStable = function () {
|
|---|
| 12005 | return week_stable
|
|---|
| 12006 | };
|
|---|
| 12007 | this.isEqualTo = function (second_oh_object, start_date) {
|
|---|
| 12008 | if (typeof start_date === "undefined") {
|
|---|
| 12009 | var start_date = new Date
|
|---|
| 12010 | }
|
|---|
| 12011 | var datelimit;
|
|---|
| 12012 | if (this.isWeekStable() && second_oh_object.isWeekStable()) {
|
|---|
| 12013 | datelimit = new Date(start_date.getTime() + msec_in_day * 10)
|
|---|
| 12014 | } else {
|
|---|
| 12015 | datelimit = new Date(start_date.getTime() + msec_in_day * 366 * 5)
|
|---|
| 12016 | }
|
|---|
| 12017 | var first_it = this.getIterator(start_date);
|
|---|
| 12018 | var second_it = second_oh_object.getIterator(start_date);
|
|---|
| 12019 | while (first_it.advance(datelimit)) {
|
|---|
| 12020 | second_it.advance(datelimit);
|
|---|
| 12021 | var not_equal = [];
|
|---|
| 12022 | if (first_it.getDate().getTime() !== second_it.getDate().getTime()) {
|
|---|
| 12023 | not_equal.push("getDate")
|
|---|
| 12024 | }
|
|---|
| 12025 | if (first_it.getState() !== second_it.getState()) {
|
|---|
| 12026 | not_equal.push("getState")
|
|---|
| 12027 | }
|
|---|
| 12028 | if (first_it.getUnknown() !== second_it.getUnknown()) {
|
|---|
| 12029 | not_equal.push("getUnknown")
|
|---|
| 12030 | }
|
|---|
| 12031 | if (first_it.getComment() !== second_it.getComment()) {
|
|---|
| 12032 | not_equal.push("getComment")
|
|---|
| 12033 | }
|
|---|
| 12034 | if (not_equal.length) {
|
|---|
| 12035 | var deviation_for_time = {};
|
|---|
| 12036 | deviation_for_time[first_it.getDate().getTime()] = not_equal;
|
|---|
| 12037 | return [false, {
|
|---|
| 12038 | matching_rule: first_it.getMatchingRule(),
|
|---|
| 12039 | matching_rule_other: second_it.getMatchingRule(),
|
|---|
| 12040 | deviation_for_time: deviation_for_time
|
|---|
| 12041 | }]
|
|---|
| 12042 | }
|
|---|
| 12043 | }
|
|---|
| 12044 | return [true]
|
|---|
| 12045 | };
|
|---|
| 12046 | this.getOpenIntervals = function (from, to) {
|
|---|
| 12047 | var res = [];
|
|---|
| 12048 | var it = this.getIterator(from);
|
|---|
| 12049 | if (it.getState() || it.getUnknown()) {
|
|---|
| 12050 | res.push([from, undefined, it.getUnknown(), it.getComment()])
|
|---|
| 12051 | }
|
|---|
| 12052 | while (it.advance(to)) {
|
|---|
| 12053 | if (it.getState() || it.getUnknown()) {
|
|---|
| 12054 | if (res.length !== 0 && typeof res[res.length - 1][1] === "undefined") {
|
|---|
| 12055 | res[res.length - 1][1] = it.getDate()
|
|---|
| 12056 | }
|
|---|
| 12057 | res.push([it.getDate(), undefined, it.getUnknown(), it.getComment()])
|
|---|
| 12058 | } else {
|
|---|
| 12059 | if (res.length !== 0 && typeof res[res.length - 1][1] === "undefined") {
|
|---|
| 12060 | res[res.length - 1][1] = it.getDate()
|
|---|
| 12061 | }
|
|---|
| 12062 | }
|
|---|
| 12063 | }
|
|---|
| 12064 | if (res.length > 0 && typeof res[res.length - 1][1] === "undefined") {
|
|---|
| 12065 | res[res.length - 1][1] = to
|
|---|
| 12066 | }
|
|---|
| 12067 | return res
|
|---|
| 12068 | };
|
|---|
| 12069 | this.getOpenDuration = function (from, to) {
|
|---|
| 12070 | var open = 0;
|
|---|
| 12071 | var unknown = 0;
|
|---|
| 12072 | var it = this.getIterator(from);
|
|---|
| 12073 | var prevdate = it.getState() || it.getUnknown() ? from : undefined;
|
|---|
| 12074 | var prevstate = it.getState();
|
|---|
| 12075 | var prevunknown = it.getUnknown();
|
|---|
| 12076 | while (it.advance(to)) {
|
|---|
| 12077 | if (it.getState() || it.getUnknown()) {
|
|---|
| 12078 | if (typeof prevdate === "object") {
|
|---|
| 12079 | if (prevunknown)
|
|---|
| 12080 | unknown += it.getDate().getTime() - prevdate.getTime();
|
|---|
| 12081 | else if (prevstate)
|
|---|
| 12082 | open += it.getDate().getTime() - prevdate.getTime()
|
|---|
| 12083 | }
|
|---|
| 12084 | prevdate = it.getDate();
|
|---|
| 12085 | prevstate = it.getState();
|
|---|
| 12086 | prevunknown = it.getUnknown()
|
|---|
| 12087 | } else {
|
|---|
| 12088 | if (typeof prevdate === "object") {
|
|---|
| 12089 | if (prevunknown)
|
|---|
| 12090 | unknown += it.getDate().getTime() - prevdate.getTime();
|
|---|
| 12091 | else
|
|---|
| 12092 | open += it.getDate().getTime() - prevdate.getTime();
|
|---|
| 12093 | prevdate = undefined
|
|---|
| 12094 | }
|
|---|
| 12095 | }
|
|---|
| 12096 | }
|
|---|
| 12097 | if (typeof prevdate === "object") {
|
|---|
| 12098 | if (prevunknown)
|
|---|
| 12099 | unknown += to.getTime() - prevdate.getTime();
|
|---|
| 12100 | else
|
|---|
| 12101 | open += to.getTime() - prevdate.getTime()
|
|---|
| 12102 | }
|
|---|
| 12103 | return [open, unknown]
|
|---|
| 12104 | };
|
|---|
| 12105 | this.getIterator = function (date) {
|
|---|
| 12106 | return new function (oh) {
|
|---|
| 12107 | if (typeof date === "undefined")
|
|---|
| 12108 | date = new Date;
|
|---|
| 12109 | var prevstate = [undefined, date, undefined, undefined, undefined];
|
|---|
| 12110 | var state = oh.getStatePair(date);
|
|---|
| 12111 | this.getDate = function () {
|
|---|
| 12112 | return prevstate[1]
|
|---|
| 12113 | };
|
|---|
| 12114 | this.setDate = function (date) {
|
|---|
| 12115 | if (typeof date !== "object")
|
|---|
| 12116 | throw t("date parameter needed");
|
|---|
| 12117 | prevstate = [undefined, date, undefined, undefined, undefined];
|
|---|
| 12118 | state = oh.getStatePair(date)
|
|---|
| 12119 | };
|
|---|
| 12120 | this.getState = function () {
|
|---|
| 12121 | return state[0]
|
|---|
| 12122 | };
|
|---|
| 12123 | this.getUnknown = function () {
|
|---|
| 12124 | return state[2]
|
|---|
| 12125 | };
|
|---|
| 12126 | this.getStateString = function (past) {
|
|---|
| 12127 | return state[0] ? "open" : state[2] ? "unknown" : past ? "closed" : "close"
|
|---|
| 12128 | };
|
|---|
| 12129 | this.getComment = function () {
|
|---|
| 12130 | return state[3]
|
|---|
| 12131 | };
|
|---|
| 12132 | this.getMatchingRule = function () {
|
|---|
| 12133 | if (typeof state[4] === "undefined")
|
|---|
| 12134 | return undefined;
|
|---|
| 12135 | return rules[state[4]].build_from_token_rule[2]
|
|---|
| 12136 | };
|
|---|
| 12137 | this.advance = function (datelimit) {
|
|---|
| 12138 | if (typeof datelimit === "undefined") {
|
|---|
| 12139 | datelimit = new Date(prevstate[1].getTime() + msec_in_day * 366 * 5)
|
|---|
| 12140 | } else if (datelimit.getTime() <= prevstate[1].getTime()) {
|
|---|
| 12141 | return false
|
|---|
| 12142 | }
|
|---|
| 12143 | do {
|
|---|
| 12144 | if (typeof state[1] === "undefined") {
|
|---|
| 12145 | return false
|
|---|
| 12146 | }
|
|---|
| 12147 | if (state[1].getTime() <= prevstate[1].getTime()) {
|
|---|
| 12148 | throw "Fatal: infinite loop in nextChange"
|
|---|
| 12149 | }
|
|---|
| 12150 | if (state[1].getTime() >= datelimit.getTime()) {
|
|---|
| 12151 | return false
|
|---|
| 12152 | }
|
|---|
| 12153 | prevstate = state;
|
|---|
| 12154 | state = oh.getStatePair(prevstate[1])
|
|---|
| 12155 | } while (state[0] === prevstate[0] && state[2] === prevstate[2] && state[3] === prevstate[3]);
|
|---|
| 12156 | return true
|
|---|
| 12157 | }
|
|---|
| 12158 | }(this)
|
|---|
| 12159 | }
|
|---|
| 12160 | }
|
|---|
| 12161 | })
|
|---|
| 12162 | }, {
|
|---|
| 12163 | "./locales/core": 1,
|
|---|
| 12164 | moment: "moment",
|
|---|
| 12165 | suncalc: 2
|
|---|
| 12166 | }]
|
|---|
| 12167 | }, {}, []);
|
|---|