diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-12-01 18:36:55 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-12-01 18:36:55 +0900 |
| commit | f222d7e24d3d134a078868c89363cacde906ccdc (patch) | |
| tree | 987edf63823a078365a514b0c755258b196a5d1b /packages/backend/src/server/web/views/base-embed.tsx | |
| parent | fix(frontend): visibilityStateがhiddenな状態でstartViewTransitionしな... (diff) | |
| download | misskey-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.tsx | 88 |
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> + </> + ); +} + |