From 0acca62436a3521c67b3be423b07a57f9e829def Mon Sep 17 00:00:00 2001 From: Fushihara <1039534+fushihara@users.noreply.github.com> Date: Sat, 28 Sep 2024 19:24:00 +0900 Subject: =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E4=B8=80=E8=A6=A7=E3=82=92?= =?UTF-8?q?=E5=80=8B=E5=88=A5=E3=82=A8=E3=83=AC=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AB=E5=88=87=E3=82=8A=E5=87=BA=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/_components/archiveLinkElement.tsx | 84 ++++++++++++++++++++++ src/app/anime/[animeId]/page.tsx | 18 ++--- src/app/article/_components/articleListElement.tsx | 12 +--- src/app/layout.tsx | 2 +- 4 files changed, 93 insertions(+), 23 deletions(-) create mode 100644 src/app/_components/archiveLinkElement.tsx diff --git a/src/app/_components/archiveLinkElement.tsx b/src/app/_components/archiveLinkElement.tsx new file mode 100644 index 0000000..d97d904 --- /dev/null +++ b/src/app/_components/archiveLinkElement.tsx @@ -0,0 +1,84 @@ +import Link from "next/link"; +type ArticlePage = { + type: "article", + articleId: number, + subPageNumber?: number, +} +type AnimeTop = { + type: "animeTop", + animeId: number, +}; +type AnimeReviewList = { + type: "animeReviewList", + animeId: number, + /** 0始まり */ + pageNumber: number, +}; +type AnimeReviewItem = { + type: "AnimeReviewItem", + animeId: number, + reviewId: number, +}; +type Common = { showLinkUnderline?: boolean } +type Option = (ArticlePage | AnimeTop | AnimeReviewList | AnimeReviewItem) & Common; +export function ArciveLinkElement(option: Option) { + const officialLinkTitle = `公式のakiba-souken.com へのリンク。閉鎖後は繋がらなくなるはず`; + const iaSearchResultLinkTitle = `InternetArchive の検索結果へのリンク`; + const iframeLinkTitle = `Iframeを使ってInternetArchiveに記録されたアーカイブを表示します`; + let originalUrl = ""; + let iframeSrc = ""; + let suffixPrivate: JSX.Element = <>; + let className = ""; + if (option.type == "article") { + if (option.subPageNumber == null) { + originalUrl = `https://akiba-souken.com/article/${option.articleId}/`; + iframeSrc = `article-${option.articleId}`; + } else { + originalUrl = `https://akiba-souken.com/article/${option.articleId}/?page=${option.subPageNumber}`; + iframeSrc = `article-${option.articleId}-${option.subPageNumber}`; + suffixPrivate = <>Page:{option.subPageNumber} + } + } else if (option.type == "animeTop") { + originalUrl = `https://akiba-souken.com/anime/${option.animeId}/`; + iframeSrc = `anime-${option.animeId}` + } else if (option.type == "animeReviewList") { + if (option.pageNumber == 0) { + originalUrl = `https://akiba-souken.com/anime/${option.animeId}/review/`; + iframeSrc = `anime-${option.animeId}-review` + } else { + const page = option.pageNumber + 1; + originalUrl = `https://akiba-souken.com/anime/${option.animeId}/?page=${page}`; + iframeSrc = `anime-${option.animeId}-review-p${page}` + } + } else if (option.type == "AnimeReviewItem") { + originalUrl = `https://akiba-souken.com/anime/${option.animeId}/review/${option.reviewId}`; + iframeSrc = `anime-${option.animeId}-review-${option.reviewId}`; + } else { + throw new Error(); + } + if (option.showLinkUnderline == true) { + className = `original-href`; + } + return ( + <> + 公式 + IA検索結果 + IAをiframe + {suffixPrivate} + + ) +} \ No newline at end of file diff --git a/src/app/anime/[animeId]/page.tsx b/src/app/anime/[animeId]/page.tsx index a92cda8..4c5372e 100644 --- a/src/app/anime/[animeId]/page.tsx +++ b/src/app/anime/[animeId]/page.tsx @@ -3,6 +3,7 @@ import style from "./style.module.css"; import dateformat from "dateformat"; import { AnimeLoader, AnimeLoaderData } from "../../../util/animeLoader"; import Link from "next/link"; +import { ArciveLinkElement } from "../../_components/archiveLinkElement"; dateformat.i18n.dayNames = [ '日', '月', '火', '水', '木', '金', '土', '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' @@ -43,9 +44,7 @@ export default async function Page(context: PageType) {
アキバ総研のアニメ個別URL: - 公式 - IA検索結果 - IAをiframe + {ArciveLinkElement({ type: "animeTop", animeId: loadedData.animeId, showLinkUnderline: true })}
{titleReviewScore(loadedData.titleReviewScore)} @@ -114,22 +113,17 @@ function titleReviewList(animeId: number, list: AnimeLoaderData["titleReviewList
新着 {itemFrom}~{itemTo}件目 - 公式 - IA検索結果 - IAをiframe + {ArciveLinkElement({ type: "animeReviewList", animeId: animeId, pageNumber: i, showLinkUnderline: true })}
); } else { // 2ページ目移行 - const page = i + 1; reviewListLinks.push(
新着 {itemFrom}~{itemTo}件目 - 公式 - IA検索結果 - IAをiframe + {ArciveLinkElement({ type: "animeReviewList", animeId: animeId, pageNumber: i, showLinkUnderline: true })}
); @@ -146,9 +140,7 @@ function titleReviewList(animeId: number, list: AnimeLoaderData["titleReviewList
{index + 1}/{list.length} - 公式 - IA検索結果 - IAをiframe + {ArciveLinkElement({ type: "AnimeReviewItem", animeId: animeId, reviewId: v.reviewId, showLinkUnderline: true })} 投稿日時:{timestampStr} スコア:{v.score} ネタバレ:{v.isSpoiler ? "はい" : "いいえ"} diff --git a/src/app/article/_components/articleListElement.tsx b/src/app/article/_components/articleListElement.tsx index 27c7862..2c23f59 100644 --- a/src/app/article/_components/articleListElement.tsx +++ b/src/app/article/_components/articleListElement.tsx @@ -2,6 +2,7 @@ import Link from "next/link"; import dateformat from "dateformat"; import { ArticleLoader } from "../../../util/articleLoader"; import { TableElement } from "../../_components/tableElements"; +import { ArciveLinkElement } from "../../_components/archiveLinkElement"; dateformat.i18n.dayNames = [ '日', '月', '火', '水', '木', '金', '土', '日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日' @@ -22,9 +23,6 @@ export function ArticleListElement(displayData: DisplayData[], categoryTag: Cate return result; } function getDisplayData(d: DisplayData, categoryTag: CategoryTagData) { - const officialLinkTitle = `公式のakiba-souken.com へのリンク。閉鎖後は繋がらなくなるはず`; - const iaSearchResultLinkTitle = `InternetArchive の検索結果へのリンク`; - const iframeLinkTitle = `Iframeを使ってInternetArchiveに記録されたアーカイブを表示します`; const topCategory = d.breadLinks[0]; const timestampStr = dateformat(new Date(d.timestampMs), "yyyy/mm/dd(ddd)HH:MM"); const originalUrl = `https://akiba-souken.com/article/${d.articleId}/`; @@ -38,9 +36,7 @@ function getDisplayData(d: DisplayData, categoryTag: CategoryTagData) { for (let page = 2; page <= d.maxPageNumber; page++) { result.push(
- 公式 - IA検索結果 - IAをiframe Page:{page} + {ArciveLinkElement({ type: "article", articleId: d.articleId, subPageNumber: page })}
); } @@ -106,9 +102,7 @@ function getDisplayData(d: DisplayData, categoryTag: CategoryTagData) { element: <>
{d.title}
- 公式 - IA検索結果 - IAをiframe + {ArciveLinkElement({ type: "article", articleId: d.articleId })} {breadElement} {tagElement} {hatebuElement} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9d5b2b9..aa0dad7 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -20,7 +20,7 @@ export default function RootLayout({ {children}
- 全てのデータはアキバ総研より。 + 全てのデータはアキバ総研より。
-- cgit v1.2.3