From 78073b2f94515f58f8555736ac16aa9155c0c9b0 Mon Sep 17 00:00:00 2001 From: tomolld Date: Mon, 12 Aug 2024 17:14:08 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=BF=E3=82=A4=E3=83=88=E3=83=AB=E3=82=82?= =?UTF-8?q?=E7=BF=BB=E8=A8=B3=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/extractNumberedElements.ts | 5 +- .../components/ContentWithTranslations.tsx | 22 ++++- .../page+/$slug+/components/Translation.tsx | 16 +++- .../components/UserAITranslationStatus.tsx | 2 +- .../$userName+/page+/$slug+/edit/_edit.tsx | 7 +- .../routes/$userName+/page+/$slug+/index.tsx | 48 +++++++--- .../$slug+/lib/get-best-translation.client.ts | 5 +- .../{edit => }/utils/addNumbersToContent.ts | 0 .../$slug+/{edit => }/utils/extractArticle.ts | 0 .../utils/extractNumberedElements.ts | 5 +- web/app/routes/resources+/footer.tsx | 91 ++++++++++--------- web/app/routes/translator/route.tsx | 5 +- 12 files changed, 136 insertions(+), 70 deletions(-) rename web/app/routes/$userName+/page+/$slug+/{edit => }/utils/addNumbersToContent.ts (100%) rename web/app/routes/$userName+/page+/$slug+/{edit => }/utils/extractArticle.ts (100%) rename web/app/routes/$userName+/page+/$slug+/{edit => }/utils/extractNumberedElements.ts (93%) diff --git a/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts b/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts index 0a31d75c..2bb05f46 100644 --- a/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts +++ b/web/app/features/prepare-html-for-translate/utils/extractNumberedElements.ts @@ -2,9 +2,12 @@ import { JSDOM } from "jsdom"; export function extractNumberedElements( content: string, + title: string, ): Array<{ number: number; text: string }> { const doc = new JSDOM(content); - const numberedElements: Array<{ number: number; text: string }> = []; + const numberedElements: Array<{ number: number; text: string }> = [ + { number: 0, text: title }, + ]; //
のみを改行とする doc.window.document.body.innerHTML = doc.window.document.body.innerHTML .replace(/\n/g, "") diff --git a/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx b/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx index 064b2ab9..63a44c96 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/ContentWithTranslations.tsx @@ -5,16 +5,22 @@ import type { SourceTextWithTranslations } from "../types"; import { Translation } from "./Translation"; interface ContentWithTranslationsProps { + title: string; content: string; sourceTextWithTranslations: SourceTextWithTranslations[]; userId: number | null; } export const ContentWithTranslations = memo(function ContentWithTranslations({ + title, content, sourceTextWithTranslations, userId, }: ContentWithTranslationsProps) { + const titleTranslation = useMemo(() => { + return sourceTextWithTranslations.find((info) => info.number === 0); + }, [sourceTextWithTranslations]); + const parsedContent = useMemo(() => { if (typeof window === "undefined") { return null; @@ -63,5 +69,19 @@ export const ContentWithTranslations = memo(function ContentWithTranslations({ return
Loading...
; } - return <>{parsedContent}; + return ( + <> +

+ {title} + {titleTranslation && ( + + )} +

+ {parsedContent} + + ); }); diff --git a/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx b/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx index b380137a..6e72cbec 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/Translation.tsx @@ -46,14 +46,22 @@ export function Translation({ const alternativeTranslationsWithVotes = useMemo( () => - translationsWithVotes.filter((t) => t.id !== bestTranslationWithVote.id), + bestTranslationWithVote + ? translationsWithVotes.filter( + (t) => t.id !== bestTranslationWithVote.id, + ) + : [], [translationsWithVotes, bestTranslationWithVote], ); const sanitizedAndParsedText = useMemo(() => { - const sanitized = sanitizeAndParseText(bestTranslationWithVote.text); - return sanitized; - }, [bestTranslationWithVote.text]); + if (!bestTranslationWithVote) return null; + return sanitizeAndParseText(bestTranslationWithVote.text); + }, [bestTranslationWithVote]); + + if (!bestTranslationWithVote || !sanitizedAndParsedText) { + return null; + } return (
diff --git a/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx b/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx index bf2b698e..2f2c1014 100644 --- a/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx +++ b/web/app/routes/$userName+/page+/$slug+/components/UserAITranslationStatus.tsx @@ -34,7 +34,7 @@ export function UserAITranslationStatus({ return ( - Translation Status + Your AI Translation Status
+ {actionData?.slug && ( + + + Translation Job Started + + + {actionData.slug} + + + )}
-

- {pageData.title} -
{pageData.translationTitle}
-

-
t.userVote?.isUpvote, ); diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/addNumbersToContent.ts b/web/app/routes/$userName+/page+/$slug+/utils/addNumbersToContent.ts similarity index 100% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/addNumbersToContent.ts rename to web/app/routes/$userName+/page+/$slug+/utils/addNumbersToContent.ts diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractArticle.ts b/web/app/routes/$userName+/page+/$slug+/utils/extractArticle.ts similarity index 100% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/extractArticle.ts rename to web/app/routes/$userName+/page+/$slug+/utils/extractArticle.ts diff --git a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts b/web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts similarity index 93% rename from web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts rename to web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts index 0a31d75c..2bb05f46 100644 --- a/web/app/routes/$userName+/page+/$slug+/edit/utils/extractNumberedElements.ts +++ b/web/app/routes/$userName+/page+/$slug+/utils/extractNumberedElements.ts @@ -2,9 +2,12 @@ import { JSDOM } from "jsdom"; export function extractNumberedElements( content: string, + title: string, ): Array<{ number: number; text: string }> { const doc = new JSDOM(content); - const numberedElements: Array<{ number: number; text: string }> = []; + const numberedElements: Array<{ number: number; text: string }> = [ + { number: 0, text: title }, + ]; //
のみを改行とする doc.window.document.body.innerHTML = doc.window.document.body.innerHTML .replace(/\n/g, "") diff --git a/web/app/routes/resources+/footer.tsx b/web/app/routes/resources+/footer.tsx index e071e396..4797798b 100644 --- a/web/app/routes/resources+/footer.tsx +++ b/web/app/routes/resources+/footer.tsx @@ -42,50 +42,36 @@ export function Footer({ safeUser }: FooterProps) { return ( diff --git a/web/app/routes/translator/route.tsx b/web/app/routes/translator/route.tsx index 48a10600..eec246f5 100644 --- a/web/app/routes/translator/route.tsx +++ b/web/app/routes/translator/route.tsx @@ -127,7 +127,10 @@ export async function action({ request }: ActionFunctionArgs) { targetLanguage, ); - const numberedElements = extractNumberedElements(numberedContent); + const numberedElements = extractNumberedElements( + numberedContent, + title, + ); await createOrUpdateSourceTexts(numberedElements, page.id); // ファイルの翻訳ジョブをキューに追加 await queue.add(`translate-${safeUser.id}`, {