Unverified Commit e70149af authored by memoclaw's avatar memoclaw Committed by GitHub

enhance: polish PWA manifest and meta tags (#5695)

Co-authored-by: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent cd5816c4
...@@ -9,6 +9,10 @@ ...@@ -9,6 +9,10 @@
<link rel="icon" type="image/webp" href="/logo.webp" /> <link rel="icon" type="image/webp" href="/logo.webp" />
<link rel="manifest" href="/site.webmanifest" /> <link rel="manifest" href="/site.webmanifest" />
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
<meta name="theme-color" content="#faf9f5" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
<!-- memos.metadata.head --> <!-- memos.metadata.head -->
<title>Memos</title> <title>Memos</title>
</head> </head>
......
{ {
"name": "Memos", "name": "Memos",
"short_name": "Memos", "short_name": "Memos",
"description": "An open-source, self-hosted note-taking tool. Capture thoughts instantly. Own them completely.",
"icons": [ "icons": [
{ "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" } { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }
], ],
"display": "standalone", "display": "standalone",
"start_url": "/" "scope": "/",
"start_url": "/",
"theme_color": "#faf9f5",
"background_color": "#faf9f5"
} }
...@@ -24,6 +24,12 @@ const THEME_CONTENT: Record<ResolvedTheme, string | null> = { ...@@ -24,6 +24,12 @@ const THEME_CONTENT: Record<ResolvedTheme, string | null> = {
paper: paperThemeContent, paper: paperThemeContent,
}; };
const THEME_COLORS: Record<ResolvedTheme, string> = {
default: "#faf9f5",
"default-dark": "#020204",
paper: "#f5ede4",
};
export const THEME_OPTIONS: ThemeOption[] = [ export const THEME_OPTIONS: ThemeOption[] = [
{ value: "system", label: "Sync with system" }, { value: "system", label: "Sync with system" },
{ value: "default", label: "Light" }, { value: "default", label: "Light" },
...@@ -165,6 +171,17 @@ const setThemeAttribute = (theme: ResolvedTheme): void => { ...@@ -165,6 +171,17 @@ const setThemeAttribute = (theme: ResolvedTheme): void => {
document.documentElement.setAttribute("data-theme", theme); document.documentElement.setAttribute("data-theme", theme);
}; };
/**
* Updates the theme-color meta tag to match the current theme background.
* This colors the browser/status bar on mobile devices.
*/
const updateThemeColorMeta = (theme: ResolvedTheme): void => {
const meta = document.querySelector<HTMLMetaElement>('meta[name="theme-color"]');
if (meta) {
meta.content = THEME_COLORS[theme];
}
};
// ============================================================================ // ============================================================================
// Main Theme Loading // Main Theme Loading
// ============================================================================ // ============================================================================
...@@ -184,6 +201,7 @@ export const loadTheme = (themeName: string): void => { ...@@ -184,6 +201,7 @@ export const loadTheme = (themeName: string): void => {
injectThemeStyle(resolvedTheme); injectThemeStyle(resolvedTheme);
setThemeAttribute(resolvedTheme); setThemeAttribute(resolvedTheme);
updateThemeColorMeta(resolvedTheme);
setStoredTheme(validTheme); // Store original theme preference (not resolved) setStoredTheme(validTheme); // Store original theme preference (not resolved)
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment