mirror of
https://github.com/caiwx86/small-packages.git
synced 2026-11-01 14:23:56 +08:00
96 lines
5.2 KiB
HTML
96 lines
5.2 KiB
HTML
<!doctype html>
|
|
<html lang="zh-Hant" dir="ltr" data-warm="pending">
|
|
<head>
|
|
<meta name="doona-build" content="04c292a116374877">
|
|
<script>// Normalize appearance before first paint. The build fills the palette list and default from src/shell/palettes.ts, the
|
|
// language locales and reference locale from src/i18n/languages.ts, and the right-to-left scripts from src/i18n/direction.ts.
|
|
(function () {
|
|
var read = function (key) {
|
|
try {
|
|
return localStorage.getItem(key);
|
|
} catch {
|
|
return null;
|
|
}
|
|
};
|
|
var scheme = read('doona-scheme');
|
|
var palette = read('doona-palette');
|
|
// Before each Glass material was a palette of its own, Glass kept its material in doona-glass. Read it once into the
|
|
// palette, then drop it.
|
|
var material = read('doona-glass');
|
|
if (material !== null)
|
|
try {
|
|
if (palette === 'glass/glass' && (material === 'frosted' || material === 'tinted'))
|
|
localStorage.setItem('doona-palette', (palette = 'glass/' + material));
|
|
localStorage.removeItem('doona-glass');
|
|
} catch {
|
|
// Storage is unavailable; the palette stays as saved.
|
|
}
|
|
var lang = read('doona-lang');
|
|
var d = document.documentElement;
|
|
var dark = scheme === 'dark' || (scheme !== 'light' && matchMedia('(prefers-color-scheme: dark)').matches);
|
|
var palettes = ["rose-pine/main","rose-pine/moon","catppuccin/frappe","catppuccin/macchiato","catppuccin/mocha","arco/arco","semi/semi","glass/glass","glass/clear","glass/frosted","glass/tinted","nord/nord","kary/kary","antd/antd","qiangguo/qiangguo"];
|
|
var parts = (palettes.includes(palette) ? palette : "rose-pine/moon").split('/');
|
|
d.dataset.scheme = dark ? 'dark' : 'light';
|
|
d.dataset.family = parts[0];
|
|
d.dataset.flavour = parts[1];
|
|
// Only the Glass palettes load Glass's stylesheet. Written by the parser, it holds the first paint as the main one
|
|
// does, and it lands before the main one, where src/shell/glass.ts links it for a palette picked later.
|
|
var glass = "./assets/glass-B8ENqf-S.css";
|
|
if (parts[0] === 'glass' && glass) document.write('<link rel="stylesheet" data-glass href="' + glass + '">');
|
|
d.dataset.wordmark = read('doona-wordmark') === 'plain' ? 'plain' : 'gradient';
|
|
var locales = {"zh-TW":"zh-TW","zh-CN":"zh-CN","en":"en-US"};
|
|
// No saved language doona has: the browser's preferences, picked as browserLang in src/i18n/languages.ts picks them.
|
|
// tools/stamp.test.mjs runs both on the same cases.
|
|
if (!Object.hasOwn(locales, lang)) {
|
|
var ids = Object.keys(locales);
|
|
var wanted = navigator.languages?.length ? navigator.languages : [navigator.language];
|
|
lang = null;
|
|
for (var preference of wanted) {
|
|
var want = preference.toLowerCase();
|
|
var primary = want.split('-')[0];
|
|
lang = ids.find(id => id.toLowerCase() === want || locales[id].toLowerCase() === want);
|
|
if (!lang && primary === 'zh') lang = /-hans\b/.test(want) ? 'zh-CN' : /-(hant|tw|hk|mo)\b/.test(want) ? 'zh-TW' : 'zh-CN';
|
|
if (!lang) lang = ids.find(id => id.toLowerCase().split('-')[0] === primary);
|
|
if (lang) break;
|
|
}
|
|
}
|
|
d.lang = locales[lang] ?? "en-US";
|
|
// The direction as pageDirection in src/i18n/direction.ts decides it: right to left in the mirrored layout, else the
|
|
// locale's text info, else its likely script.
|
|
var mirrored = read('doona-mirror') === 'on';
|
|
var rtlScripts = ["Adlm","Arab","Hebr","Mand","Nkoo","Rohg","Samr","Syrc","Thaa","Yezi"];
|
|
var dir = mirrored ? 'rtl' : 'ltr';
|
|
if (!mirrored)
|
|
try {
|
|
var tag = new Intl.Locale(d.lang);
|
|
var info = tag.getTextInfo ? tag.getTextInfo() : tag.textInfo;
|
|
if (info && info.direction ? info.direction === 'rtl' : rtlScripts.includes(tag.maximize().script)) dir = 'rtl';
|
|
} catch {
|
|
// Left to right.
|
|
}
|
|
d.dir = dir;
|
|
if (mirrored) d.dataset.mirror = '';
|
|
})();
|
|
</script>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'sha256-tlviH+piYREMqnu+fhWaHgeVf9cfqdUk6kkaYqmgsac='; connect-src 'self' http: https: ws: wss:; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https: http:; font-src 'self'">
|
|
<title>doona</title>
|
|
<meta name="description" content="Static web UI for the daeuniverse native API.">
|
|
<link rel="icon" href="./logo.svg">
|
|
<link rel="manifest" href="./manifest.webmanifest">
|
|
<!-- Default Rose Pine Dawn (light) and Moon (dark) colours: src/ui/styles/palettes/rose-pine.css. -->
|
|
<meta name="theme-color" content="#faf4ed" media="(prefers-color-scheme: light)">
|
|
<meta name="theme-color" content="#232136" media="(prefers-color-scheme: dark)">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="./icons/apple-touch-icon.png">
|
|
<meta name="mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-title" content="doona">
|
|
<script type="module" crossorigin src="./assets/index-HxEUeoab.js"></script>
|
|
<link rel="modulepreload" crossorigin href="./assets/_commonjsHelpers-CXUWDbkB.js">
|
|
<link rel="modulepreload" crossorigin href="./assets/vendor-react-64fcanlc.js">
|
|
<link rel="stylesheet" crossorigin href="./assets/index-CcbWXWDN.css">
|
|
</head>
|
|
<body><div id="root"></div></body>
|
|
</html>
|