v0.14.23-fixed_js

This commit is contained in:
Mateusz Gruszczyński
2026-09-17 09:45:14 +02:00
parent c459027b56
commit 2f0bf20033
7 changed files with 34 additions and 20 deletions
+6 -2
View File
@@ -413,8 +413,12 @@ async function api(path, options = {}) {
}
const response = await fetch(withBase(path), { ...options, headers, body });
if (response.status === 401) {
showTokenDialog();
throw new Error(tr('auth.invalid'));
const invalidToken = Boolean(app.token);
const message = invalidToken ? tr('auth.invalid') : tr('auth.required');
showTokenDialog(invalidToken ? message : '');
const error = new Error(message);
error.status = response.status;
throw error;
}
if (!response.ok) {
let message = tr('error.http', { status: response.status });
+6 -1
View File
@@ -315,8 +315,13 @@ document.addEventListener('cancel', event => {
if (confirmDiscardForm(form)) dialog.close();
}, true);
function showTokenDialog() {
function showTokenDialog(errorMessage = '') {
const dialog = $('#tokenDialog');
const form = $('#tokenForm');
if (form) {
clearFormErrors(form);
if (errorMessage) showFieldError(form.elements.token, errorMessage);
}
if (!dialog.open) dialog.showModal();
}
+8 -3
View File
@@ -19,6 +19,7 @@ const withBase = path => `${PUBLIC_BASE}${path.startsWith('/') ? path : `/${path
const PUBLIC_DEFAULT_LANGUAGE = String(document.documentElement.lang || '').trim();
const PUBLIC_RANGE_KEYS = ['history.6h', 'history.24h', 'history.7d', 'history.30d', 'history.90d', 'history.1y'];
let publicLanguageManifest = null;
const publicLanguagePacks = new Map();
let publicChartLanguage = PUBLIC_DEFAULT_LANGUAGE;
let publicChartTranslations = {};
let publicChartLocale = PUBLIC_DEFAULT_LANGUAGE;
@@ -49,9 +50,13 @@ async function setPublicChartLanguage(language) {
|| languages.find(entry => entry.code === fallbackCode)
|| languages[0];
if (!item) throw new Error('language pack unavailable');
const response = await fetch(withBase(item.path || `/lang/${encodeURIComponent(item.code)}.json`), { headers: { Accept: 'application/json' } });
if (!response.ok) throw new Error(`language ${item.code} HTTP ${response.status}`);
const pack = await response.json();
let pack = publicLanguagePacks.get(item.code);
if (!pack) {
const response = await fetch(withBase(item.path || `/lang/${encodeURIComponent(item.code)}.json`), { headers: { Accept: 'application/json' } });
if (!response.ok) throw new Error(`language ${item.code} HTTP ${response.status}`);
pack = await response.json();
publicLanguagePacks.set(item.code, pack);
}
publicChartLanguage = item.code;
publicChartTranslations = pack.translations || {};
publicChartLocale = pack.meta?.locale || item.locale || item.code;
+1 -1
View File
@@ -1,7 +1,7 @@
const CACHE = 'gree-controller-__GREE_ASSET_CACHE__';
const SCOPE = new URL(self.registration.scope).pathname.replace(/\/$/, '');
const path = value => `${SCOPE}${value.startsWith('/') ? value : `/${value}`}` || '/';
const ASSETS = [path('__GREE_STYLES_ASSET__'), path('__GREE_APP_ASSET__'), path('__GREE_THEME_INIT_ASSET__'), path('__GREE_LANG_INIT_ASSET__'), path('/favicon.svg'), path('/manifest.webmanifest')];
const ASSETS = [path('__GREE_STYLES_ASSET__'), path('__GREE_APP_ASSET__'), path('__GREE_THEME_INIT_ASSET__'), path('__GREE_LANG_INIT_ASSET__'), path('/manifest.webmanifest')];
self.addEventListener('install', event => event.waitUntil(caches.open(CACHE).then(cache => cache.addAll(ASSETS)).then(() => self.skipWaiting())));
self.addEventListener('activate', event => event.waitUntil(caches.keys().then(keys => Promise.all(keys.filter(key => key !== CACHE).map(key => caches.delete(key)))).then(() => self.clients.claim())));
self.addEventListener('fetch', event => {