Intial timezone support
This commit is contained in:
parent
478237e60f
commit
ae8a79ea07
5 changed files with 187 additions and 146 deletions
270
lib/tz.js
270
lib/tz.js
|
@ -1,147 +1,127 @@
|
|||
'use strict';
|
||||
|
||||
module.exports.list = [
|
||||
'Pacific/Midway',
|
||||
'Pacific/Samoa',
|
||||
'Pacific/Honolulu',
|
||||
'US/Alaska',
|
||||
'America/Los_Angeles',
|
||||
'America/Tijuana',
|
||||
'US/Arizona',
|
||||
'America/Chihuahua',
|
||||
'America/Chihuahua',
|
||||
'America/Mazatlan',
|
||||
'US/Mountain',
|
||||
'America/Managua',
|
||||
'US/Central',
|
||||
'America/Mexico_City',
|
||||
'America/Mexico_City',
|
||||
'America/Monterrey',
|
||||
'Canada/Saskatchewan',
|
||||
'America/Bogota',
|
||||
'US/Eastern',
|
||||
'US/East-Indiana',
|
||||
'America/Lima',
|
||||
'America/Bogota',
|
||||
'Canada/Atlantic',
|
||||
'America/Caracas',
|
||||
'America/La_Paz',
|
||||
'America/Santiago',
|
||||
'Canada/Newfoundland',
|
||||
'America/Sao_Paulo',
|
||||
'America/Argentina/Buenos_Aires',
|
||||
'America/Argentina/Buenos_Aires',
|
||||
'America/Godthab',
|
||||
'America/Noronha',
|
||||
'Atlantic/Azores',
|
||||
'Atlantic/Cape_Verde',
|
||||
'Africa/Casablanca',
|
||||
'Europe/London',
|
||||
'Etc/Greenwich',
|
||||
'Europe/Lisbon',
|
||||
'Europe/London',
|
||||
'Africa/Monrovia',
|
||||
'UTC',
|
||||
'Europe/Amsterdam',
|
||||
'Europe/Belgrade',
|
||||
'Europe/Berlin',
|
||||
'Europe/Berlin',
|
||||
'Europe/Bratislava',
|
||||
'Europe/Brussels',
|
||||
'Europe/Budapest',
|
||||
'Europe/Copenhagen',
|
||||
'Europe/Ljubljana',
|
||||
'Europe/Madrid',
|
||||
'Europe/Paris',
|
||||
'Europe/Prague',
|
||||
'Europe/Rome',
|
||||
'Europe/Sarajevo',
|
||||
'Europe/Skopje',
|
||||
'Europe/Stockholm',
|
||||
'Europe/Vienna',
|
||||
'Europe/Warsaw',
|
||||
'Africa/Lagos',
|
||||
'Europe/Zagreb',
|
||||
'Europe/Athens',
|
||||
'Europe/Bucharest',
|
||||
'Africa/Cairo',
|
||||
'Africa/Harare',
|
||||
'Europe/Helsinki',
|
||||
'Europe/Istanbul',
|
||||
'Asia/Jerusalem',
|
||||
'Europe/Helsinki',
|
||||
'Africa/Johannesburg',
|
||||
'Europe/Riga',
|
||||
'Europe/Sofia',
|
||||
'Europe/Tallinn',
|
||||
'Europe/Vilnius',
|
||||
'Asia/Baghdad',
|
||||
'Asia/Kuwait',
|
||||
'Europe/Minsk',
|
||||
'Africa/Nairobi',
|
||||
'Asia/Riyadh',
|
||||
'Europe/Volgograd',
|
||||
'Asia/Tehran',
|
||||
'Asia/Muscat',
|
||||
'Asia/Baku',
|
||||
'Europe/Moscow',
|
||||
'Asia/Muscat',
|
||||
'Europe/Moscow',
|
||||
'Asia/Tbilisi',
|
||||
'Asia/Yerevan',
|
||||
'Asia/Kabul',
|
||||
'Asia/Karachi',
|
||||
'Asia/Karachi',
|
||||
'Asia/Tashkent',
|
||||
'Asia/Calcutta',
|
||||
'Asia/Kolkata',
|
||||
'Asia/Calcutta',
|
||||
'Asia/Calcutta',
|
||||
'Asia/Calcutta',
|
||||
'Asia/Katmandu',
|
||||
'Asia/Almaty',
|
||||
'Asia/Dhaka',
|
||||
'Asia/Dhaka',
|
||||
'Asia/Yekaterinburg',
|
||||
'Asia/Rangoon',
|
||||
'Asia/Bangkok',
|
||||
'Asia/Bangkok',
|
||||
'Asia/Jakarta',
|
||||
'Asia/Novosibirsk',
|
||||
'Asia/Hong_Kong',
|
||||
'Asia/Chongqing',
|
||||
'Asia/Hong_Kong',
|
||||
'Asia/Krasnoyarsk',
|
||||
'Asia/Kuala_Lumpur',
|
||||
'Australia/Perth',
|
||||
'Asia/Singapore',
|
||||
'Asia/Taipei',
|
||||
'Asia/Ulan_Bator',
|
||||
'Asia/Urumqi',
|
||||
'Asia/Irkutsk',
|
||||
'Asia/Tokyo',
|
||||
'Asia/Tokyo',
|
||||
'Asia/Seoul',
|
||||
'Asia/Tokyo',
|
||||
'Australia/Adelaide',
|
||||
'Australia/Darwin',
|
||||
'Australia/Brisbane',
|
||||
'Australia/Canberra',
|
||||
'Pacific/Guam',
|
||||
'Australia/Hobart',
|
||||
'Australia/Melbourne',
|
||||
'Pacific/Port_Moresby',
|
||||
'Australia/Sydney',
|
||||
'Asia/Yakutsk',
|
||||
'Asia/Vladivostok',
|
||||
'Pacific/Auckland',
|
||||
'Pacific/Fiji',
|
||||
'Pacific/Kwajalein',
|
||||
'Asia/Kamchatka',
|
||||
'Asia/Magadan',
|
||||
'Pacific/Fiji',
|
||||
'Asia/Magadan',
|
||||
'Asia/Magadan',
|
||||
'Pacific/Auckland',
|
||||
'Pacific/Tongatapu'
|
||||
];
|
||||
// Timezone list from https://github.com/tamaspap/timezones (MIT licensed)
|
||||
|
||||
module.exports.list = {
|
||||
'Pacific/Midway': '(UTC-11:00) Midway Island',
|
||||
'Pacific/Samoa': '(UTC-11:00) Samoa',
|
||||
'Pacific/Honolulu': '(UTC-10:00) Hawaii',
|
||||
'US/Alaska': '(UTC-09:00) Alaska',
|
||||
'America/Los_Angeles': '(UTC-08:00) Pacific Time (US & Canada)',
|
||||
'America/Tijuana': '(UTC-08:00) Tijuana',
|
||||
'US/Arizona': '(UTC-07:00) Arizona',
|
||||
'America/Chihuahua': '(UTC-07:00) La Paz',
|
||||
'America/Mazatlan': '(UTC-07:00) Mazatlan',
|
||||
'US/Mountain': '(UTC-07:00) Mountain Time (US & Canada)',
|
||||
'America/Managua': '(UTC-06:00) Central America',
|
||||
'US/Central': '(UTC-06:00) Central Time (US & Canada)',
|
||||
'America/Mexico_City': '(UTC-06:00) Mexico City',
|
||||
'America/Monterrey': '(UTC-06:00) Monterrey',
|
||||
'Canada/Saskatchewan': '(UTC-06:00) Saskatchewan',
|
||||
'America/Bogota': '(UTC-05:00) Quito',
|
||||
'US/Eastern': '(UTC-05:00) Eastern Time (US & Canada)',
|
||||
'US/East-Indiana': '(UTC-05:00) Indiana (East)',
|
||||
'America/Lima': '(UTC-05:00) Lima',
|
||||
'Canada/Atlantic': '(UTC-04:00) Atlantic Time (Canada)',
|
||||
'America/Caracas': '(UTC-04:30) Caracas',
|
||||
'America/La_Paz': '(UTC-04:00) La Paz',
|
||||
'America/Santiago': '(UTC-04:00) Santiago',
|
||||
'Canada/Newfoundland': '(UTC-03:30) Newfoundland',
|
||||
'America/Sao_Paulo': '(UTC-03:00) Brasilia',
|
||||
'America/Argentina/Buenos_Aires': '(UTC-03:00) Georgetown',
|
||||
'America/Godthab': '(UTC-03:00) Greenland',
|
||||
'America/Noronha': '(UTC-02:00) Mid-Atlantic',
|
||||
'Atlantic/Azores': '(UTC-01:00) Azores',
|
||||
'Atlantic/Cape_Verde': '(UTC-01:00) Cape Verde Is.',
|
||||
'Africa/Casablanca': '(UTC+00:00) Casablanca',
|
||||
'Europe/London': '(UTC+00:00) London',
|
||||
'Etc/Greenwich': '(UTC+00:00) Greenwich Mean Time : Dublin',
|
||||
'Europe/Lisbon': '(UTC+00:00) Lisbon',
|
||||
'Africa/Monrovia': '(UTC+00:00) Monrovia',
|
||||
UTC: '(UTC+00:00) UTC',
|
||||
'Europe/Amsterdam': '(UTC+01:00) Amsterdam',
|
||||
'Europe/Belgrade': '(UTC+01:00) Belgrade',
|
||||
'Europe/Berlin': '(UTC+01:00) Bern',
|
||||
'Europe/Bratislava': '(UTC+01:00) Bratislava',
|
||||
'Europe/Brussels': '(UTC+01:00) Brussels',
|
||||
'Europe/Budapest': '(UTC+01:00) Budapest',
|
||||
'Europe/Copenhagen': '(UTC+01:00) Copenhagen',
|
||||
'Europe/Ljubljana': '(UTC+01:00) Ljubljana',
|
||||
'Europe/Madrid': '(UTC+01:00) Madrid',
|
||||
'Europe/Paris': '(UTC+01:00) Paris',
|
||||
'Europe/Prague': '(UTC+01:00) Prague',
|
||||
'Europe/Rome': '(UTC+01:00) Rome',
|
||||
'Europe/Sarajevo': '(UTC+01:00) Sarajevo',
|
||||
'Europe/Skopje': '(UTC+01:00) Skopje',
|
||||
'Europe/Stockholm': '(UTC+01:00) Stockholm',
|
||||
'Europe/Vienna': '(UTC+01:00) Vienna',
|
||||
'Europe/Warsaw': '(UTC+01:00) Warsaw',
|
||||
'Africa/Lagos': '(UTC+01:00) West Central Africa',
|
||||
'Europe/Zagreb': '(UTC+01:00) Zagreb',
|
||||
'Europe/Athens': '(UTC+02:00) Athens',
|
||||
'Europe/Bucharest': '(UTC+02:00) Bucharest',
|
||||
'Africa/Cairo': '(UTC+02:00) Cairo',
|
||||
'Africa/Harare': '(UTC+02:00) Harare',
|
||||
'Europe/Helsinki': '(UTC+02:00) Kyiv',
|
||||
'Europe/Istanbul': '(UTC+02:00) Istanbul',
|
||||
'Asia/Jerusalem': '(UTC+02:00) Jerusalem',
|
||||
'Africa/Johannesburg': '(UTC+02:00) Pretoria',
|
||||
'Europe/Riga': '(UTC+02:00) Riga',
|
||||
'Europe/Sofia': '(UTC+02:00) Sofia',
|
||||
'Europe/Tallinn': '(UTC+02:00) Tallinn',
|
||||
'Europe/Vilnius': '(UTC+02:00) Vilnius',
|
||||
'Asia/Baghdad': '(UTC+03:00) Baghdad',
|
||||
'Asia/Kuwait': '(UTC+03:00) Kuwait',
|
||||
'Europe/Minsk': '(UTC+03:00) Minsk',
|
||||
'Africa/Nairobi': '(UTC+03:00) Nairobi',
|
||||
'Asia/Riyadh': '(UTC+03:00) Riyadh',
|
||||
'Europe/Volgograd': '(UTC+03:00) Volgograd',
|
||||
'Asia/Tehran': '(UTC+03:30) Tehran',
|
||||
'Asia/Muscat': '(UTC+04:00) Muscat',
|
||||
'Asia/Baku': '(UTC+04:00) Baku',
|
||||
'Europe/Moscow': '(UTC+04:00) St. Petersburg',
|
||||
'Asia/Tbilisi': '(UTC+04:00) Tbilisi',
|
||||
'Asia/Yerevan': '(UTC+04:00) Yerevan',
|
||||
'Asia/Kabul': '(UTC+04:30) Kabul',
|
||||
'Asia/Karachi': '(UTC+05:00) Karachi',
|
||||
'Asia/Tashkent': '(UTC+05:00) Tashkent',
|
||||
'Asia/Calcutta': '(UTC+05:30) Sri Jayawardenepura',
|
||||
'Asia/Kolkata': '(UTC+05:30) Kolkata',
|
||||
'Asia/Katmandu': '(UTC+05:45) Kathmandu',
|
||||
'Asia/Almaty': '(UTC+06:00) Almaty',
|
||||
'Asia/Dhaka': '(UTC+06:00) Dhaka',
|
||||
'Asia/Yekaterinburg': '(UTC+06:00) Ekaterinburg',
|
||||
'Asia/Rangoon': '(UTC+06:30) Rangoon',
|
||||
'Asia/Bangkok': '(UTC+07:00) Hanoi',
|
||||
'Asia/Jakarta': '(UTC+07:00) Jakarta',
|
||||
'Asia/Novosibirsk': '(UTC+07:00) Novosibirsk',
|
||||
'Asia/Hong_Kong': '(UTC+08:00) Hong Kong',
|
||||
'Asia/Chongqing': '(UTC+08:00) Chongqing',
|
||||
'Asia/Krasnoyarsk': '(UTC+08:00) Krasnoyarsk',
|
||||
'Asia/Kuala_Lumpur': '(UTC+08:00) Kuala Lumpur',
|
||||
'Australia/Perth': '(UTC+08:00) Perth',
|
||||
'Asia/Singapore': '(UTC+08:00) Singapore',
|
||||
'Asia/Taipei': '(UTC+08:00) Taipei',
|
||||
'Asia/Ulan_Bator': '(UTC+08:00) Ulaan Bataar',
|
||||
'Asia/Urumqi': '(UTC+08:00) Urumqi',
|
||||
'Asia/Irkutsk': '(UTC+09:00) Irkutsk',
|
||||
'Asia/Tokyo': '(UTC+09:00) Tokyo',
|
||||
'Asia/Seoul': '(UTC+09:00) Seoul',
|
||||
'Australia/Adelaide': '(UTC+09:30) Adelaide',
|
||||
'Australia/Darwin': '(UTC+09:30) Darwin',
|
||||
'Australia/Brisbane': '(UTC+10:00) Brisbane',
|
||||
'Australia/Canberra': '(UTC+10:00) Canberra',
|
||||
'Pacific/Guam': '(UTC+10:00) Guam',
|
||||
'Australia/Hobart': '(UTC+10:00) Hobart',
|
||||
'Australia/Melbourne': '(UTC+10:00) Melbourne',
|
||||
'Pacific/Port_Moresby': '(UTC+10:00) Port Moresby',
|
||||
'Australia/Sydney': '(UTC+10:00) Sydney',
|
||||
'Asia/Yakutsk': '(UTC+10:00) Yakutsk',
|
||||
'Asia/Vladivostok': '(UTC+11:00) Vladivostok',
|
||||
'Pacific/Auckland': '(UTC+12:00) Wellington',
|
||||
'Pacific/Fiji': '(UTC+12:00) Marshall Is.',
|
||||
'Pacific/Kwajalein': '(UTC+12:00) International Date Line West',
|
||||
'Asia/Kamchatka': '(UTC+12:00) Kamchatka',
|
||||
'Asia/Magadan': '(UTC+12:00) Solomon Is.',
|
||||
'Pacific/Tongatapu': '(UTC+13:00) Nuku\'alofa'
|
||||
};
|
||||
|
|
|
@ -18,6 +18,7 @@ let uploads = multer({
|
|||
});
|
||||
let csvparse = require('csv-parse');
|
||||
let fs = require('fs');
|
||||
let tzlist = require('../lib/tz').list;
|
||||
|
||||
router.all('/*', (req, res, next) => {
|
||||
if (!req.user) {
|
||||
|
@ -278,6 +279,18 @@ router.get('/subscription/:id/add', passport.csrfProtection, (req, res) => {
|
|||
data.customFields = fields.getRow(fieldList, data, false, true);
|
||||
data.useEditor = true;
|
||||
|
||||
data.timezones = Object.keys(tzlist).map(tz => {
|
||||
let selected = false;
|
||||
if (tz.toLowerCase().trim() === (data.tz || 'UTC').toLowerCase().trim()) {
|
||||
selected = true;
|
||||
}
|
||||
return {
|
||||
key: tz,
|
||||
value: tzlist[tz],
|
||||
selected
|
||||
};
|
||||
});
|
||||
|
||||
res.render('lists/subscription/add', data);
|
||||
});
|
||||
});
|
||||
|
@ -308,6 +321,27 @@ router.get('/subscription/:id/edit/:cid', passport.csrfProtection, (req, res) =>
|
|||
subscription.useEditor = true;
|
||||
subscription.isSubscribed = subscription.status === 1;
|
||||
|
||||
let tzfound = false;
|
||||
subscription.timezones = Object.keys(tzlist).map(tz => {
|
||||
let selected = false;
|
||||
if (tz.toLowerCase().trim() === (subscription.tz || '').toLowerCase().trim()) {
|
||||
selected = true;
|
||||
tzfound = true;
|
||||
}
|
||||
return {
|
||||
key: tz,
|
||||
value: tzlist[tz],
|
||||
selected
|
||||
};
|
||||
});
|
||||
if (!tzfound && subscription.tz) {
|
||||
subscription.timezones.push({
|
||||
key: subscription.tz,
|
||||
value: subscription.tz,
|
||||
selected: true
|
||||
});
|
||||
}
|
||||
|
||||
res.render('lists/subscription/edit', subscription);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -13,7 +13,6 @@ let fields = require('../lib/models/fields');
|
|||
let subscriptions = require('../lib/models/subscriptions');
|
||||
let settings = require('../lib/models/settings');
|
||||
let openpgp = require('openpgp');
|
||||
let tzlist = require('../lib/tz').list;
|
||||
|
||||
router.get('/subscribe/:cid', (req, res, next) => {
|
||||
subscriptions.subscribe(req.params.cid, req.ip, (err, subscription) => {
|
||||
|
|
|
@ -117,6 +117,20 @@
|
|||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="tz" class="col-sm-2 control-label">Timezone</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="tz" class="form-control">
|
||||
<option value="">
|
||||
–– Select ––
|
||||
</option>
|
||||
{{#each timezones}}
|
||||
<option value="{{key}}" {{#if selected}} selected {{/if}}>{{value}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<div class="form-group">
|
||||
|
|
|
@ -130,6 +130,20 @@
|
|||
</div>
|
||||
{{/each}}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="tz" class="col-sm-2 control-label">Timezone</label>
|
||||
<div class="col-sm-10">
|
||||
<select name="tz" class="form-control">
|
||||
<option value="">
|
||||
–– Select ––
|
||||
</option>
|
||||
{{#each timezones}}
|
||||
<option value="{{key}}" {{#if selected}} selected {{/if}}>{{value}}</option>
|
||||
{{/each}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr />
|
||||
|
||||
<div class="form-group">
|
||||
|
|
Loading…
Reference in a new issue