Compare commits

..

No commits in common. "main" and "877799" have entirely different histories.
main ... 877799

19 changed files with 632 additions and 1268 deletions

View file

@ -39,7 +39,6 @@ jobs:
submodules: recursive submodules: recursive
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
token: ${{ secrets.GH_TOKEN }}
node-version: lts/* node-version: lts/*
cache: yarn cache: yarn
cache-dependency-path: '**/yarn.lock' cache-dependency-path: '**/yarn.lock'
@ -50,6 +49,9 @@ jobs:
~/node_modules ~/node_modules
~/.cache/ms-playwright ~/.cache/ms-playwright
key: ${{ runner.os }}-pio-playwright-${{ hashFiles('**/yarn.lock') }} key: ${{ runner.os }}-pio-playwright-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-python@v5
with:
python-version: '>=3.10'
- name: Get current date - name: Get current date
id: dateAndTime id: dateAndTime
run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT
@ -118,7 +120,7 @@ jobs:
output/littlefs.bin output/littlefs.bin
- name: Create release - name: Create release
if: github.event_name == 'push' && github.ref == 'refs/heads/main' if: github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: https://code.forgejo.org/actions/forgejo-release@v2.6.0 uses: https://code.forgejo.org/actions/forgejo-release@v2.5.1
with: with:
url: 'https://git.btclock.dev/' url: 'https://git.btclock.dev/'
repo: '${{ github.repository }}' repo: '${{ github.repository }}'

View file

@ -69,5 +69,6 @@
"es5-ext": ">=0.10.64", "es5-ext": ">=0.10.64",
"ws": ">=8.18.0", "ws": ">=8.18.0",
"micromatch": ">=4.0.8" "micromatch": ">=4.0.8"
} },
"packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
} }

View file

