summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/web/views/base-embed.tsx
diff options
context:
space:
mode:
authorかっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>2025-12-01 18:36:55 +0900
committerGitHub <noreply@github.com>2025-12-01 18:36:55 +0900
commitf222d7e24d3d134a078868c89363cacde906ccdc (patch)
tree987edf63823a078365a514b0c755258b196a5d1b /packages/backend/src/server/web/views/base-embed.tsx
parentfix(frontend): visibilityStateがhiddenな状態でstartViewTransitionしな... (diff)
downloadmisskey-f222d7e24d3d134a078868c89363cacde906ccdc.tar.gz
misskey-f222d7e24d3d134a078868c89363cacde906ccdc.tar.bz2
misskey-f222d7e24d3d134a078868c89363cacde906ccdc.zip
enhance(backend): pugをやめ、JSXベースのテンプレートに変更 (#16908)
* enhance(backend): pugをやめ、JSXベースのテンプレートに変更 (to misskey-dev dev branch) (#16889) * wip * wip * wip * wip * fix lint * attempt to fix test * fix * fix * fix: oauthページの描画がおかしい問題を修正 * typo [ci skip] * fix * fix * fix * fix * fix * refactor * fix * fix * fix broken lockfile * fix: expose supported languages as global variable * remove i18n package from root as it is no longer required [ci skip] * fix * fix: add i18n package.json to Docker target-builder stage for federation tests (#16909) * Initial plan * fix: add i18n package.json to Docker target-builder stage for federation tests Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> * fix: followup-test-federation for enh-remove-pug (#16910) * fix: followup-test-federation for enh-remove-pug * Revert "fix: add i18n package.json to Docker target-builder stage for federation tests (#16909)" This reverts commit 14313468d34f49c363eef4d0a932e9fc0d9a37fb. * fix: CSSが読み込まれない場合がある問題を修正 * fix [ci skip] * fix: propsのデフォルト値をnull合体演算子から論理和演算子に変更(空文字に対処するため) * remove @types/pug * enhance: bootloaderを埋め込むように * fix possible race condition * remove esbuild --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src/server/web/views/base-embed.tsx')
-rw-r--r--packages/backend/src/server/web/views/base-embed.tsx88
1 files changed, 88 insertions, 0 deletions
diff --git a/packages/backend/src/server/web/views/base-embed.tsx b/packages/backend/src/server/web/views/base-embed.tsx
new file mode 100644
index 0000000000..011b66592e
--- /dev/null
+++ b/packages/backend/src/server/web/views/base-embed.tsx
@@ -0,0 +1,88 @@
+/*
+ * SPDX-FileCopyrightText: syuilo and misskey-project
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+
+import { comment } from '@/server/web/views/_.js';
+import type { CommonProps } from '@/server/web/views/_.js';
+import { Splash } from '@/server/web/views/_splash.js';
+import type { PropsWithChildren, Children } from '@kitajs/html';
+
+export function BaseEmbed(props: PropsWithChildren<CommonProps<{
+ title?: string;
+ noindex?: boolean;
+ desc?: string;
+ img?: string;
+ serverErrorImageUrl?: string;
+ infoImageUrl?: string;
+ notFoundImageUrl?: string;
+ metaJson?: string;
+ embedCtxJson?: string;
+
+ titleSlot?: Children;
+ metaSlot?: Children;
+}>>) {
+ const now = Date.now();
+
+ // 変数名をsafeで始めることでエラーをスキップ
+ const safeMetaJson = props.metaJson;
+ const safeEmbedCtxJson = props.embedCtxJson;
+
+ return (
+ <>
+ {'<!DOCTYPE html>'}
+ {comment}
+ <html>
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="application-name" content="Misskey" />
+ <meta name="referer" content="origin" />
+ <meta name="theme-color" content={props.themeColor ?? '#86b300'} />
+ <meta name="theme-color-orig" content={props.themeColor ?? '#86b300'} />
+ <meta property="og:site_name" content={props.instanceName || 'Misskey'} />
+ <meta property="instance_url" content={props.instanceUrl} />
+ <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover" />
+ <meta name="format-detection" content="telephone=no,date=no,address=no,email=no,url=no" />
+ <link rel="icon" href={props.icon ?? '/favicon.ico'} />
+ <link rel="apple-touch-icon" href={props.appleTouchIcon ?? '/apple-touch-icon.png'} />
+
+ {!props.config.frontendEmbedManifestExists ? <script type="module" src="/embed_vite/@vite/client"></script> : null}
+
+ {props.config.frontendEmbedEntry.css != null ? props.config.frontendEmbedEntry.css.map((href) => (
+ <link rel="stylesheet" href={`/embed_vite/${href}`} />
+ )) : null}
+
+ {props.titleSlot ?? <title safe>{props.title || 'Misskey'}</title>}
+
+ {props.metaSlot}
+
+ <meta name="robots" content="noindex" />
+
+ {props.frontendEmbedBootloaderCss != null ? <style safe>{props.frontendEmbedBootloaderCss}</style> : <link rel="stylesheet" href="/embed_vite/loader/style.css" />}
+
+ <script>
+ const VERSION = '{props.version}';
+ const CLIENT_ENTRY = {JSON.stringify(props.config.frontendEmbedEntry.file)};
+ const LANGS = {JSON.stringify(props.langs)};
+ </script>
+
+ {safeMetaJson != null ? <script type="application/json" id="misskey_meta" data-generated-at={now}>{safeMetaJson}</script> : null}
+ {safeEmbedCtxJson != null ? <script type="application/json" id="misskey_embedCtx" data-generated-at={now}>{safeEmbedCtxJson}</script> : null}
+
+ {props.frontendEmbedBootloaderJs != null ? <script>{props.frontendEmbedBootloaderJs}</script> : <script src="/embed_vite/loader/boot.js"></script>}
+ </head>
+ <body>
+ <noscript>
+ <p>
+ JavaScriptを有効にしてください<br />
+ Please turn on your JavaScript
+ </p>
+ </noscript>
+ <Splash icon={props.icon} />
+ {props.children}
+ </body>
+ </html>
+ </>
+ );
+}
+