diff --git a/packages/backend/eslint.config.js b/packages/backend/eslint.config.js index 4fd9f0cd51..75ccce7b3d 100644 --- a/packages/backend/eslint.config.js +++ b/packages/backend/eslint.config.js @@ -1,5 +1,6 @@ import tsParser from '@typescript-eslint/parser'; import sharedConfig from '../shared/eslint.config.js'; +import globals from 'globals'; export default [ ...sharedConfig, @@ -43,4 +44,15 @@ export default [ }], }, }, + { + files: ['src/server/web/**/*.js', 'src/server/web/**/*.ts'], + languageOptions: { + globals: { + ...globals.browser, + LANGS: true, + CLIENT_ENTRY: true, + LANGS_VERSION: true, + }, + }, + }, ]; diff --git a/packages/backend/src/server/web/bios.js b/packages/backend/src/server/web/bios.js index 9ff5dca72a..5dbb26f9e3 100644 --- a/packages/backend/src/server/web/bios.js +++ b/packages/backend/src/server/web/bios.js @@ -6,36 +6,6 @@ 'use strict'; window.onload = async () => { - const account = JSON.parse(localStorage.getItem('account')); - const i = account.token; - - const api = (endpoint, data = {}) => { - const promise = new Promise((resolve, reject) => { - // Append a credential - if (i) data.i = i; - - // Send request - window.fetch(endpoint.indexOf('://') > -1 ? endpoint : `/api/${endpoint}`, { - method: 'POST', - body: JSON.stringify(data), - credentials: 'omit', - cache: 'no-cache' - }).then(async (res) => { - const body = res.status === 204 ? null : await res.json(); - - if (res.status === 200) { - resolve(body); - } else if (res.status === 204) { - resolve(); - } else { - reject(body.error); - } - }).catch(reject); - }); - - return promise; - }; - const content = document.getElementById('content'); document.getElementById('ls').addEventListener('click', () => { diff --git a/packages/backend/src/server/web/boot.embed.js b/packages/backend/src/server/web/boot.embed.js index dfa23d3afd..b07dce3ac4 100644 --- a/packages/backend/src/server/web/boot.embed.js +++ b/packages/backend/src/server/web/boot.embed.js @@ -31,8 +31,17 @@ document.documentElement.classList.add('noborder'); } + // Force update when locales change + const langsVersion = LANGS_VERSION; + const localeVersion = localStorage.getItem('localeVersion'); + if (localeVersion !== langsVersion) { + console.info(`Updating locales from version ${localeVersion ?? 'N/A'} to ${langsVersion}`); + localStorage.removeItem('localeVersion'); + localStorage.removeItem('locale'); + } + //#region Detect language & fetch translations - if (!localStorage.hasOwnProperty('locale')) { + if (!localStorage.getItem('locale')) { const supportedLangs = LANGS; let lang = localStorage.getItem('lang'); if (lang == null || !supportedLangs.includes(lang)) { @@ -46,37 +55,17 @@ } } - const metaRes = await window.fetch('/api/meta', { - method: 'POST', - body: JSON.stringify({}), - credentials: 'omit', - cache: 'no-cache', - headers: { - 'Content-Type': 'application/json', - }, - }); - if (metaRes.status !== 200) { - renderError('META_FETCH'); - return; - } - const meta = await metaRes.json(); - const v = meta.version; - if (v == null) { - renderError('META_FETCH_V'); - return; - } - // for https://github.com/misskey-dev/misskey/issues/10202 if (lang == null || lang.toString == null || lang.toString() === 'null') { console.error('invalid lang value detected!!!', typeof lang, lang); lang = 'en-US'; } - const localRes = await window.fetch(`/assets/locales/${lang}.${v}.json`); + const localRes = await window.fetch(`/assets/locales/${lang}.${langsVersion}.json`); if (localRes.status === 200) { localStorage.setItem('lang', lang); localStorage.setItem('locale', await localRes.text()); - localStorage.setItem('localeVersion', v); + localStorage.setItem('localeVersion', langsVersion); } else { renderError('LOCALE_FETCH'); return; diff --git a/packages/backend/src/server/web/boot.js b/packages/backend/src/server/web/boot.js index 9063358eaa..886e2f006e 100644 --- a/packages/backend/src/server/web/boot.js +++ b/packages/backend/src/server/web/boot.js @@ -88,7 +88,7 @@ const themeFontFaceName = 'sharkey-theme-font-face'; if (theme) { let existingFontFace; - document.fonts.forEach((v,k,s)=>{if (v.family === themeFontFaceName) existingFontFace=v;}); + document.fonts.forEach((v) => { if (v.family === themeFontFaceName) existingFontFace = v;}); if (existingFontFace) document.fonts.delete(existingFontFace); const themeProps = JSON.parse(theme); @@ -102,9 +102,8 @@ document.fonts.add(fontFace); fontFace.load().catch( (failure) => { - console.log(failure) - } - ); + console.log(failure); + }, ); } for (const [k, v] of Object.entries(themeProps)) { if (k.startsWith('font')) continue;