@ -1,17 +1,30 @@
diff --git a/node_modules/@sveltejs/kit/src/exports/vite/index.js b/node_modules/@sveltejs/kit/src/exports/vite/index.js diff --git a/node_modules/@sveltejs/kit/src/exports/vite/index.js b/node_modules/@sveltejs/kit/src/exports/vite/index.js
index ddbe746..1d926a4 100644 index 21bc3d4..eef2db3 100644
--- a/node_modules/@sveltejs/kit/src/exports/vite/index.js --- a/node_modules/@sveltejs/kit/src/exports/vite/index.js
+++ b/node_modules/@sveltejs/kit/src/exports/vite/index.js +++ b/node_modules/@sveltejs/kit/src/exports/vite/index.js
@@ -658,9 +658,9 @@ async function kit({ svelte_config }) { @@ -648,9 +648,9 @@ async function kit({ svelte_config }) {
output: { output: {
format: inline ? 'iife' : 'esm', format: inline ? 'iife' : 'esm',
name: `__sveltekit_${version_hash}.app`, name: `__sveltekit_${version_hash}.app`,
- entryFileNames: ssr ? '[name].js' : `${prefix}/[name].[hash].${ext}`, - entryFileNames: ssr ? '[name].js' : `${prefix}/[name].[hash].${ext}`,
- chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].${ext}`, - chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[name].[hash].${ext}`,
- assetFileNames: `${prefix}/assets/[name].[hash][extname]`, - assetFileNames: `${prefix}/assets/[name].[hash][extname]`,
+ entryFileNames: ssr ? '[name].js' : `${prefix}/[hash].${ext}`, + entryFileNames: ssr ? '[name].js' : `${prefix}/[hash].${ext}`,
+ chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/c[hash].${ext}`, + chunkFileNames: ssr ? 'chunks/[name].js' : `${prefix}/chunks/[hash].${ext}`,
+ assetFileNames: `${prefix}/a[hash][extname]`, + assetFileNames: `${prefix}/assets/[hash][extname]`,
hoistTransitiveImports: false, hoistTransitiveImports: false,
sourcemapIgnoreList, sourcemapIgnoreList,
manualChunks: split ? undefined : () => 'bundle', manualChunks: split ? undefined : () => 'bundle',
@@ -665,9 +665,9 @@ async function kit({ svelte_config }) {
worker: {
rollupOptions: {
output: {
- entryFileNames: `${prefix}/workers/[name]-[hash].js`,
- chunkFileNames: `${prefix}/workers/chunks/[name]-[hash].js`,
- assetFileNames: `${prefix}/workers/assets/[name]-[hash][extname]`,
+ entryFileNames: `${prefix}/workers/[hash].js`,
+ chunkFileNames: `${prefix}/workers/chunks/[hash].js`,
+ assetFileNames: `${prefix}/workers/assets/[hash][extname]`,
hoistTransitiveImports: false
}
}

View file

@ -25,10 +25,10 @@
export let invalid: boolean | undefined = undefined; export let invalid: boolean | undefined = undefined;
export let minlength: string | undefined = undefined; export let minlength: string | undefined = undefined;
export let onChange: (() => void) | undefined = undefined; export let onChange: (() => void) | undefined = undefined;
export let onInput: ((e: Event) => void) | undefined = undefined; export let onInput: (() => void) | undefined = undefined;
const onInputHandler = (e: Event) => { const onInputHandler = () => {
onInput?.(e); onInput?.();
}; };
</script> </script>

View file

@ -33,8 +33,6 @@
: font.charAt(0).toUpperCase() + font.slice(1), : font.charAt(0).toUpperCase() + font.slice(1),
font font
]); ]);
let timePerScreen = $settings.timePerScreen;
</script> </script>
<Row> <Row>
@ -63,8 +61,7 @@
<SettingsInput <SettingsInput
id="timePerScreen" id="timePerScreen"
label={$_('section.settings.timePerScreen')} label={$_('section.settings.timePerScreen')}
bind:value={timePerScreen} bind:value={$settings.timePerScreen}
onInput={(e) => ($settings.timePerScreen = Number(e.target.value))}
type="number" type="number"
min={1} min={1}
step={1} step={1}
@ -72,6 +69,7 @@
suffix={$_('time.minutes')} suffix={$_('time.minutes')}
size={$uiSettings.inputSize} size={$uiSettings.inputSize}
/> />
<SettingsInput <SettingsInput
id="fullRefreshMin" id="fullRefreshMin"
label={$_('section.settings.fullRefreshEvery')} label={$_('section.settings.fullRefreshEvery')}
@ -117,7 +115,7 @@
max={4095} max={4095}
step={1} step={1}
size={$uiSettings.inputSize} size={$uiSettings.inputSize}
onChange={onFlBrightnessChange} on:change={onFlBrightnessChange}
/> />
<SettingsInput <SettingsInput
@ -192,14 +190,12 @@
size={$uiSettings.inputSize} size={$uiSettings.inputSize}
/> />
{#if $settings.hasLightLevel} <SettingsSwitch
<SettingsSwitch id="flOffWhenDark"
id="flOffWhenDark" bind:checked={$settings.flOffWhenDark}
bind:checked={$settings.flOffWhenDark} label={$_('section.settings.flOffWhenDark')}
label={$_('section.settings.flOffWhenDark')} size={$uiSettings.inputSize}
size={$uiSettings.inputSize} />
/>
{/if}
{/if} {/if}
</Row> </Row>
</ToggleHeader> </ToggleHeader>

View file

@ -13,7 +13,6 @@
export let miningPoolMap: Map<string, string>; export let miningPoolMap: Map<string, string>;
let validBitaxe = false; let validBitaxe = false;
let validLocalPool = false;
const testBitaxe = async () => { const testBitaxe = async () => {
try { try {
const response = await fetch(`http://${$settings.bitaxeHostname}/api/system/info`); const response = await fetch(`http://${$settings.bitaxeHostname}/api/system/info`);
@ -62,49 +61,6 @@
miningPoolMap.get(pool) || pool, miningPoolMap.get(pool) || pool,
pool pool
]); ]);
const testLocalPool = async () => {
try {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 1000);
const response = await fetch(
`http://${$settings.localPoolEndpoint}/api/client/${$settings.miningPoolUser}`,
{ signal: controller.signal }
);
clearTimeout(timeoutId);
if (!response.ok) {
dispatch('showToast', {
color: 'danger',
text: `Failed to connect to local pool! status: ${response.status}`
});
validLocalPool = false;
throw new Error();
}
const poolInfo = await response.json();
dispatch('showToast', {
color: 'success',
text: `Can connect to local public pool, ${poolInfo.workersCount} workers`
});
validLocalPool = true;
} catch (error) {
if (error.name === 'AbortError') {
dispatch('showToast', {
color: 'danger',
text: `Connection to local pool timed out after 1 second`
});
} else {
dispatch('showToast', {
color: 'danger',
text: `Failed to connect to local pool, check the endpoint and make sure you are connected to the same network.`
});
}
console.error('Failed to fetch local pool info:', error);
validLocalPool = false;
}
};
</script> </script>
<Row> <Row>
@ -222,21 +178,6 @@
size={$uiSettings.inputSize} size={$uiSettings.inputSize}
selectClass={$uiSettings.selectClass} selectClass={$uiSettings.selectClass}
/> />
{#if $settings.miningPoolName === 'local_public_pool'}
<SettingsInput
id="localPoolEndpoint"
label={$_('section.settings.localPoolEndpoint', { default: 'Local Pool Endpoint' })}
bind:value={$settings.localPoolEndpoint}
placeholder="umbrel.local:2019"
required={true}
valid={validLocalPool}
size={$uiSettings.inputSize}
>
<Button type="button" color="success" on:click={testLocalPool}>
{$_('test', { default: 'Test' })}
</Button>
</SettingsInput>
{/if}
<SettingsInput <SettingsInput
id="miningPoolUser" id="miningPoolUser"
label={$_('section.settings.miningPoolUser')} label={$_('section.settings.miningPoolUser')}
@ -285,20 +226,6 @@
/> />
{/if} {/if}
</Row> </Row>
<Row>
<SettingsSwitch
id="screenRestoreZap"
bind:checked={$settings.scrnRestoreZap}
label={$_('section.settings.screenRestoreZap', {
default: 'Restore previous screen state after zap (Uses {setting} setting)',
values: {
setting: $_('section.settings.timePerScreen')
}
})}
size={$uiSettings.inputSize}
col={{ md: '12', xl: '12', xxl: '12' }}
/>
</Row>
<SettingsInput <SettingsInput
id="nostrZapPubkey" id="nostrZapPubkey"
label={$_('section.settings.nostrZapPubkey')} label={$_('section.settings.nostrZapPubkey')}

View file

@ -4,7 +4,6 @@
import { Row, Col } from '@sveltestrap/sveltestrap'; import { Row, Col } from '@sveltestrap/sveltestrap';
import ToggleHeader from '../ToggleHeader.svelte'; import ToggleHeader from '../ToggleHeader.svelte';
import { uiSettings } from '$lib/uiSettings'; import { uiSettings } from '$lib/uiSettings';
import { DataSourceType } from '$lib/types/dataSource';
export let settings; export let settings;
export let isOpen = false; export let isOpen = false;
@ -100,7 +99,7 @@
{/each} {/each}
{/if} {/if}
</Row> </Row>
{#if $settings.actCurrencies && $settings.dataSource == DataSourceType.BTCLOCK_SOURCE} {#if $settings.actCurrencies && $settings.useNostr !== true}
<Row> <Row>
<h5>{$_('section.settings.currencies')}</h5> <h5>{$_('section.settings.currencies')}</h5>
<small>{$_('restartRequired')}</small> <small>{$_('restartRequired')}</small>

View file

@ -6,21 +6,36 @@
import { uiSettings } from '$lib/uiSettings'; import { uiSettings } from '$lib/uiSettings';
import EyeIcon from 'svelte-bootstrap-icons/lib/Eye.svelte'; import EyeIcon from 'svelte-bootstrap-icons/lib/Eye.svelte';
import EyeSlashIcon from 'svelte-bootstrap-icons/lib/EyeSlash.svelte'; import EyeSlashIcon from 'svelte-bootstrap-icons/lib/EyeSlash.svelte';
import TimezoneSelector from './TimezoneSelector.svelte';
export let settings; export let settings;
export let isOpen = false; export let isOpen = false;
let showPassword = false; let showPassword = false;
const getTzOffsetFromSystem = () => {
const dt = new Date();
let diffTZ = dt.getTimezoneOffset();
$settings.tzOffset = diffTZ * -1;
};
</script> </script>
<Row> <Row>
<ToggleHeader header={$_('section.settings.section.system')} bind:isOpen defaultOpen={false}> <ToggleHeader header={$_('section.settings.section.system')} bind:isOpen defaultOpen={false}>
<TimezoneSelector <SettingsInput
value={$settings.tzString} id="tzOffset"
onChange={(value) => ($settings.tzString = value)} label={$_('section.settings.timezoneOffset')}
bind:value={$settings.tzOffset}
type="number"
step={1}
required={true}
suffix={$_('time.minutes')}
helpText={$_('section.settings.tzOffsetHelpText')}
size={$uiSettings.inputSize} size={$uiSettings.inputSize}
/> >
<Button type="button" color="info" on:click={getTzOffsetFromSystem}>
{$_('auto-detect')}
</Button>
</SettingsInput>
{#if $settings.httpAuthEnabled} {#if $settings.httpAuthEnabled}
<SettingsInput <SettingsInput

View file

@ -1,56 +0,0 @@
<script lang="ts">
import { _ } from 'svelte-i18n';
import { Row, Button, Col, Label, InputGroup, Input, FormText } from '@sveltestrap/sveltestrap';
import { onMount } from 'svelte';
export let value: string;
export let onChange: (value: string) => void;
export let size: string = 'sm';
let timezones: string[] = [];
let selectedTimezone: string = '';
onMount(async () => {
const response = await fetch('/zones.json');
const zones = await response.json();
// Convert zones data into array of {name, offset} objects
timezones = Object.keys(zones);
// Set the selected timezone to the current value
selectedTimezone = value;
});
function handleTimezoneChange(event: Event) {
const select = event.target as HTMLSelectElement;
onChange(select.value);
}
function getTzOffsetFromSystem() {
const detectedTzString = Intl.DateTimeFormat().resolvedOptions().timeZone;
onChange(detectedTzString);
selectedTimezone = detectedTzString;
}
</script>
<Row>
<Label md={6} {size} for="timezone">
{$_('section.settings.timezoneOffset')}
</Label>
<Col md="6" {size}>
<InputGroup>
<Input type="select" {size} bind:value={selectedTimezone} on:change={handleTimezoneChange}>
{#each timezones as tz}
<option value={tz}>
{tz}
</option>
{/each}
</Input>
<Button type="button" color="info" on:click={getTzOffsetFromSystem}>
{$_('auto-detect')}
</Button>
</InputGroup>
<FormText>{$_('section.settings.tzOffsetHelpText')}</FormText>
</Col>
</Row>

View file

@ -73,8 +73,7 @@
"dndStartHour": "Startstunde", "dndStartHour": "Startstunde",
"dndStartMinute": "Startminute", "dndStartMinute": "Startminute",
"dndEndHour": "Endstunde", "dndEndHour": "Endstunde",
"dndEndMinute": "Schlussminute", "dndEndMinute": "Schlussminute"
"screenRestoreZap": "Vorherigen Bildschirmzustand nach Zap wieder herstellen (Verwendet {setting} Einstellung)"
}, },
"control": { "control": {
"systemInfo": "Systeminfo", "systemInfo": "Systeminfo",
@ -89,8 +88,7 @@
"hostname": "Hostname", "hostname": "Hostname",
"frontlight": "Displaybeleuchtung", "frontlight": "Displaybeleuchtung",
"turnOn": "Einschalten", "turnOn": "Einschalten",
"flashFrontlight": "Blinken", "flashFrontlight": "Blinken"
"fwCommitMismatch": "Die Firmware -Version unterscheidet sich von der WebUI -Version, dies kann zu Problemen führen."
}, },
"status": { "status": {
"title": "Status", "title": "Status",

View file

@ -78,7 +78,7 @@
"dataSource": { "dataSource": {
"label": "Data Source", "label": "Data Source",
"btclock": "BTClock Data Source", "btclock": "BTClock Data Source",
"thirdParty": "mempool.space/Kraken", "thirdParty": "mempool.space/coincap.io",
"nostr": "Nostr publisher", "nostr": "Nostr publisher",
"custom": "Custom Endpoint" "custom": "Custom Endpoint"
}, },
@ -90,8 +90,7 @@
"dndStartHour": "Start hour", "dndStartHour": "Start hour",
"dndStartMinute": "Start minute", "dndStartMinute": "Start minute",
"dndEndHour": "End hour", "dndEndHour": "End hour",
"dndEndMinute": "End minute", "dndEndMinute": "End minute"
"screenRestoreZap": "Restore previous screen state after zap (Uses {setting} setting)"
}, },
"control": { "control": {
"systemInfo": "System info", "systemInfo": "System info",
@ -108,8 +107,7 @@
"turnOn": "Turn on", "turnOn": "Turn on",
"flashFrontlight": "Flash", "flashFrontlight": "Flash",
"firmwareUpdate": "Firmware update", "firmwareUpdate": "Firmware update",
"fwCommit": "Firmware commit", "fwCommit": "Firmware commit"
"fwCommitMismatch": "The firmware version is different from the WebUI version, this might cause problems. "
}, },
"status": { "status": {
"title": "Status", "title": "Status",

View file

@ -47,7 +47,7 @@
"section": { "section": {
"displaysAndLed": "Pantallas y LED", "displaysAndLed": "Pantallas y LED",
"screenSettings": "Específico de la pantalla", "screenSettings": "Específico de la pantalla",
"dataSource": "Fuente de datos", "dataSource": "fuente de datos",
"extraFeatures": "Funciones adicionales", "extraFeatures": "Funciones adicionales",
"system": "Sistema" "system": "Sistema"
}, },
@ -72,8 +72,7 @@
"dndStartHour": "Hora de inicio", "dndStartHour": "Hora de inicio",
"dndStartMinute": "Minuto de inicio", "dndStartMinute": "Minuto de inicio",
"dndEndHour": "Hora final", "dndEndHour": "Hora final",
"dndEndMinute": "Minuto final", "dndEndMinute": "Minuto final"
"screenRestoreZap": "Restaurar el estado de pantalla anterior después de Zap (Usa la configuración {setting})"
}, },
"control": { "control": {
"turnOff": "Apagar", "turnOff": "Apagar",
@ -88,8 +87,7 @@
"hostname": "Nombre del host", "hostname": "Nombre del host",
"turnOn": "Encender", "turnOn": "Encender",
"frontlight": "Luz de la pantalla", "frontlight": "Luz de la pantalla",
"flashFrontlight": "Luz intermitente", "flashFrontlight": "Luz intermitente"
"fwCommitMismatch": "La versión de firmware es diferente de la versión WebUI, esto podría causar problemas."
}, },
"status": { "status": {
"memoryFree": "Memoria RAM libre", "memoryFree": "Memoria RAM libre",

View file

@ -64,8 +64,7 @@
"dndStartHour": "Begin uur", "dndStartHour": "Begin uur",
"dndStartMinute": "Beginminuut", "dndStartMinute": "Beginminuut",
"dndEndHour": "Eind uur", "dndEndHour": "Eind uur",
"dndEndMinute": "Einde minuut", "dndEndMinute": "Einde minuut"
"screenRestoreZap": "Herstel vorige schermstatus na zap (Gebruikt {setting} instelling)"
}, },
"control": { "control": {
"systemInfo": "Systeeminformatie", "systemInfo": "Systeeminformatie",
@ -79,8 +78,7 @@
"title": "Besturing", "title": "Besturing",
"frontlight": "Displaylicht", "frontlight": "Displaylicht",
"turnOn": "Aanzetten", "turnOn": "Aanzetten",
"flashFrontlight": "Knipper", "flashFrontlight": "Knipper"
"fwCommitMismatch": "De firmwareversie verschilt van de WebUI -versie, dit kan problemen veroorzaken."
}, },
"status": { "status": {
"title": "Status", "title": "Status",

View file

@ -13,8 +13,9 @@
import { uiSettings } from '$lib/uiSettings'; import { uiSettings } from '$lib/uiSettings';
let settings = writable({ let settings = writable({
isLoaded: false, fgColor: '0',
timePerScreen: 0 bgColor: '0',
isLoaded: false
}); });
let status = writable({ let status = writable({

View file

@ -13,8 +13,7 @@
Form, Form,
Input, Input,
Label, Label,
Row, Row
Alert
} from '@sveltestrap/sveltestrap'; } from '@sveltestrap/sveltestrap';
import FirmwareUpdater from './FirmwareUpdater.svelte'; import FirmwareUpdater from './FirmwareUpdater.svelte';
import { uiSettings } from '$lib/uiSettings'; import { uiSettings } from '$lib/uiSettings';
@ -227,11 +226,6 @@
<li>WebUI commit: <Placeholder value={$settings.fsRev} /></li> <li>WebUI commit: <Placeholder value={$settings.fsRev} /></li>
<li>{$_('section.control.hostname')}: <Placeholder value={$settings.hostname} /></li> <li>{$_('section.control.hostname')}: <Placeholder value={$settings.hostname} /></li>
</ul> </ul>
{#if $settings.gitRev != $settings.fsRev}
<Alert color="warning">
⚠️ <strong>{$_('warning')}</strong>: {$_('section.control.fwCommitMismatch')}
</Alert>
{/if}
<Row> <Row>
<Col class="d-flex justify-content-end"> <Col class="d-flex justify-content-end">
<Button color="danger" id="restartBtn" on:click={restartClock} <Button color="danger" id="restartBtn" on:click={restartClock}

View file

@ -30,8 +30,7 @@
['public_pool', 'public-pool.io'], ['public_pool', 'public-pool.io'],
['gobrrr_pool', 'Go Brrr pool'], ['gobrrr_pool', 'Go Brrr pool'],
['ckpool', 'CKPool'], ['ckpool', 'CKPool'],
['eu_ckpool', 'EU CKPool'], ['eu_ckpool', 'EU CKPool']
['local_public_pool', 'Public Pool (local)']
]); ]);
const dispatch = createEventDispatcher(); const dispatch = createEventDispatcher();

View file

@ -1,463 +0,0 @@
{
"Africa/Abidjan": "GMT0",
"Africa/Accra": "GMT0",
"Africa/Addis_Ababa": "EAT-3",
"Africa/Algiers": "CET-1",
"Africa/Asmara": "EAT-3",
"Africa/Bamako": "GMT0",
"Africa/Bangui": "WAT-1",
"Africa/Banjul": "GMT0",
"Africa/Bissau": "GMT0",
"Africa/Blantyre": "CAT-2",
"Africa/Brazzaville": "WAT-1",
"Africa/Bujumbura": "CAT-2",
"Africa/Cairo": "EET-2EEST,M4.5.5/0,M10.5.4/24",
"Africa/Casablanca": "<+01>-1",
"Africa/Ceuta": "CET-1CEST,M3.5.0,M10.5.0/3",
"Africa/Conakry": "GMT0",
"Africa/Dakar": "GMT0",
"Africa/Dar_es_Salaam": "EAT-3",
"Africa/Djibouti": "EAT-3",
"Africa/Douala": "WAT-1",
"Africa/El_Aaiun": "<+01>-1",
"Africa/Freetown": "GMT0",
"Africa/Gaborone": "CAT-2",
"Africa/Harare": "CAT-2",
"Africa/Johannesburg": "SAST-2",
"Africa/Juba": "CAT-2",
"Africa/Kampala": "EAT-3",
"Africa/Khartoum": "CAT-2",
"Africa/Kigali": "CAT-2",
"Africa/Kinshasa": "WAT-1",
"Africa/Lagos": "WAT-1",
"Africa/Libreville": "WAT-1",
"Africa/Lome": "GMT0",
"Africa/Luanda": "WAT-1",
"Africa/Lubumbashi": "CAT-2",
"Africa/Lusaka": "CAT-2",
"Africa/Malabo": "WAT-1",
"Africa/Maputo": "CAT-2",
"Africa/Maseru": "SAST-2",
"Africa/Mbabane": "SAST-2",
"Africa/Mogadishu": "EAT-3",
"Africa/Monrovia": "GMT0",
"Africa/Nairobi": "EAT-3",
"Africa/Ndjamena": "WAT-1",
"Africa/Niamey": "WAT-1",
"Africa/Nouakchott": "GMT0",
"Africa/Ouagadougou": "GMT0",
"Africa/Porto-Novo": "WAT-1",
"Africa/Sao_Tome": "GMT0",
"Africa/Tripoli": "EET-2",
"Africa/Tunis": "CET-1",
"Africa/Windhoek": "CAT-2",
"America/Adak": "HST10HDT,M3.2.0,M11.1.0",
"America/Anchorage": "AKST9AKDT,M3.2.0,M11.1.0",
"America/Anguilla": "AST4",
"America/Antigua": "AST4",
"America/Araguaina": "<-03>3",
"America/Argentina/Buenos_Aires": "<-03>3",
"America/Argentina/Catamarca": "<-03>3",
"America/Argentina/Cordoba": "<-03>3",
"America/Argentina/Jujuy": "<-03>3",
"America/Argentina/La_Rioja": "<-03>3",
"America/Argentina/Mendoza": "<-03>3",
"America/Argentina/Rio_Gallegos": "<-03>3",
"America/Argentina/Salta": "<-03>3",
"America/Argentina/San_Juan": "<-03>3",
"America/Argentina/San_Luis": "<-03>3",
"America/Argentina/Tucuman": "<-03>3",
"America/Argentina/Ushuaia": "<-03>3",
"America/Aruba": "AST4",
"America/Asuncion": "<-04>4<-03>,M10.1.0/0,M3.4.0/0",
"America/Atikokan": "EST5",
"America/Bahia": "<-03>3",
"America/Bahia_Banderas": "CST6",
"America/Barbados": "AST4",
"America/Belem": "<-03>3",
"America/Belize": "CST6",
"America/Blanc-Sablon": "AST4",
"America/Boa_Vista": "<-04>4",
"America/Bogota": "<-05>5",
"America/Boise": "MST7MDT,M3.2.0,M11.1.0",
"America/Cambridge_Bay": "MST7MDT,M3.2.0,M11.1.0",
"America/Campo_Grande": "<-04>4",
"America/Cancun": "EST5",
"America/Caracas": "<-04>4",
"America/Cayenne": "<-03>3",
"America/Cayman": "EST5",
"America/Chicago": "CST6CDT,M3.2.0,M11.1.0",
"America/Chihuahua": "CST6",
"America/Costa_Rica": "CST6",
"America/Creston": "MST7",
"America/Cuiaba": "<-04>4",
"America/Curacao": "AST4",
"America/Danmarkshavn": "GMT0",
"America/Dawson": "MST7",
"America/Dawson_Creek": "MST7",
"America/Denver": "MST7MDT,M3.2.0,M11.1.0",
"America/Detroit": "EST5EDT,M3.2.0,M11.1.0",
"America/Dominica": "AST4",
"America/Edmonton": "MST7MDT,M3.2.0,M11.1.0",
"America/Eirunepe": "<-05>5",
"America/El_Salvador": "CST6",
"America/Fort_Nelson": "MST7",
"America/Fortaleza": "<-03>3",
"America/Glace_Bay": "AST4ADT,M3.2.0,M11.1.0",
"America/Godthab": "<-02>2<-01>,M3.5.0/-1,M10.5.0/0",
"America/Goose_Bay": "AST4ADT,M3.2.0,M11.1.0",
"America/Grand_Turk": "EST5EDT,M3.2.0,M11.1.0",
"America/Grenada": "AST4",
"America/Guadeloupe": "AST4",
"America/Guatemala": "CST6",
"America/Guayaquil": "<-05>5",
"America/Guyana": "<-04>4",
"America/Halifax": "AST4ADT,M3.2.0,M11.1.0",
"America/Havana": "CST5CDT,M3.2.0/0,M11.1.0/1",
"America/Hermosillo": "MST7",
"America/Indiana/Indianapolis": "EST5EDT,M3.2.0,M11.1.0",
"America/Indiana/Knox": "CST6CDT,M3.2.0,M11.1.0",
"America/Indiana/Marengo": "EST5EDT,M3.2.0,M11.1.0",
"America/Indiana/Petersburg": "EST5EDT,M3.2.0,M11.1.0",
"America/Indiana/Tell_City": "CST6CDT,M3.2.0,M11.1.0",
"America/Indiana/Vevay": "EST5EDT,M3.2.0,M11.1.0",
"America/Indiana/Vincennes": "EST5EDT,M3.2.0,M11.1.0",
"America/Indiana/Winamac": "EST5EDT,M3.2.0,M11.1.0",
"America/Inuvik": "MST7MDT,M3.2.0,M11.1.0",
"America/Iqaluit": "EST5EDT,M3.2.0,M11.1.0",
"America/Jamaica": "EST5",
"America/Juneau": "AKST9AKDT,M3.2.0,M11.1.0",
"America/Kentucky/Louisville": "EST5EDT,M3.2.0,M11.1.0",
"America/Kentucky/Monticello": "EST5EDT,M3.2.0,M11.1.0",
"America/Kralendijk": "AST4",
"America/La_Paz": "<-04>4",
"America/Lima": "<-05>5",
"America/Los_Angeles": "PST8PDT,M3.2.0,M11.1.0",
"America/Lower_Princes": "AST4",
"America/Maceio": "<-03>3",
"America/Managua": "CST6",
"America/Manaus": "<-04>4",
"America/Marigot": "AST4",
"America/Martinique": "AST4",
"America/Matamoros": "CST6CDT,M3.2.0,M11.1.0",
"America/Mazatlan": "MST7",
"America/Menominee": "CST6CDT,M3.2.0,M11.1.0",
"America/Merida": "CST6",
"America/Metlakatla": "AKST9AKDT,M3.2.0,M11.1.0",
"America/Mexico_City": "CST6",
"America/Miquelon": "<-03>3<-02>,M3.2.0,M11.1.0",
"America/Moncton": "AST4ADT,M3.2.0,M11.1.0",
"America/Monterrey": "CST6",
"America/Montevideo": "<-03>3",
"America/Montreal": "EST5EDT,M3.2.0,M11.1.0",
"America/Montserrat": "AST4",
"America/Nassau": "EST5EDT,M3.2.0,M11.1.0",
"America/New_York": "EST5EDT,M3.2.0,M11.1.0",
"America/Nipigon": "EST5EDT,M3.2.0,M11.1.0",
"America/Nome": "AKST9AKDT,M3.2.0,M11.1.0",
"America/Noronha": "<-02>2",
"America/North_Dakota/Beulah": "CST6CDT,M3.2.0,M11.1.0",
"America/North_Dakota/Center": "CST6CDT,M3.2.0,M11.1.0",
"America/North_Dakota/New_Salem": "CST6CDT,M3.2.0,M11.1.0",
"America/Nuuk": "<-02>2<-01>,M3.5.0/-1,M10.5.0/0",
"America/Ojinaga": "CST6CDT,M3.2.0,M11.1.0",
"America/Panama": "EST5",
"America/Pangnirtung": "EST5EDT,M3.2.0,M11.1.0",
"America/Paramaribo": "<-03>3",
"America/Phoenix": "MST7",
"America/Port-au-Prince": "EST5EDT,M3.2.0,M11.1.0",
"America/Port_of_Spain": "AST4",
"America/Porto_Velho": "<-04>4",
"America/Puerto_Rico": "AST4",
"America/Punta_Arenas": "<-03>3",
"America/Rainy_River": "CST6CDT,M3.2.0,M11.1.0",
"America/Rankin_Inlet": "CST6CDT,M3.2.0,M11.1.0",
"America/Recife": "<-03>3",
"America/Regina": "CST6",
"America/Resolute": "CST6CDT,M3.2.0,M11.1.0",
"America/Rio_Branco": "<-05>5",
"America/Santarem": "<-03>3",
"America/Santiago": "<-04>4<-03>,M9.1.6/24,M4.1.6/24",
"America/Santo_Domingo": "AST4",
"America/Sao_Paulo": "<-03>3",
"America/Scoresbysund": "<-02>2<-01>,M3.5.0/-1,M10.5.0/0",
"America/Sitka": "AKST9AKDT,M3.2.0,M11.1.0",
"America/St_Barthelemy": "AST4",
"America/St_Johns": "NST3:30NDT,M3.2.0,M11.1.0",
"America/St_Kitts": "AST4",
"America/St_Lucia": "AST4",
"America/St_Thomas": "AST4",
"America/St_Vincent": "AST4",
"America/Swift_Current": "CST6",
"America/Tegucigalpa": "CST6",
"America/Thule": "AST4ADT,M3.2.0,M11.1.0",
"America/Thunder_Bay": "EST5EDT,M3.2.0,M11.1.0",
"America/Tijuana": "PST8PDT,M3.2.0,M11.1.0",
"America/Toronto": "EST5EDT,M3.2.0,M11.1.0",
"America/Tortola": "AST4",
"America/Vancouver": "PST8PDT,M3.2.0,M11.1.0",
"America/Whitehorse": "MST7",
"America/Winnipeg": "CST6CDT,M3.2.0,M11.1.0",
"America/Yakutat": "AKST9AKDT,M3.2.0,M11.1.0",
"America/Yellowknife": "MST7MDT,M3.2.0,M11.1.0",
"Antarctica/Casey": "<+08>-8",
"Antarctica/Davis": "<+07>-7",
"Antarctica/DumontDUrville": "<+10>-10",
"Antarctica/Macquarie": "AEST-10AEDT,M10.1.0,M4.1.0/3",
"Antarctica/Mawson": "<+05>-5",
"Antarctica/McMurdo": "NZST-12NZDT,M9.5.0,M4.1.0/3",
"Antarctica/Palmer": "<-03>3",
"Antarctica/Rothera": "<-03>3",
"Antarctica/Syowa": "<+03>-3",
"Antarctica/Troll": "<+00>0<+02>-2,M3.5.0/1,M10.5.0/3",
"Antarctica/Vostok": "<+05>-5",
"Arctic/Longyearbyen": "CET-1CEST,M3.5.0,M10.5.0/3",
"Asia/Aden": "<+03>-3",
"Asia/Almaty": "<+05>-5",
"Asia/Amman": "<+03>-3",
"Asia/Anadyr": "<+12>-12",
"Asia/Aqtau": "<+05>-5",
"Asia/Aqtobe": "<+05>-5",
"Asia/Ashgabat": "<+05>-5",
"Asia/Atyrau": "<+05>-5",
"Asia/Baghdad": "<+03>-3",
"Asia/Bahrain": "<+03>-3",
"Asia/Baku": "<+04>-4",
"Asia/Bangkok": "<+07>-7",
"Asia/Barnaul": "<+07>-7",
"Asia/Beirut": "EET-2EEST,M3.5.0/0,M10.5.0/0",
"Asia/Bishkek": "<+06>-6",
"Asia/Brunei": "<+08>-8",
"Asia/Chita": "<+09>-9",
"Asia/Choibalsan": "<+08>-8",
"Asia/Colombo": "<+0530>-5:30",
"Asia/Damascus": "<+03>-3",
"Asia/Dhaka": "<+06>-6",
"Asia/Dili": "<+09>-9",
"Asia/Dubai": "<+04>-4",
"Asia/Dushanbe": "<+05>-5",
"Asia/Famagusta": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Asia/Gaza": "EET-2EEST,M3.4.4/50,M10.4.4/50",
"Asia/Hebron": "EET-2EEST,M3.4.4/50,M10.4.4/50",
"Asia/Ho_Chi_Minh": "<+07>-7",
"Asia/Hong_Kong": "HKT-8",
"Asia/Hovd": "<+07>-7",
"Asia/Irkutsk": "<+08>-8",
"Asia/Jakarta": "WIB-7",
"Asia/Jayapura": "WIT-9",
"Asia/Jerusalem": "IST-2IDT,M3.4.4/26,M10.5.0",
"Asia/Kabul": "<+0430>-4:30",
"Asia/Kamchatka": "<+12>-12",
"Asia/Karachi": "PKT-5",
"Asia/Kathmandu": "<+0545>-5:45",
"Asia/Khandyga": "<+09>-9",
"Asia/Kolkata": "IST-5:30",
"Asia/Krasnoyarsk": "<+07>-7",
"Asia/Kuala_Lumpur": "<+08>-8",
"Asia/Kuching": "<+08>-8",
"Asia/Kuwait": "<+03>-3",
"Asia/Macau": "CST-8",
"Asia/Magadan": "<+11>-11",
"Asia/Makassar": "WITA-8",
"Asia/Manila": "PST-8",
"Asia/Muscat": "<+04>-4",
"Asia/Nicosia": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Asia/Novokuznetsk": "<+07>-7",
"Asia/Novosibirsk": "<+07>-7",
"Asia/Omsk": "<+06>-6",
"Asia/Oral": "<+05>-5",
"Asia/Phnom_Penh": "<+07>-7",
"Asia/Pontianak": "WIB-7",
"Asia/Pyongyang": "KST-9",
"Asia/Qatar": "<+03>-3",
"Asia/Qyzylorda": "<+05>-5",
"Asia/Riyadh": "<+03>-3",
"Asia/Sakhalin": "<+11>-11",
"Asia/Samarkand": "<+05>-5",
"Asia/Seoul": "KST-9",
"Asia/Shanghai": "CST-8",
"Asia/Singapore": "<+08>-8",
"Asia/Srednekolymsk": "<+11>-11",
"Asia/Taipei": "CST-8",
"Asia/Tashkent": "<+05>-5",
"Asia/Tbilisi": "<+04>-4",
"Asia/Tehran": "<+0330>-3:30",
"Asia/Thimphu": "<+06>-6",
"Asia/Tokyo": "JST-9",
"Asia/Tomsk": "<+07>-7",
"Asia/Ulaanbaatar": "<+08>-8",
"Asia/Urumqi": "<+06>-6",
"Asia/Ust-Nera": "<+10>-10",
"Asia/Vientiane": "<+07>-7",
"Asia/Vladivostok": "<+10>-10",
"Asia/Yakutsk": "<+09>-9",
"Asia/Yangon": "<+0630>-6:30",
"Asia/Yekaterinburg": "<+05>-5",
"Asia/Yerevan": "<+04>-4",
"Atlantic/Azores": "<-01>1<+00>,M3.5.0/0,M10.5.0/1",
"Atlantic/Bermuda": "AST4ADT,M3.2.0,M11.1.0",
"Atlantic/Canary": "WET0WEST,M3.5.0/1,M10.5.0",
"Atlantic/Cape_Verde": "<-01>1",
"Atlantic/Faroe": "WET0WEST,M3.5.0/1,M10.5.0",
"Atlantic/Madeira": "WET0WEST,M3.5.0/1,M10.5.0",
"Atlantic/Reykjavik": "GMT0",
"Atlantic/South_Georgia": "<-02>2",
"Atlantic/St_Helena": "GMT0",
"Atlantic/Stanley": "<-03>3",
"Australia/Adelaide": "ACST-9:30ACDT,M10.1.0,M4.1.0/3",
"Australia/Brisbane": "AEST-10",
"Australia/Broken_Hill": "ACST-9:30ACDT,M10.1.0,M4.1.0/3",
"Australia/Currie": "AEST-10AEDT,M10.1.0,M4.1.0/3",
"Australia/Darwin": "ACST-9:30",
"Australia/Eucla": "<+0845>-8:45",
"Australia/Hobart": "AEST-10AEDT,M10.1.0,M4.1.0/3",
"Australia/Lindeman": "AEST-10",
"Australia/Lord_Howe": "<+1030>-10:30<+11>-11,M10.1.0,M4.1.0",
"Australia/Melbourne": "AEST-10AEDT,M10.1.0,M4.1.0/3",
"Australia/Perth": "AWST-8",
"Australia/Sydney": "AEST-10AEDT,M10.1.0,M4.1.0/3",
"Etc/GMT": "GMT0",
"Etc/GMT+0": "GMT0",
"Etc/GMT+1": "<-01>1",
"Etc/GMT+10": "<-10>10",
"Etc/GMT+11": "<-11>11",
"Etc/GMT+12": "<-12>12",
"Etc/GMT+2": "<-02>2",
"Etc/GMT+3": "<-03>3",
"Etc/GMT+4": "<-04>4",
"Etc/GMT+5": "<-05>5",
"Etc/GMT+6": "<-06>6",
"Etc/GMT+7": "<-07>7",
"Etc/GMT+8": "<-08>8",
"Etc/GMT+9": "<-09>9",
"Etc/GMT-0": "GMT0",
"Etc/GMT-1": "<+01>-1",
"Etc/GMT-10": "<+10>-10",
"Etc/GMT-11": "<+11>-11",
"Etc/GMT-12": "<+12>-12",
"Etc/GMT-13": "<+13>-13",
"Etc/GMT-14": "<+14>-14",
"Etc/GMT-2": "<+02>-2",
"Etc/GMT-3": "<+03>-3",
"Etc/GMT-4": "<+04>-4",
"Etc/GMT-5": "<+05>-5",
"Etc/GMT-6": "<+06>-6",
"Etc/GMT-7": "<+07>-7",
"Etc/GMT-8": "<+08>-8",
"Etc/GMT-9": "<+09>-9",
"Etc/GMT0": "GMT0",
"Etc/Greenwich": "GMT0",
"Etc/UCT": "UTC0",
"Etc/UTC": "UTC0",
"Etc/Universal": "UTC0",
"Etc/Zulu": "UTC0",
"Europe/Amsterdam": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Andorra": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Astrakhan": "<+04>-4",
"Europe/Athens": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Belgrade": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Berlin": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Bratislava": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Brussels": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Bucharest": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Budapest": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Busingen": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Chisinau": "EET-2EEST,M3.5.0,M10.5.0/3",
"Europe/Copenhagen": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Dublin": "IST-1GMT0,M10.5.0,M3.5.0/1",
"Europe/Gibraltar": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Guernsey": "GMT0BST,M3.5.0/1,M10.5.0",
"Europe/Helsinki": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Isle_of_Man": "GMT0BST,M3.5.0/1,M10.5.0",
"Europe/Istanbul": "<+03>-3",
"Europe/Jersey": "GMT0BST,M3.5.0/1,M10.5.0",
"Europe/Kaliningrad": "EET-2",
"Europe/Kiev": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Kirov": "MSK-3",
"Europe/Lisbon": "WET0WEST,M3.5.0/1,M10.5.0",
"Europe/Ljubljana": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/London": "GMT0BST,M3.5.0/1,M10.5.0",
"Europe/Luxembourg": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Madrid": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Malta": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Mariehamn": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Minsk": "<+03>-3",
"Europe/Monaco": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Moscow": "MSK-3",
"Europe/Oslo": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Paris": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Podgorica": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Prague": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Riga": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Rome": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Samara": "<+04>-4",
"Europe/San_Marino": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Sarajevo": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Saratov": "<+04>-4",
"Europe/Simferopol": "MSK-3",
"Europe/Skopje": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Sofia": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Stockholm": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Tallinn": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Tirane": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Ulyanovsk": "<+04>-4",
"Europe/Uzhgorod": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Vaduz": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Vatican": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Vienna": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Vilnius": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Volgograd": "MSK-3",
"Europe/Warsaw": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Zagreb": "CET-1CEST,M3.5.0,M10.5.0/3",
"Europe/Zaporozhye": "EET-2EEST,M3.5.0/3,M10.5.0/4",
"Europe/Zurich": "CET-1CEST,M3.5.0,M10.5.0/3",
"Indian/Antananarivo": "EAT-3",
"Indian/Chagos": "<+06>-6",
"Indian/Christmas": "<+07>-7",
"Indian/Cocos": "<+0630>-6:30",
"Indian/Comoro": "EAT-3",
"Indian/Kerguelen": "<+05>-5",
"Indian/Mahe": "<+04>-4",
"Indian/Maldives": "<+05>-5",
"Indian/Mauritius": "<+04>-4",
"Indian/Mayotte": "EAT-3",
"Indian/Reunion": "<+04>-4",
"Pacific/Apia": "<+13>-13",
"Pacific/Auckland": "NZST-12NZDT,M9.5.0,M4.1.0/3",
"Pacific/Bougainville": "<+11>-11",
"Pacific/Chatham": "<+1245>-12:45<+1345>,M9.5.0/2:45,M4.1.0/3:45",
"Pacific/Chuuk": "<+10>-10",
"Pacific/Easter": "<-06>6<-05>,M9.1.6/22,M4.1.6/22",
"Pacific/Efate": "<+11>-11",
"Pacific/Enderbury": "<+13>-13",
"Pacific/Fakaofo": "<+13>-13",
"Pacific/Fiji": "<+12>-12",
"Pacific/Funafuti": "<+12>-12",
"Pacific/Galapagos": "<-06>6",
"Pacific/Gambier": "<-09>9",
"Pacific/Guadalcanal": "<+11>-11",
"Pacific/Guam": "ChST-10",
"Pacific/Honolulu": "HST10",
"Pacific/Kiritimati": "<+14>-14",
"Pacific/Kosrae": "<+11>-11",
"Pacific/Kwajalein": "<+12>-12",
"Pacific/Majuro": "<+12>-12",
"Pacific/Marquesas": "<-0930>9:30",
"Pacific/Midway": "SST11",
"Pacific/Nauru": "<+12>-12",
"Pacific/Niue": "<-11>11",
"Pacific/Norfolk": "<+11>-11<+12>,M10.1.0,M4.1.0/3",
"Pacific/Noumea": "<+11>-11",
"Pacific/Pago_Pago": "SST11",
"Pacific/Palau": "<+09>-9",
"Pacific/Pitcairn": "<-08>8",
"Pacific/Pohnpei": "<+11>-11",
"Pacific/Port_Moresby": "<+10>-10",
"Pacific/Rarotonga": "<-10>10",
"Pacific/Saipan": "ChST-10",
"Pacific/Tahiti": "<-10>10",
"Pacific/Tarawa": "<+12>-12",
"Pacific/Tongatapu": "<+13>-13",
"Pacific/Wake": "<+12>-12",
"Pacific/Wallis": "<+12>-12"
}

View file

@ -28,19 +28,19 @@ test('api page has expected load button', async ({ page }) => {
await expect(page.getByRole('button', { name: 'Load' })).toBeVisible(); await expect(page.getByRole('button', { name: 'Load' })).toBeVisible();
}); });
// test('timezone can be negative, zero and positive', async ({ page }) => { test('timezone can be negative, zero and positive', async ({ page }) => {
// await page.goto('/'); await page.goto('/');
// await page.getByRole('button', { name: 'Show all' }).click(); await page.getByRole('button', { name: 'Show all' }).click();
// const tzOffsetField = 'input#tzOffset'; const tzOffsetField = 'input#tzOffset';
// for (const val of ['-10', '0', '42']) { for (const val of ['-10', '0', '42']) {
// await page.fill(tzOffsetField, val); await page.fill(tzOffsetField, val);
// const resultValue = await page.$eval(tzOffsetField, (input: HTMLInputElement) => input.value); const resultValue = await page.$eval(tzOffsetField, (input: HTMLInputElement) => input.value);
// expect(resultValue).toBe(val); expect(resultValue).toBe(val);
// await page.getByRole('button', { name: 'Save' }).click(); await page.getByRole('button', { name: 'Save' }).click();
// } }
// }); });
test('time values can not be zero or negative', async ({ page }) => { test('time values can not be zero or negative', async ({ page }) => {
await page.goto('/'); await page.goto('/');

1154
yarn.lock

File diff suppressed because it is too large Load diff