mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
Improved ical parsing for "view-ics" extension
This commit is contained in:
parent
33b509c0a6
commit
74c7948e72
869
plugins/view-ics/ical.js
Normal file
869
plugins/view-ics/ical.js
Normal file
|
@ -0,0 +1,869 @@
|
|||
// https://www.rfc-editor.org/rfc/rfc5545
|
||||
|
||||
(rl => {
|
||||
|
||||
const
|
||||
paramRegEx = /;([a-zA-Z0-9-]+)=([^";:,]*|"[^"]*")/g,
|
||||
// eslint-disable-next-line max-len
|
||||
dateRegEx = /(?<year>[0-9]{4})(?<month>[0-9]{2})(?<day>[0-9]{2})T(?<hour>[0-9]{2})(?<minute>[0-9]{2})(?<second>[0-9]{2})(?<utc>Z?)/,
|
||||
parseDate = (str, tz) => {
|
||||
let parts = dateRegEx.exec(str)?.groups,
|
||||
options = {dateStyle: 'long', timeStyle: 'short'},
|
||||
date = (parts ? new Date(
|
||||
parseInt(parts.year, 10),
|
||||
parseInt(parts.month, 10) - 1,
|
||||
parseInt(parts.day, 10),
|
||||
parseInt(parts.hour, 10),
|
||||
parseInt(parts.minute, 10),
|
||||
parseInt(parts.second, 10)
|
||||
) : new Date(str));
|
||||
tz && (options.timeZone = windowsVTIMEZONEs[tz] || tz);
|
||||
try {
|
||||
return date.format(options);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
if (options.timeZone) {
|
||||
options.timeZone = undefined;
|
||||
return date.format(options);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class Property extends String
|
||||
{
|
||||
constructor(name, value, params) {
|
||||
super(value);
|
||||
this.name = name;
|
||||
// this.value = value;
|
||||
this.params = {};
|
||||
if (params) {
|
||||
for (const param of params.matchAll(paramRegEx)) {
|
||||
if (param[2]) {
|
||||
this.params[param[1]] = param[2].replace(/^"|"$/);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
includes(...params) {
|
||||
return this.value.includes(...params);
|
||||
}
|
||||
replace(...params) {
|
||||
return this.value.replace(...params);
|
||||
}
|
||||
toString() {
|
||||
return this.value;
|
||||
}
|
||||
*/
|
||||
static fromString(data) {
|
||||
// Parse component property 'name *(";" param ) ":" value'
|
||||
const match = data.match(/^([a-zA-Z0-9-]+)((?:;[a-zA-Z0-9-]+=(?:[^";:,]*|"[^"]*"))*):(.+)$/);
|
||||
return match && new Property(match[1], match[3], match[2]);
|
||||
}
|
||||
}
|
||||
|
||||
rl.ICS = {
|
||||
|
||||
parseDate: parseDate,
|
||||
|
||||
parseEvent(text) {
|
||||
let VEVENT,
|
||||
VALARM,
|
||||
multiple = ['ATTACH','ATTENDEE','CATEGORIES','COMMENT','CONTACT','EXDATE',
|
||||
'EXRULE','RSTATUS','RELATED','RESOURCES','RDATE','RRULE'],
|
||||
lines = text.split(/\r?\n/),
|
||||
i = lines.length;
|
||||
while (i--) {
|
||||
let line = lines[i], prop;
|
||||
if (VEVENT) {
|
||||
while (line.startsWith(' ') && i--) {
|
||||
line = lines[i] + line.slice(1);
|
||||
}
|
||||
if (line.startsWith('END:VALARM')) {
|
||||
// Start parsing Alarm Component
|
||||
VALARM = {};
|
||||
continue;
|
||||
} else if (line.startsWith('BEGIN:VALARM')) {
|
||||
// End parsing Alarm Component
|
||||
VEVENT.VALARM || (VEVENT.VALARM = []);
|
||||
VEVENT.VALARM.push(VALARM);
|
||||
VALARM = null;
|
||||
continue;
|
||||
} else if (line.startsWith('BEGIN:VEVENT')) {
|
||||
// End parsing
|
||||
break;
|
||||
}
|
||||
prop = Property.fromString(line);
|
||||
if (prop) {
|
||||
if (VALARM) {
|
||||
VALARM[prop.name] = prop;
|
||||
} else if (multiple.includes(prop.name) || 'X-' == prop.name.slice(0,2)) {
|
||||
VEVENT[prop.name] || (VEVENT[prop.name] = []);
|
||||
VEVENT[prop.name].push(prop);
|
||||
} else {
|
||||
if ('DTSTART' === prop.name || 'DTEND' === prop.name) {
|
||||
prop = parseDate(prop, prop.params.TZID);
|
||||
}
|
||||
VEVENT[prop.name] = prop;
|
||||
}
|
||||
}
|
||||
} else if (line.startsWith('END:VEVENT')) {
|
||||
// Start parsing Event Component
|
||||
VEVENT = {};
|
||||
}
|
||||
}
|
||||
// METHOD:REPLY || METHOD:REQUEST
|
||||
if (VEVENT) {
|
||||
VEVENT.rawText = text;
|
||||
VEVENT.isCancelled = () => VEVENT.STATUS?.includes('CANCELLED');
|
||||
VEVENT.isConfirmed = () => VEVENT.STATUS?.includes('CONFIRMED');
|
||||
VEVENT.shouldReply = () => VEVENT.METHOD?.includes('REPLY');
|
||||
console.dir({
|
||||
VEVENT,
|
||||
isCancelled: VEVENT.isCancelled(),
|
||||
shouldReply: VEVENT.shouldReply()
|
||||
});
|
||||
}
|
||||
|
||||
return VEVENT;
|
||||
}
|
||||
};
|
||||
|
||||
// Microsoft Windows timezones
|
||||
// Subset from https://github.com/unicode-cldr/cldr-core/blob/master/supplemental/windowsZones.json
|
||||
const windowsVTIMEZONEs = {
|
||||
// Windows : [IANA...]
|
||||
"Afghanistan Standard Time": [
|
||||
"Asia/Kabul"
|
||||
],
|
||||
"Alaskan Standard Time": [
|
||||
"America/Anchorage"/*,
|
||||
"America/Juneau",
|
||||
"America/Metlakatla",
|
||||
"America/Nome",
|
||||
"America/Sitka",
|
||||
"America/Yakutat"*/
|
||||
],
|
||||
"Aleutian Standard Time": [
|
||||
"America/Adak"
|
||||
],
|
||||
"Altai Standard Time": [
|
||||
"Asia/Barnaul"
|
||||
],
|
||||
"Arab Standard Time": [
|
||||
"Asia/Aden"/*,
|
||||
"Asia/Bahrain",
|
||||
"Asia/Kuwait",
|
||||
"Asia/Qatar",
|
||||
"Asia/Riyadh"
|
||||
*/],
|
||||
"Arabian Standard Time": [
|
||||
"Asia/Dubai"/*,
|
||||
"Asia/Muscat",
|
||||
"Etc/GMT-4"
|
||||
*/],
|
||||
"Arabic Standard Time": [
|
||||
"Asia/Baghdad"
|
||||
],
|
||||
"Argentina Standard Time": [
|
||||
"America/Argentina/La_Rioja"/*,
|
||||
"America/Argentina/Rio_Gallegos",
|
||||
"America/Argentina/Salta",
|
||||
"America/Argentina/San_Juan",
|
||||
"America/Argentina/San_Luis",
|
||||
"America/Argentina/Tucuman",
|
||||
"America/Argentina/Ushuaia",
|
||||
"America/Buenos_Aires",
|
||||
"America/Catamarca",
|
||||
"America/Cordoba",
|
||||
"America/Jujuy",
|
||||
"America/Mendoza"
|
||||
*/],
|
||||
"Astrakhan Standard Time": [
|
||||
"Europe/Astrakhan"/*,
|
||||
"Europe/Ulyanovsk"
|
||||
*/],
|
||||
"Atlantic Standard Time": [
|
||||
"America/Glace_Bay"/*,
|
||||
"America/Goose_Bay",
|
||||
"America/Halifax",
|
||||
"America/Moncton",
|
||||
"America/Thule",
|
||||
"Atlantic/Bermuda"
|
||||
*/],
|
||||
"AUS Central Standard Time": [
|
||||
"Australia/Darwin"
|
||||
],
|
||||
"Aus Central W. Standard Time": [
|
||||
"Australia/Eucla"
|
||||
],
|
||||
"AUS Eastern Standard Time": [
|
||||
"Australia/Melbourne"/*,
|
||||
"Australia/Sydney"
|
||||
*/],
|
||||
"Azerbaijan Standard Time": [
|
||||
"Asia/Baku"
|
||||
],
|
||||
"Azores Standard Time": [
|
||||
"America/Scoresbysund"/*,
|
||||
"Atlantic/Azores"
|
||||
*/],
|
||||
"Bahia Standard Time": [
|
||||
"America/Bahia"
|
||||
],
|
||||
"Bangladesh Standard Time": [
|
||||
"Asia/Dhaka"/*,
|
||||
"Asia/Thimphu"
|
||||
*/],
|
||||
"Belarus Standard Time": [
|
||||
"Europe/Minsk"
|
||||
],
|
||||
"Bougainville Standard Time": [
|
||||
"Pacific/Bougainville"
|
||||
],
|
||||
"Canada Central Standard Time": [
|
||||
"America/Regina"/*,
|
||||
"America/Swift_Current"
|
||||
*/],
|
||||
"Cape Verde Standard Time": [
|
||||
"Atlantic/Cape_Verde"/*,
|
||||
"Etc/GMT+1"
|
||||
*/],
|
||||
"Caucasus Standard Time": [
|
||||
"Asia/Yerevan"
|
||||
],
|
||||
"Cen. Australia Standard Time": [
|
||||
"Australia/Adelaide"/*,
|
||||
"Australia/Broken_Hill"
|
||||
*/],
|
||||
"Central America Standard Time": [
|
||||
"America/Belize"/*,
|
||||
"America/Costa_Rica",
|
||||
"America/El_Salvador",
|
||||
"America/Guatemala",
|
||||
"America/Managua",
|
||||
"America/Tegucigalpa",
|
||||
"Pacific/Galapagos",
|
||||
"Etc/GMT+6"
|
||||
*/],
|
||||
"Central Asia Standard Time": [
|
||||
"Asia/Almaty"/*,
|
||||
"Asia/Bishkek",
|
||||
"Asia/Qostanay",
|
||||
"Asia/Urumqi",
|
||||
"Indian/Chagos",
|
||||
"Antarctica/Vostok",
|
||||
"Etc/GMT-6"
|
||||
*/],
|
||||
"Central Brazilian Standard Time": [
|
||||
"America/Campo_Grande"/*,
|
||||
"America/Cuiaba"
|
||||
*/],
|
||||
"Central Europe Standard Time": [
|
||||
"Europe/Belgrade"/*,
|
||||
"Europe/Bratislava",
|
||||
"Europe/Budapest",
|
||||
"Europe/Ljubljana",
|
||||
"Europe/Podgorica",
|
||||
"Europe/Prague",
|
||||
"Europe/Tirane"
|
||||
*/],
|
||||
"Central European Standard Time": [
|
||||
"Europe/Sarajevo"/*,
|
||||
"Europe/Skopje",
|
||||
"Europe/Warsaw",
|
||||
"Europe/Zagreb"
|
||||
*/],
|
||||
"Central Pacific Standard Time": [
|
||||
"Pacific/Efate"/*,
|
||||
"Pacific/Guadalcanal",
|
||||
"Pacific/Noumea",
|
||||
"Pacific/Ponape Pacific/Kosrae",
|
||||
"Antarctica/Macquarie",
|
||||
"Etc/GMT-11"
|
||||
*/],
|
||||
"Central Standard Time": [
|
||||
"America/Chicago"/*,
|
||||
"America/Indiana/Knox",
|
||||
"America/Indiana/Tell_City",
|
||||
"America/Matamoros",
|
||||
"America/Menominee",
|
||||
"America/North_Dakota/Beulah",
|
||||
"America/North_Dakota/Center",
|
||||
"America/North_Dakota/New_Salem",
|
||||
"America/Rainy_River",
|
||||
"America/Rankin_Inlet",
|
||||
"America/Resolute",
|
||||
"America/Winnipeg",
|
||||
"CST6CDT"
|
||||
*/],
|
||||
"Central Standard Time (Mexico)": [
|
||||
"America/Bahia_Banderas"/*,
|
||||
"America/Merida",
|
||||
"America/Mexico_City",
|
||||
"America/Monterrey"
|
||||
*/],
|
||||
"Chatham Islands Standard Time": [
|
||||
"Pacific/Chatham"
|
||||
],
|
||||
"China Standard Time": [
|
||||
"Asia/Hong_Kong"/*,
|
||||
"Asia/Macau",
|
||||
"Asia/Shanghai"
|
||||
*/],
|
||||
"Cuba Standard Time": [
|
||||
"America/Havana"
|
||||
],
|
||||
"Dateline Standard Time": [
|
||||
"Etc/GMT+12"
|
||||
],
|
||||
"E. Africa Standard Time": [
|
||||
"Africa/Addis_Ababa"/*,
|
||||
"Africa/Asmera",
|
||||
"Africa/Dar_es_Salaam",
|
||||
"Africa/Djibouti",
|
||||
"Africa/Juba",
|
||||
"Africa/Kampala",
|
||||
"Africa/Mogadishu",
|
||||
"Africa/Nairobi",
|
||||
"Indian/Antananarivo",
|
||||
"Indian/Comoro",
|
||||
"Indian/Mayotte",
|
||||
"Antarctica/Syowa",
|
||||
"Etc/GMT-3"
|
||||
*/],
|
||||
"E. Australia Standard Time": [
|
||||
"Australia/Brisbane"/*,
|
||||
"Australia/Lindeman"
|
||||
*/],
|
||||
"E. Europe Standard Time": [
|
||||
"Europe/Chisinau"
|
||||
],
|
||||
"E. South America Standard Time": [
|
||||
"America/Sao_Paulo"
|
||||
],
|
||||
"Easter Island Standard Time": [
|
||||
"Pacific/Easter"
|
||||
],
|
||||
"Eastern Standard Time": [
|
||||
"America/Detroit"/*,
|
||||
"America/Indiana/Petersburg",
|
||||
"America/Indiana/Vincennes",
|
||||
"America/Indiana/Winamac",
|
||||
"America/Iqaluit",
|
||||
"America/Kentucky/Monticello",
|
||||
"America/Louisville",
|
||||
"America/Montreal",
|
||||
"America/Nassau",
|
||||
"America/New_York",
|
||||
"America/Nipigon",
|
||||
"America/Pangnirtung",
|
||||
"America/Thunder_Bay",
|
||||
"America/Toronto",
|
||||
"EST5EDT"
|
||||
*/],
|
||||
"Eastern Standard Time (Mexico)": [
|
||||
"America/Cancun"
|
||||
],
|
||||
"Egypt Standard Time": [
|
||||
"Africa/Cairo"
|
||||
],
|
||||
"Ekaterinburg Standard Time": [
|
||||
"Asia/Yekaterinburg"
|
||||
],
|
||||
"Fiji Standard Time": [
|
||||
"Pacific/Fiji"
|
||||
],
|
||||
"FLE Standard Time": [
|
||||
"Europe/Helsinki"/*,
|
||||
"Europe/Kiev",
|
||||
"Europe/Mariehamn",
|
||||
"Europe/Riga",
|
||||
"Europe/Sofia",
|
||||
"Europe/Tallinn",
|
||||
"Europe/Uzhgorod",
|
||||
"Europe/Vilnius",
|
||||
"Europe/Zaporozhye"
|
||||
*/],
|
||||
"Georgian Standard Time": [
|
||||
"Asia/Tbilisi"
|
||||
],
|
||||
"GMT Standard Time": [
|
||||
"Atlantic/Canary"/*,
|
||||
"Atlantic/Faeroe",
|
||||
"Atlantic/Madeira",
|
||||
"Europe/Dublin",
|
||||
"Europe/Guernsey",
|
||||
"Europe/Isle_of_Man",
|
||||
"Europe/Jersey",
|
||||
"Europe/Lisbon",
|
||||
"Europe/London"
|
||||
*/],
|
||||
"Greenland Standard Time": [
|
||||
"America/Godthab"
|
||||
],
|
||||
"Greenwich Standard Time": [
|
||||
"Africa/Abidjan"/*,
|
||||
"Africa/Accra",
|
||||
"Africa/Bamako",
|
||||
"Africa/Banjul",
|
||||
"Africa/Bissau",
|
||||
"Africa/Conakry",
|
||||
"Africa/Dakar",
|
||||
"Africa/Freetown",
|
||||
"Africa/Lome",
|
||||
"Africa/Monrovia",
|
||||
"Africa/Nouakchott",
|
||||
"Africa/Ouagadougou",
|
||||
"Atlantic/Reykjavik",
|
||||
"Atlantic/St_Helena"
|
||||
*/],
|
||||
"GTB Standard Time": [
|
||||
"Asia/Nicosia"/*,
|
||||
"Asia/Famagusta",
|
||||
"Europe/Athens",
|
||||
"Europe/Bucharest"
|
||||
*/],
|
||||
"Haiti Standard Time": [
|
||||
"America/Port-au-Prince"
|
||||
],
|
||||
"Hawaiian Standard Time": [
|
||||
"Pacific/Honolulu"/*,
|
||||
"Pacific/Johnston",
|
||||
"Pacific/Rarotonga",
|
||||
"Pacific/Tahiti",
|
||||
"Etc/GMT+10"
|
||||
*/],
|
||||
"India Standard Time": [
|
||||
"Asia/Calcutta"
|
||||
],
|
||||
"Iran Standard Time": [
|
||||
"Asia/Tehran"
|
||||
],
|
||||
"Israel Standard Time": [
|
||||
"Asia/Jerusalem"
|
||||
],
|
||||
"Jordan Standard Time": [
|
||||
"Asia/Amman"
|
||||
],
|
||||
"Kaliningrad Standard Time": [
|
||||
"Europe/Kaliningrad"
|
||||
],
|
||||
"Korea Standard Time": [
|
||||
"Asia/Seoul"
|
||||
],
|
||||
"Libya Standard Time": [
|
||||
"Africa/Tripoli"
|
||||
],
|
||||
"Line Islands Standard Time": [
|
||||
"Pacific/Kiritimati"/*,
|
||||
"Etc/GMT-14"
|
||||
*/],
|
||||
"Lord Howe Standard Time": [
|
||||
"Australia/Lord_Howe"
|
||||
],
|
||||
"Magadan Standard Time": [
|
||||
"Asia/Magadan"
|
||||
],
|
||||
"Magallanes Standard Time": [
|
||||
"America/Punta_Arenas"
|
||||
],
|
||||
"Marquesas Standard Time": [
|
||||
"Pacific/Marquesas"
|
||||
],
|
||||
"Mauritius Standard Time": [
|
||||
"Indian/Mauritius"/*,
|
||||
"Indian/Mahe",
|
||||
"Indian/Reunion"
|
||||
*/],
|
||||
"Middle East Standard Time": [
|
||||
"Asia/Beirut"
|
||||
],
|
||||
"Montevideo Standard Time": [
|
||||
"America/Montevideo"
|
||||
],
|
||||
"Morocco Standard Time": [
|
||||
"Africa/Casablanca"/*,
|
||||
"Africa/El_Aaiun"
|
||||
*/],
|
||||
"Mountain Standard Time": [
|
||||
"America/Boise"/*,
|
||||
"America/Cambridge_Bay",
|
||||
"America/Denver",
|
||||
"America/Edmonton",
|
||||
"America/Inuvik",
|
||||
"America/Ojinaga",
|
||||
"America/Yellowknife",
|
||||
"MST7MDT"
|
||||
*/],
|
||||
"Mountain Standard Time (Mexico)": [
|
||||
"America/Chihuahua"/*,
|
||||
"America/Mazatlan"
|
||||
*/],
|
||||
"Myanmar Standard Time": [
|
||||
"Asia/Rangoon"/*,
|
||||
"Indian/Cocos"
|
||||
*/],
|
||||
"N. Central Asia Standard Time": [
|
||||
"Asia/Novosibirsk"
|
||||
],
|
||||
"Namibia Standard Time": [
|
||||
"Africa/Windhoek"
|
||||
],
|
||||
"Nepal Standard Time": [
|
||||
"Asia/Katmandu"
|
||||
],
|
||||
"New Zealand Standard Time": [
|
||||
"Pacific/Auckland"/*,
|
||||
"Antarctica/McMurdo"
|
||||
*/],
|
||||
"Newfoundland Standard Time": [
|
||||
"America/St_Johns"
|
||||
],
|
||||
"Norfolk Standard Time": [
|
||||
"Pacific/Norfolk"
|
||||
],
|
||||
"North Asia East Standard Time": [
|
||||
"Asia/Irkutsk"
|
||||
],
|
||||
"North Asia Standard Time": [
|
||||
"Asia/Krasnoyarsk"/*,
|
||||
"Asia/Novokuznetsk"
|
||||
*/],
|
||||
"North Korea Standard Time": [
|
||||
"Asia/Pyongyang"
|
||||
],
|
||||
"Omsk Standard Time": [
|
||||
"Asia/Omsk"
|
||||
],
|
||||
"Pacific SA Standard Time": [
|
||||
"America/Santiago"
|
||||
],
|
||||
"Pacific Standard Time": [
|
||||
"America/Los_Angeles"/*,
|
||||
"America/Dawson",
|
||||
"America/Vancouver",
|
||||
"America/Whitehorse",
|
||||
"PST8PDT"
|
||||
*/],
|
||||
"Pacific Standard Time (Mexico)": [
|
||||
"America/Tijuana"/*,
|
||||
"America/Santa_Isabel"
|
||||
*/],
|
||||
"Pakistan Standard Time": [
|
||||
"Asia/Karachi"
|
||||
],
|
||||
"Paraguay Standard Time": [
|
||||
"America/Asuncion"
|
||||
],
|
||||
"Qyzylorda Standard Time": [
|
||||
"Asia/Qyzylorda"
|
||||
],
|
||||
"Romance Standard Time": [
|
||||
"Europe/Paris"/*,
|
||||
"Europe/Brussels",
|
||||
"Europe/Copenhagen",
|
||||
"Europe/Madrid",
|
||||
"Africa/Ceuta"
|
||||
*/],
|
||||
"Russia Time Zone 3": [
|
||||
"Europe/Samara"
|
||||
],
|
||||
"Russia Time Zone 10": [
|
||||
"Asia/Srednekolymsk"
|
||||
],
|
||||
"Russia Time Zone 11": [
|
||||
"Asia/Kamchatka"/*,
|
||||
"Asia/Anadyr"
|
||||
*/],
|
||||
"Russian Standard Time": [
|
||||
"Europe/Moscow"/*,
|
||||
"Europe/Kirov",
|
||||
"Europe/Simferopol"
|
||||
*/],
|
||||
"SA Eastern Standard Time": [
|
||||
"America/Belem"/*,
|
||||
"America/Cayenne",
|
||||
"America/Fortaleza",
|
||||
"America/Maceio",
|
||||
"America/Paramaribo",
|
||||
"America/Recife",
|
||||
"America/Santarem",
|
||||
"Atlantic/Stanley",
|
||||
"Antarctica/Palmer",
|
||||
"Antarctica/Rothera",
|
||||
"Etc/GMT+3"
|
||||
*/],
|
||||
"SA Pacific Standard Time": [
|
||||
"America/Bogota"/*,
|
||||
"America/Cayman",
|
||||
"America/Coral_Harbour",
|
||||
"America/Eirunepe",
|
||||
"America/Guayaquil",
|
||||
"America/Jamaica",
|
||||
"America/Lima",
|
||||
"America/Panama",
|
||||
"America/Rio_Branco",
|
||||
"Etc/GMT+5"
|
||||
*/],
|
||||
"SA Western Standard Time": [
|
||||
"America/Anguilla"/*,
|
||||
"America/Antigua",
|
||||
"America/Aruba",
|
||||
"America/Barbados",
|
||||
"America/Blanc-Sablon",
|
||||
"America/Boa_Vista",
|
||||
"America/Curacao",
|
||||
"America/Dominica",
|
||||
"America/Grenada",
|
||||
"America/Guadeloupe",
|
||||
"America/Guyana",
|
||||
"America/Kralendijk",
|
||||
"America/La_Paz",
|
||||
"America/Lower_Princes",
|
||||
"America/Manaus",
|
||||
"America/Marigot",
|
||||
"America/Martinique",
|
||||
"America/Montserrat",
|
||||
"America/Port_of_Spain",
|
||||
"America/Porto_Velho",
|
||||
"America/Puerto_Rico",
|
||||
"America/Santo_Domingo",
|
||||
"America/St_Barthelemy",
|
||||
"America/St_Kitts",
|
||||
"America/St_Lucia",
|
||||
"America/St_Thomas",
|
||||
"America/St_Vincent",
|
||||
"America/Tortola",
|
||||
"Etc/GMT+4"
|
||||
*/],
|
||||
"Saint Pierre Standard Time": [
|
||||
"America/Miquelon"
|
||||
],
|
||||
"Sakhalin Standard Time": [
|
||||
"Asia/Sakhalin"
|
||||
],
|
||||
"Samoa Standard Time": [
|
||||
"Pacific/Apia"
|
||||
],
|
||||
"Sao Tome Standard Time": [
|
||||
"Africa/Sao_Tome"
|
||||
],
|
||||
"Saratov Standard Time": [
|
||||
"Europe/Saratov"
|
||||
],
|
||||
"SE Asia Standard Time": [
|
||||
"Asia/Bangkok"/*,
|
||||
"Asia/Jakarta",
|
||||
"Asia/Phnom_Penh",
|
||||
"Asia/Pontianak",
|
||||
"Asia/Saigon",
|
||||
"Asia/Vientiane",
|
||||
"Indian/Christmas",
|
||||
"Antarctica/Davis",
|
||||
"Etc/GMT-7"
|
||||
*/],
|
||||
"Singapore Standard Time": [
|
||||
"Asia/Singapore"/*,
|
||||
"Asia/Brunei",
|
||||
"Asia/Kuala_Lumpur",
|
||||
"Asia/Kuching",
|
||||
"Asia/Makassar",
|
||||
"Asia/Manila",
|
||||
"Antarctica/Casey",
|
||||
"Etc/GMT-8"
|
||||
*/],
|
||||
"South Africa Standard Time": [
|
||||
"Africa/Johannesburg"/*,
|
||||
"Africa/Blantyre",
|
||||
"Africa/Bujumbura",
|
||||
"Africa/Gaborone",
|
||||
"Africa/Harare",
|
||||
"Africa/Kigali",
|
||||
"Africa/Lubumbashi",
|
||||
"Africa/Lusaka",
|
||||
"Africa/Maputo",
|
||||
"Africa/Maseru",
|
||||
"Africa/Mbabane",
|
||||
"Etc/GMT-2"
|
||||
*/],
|
||||
"Sri Lanka Standard Time": [
|
||||
"Asia/Colombo"
|
||||
],
|
||||
"Sudan Standard Time": [
|
||||
"Africa/Khartoum"
|
||||
],
|
||||
"Syria Standard Time": [
|
||||
"Asia/Damascus"
|
||||
],
|
||||
"Taipei Standard Time": [
|
||||
"Asia/Taipei"
|
||||
],
|
||||
"Tasmania Standard Time": [
|
||||
"Australia/Currie"/*,
|
||||
"Australia/Hobart"
|
||||
*/],
|
||||
"Tocantins Standard Time": [
|
||||
"America/Araguaina"
|
||||
],
|
||||
"Tokyo Standard Time": [
|
||||
"Asia/Tokyo"/*,
|
||||
"Asia/Dili",
|
||||
"Asia/Jayapura",
|
||||
"Pacific/Palau",
|
||||
"Etc/GMT-9"
|
||||
*/],
|
||||
"Tomsk Standard Time": [
|
||||
"Asia/Tomsk"
|
||||
],
|
||||
"Tonga Standard Time": [
|
||||
"Pacific/Tongatapu"
|
||||
],
|
||||
"Transbaikal Standard Time": [
|
||||
"Asia/Chita"
|
||||
],
|
||||
"Turkey Standard Time": [
|
||||
"Europe/Istanbul"
|
||||
],
|
||||
"Turks And Caicos Standard Time": [
|
||||
"America/Grand_Turk"
|
||||
],
|
||||
"Ulaanbaatar Standard Time": [
|
||||
"Asia/Ulaanbaatar"/*,
|
||||
"Asia/Choibalsan"
|
||||
*/],
|
||||
"US Eastern Standard Time": [
|
||||
"America/Indianapolis"/*,
|
||||
"America/Indiana/Marengo",
|
||||
"America/Indiana/Vevay"
|
||||
*/],
|
||||
"US Mountain Standard Time": [
|
||||
"America/Phoenix"/*,
|
||||
"America/Creston",
|
||||
"America/Dawson_Creek",
|
||||
"America/Fort_Nelson",
|
||||
"America/Hermosillo",
|
||||
"Etc/GMT+7"
|
||||
*/],
|
||||
"UTC": [
|
||||
"Etc/GMT"/*,
|
||||
"America/Danmarkshavn",
|
||||
"Etc/UTC"
|
||||
*/],
|
||||
"UTC-02": [
|
||||
"Etc/GMT+2"/*,
|
||||
"America/Noronha",
|
||||
"Atlantic/South_Georgia"
|
||||
*/],
|
||||
"UTC-08": [
|
||||
"Etc/GMT+8"/*,
|
||||
"Pacific/Pitcairn"
|
||||
*/],
|
||||
"UTC-09": [
|
||||
"Etc/GMT+9"/*,
|
||||
"Pacific/Gambier"
|
||||
*/],
|
||||
"UTC-11": [
|
||||
"Etc/GMT+11"/*,
|
||||
"Pacific/Midway",
|
||||
"Pacific/Niue",
|
||||
"Pacific/Pago_Pago"
|
||||
*/],
|
||||
"UTC+12": [
|
||||
"Etc/GMT-12"/*,
|
||||
"Pacific/Funafuti",
|
||||
"Pacific/Kwajalein",
|
||||
"Pacific/Majuro",
|
||||
"Pacific/Nauru",
|
||||
"Pacific/Tarawa",
|
||||
"Pacific/Wake",
|
||||
"Pacific/Wallis"
|
||||
*/],
|
||||
"UTC+13": [
|
||||
"Etc/GMT-13"/*,
|
||||
"Pacific/Enderbury",
|
||||
"Pacific/Fakaofo"
|
||||
*/],
|
||||
"Venezuela Standard Time": [
|
||||
"America/Caracas"
|
||||
],
|
||||
"Vladivostok Standard Time": [
|
||||
"Asia/Vladivostok"/*,
|
||||
"Asia/Ust-Nera"
|
||||
*/],
|
||||
"Volgograd Standard Time": [
|
||||
"Europe/Volgograd"
|
||||
],
|
||||
"W. Australia Standard Time": [
|
||||
"Australia/Perth"
|
||||
],
|
||||
"W. Central Africa Standard Time": [
|
||||
"Africa/Algiers"/*,
|
||||
"Africa/Bangui",
|
||||
"Africa/Brazzaville",
|
||||
"Africa/Douala",
|
||||
"Africa/Kinshasa",
|
||||
"Africa/Lagos",
|
||||
"Africa/Libreville",
|
||||
"Africa/Luanda",
|
||||
"Africa/Malabo",
|
||||
"Africa/Ndjamena",
|
||||
"Africa/Niamey",
|
||||
"Africa/Porto-Novo",
|
||||
"Africa/Tunis",
|
||||
"Etc/GMT-1"
|
||||
*/],
|
||||
"W. Europe Standard Time": [
|
||||
"Europe/Amsterdam"/*,
|
||||
"Europe/Andorra",
|
||||
"Europe/Berlin",
|
||||
"Europe/Busingen",
|
||||
"Europe/Gibraltar",
|
||||
"Europe/Luxembourg",
|
||||
"Europe/Malta",
|
||||
"Europe/Monaco",
|
||||
"Europe/Oslo",
|
||||
"Europe/Rome",
|
||||
"Europe/San_Marino",
|
||||
"Europe/Stockholm",
|
||||
"Europe/Vaduz",
|
||||
"Europe/Vatican",
|
||||
"Europe/Vienna",
|
||||
"Europe/Zurich",
|
||||
"Arctic/Longyearbyen"
|
||||
*/],
|
||||
"W. Mongolia Standard Time": [
|
||||
"Asia/Hovd"
|
||||
],
|
||||
"West Asia Standard Time": [
|
||||
"Asia/Aqtau"/*,
|
||||
"Asia/Aqtobe",
|
||||
"Asia/Ashgabat",
|
||||
"Asia/Atyrau",
|
||||
"Asia/Dushanbe",
|
||||
"Asia/Oral",
|
||||
"Asia/Samarkand",
|
||||
"Asia/Tashkent",
|
||||
"Indian/Kerguelen",
|
||||
"Indian/Maldives",
|
||||
"Antarctica/Mawson",
|
||||
"Etc/GMT-5"
|
||||
*/],
|
||||
"West Bank Standard Time": [
|
||||
"Asia/Gaza"/*,
|
||||
"Asia/Hebron"
|
||||
*/],
|
||||
"West Pacific Standard Time": [
|
||||
"Pacific/Guam"/*,
|
||||
"Pacific/Port_Moresby",
|
||||
"Pacific/Saipan",
|
||||
"Pacific/Truk",
|
||||
"Antarctica/DumontDUrville",
|
||||
"Etc/GMT-10"
|
||||
*/],
|
||||
"Yakutsk Standard Time": [
|
||||
"Asia/Khandyga"/*,
|
||||
"Asia/Yakutsk"
|
||||
*/],
|
||||
};
|
||||
})(window.rl);
|
|
@ -13,7 +13,7 @@ class ViewICSPlugin extends \RainLoop\Plugins\AbstractPlugin
|
|||
public function Init() : void
|
||||
{
|
||||
// $this->UseLangs(true);
|
||||
$this->addJs('ical.js');
|
||||
$this->addJs('message.js');
|
||||
$this->addJs('windowsZones.js');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,30 +7,7 @@
|
|||
const
|
||||
template = document.getElementById(templateId),
|
||||
view = e.detail,
|
||||
attachmentsPlace = template.content.querySelector('.attachmentsPlace'),
|
||||
dateRegEx = /(TZID=(?<tz>[^:]+):)?(?<year>[0-9]{4})(?<month>[0-9]{2})(?<day>[0-9]{2})T(?<hour>[0-9]{2})(?<minute>[0-9]{2})(?<second>[0-9]{2})(?<utc>Z?)/,
|
||||
parseDate = str => {
|
||||
let parts = dateRegEx.exec(str)?.groups,
|
||||
options = {dateStyle: 'long', timeStyle: 'short'},
|
||||
date = (parts ? new Date(
|
||||
parseInt(parts.year, 10),
|
||||
parseInt(parts.month, 10) - 1,
|
||||
parseInt(parts.day, 10),
|
||||
parseInt(parts.hour, 10),
|
||||
parseInt(parts.minute, 10),
|
||||
parseInt(parts.second, 10)
|
||||
) : new Date(str));
|
||||
parts?.tz && (options.timeZone = windowsVTIMEZONEs[parts.tz] || parts.tz);
|
||||
try {
|
||||
return date.format(options);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
if (options.timeZone) {
|
||||
options.timeZone = undefined;
|
||||
return date.format(options);
|
||||
}
|
||||
}
|
||||
};
|
||||
attachmentsPlace = template.content.querySelector('.attachmentsPlace');
|
||||
|
||||
attachmentsPlace.after(Element.fromHTML(`
|
||||
<details data-bind="if: viewICS, visible: viewICS">
|
||||
|
@ -74,8 +51,8 @@
|
|||
if (item["ical:summary"]) {
|
||||
let VEVENT = {
|
||||
SUMMARY: item["ical:summary"],
|
||||
DTSTART: parseDate(item["ical:dtstart"]),
|
||||
// DTEND: parseDate(item["ical:dtend"]),
|
||||
DTSTART: rl.ICS.parseDate(item["ical:dtstart"]),
|
||||
// DTEND: rl.ICS.parseDate(item["ical:dtend"]),
|
||||
// TRANSP: item["ical:transp"],
|
||||
// LOCATION: item["ical:location"],
|
||||
ATTENDEE: []
|
||||
|
@ -94,58 +71,8 @@
|
|||
rl.fetch(ics.linkDownload())
|
||||
.then(response => (response.status < 400) ? response.text() : Promise.reject(new Error({ response })))
|
||||
.then(text => {
|
||||
let VEVENT,
|
||||
VALARM,
|
||||
multiple = ['ATTACH','ATTENDEE','CATEGORIES','COMMENT','CONTACT','EXDATE',
|
||||
'EXRULE','RSTATUS','RELATED','RESOURCES','RDATE','RRULE'],
|
||||
lines = text.split(/\r?\n/),
|
||||
i = lines.length;
|
||||
while (i--) {
|
||||
let line = lines[i];
|
||||
let VEVENT = rl.ICS.parseEvent(text);
|
||||
if (VEVENT) {
|
||||
while (line.startsWith(' ') && i--) {
|
||||
line = lines[i] + line.slice(1);
|
||||
}
|
||||
if (line.startsWith('END:VALARM')) {
|
||||
VALARM = {};
|
||||
continue;
|
||||
} else if (line.startsWith('BEGIN:VALARM')) {
|
||||
VEVENT.VALARM || (VEVENT.VALARM = []);
|
||||
VEVENT.VALARM.push(VALARM);
|
||||
VALARM = null;
|
||||
continue;
|
||||
} else if (line.startsWith('BEGIN:VEVENT')) {
|
||||
break;
|
||||
}
|
||||
line = line.match(/^([^:;]+)[:;](.+)$/);
|
||||
if (line) {
|
||||
if (VALARM) {
|
||||
VALARM[line[1]] = line[2];
|
||||
} else if (multiple.includes(line[1]) || 'X-' == line[1].slice(0,2)) {
|
||||
VEVENT[line[1]] || (VEVENT[line[1]] = []);
|
||||
VEVENT[line[1]].push(line[2]);
|
||||
} else {
|
||||
if ('DTSTART' === line[1] || 'DTEND' === line[1]) {
|
||||
line[2] = parseDate(line[2]);
|
||||
}
|
||||
VEVENT[line[1]] = line[2];
|
||||
}
|
||||
}
|
||||
} else if (line.startsWith('END:VEVENT')) {
|
||||
VEVENT = {};
|
||||
}
|
||||
}
|
||||
// METHOD:REPLY || METHOD:REQUEST
|
||||
// console.dir({VEVENT:VEVENT});
|
||||
if (VEVENT) {
|
||||
VEVENT.rawText = text;
|
||||
VEVENT.isCancelled = () => VEVENT.STATUS?.includes('CANCELLED');
|
||||
VEVENT.isConfirmed = () => VEVENT.STATUS?.includes('CONFIRMED');
|
||||
VEVENT.shouldReply = () => VEVENT.METHOD?.includes('REPLY');
|
||||
console.dir({
|
||||
isCancelled: VEVENT.isCancelled(),
|
||||
shouldReply: VEVENT.shouldReply()
|
||||
});
|
||||
view.viewICS(VEVENT);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1,738 +0,0 @@
|
|||
// Windows timezones (Subset from https://github.com/unicode-cldr/cldr-core/blob/master/supplemental/windowsZones.json)
|
||||
const windowsVTIMEZONEs = {
|
||||
"_unicodeVersion": "13.0.0",
|
||||
"_cldrVersion": "37",
|
||||
// Windows : [IANA...]
|
||||
"Afghanistan Standard Time": [
|
||||
"Asia/Kabul"
|
||||
],
|
||||
"Alaskan Standard Time": [
|
||||
"America/Anchorage"/*,
|
||||
"America/Juneau",
|
||||
"America/Metlakatla",
|
||||
"America/Nome",
|
||||
"America/Sitka",
|
||||
"America/Yakutat"*/
|
||||
],
|
||||
"Aleutian Standard Time": [
|
||||
"America/Adak"
|
||||
],
|
||||
"Altai Standard Time": [
|
||||
"Asia/Barnaul"
|
||||
],
|
||||
"Arab Standard Time": [
|
||||
"Asia/Aden"/*,
|
||||
"Asia/Bahrain",
|
||||
"Asia/Kuwait",
|
||||
"Asia/Qatar",
|
||||
"Asia/Riyadh"
|
||||
*/],
|
||||
"Arabian Standard Time": [
|
||||
"Asia/Dubai"/*,
|
||||
"Asia/Muscat",
|
||||
"Etc/GMT-4"
|
||||
*/],
|
||||
"Arabic Standard Time": [
|
||||
"Asia/Baghdad"
|
||||
],
|
||||
"Argentina Standard Time": [
|
||||
"America/Argentina/La_Rioja"/*,
|
||||
"America/Argentina/Rio_Gallegos",
|
||||
"America/Argentina/Salta",
|
||||
"America/Argentina/San_Juan",
|
||||
"America/Argentina/San_Luis",
|
||||
"America/Argentina/Tucuman",
|
||||
"America/Argentina/Ushuaia",
|
||||
"America/Buenos_Aires",
|
||||
"America/Catamarca",
|
||||
"America/Cordoba",
|
||||
"America/Jujuy",
|
||||
"America/Mendoza"
|
||||
*/],
|
||||
"Astrakhan Standard Time": [
|
||||
"Europe/Astrakhan"/*,
|
||||
"Europe/Ulyanovsk"
|
||||
*/],
|
||||
"Atlantic Standard Time": [
|
||||
"America/Glace_Bay"/*,
|
||||
"America/Goose_Bay",
|
||||
"America/Halifax",
|
||||
"America/Moncton",
|
||||
"America/Thule",
|
||||
"Atlantic/Bermuda"
|
||||
*/],
|
||||
"AUS Central Standard Time": [
|
||||
"Australia/Darwin"
|
||||
],
|
||||
"Aus Central W. Standard Time": [
|
||||
"Australia/Eucla"
|
||||
],
|
||||
"AUS Eastern Standard Time": [
|
||||
"Australia/Melbourne"/*,
|
||||
"Australia/Sydney"
|
||||
*/],
|
||||
"Azerbaijan Standard Time": [
|
||||
"Asia/Baku"
|
||||
],
|
||||
"Azores Standard Time": [
|
||||
"America/Scoresbysund"/*,
|
||||
"Atlantic/Azores"
|
||||
*/],
|
||||
"Bahia Standard Time": [
|
||||
"America/Bahia"
|
||||
],
|
||||
"Bangladesh Standard Time": [
|
||||
"Asia/Dhaka"/*,
|
||||
"Asia/Thimphu"
|
||||
*/],
|
||||
"Belarus Standard Time": [
|
||||
"Europe/Minsk"
|
||||
],
|
||||
"Bougainville Standard Time": [
|
||||
"Pacific/Bougainville"
|
||||
],
|
||||
"Canada Central Standard Time": [
|
||||
"America/Regina"/*,
|
||||
"America/Swift_Current"
|
||||
*/],
|
||||
"Cape Verde Standard Time": [
|
||||
"Atlantic/Cape_Verde"/*,
|
||||
"Etc/GMT+1"
|
||||
*/],
|
||||
"Caucasus Standard Time": [
|
||||
"Asia/Yerevan"
|
||||
],
|
||||
"Cen. Australia Standard Time": [
|
||||
"Australia/Adelaide"/*,
|
||||
"Australia/Broken_Hill"
|
||||
*/],
|
||||
"Central America Standard Time": [
|
||||
"America/Belize"/*,
|
||||
"America/Costa_Rica",
|
||||
"America/El_Salvador",
|
||||
"America/Guatemala",
|
||||
"America/Managua",
|
||||
"America/Tegucigalpa",
|
||||
"Pacific/Galapagos",
|
||||
"Etc/GMT+6"
|
||||
*/],
|
||||
"Central Asia Standard Time": [
|
||||
"Asia/Almaty"/*,
|
||||
"Asia/Bishkek",
|
||||
"Asia/Qostanay",
|
||||
"Asia/Urumqi",
|
||||
"Indian/Chagos",
|
||||
"Antarctica/Vostok",
|
||||
"Etc/GMT-6"
|
||||
*/],
|
||||
"Central Brazilian Standard Time": [
|
||||
"America/Campo_Grande"/*,
|
||||
"America/Cuiaba"
|
||||
*/],
|
||||
"Central Europe Standard Time": [
|
||||
"Europe/Belgrade"/*,
|
||||
"Europe/Bratislava",
|
||||
"Europe/Budapest",
|
||||
"Europe/Ljubljana",
|
||||
"Europe/Podgorica",
|
||||
"Europe/Prague",
|
||||
"Europe/Tirane"
|
||||
*/],
|
||||
"Central European Standard Time": [
|
||||
"Europe/Sarajevo"/*,
|
||||
"Europe/Skopje",
|
||||
"Europe/Warsaw",
|
||||
"Europe/Zagreb"
|
||||
*/],
|
||||
"Central Pacific Standard Time": [
|
||||
"Pacific/Efate"/*,
|
||||
"Pacific/Guadalcanal",
|
||||
"Pacific/Noumea",
|
||||
"Pacific/Ponape Pacific/Kosrae",
|
||||
"Antarctica/Macquarie",
|
||||
"Etc/GMT-11"
|
||||
*/],
|
||||
"Central Standard Time": [
|
||||
"America/Chicago"/*,
|
||||
"America/Indiana/Knox",
|
||||
"America/Indiana/Tell_City",
|
||||
"America/Matamoros",
|
||||
"America/Menominee",
|
||||
"America/North_Dakota/Beulah",
|
||||
"America/North_Dakota/Center",
|
||||
"America/North_Dakota/New_Salem",
|
||||
"America/Rainy_River",
|
||||
"America/Rankin_Inlet",
|
||||
"America/Resolute",
|
||||
"America/Winnipeg",
|
||||
"CST6CDT"
|
||||
*/],
|
||||
"Central Standard Time (Mexico)": [
|
||||
"America/Bahia_Banderas"/*,
|
||||
"America/Merida",
|
||||
"America/Mexico_City",
|
||||
"America/Monterrey"
|
||||
*/],
|
||||
"Chatham Islands Standard Time": [
|
||||
"Pacific/Chatham"
|
||||
],
|
||||
"China Standard Time": [
|
||||
"Asia/Hong_Kong"/*,
|
||||
"Asia/Macau",
|
||||
"Asia/Shanghai"
|
||||
*/],
|
||||
"Cuba Standard Time": [
|
||||
"America/Havana"
|
||||
],
|
||||
"Dateline Standard Time": [
|
||||
"Etc/GMT+12"
|
||||
],
|
||||
"E. Africa Standard Time": [
|
||||
"Africa/Addis_Ababa"/*,
|
||||
"Africa/Asmera",
|
||||
"Africa/Dar_es_Salaam",
|
||||
"Africa/Djibouti",
|
||||
"Africa/Juba",
|
||||
"Africa/Kampala",
|
||||
"Africa/Mogadishu",
|
||||
"Africa/Nairobi",
|
||||
"Indian/Antananarivo",
|
||||
"Indian/Comoro",
|
||||
"Indian/Mayotte",
|
||||
"Antarctica/Syowa",
|
||||
"Etc/GMT-3"
|
||||
*/],
|
||||
"E. Australia Standard Time": [
|
||||
"Australia/Brisbane"/*,
|
||||
"Australia/Lindeman"
|
||||
*/],
|
||||
"E. Europe Standard Time": [
|
||||
"Europe/Chisinau"
|
||||
],
|
||||
"E. South America Standard Time": [
|
||||
"America/Sao_Paulo"
|
||||
],
|
||||
"Easter Island Standard Time": [
|
||||
"Pacific/Easter"
|
||||
],
|
||||
"Eastern Standard Time": [
|
||||
"America/Detroit"/*,
|
||||
"America/Indiana/Petersburg",
|
||||
"America/Indiana/Vincennes",
|
||||
"America/Indiana/Winamac",
|
||||
"America/Iqaluit",
|
||||
"America/Kentucky/Monticello",
|
||||
"America/Louisville",
|
||||
"America/Montreal",
|
||||
"America/Nassau",
|
||||
"America/New_York",
|
||||
"America/Nipigon",
|
||||
"America/Pangnirtung",
|
||||
"America/Thunder_Bay",
|
||||
"America/Toronto",
|
||||
"EST5EDT"
|
||||
*/],
|
||||
"Eastern Standard Time (Mexico)": [
|
||||
"America/Cancun"
|
||||
],
|
||||
"Egypt Standard Time": [
|
||||
"Africa/Cairo"
|
||||
],
|
||||
"Ekaterinburg Standard Time": [
|
||||
"Asia/Yekaterinburg"
|
||||
],
|
||||
"Fiji Standard Time": [
|
||||
"Pacific/Fiji"
|
||||
],
|
||||
"FLE Standard Time": [
|
||||
"Europe/Helsinki"/*,
|
||||
"Europe/Kiev",
|
||||
"Europe/Mariehamn",
|
||||
"Europe/Riga",
|
||||
"Europe/Sofia",
|
||||
"Europe/Tallinn",
|
||||
"Europe/Uzhgorod",
|
||||
"Europe/Vilnius",
|
||||
"Europe/Zaporozhye"
|
||||
*/],
|
||||
"Georgian Standard Time": [
|
||||
"Asia/Tbilisi"
|
||||
],
|
||||
"GMT Standard Time": [
|
||||
"Atlantic/Canary"/*,
|
||||
"Atlantic/Faeroe",
|
||||
"Atlantic/Madeira",
|
||||
"Europe/Dublin",
|
||||
"Europe/Guernsey",
|
||||
"Europe/Isle_of_Man",
|
||||
"Europe/Jersey",
|
||||
"Europe/Lisbon",
|
||||
"Europe/London"
|
||||
*/],
|
||||
"Greenland Standard Time": [
|
||||
"America/Godthab"
|
||||
],
|
||||
"Greenwich Standard Time": [
|
||||
"Africa/Abidjan"/*,
|
||||
"Africa/Accra",
|
||||
"Africa/Bamako",
|
||||
"Africa/Banjul",
|
||||
"Africa/Bissau",
|
||||
"Africa/Conakry",
|
||||
"Africa/Dakar",
|
||||
"Africa/Freetown",
|
||||
"Africa/Lome",
|
||||
"Africa/Monrovia",
|
||||
"Africa/Nouakchott",
|
||||
"Africa/Ouagadougou",
|
||||
"Atlantic/Reykjavik",
|
||||
"Atlantic/St_Helena"
|
||||
*/],
|
||||
"GTB Standard Time": [
|
||||
"Asia/Nicosia"/*,
|
||||
"Asia/Famagusta",
|
||||
"Europe/Athens",
|
||||
"Europe/Bucharest"
|
||||
*/],
|
||||
"Haiti Standard Time": [
|
||||
"America/Port-au-Prince"
|
||||
],
|
||||
"Hawaiian Standard Time": [
|
||||
"Pacific/Honolulu"/*,
|
||||
"Pacific/Johnston",
|
||||
"Pacific/Rarotonga",
|
||||
"Pacific/Tahiti",
|
||||
"Etc/GMT+10"
|
||||
*/],
|
||||
"India Standard Time": [
|
||||
"Asia/Calcutta"
|
||||
],
|
||||
"Iran Standard Time": [
|
||||
"Asia/Tehran"
|
||||
],
|
||||
"Israel Standard Time": [
|
||||
"Asia/Jerusalem"
|
||||
],
|
||||
"Jordan Standard Time": [
|
||||
"Asia/Amman"
|
||||
],
|
||||
"Kaliningrad Standard Time": [
|
||||
"Europe/Kaliningrad"
|
||||
],
|
||||
"Korea Standard Time": [
|
||||
"Asia/Seoul"
|
||||
],
|
||||
"Libya Standard Time": [
|
||||
"Africa/Tripoli"
|
||||
],
|
||||
"Line Islands Standard Time": [
|
||||
"Pacific/Kiritimati"/*,
|
||||
"Etc/GMT-14"
|
||||
*/],
|
||||
"Lord Howe Standard Time": [
|
||||
"Australia/Lord_Howe"
|
||||
],
|
||||
"Magadan Standard Time": [
|
||||
"Asia/Magadan"
|
||||
],
|
||||
"Magallanes Standard Time": [
|
||||
"America/Punta_Arenas"
|
||||
],
|
||||
"Marquesas Standard Time": [
|
||||
"Pacific/Marquesas"
|
||||
],
|
||||
"Mauritius Standard Time": [
|
||||
"Indian/Mauritius"/*,
|
||||
"Indian/Mahe",
|
||||
"Indian/Reunion"
|
||||
*/],
|
||||
"Middle East Standard Time": [
|
||||
"Asia/Beirut"
|
||||
],
|
||||
"Montevideo Standard Time": [
|
||||
"America/Montevideo"
|
||||
],
|
||||
"Morocco Standard Time": [
|
||||
"Africa/Casablanca"/*,
|
||||
"Africa/El_Aaiun"
|
||||
*/],
|
||||
"Mountain Standard Time": [
|
||||
"America/Boise"/*,
|
||||
"America/Cambridge_Bay",
|
||||
"America/Denver",
|
||||
"America/Edmonton",
|
||||
"America/Inuvik",
|
||||
"America/Ojinaga",
|
||||
"America/Yellowknife",
|
||||
"MST7MDT"
|
||||
*/],
|
||||
"Mountain Standard Time (Mexico)": [
|
||||
"America/Chihuahua"/*,
|
||||
"America/Mazatlan"
|
||||
*/],
|
||||
"Myanmar Standard Time": [
|
||||
"Asia/Rangoon"/*,
|
||||
"Indian/Cocos"
|
||||
*/],
|
||||
"N. Central Asia Standard Time": [
|
||||
"Asia/Novosibirsk"
|
||||
],
|
||||
"Namibia Standard Time": [
|
||||
"Africa/Windhoek"
|
||||
],
|
||||
"Nepal Standard Time": [
|
||||
"Asia/Katmandu"
|
||||
],
|
||||
"New Zealand Standard Time": [
|
||||
"Pacific/Auckland"/*,
|
||||
"Antarctica/McMurdo"
|
||||
*/],
|
||||
"Newfoundland Standard Time": [
|
||||
"America/St_Johns"
|
||||
],
|
||||
"Norfolk Standard Time": [
|
||||
"Pacific/Norfolk"
|
||||
],
|
||||
"North Asia East Standard Time": [
|
||||
"Asia/Irkutsk"
|
||||
],
|
||||
"North Asia Standard Time": [
|
||||
"Asia/Krasnoyarsk"/*,
|
||||
"Asia/Novokuznetsk"
|
||||
*/],
|
||||
"North Korea Standard Time": [
|
||||
"Asia/Pyongyang"
|
||||
],
|
||||
"Omsk Standard Time": [
|
||||
"Asia/Omsk"
|
||||
],
|
||||
"Pacific SA Standard Time": [
|
||||
"America/Santiago"
|
||||
],
|
||||
"Pacific Standard Time": [
|
||||
"America/Los_Angeles"/*,
|
||||
"America/Dawson",
|
||||
"America/Vancouver",
|
||||
"America/Whitehorse",
|
||||
"PST8PDT"
|
||||
*/],
|
||||
"Pacific Standard Time (Mexico)": [
|
||||
"America/Tijuana"/*,
|
||||
"America/Santa_Isabel"
|
||||
*/],
|
||||
"Pakistan Standard Time": [
|
||||
"Asia/Karachi"
|
||||
],
|
||||
"Paraguay Standard Time": [
|
||||
"America/Asuncion"
|
||||
],
|
||||
"Qyzylorda Standard Time": [
|
||||
"Asia/Qyzylorda"
|
||||
],
|
||||
"Romance Standard Time": [
|
||||
"Europe/Paris"/*,
|
||||
"Europe/Brussels",
|
||||
"Europe/Copenhagen",
|
||||
"Europe/Madrid",
|
||||
"Africa/Ceuta"
|
||||
*/],
|
||||
"Russia Time Zone 3": [
|
||||
"Europe/Samara"
|
||||
],
|
||||
"Russia Time Zone 10": [
|
||||
"Asia/Srednekolymsk"
|
||||
],
|
||||
"Russia Time Zone 11": [
|
||||
"Asia/Kamchatka"/*,
|
||||
"Asia/Anadyr"
|
||||
*/],
|
||||
"Russian Standard Time": [
|
||||
"Europe/Moscow"/*,
|
||||
"Europe/Kirov",
|
||||
"Europe/Simferopol"
|
||||
*/],
|
||||
"SA Eastern Standard Time": [
|
||||
"America/Belem"/*,
|
||||
"America/Cayenne",
|
||||
"America/Fortaleza",
|
||||
"America/Maceio",
|
||||
"America/Paramaribo",
|
||||
"America/Recife",
|
||||
"America/Santarem",
|
||||
"Atlantic/Stanley",
|
||||
"Antarctica/Palmer",
|
||||
"Antarctica/Rothera",
|
||||
"Etc/GMT+3"
|
||||
*/],
|
||||
"SA Pacific Standard Time": [
|
||||
"America/Bogota"/*,
|
||||
"America/Cayman",
|
||||
"America/Coral_Harbour",
|
||||
"America/Eirunepe",
|
||||
"America/Guayaquil",
|
||||
"America/Jamaica",
|
||||
"America/Lima",
|
||||
"America/Panama",
|
||||
"America/Rio_Branco",
|
||||
"Etc/GMT+5"
|
||||
*/],
|
||||
"SA Western Standard Time": [
|
||||
"America/Anguilla"/*,
|
||||
"America/Antigua",
|
||||
"America/Aruba",
|
||||
"America/Barbados",
|
||||
"America/Blanc-Sablon",
|
||||
"America/Boa_Vista",
|
||||
"America/Curacao",
|
||||
"America/Dominica",
|
||||
"America/Grenada",
|
||||
"America/Guadeloupe",
|
||||
"America/Guyana",
|
||||
"America/Kralendijk",
|
||||
"America/La_Paz",
|
||||
"America/Lower_Princes",
|
||||
"America/Manaus",
|
||||
"America/Marigot",
|
||||
"America/Martinique",
|
||||
"America/Montserrat",
|
||||
"America/Port_of_Spain",
|
||||
"America/Porto_Velho",
|
||||
"America/Puerto_Rico",
|
||||
"America/Santo_Domingo",
|
||||
"America/St_Barthelemy",
|
||||
"America/St_Kitts",
|
||||
"America/St_Lucia",
|
||||
"America/St_Thomas",
|
||||
"America/St_Vincent",
|
||||
"America/Tortola",
|
||||
"Etc/GMT+4"
|
||||
*/],
|
||||
"Saint Pierre Standard Time": [
|
||||
"America/Miquelon"
|
||||
],
|
||||
"Sakhalin Standard Time": [
|
||||
"Asia/Sakhalin"
|
||||
],
|
||||
"Samoa Standard Time": [
|
||||
"Pacific/Apia"
|
||||
],
|
||||
"Sao Tome Standard Time": [
|
||||
"Africa/Sao_Tome"
|
||||
],
|
||||
"Saratov Standard Time": [
|
||||
"Europe/Saratov"
|
||||
],
|
||||
"SE Asia Standard Time": [
|
||||
"Asia/Bangkok"/*,
|
||||
"Asia/Jakarta",
|
||||
"Asia/Phnom_Penh",
|
||||
"Asia/Pontianak",
|
||||
"Asia/Saigon",
|
||||
"Asia/Vientiane",
|
||||
"Indian/Christmas",
|
||||
"Antarctica/Davis",
|
||||
"Etc/GMT-7"
|
||||
*/],
|
||||
"Singapore Standard Time": [
|
||||
"Asia/Singapore"/*,
|
||||
"Asia/Brunei",
|
||||
"Asia/Kuala_Lumpur",
|
||||
"Asia/Kuching",
|
||||
"Asia/Makassar",
|
||||
"Asia/Manila",
|
||||
"Antarctica/Casey",
|
||||
"Etc/GMT-8"
|
||||
*/],
|
||||
"South Africa Standard Time": [
|
||||
"Africa/Johannesburg"/*,
|
||||
"Africa/Blantyre",
|
||||
"Africa/Bujumbura",
|
||||
"Africa/Gaborone",
|
||||
"Africa/Harare",
|
||||
"Africa/Kigali",
|
||||
"Africa/Lubumbashi",
|
||||
"Africa/Lusaka",
|
||||
"Africa/Maputo",
|
||||
"Africa/Maseru",
|
||||
"Africa/Mbabane",
|
||||
"Etc/GMT-2"
|
||||
*/],
|
||||
"Sri Lanka Standard Time": [
|
||||
"Asia/Colombo"
|
||||
],
|
||||
"Sudan Standard Time": [
|
||||
"Africa/Khartoum"
|
||||
],
|
||||
"Syria Standard Time": [
|
||||
"Asia/Damascus"
|
||||
],
|
||||
"Taipei Standard Time": [
|
||||
"Asia/Taipei"
|
||||
],
|
||||
"Tasmania Standard Time": [
|
||||
"Australia/Currie"/*,
|
||||
"Australia/Hobart"
|
||||
*/],
|
||||
"Tocantins Standard Time": [
|
||||
"America/Araguaina"
|
||||
],
|
||||
"Tokyo Standard Time": [
|
||||
"Asia/Tokyo"/*,
|
||||
"Asia/Dili",
|
||||
"Asia/Jayapura",
|
||||
"Pacific/Palau",
|
||||
"Etc/GMT-9"
|
||||
*/],
|
||||
"Tomsk Standard Time": [
|
||||
"Asia/Tomsk"
|
||||
],
|
||||
"Tonga Standard Time": [
|
||||
"Pacific/Tongatapu"
|
||||
],
|
||||
"Transbaikal Standard Time": [
|
||||
"Asia/Chita"
|
||||
],
|
||||
"Turkey Standard Time": [
|
||||
"Europe/Istanbul"
|
||||
],
|
||||
"Turks And Caicos Standard Time": [
|
||||
"America/Grand_Turk"
|
||||
],
|
||||
"Ulaanbaatar Standard Time": [
|
||||
"Asia/Ulaanbaatar"/*,
|
||||
"Asia/Choibalsan"
|
||||
*/],
|
||||
"US Eastern Standard Time": [
|
||||
"America/Indianapolis"/*,
|
||||
"America/Indiana/Marengo",
|
||||
"America/Indiana/Vevay"
|
||||
*/],
|
||||
"US Mountain Standard Time": [
|
||||
"America/Phoenix"/*,
|
||||
"America/Creston",
|
||||
"America/Dawson_Creek",
|
||||
"America/Fort_Nelson",
|
||||
"America/Hermosillo",
|
||||
"Etc/GMT+7"
|
||||
*/],
|
||||
"UTC": [
|
||||
"Etc/GMT"/*,
|
||||
"America/Danmarkshavn",
|
||||
"Etc/UTC"
|
||||
*/],
|
||||
"UTC-02": [
|
||||
"Etc/GMT+2"/*,
|
||||
"America/Noronha",
|
||||
"Atlantic/South_Georgia"
|
||||
*/],
|
||||
"UTC-08": [
|
||||
"Etc/GMT+8"/*,
|
||||
"Pacific/Pitcairn"
|
||||
*/],
|
||||
"UTC-09": [
|
||||
"Etc/GMT+9"/*,
|
||||
"Pacific/Gambier"
|
||||
*/],
|
||||
"UTC-11": [
|
||||
"Etc/GMT+11"/*,
|
||||
"Pacific/Midway",
|
||||
"Pacific/Niue",
|
||||
"Pacific/Pago_Pago"
|
||||
*/],
|
||||
"UTC+12": [
|
||||
"Etc/GMT-12"/*,
|
||||
"Pacific/Funafuti",
|
||||
"Pacific/Kwajalein",
|
||||
"Pacific/Majuro",
|
||||
"Pacific/Nauru",
|
||||
"Pacific/Tarawa",
|
||||
"Pacific/Wake",
|
||||
"Pacific/Wallis"
|
||||
*/],
|
||||
"UTC+13": [
|
||||
"Etc/GMT-13"/*,
|
||||
"Pacific/Enderbury",
|
||||
"Pacific/Fakaofo"
|
||||
*/],
|
||||
"Venezuela Standard Time": [
|
||||
"America/Caracas"
|
||||
],
|
||||
"Vladivostok Standard Time": [
|
||||
"Asia/Vladivostok"/*,
|
||||
"Asia/Ust-Nera"
|
||||
*/],
|
||||
"Volgograd Standard Time": [
|
||||
"Europe/Volgograd"
|
||||
],
|
||||
"W. Australia Standard Time": [
|
||||
"Australia/Perth"
|
||||
],
|
||||
"W. Central Africa Standard Time": [
|
||||
"Africa/Algiers"/*,
|
||||
"Africa/Bangui",
|
||||
"Africa/Brazzaville",
|
||||
"Africa/Douala",
|
||||
"Africa/Kinshasa",
|
||||
"Africa/Lagos",
|
||||
"Africa/Libreville",
|
||||
"Africa/Luanda",
|
||||
"Africa/Malabo",
|
||||
"Africa/Ndjamena",
|
||||
"Africa/Niamey",
|
||||
"Africa/Porto-Novo",
|
||||
"Africa/Tunis",
|
||||
"Etc/GMT-1"
|
||||
*/],
|
||||
"W. Europe Standard Time": [
|
||||
"Europe/Amsterdam"/*,
|
||||
"Europe/Andorra",
|
||||
"Europe/Berlin",
|
||||
"Europe/Busingen",
|
||||
"Europe/Gibraltar",
|
||||
"Europe/Luxembourg",
|
||||
"Europe/Malta",
|
||||
"Europe/Monaco",
|
||||
"Europe/Oslo",
|
||||
"Europe/Rome",
|
||||
"Europe/San_Marino",
|
||||
"Europe/Stockholm",
|
||||
"Europe/Vaduz",
|
||||
"Europe/Vatican",
|
||||
"Europe/Vienna",
|
||||
"Europe/Zurich",
|
||||
"Arctic/Longyearbyen"
|
||||
*/],
|
||||
"W. Mongolia Standard Time": [
|
||||
"Asia/Hovd"
|
||||
],
|
||||
"West Asia Standard Time": [
|
||||
"Asia/Aqtau"/*,
|
||||
"Asia/Aqtobe",
|
||||
"Asia/Ashgabat",
|
||||
"Asia/Atyrau",
|
||||
"Asia/Dushanbe",
|
||||
"Asia/Oral",
|
||||
"Asia/Samarkand",
|
||||
"Asia/Tashkent",
|
||||
"Indian/Kerguelen",
|
||||
"Indian/Maldives",
|
||||
"Antarctica/Mawson",
|
||||
"Etc/GMT-5"
|
||||
*/],
|
||||
"West Bank Standard Time": [
|
||||
"Asia/Gaza"/*,
|
||||
"Asia/Hebron"
|
||||
*/],
|
||||
"West Pacific Standard Time": [
|
||||
"Pacific/Guam"/*,
|
||||
"Pacific/Port_Moresby",
|
||||
"Pacific/Saipan",
|
||||
"Pacific/Truk",
|
||||
"Antarctica/DumontDUrville",
|
||||
"Etc/GMT-10"
|
||||
*/],
|
||||
"Yakutsk Standard Time": [
|
||||
"Asia/Khandyga"/*,
|
||||
"Asia/Yakutsk"
|
||||
*/],
|
||||
};
|
Loading…
Reference in a new issue