1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-14 12:15:44 +02:00
Files
misskey/packages/backend/src/server/web/views/gallery-post.tsx
かっこかり f222d7e24d 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 14313468d3.

* 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>
2025-12-01 18:36:55 +09:00

66 lines
2.1 KiB
TypeScript

/*
* SPDX-FileCopyrightText: syuilo and misskey-project
* SPDX-License-Identifier: AGPL-3.0-only
*/
import type { Packed } from '@/misc/json-schema.js';
import type { MiUserProfile } from '@/models/UserProfile.js';
import type { CommonProps } from '@/server/web/views/_.js';
import { Layout } from '@/server/web/views/base.js';
export function GalleryPostPage(props: CommonProps<{
galleryPost: Packed<'GalleryPost'>;
profile: MiUserProfile;
}>) {
function ogBlock() {
return (
<>
<meta property="og:type" content="article" />
<meta property="og:title" content={props.galleryPost.title} />
{props.galleryPost.description != null ? <meta property="og:description" content={props.galleryPost.description} /> : null}
<meta property="og:url" content={`${props.config.url}/gallery/${props.galleryPost.id}`} />
{props.galleryPost.isSensitive && props.galleryPost.user.avatarUrl ? (
<>
<meta property="og:image" content={props.galleryPost.user.avatarUrl} />
<meta property="twitter:card" content="summary" />
</>
) : null}
{!props.galleryPost.isSensitive && props.galleryPost.files != null ? (
<>
<meta property="og:image" content={props.galleryPost.files[0]!.thumbnailUrl ?? props.galleryPost.files[0]!.url} />
<meta property="twitter:card" content="summary_large_image" />
</>
) : null}
</>
);
}
function metaBlock() {
return (
<>
{props.profile.noCrawle ? <meta name="robots" content="noindex" /> : null}
{props.profile.preventAiLearning ? (
<>
<meta name="robots" content="noimageai" />
<meta name="robots" content="noai" />
</>
) : null}
<meta name="misskey:user-username" content={props.galleryPost.user.username} />
<meta name="misskey:user-id" content={props.galleryPost.user.id} />
<meta name="misskey:gallery-post-id" content={props.galleryPost.id} />
</>
);
}
return (
<Layout
{...props}
title={`${props.galleryPost.title} | ${props.instanceName}`}
desc={props.galleryPost.description ?? ''}
metaSlot={metaBlock()}
ogSlot={ogBlock()}
>
</Layout>
);
}