diff --git a/public/translations/ar/default.json b/public/translations/ar/default.json index 094de42b..225f3022 100644 --- a/public/translations/ar/default.json +++ b/public/translations/ar/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "المنتديات التي تقوم بالإشراف عليها", "link_to_file": "رابط للملف", "support_5chan": "دعم 5chan", - "images": "صور" + "images": "صور", + "load_more": "تحميل المزيد" } diff --git a/public/translations/bn/default.json b/public/translations/bn/default.json index 434ea913..e0498482 100644 --- a/public/translations/bn/default.json +++ b/public/translations/bn/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "আপনি যা মডারেট করেন এমন বোর্ড", "link_to_file": "ফাইলের লিংক", "support_5chan": "5chan সমর্থন করুন", - "images": "ছবি" + "images": "ছবি", + "load_more": "আরও লোড করুন" } diff --git a/public/translations/cs/default.json b/public/translations/cs/default.json index dc151a03..e1d7f3c1 100644 --- a/public/translations/cs/default.json +++ b/public/translations/cs/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Fóra, která moderujete", "link_to_file": "Odkaz na soubor", "support_5chan": "Podpořte 5chan", - "images": "obrázky" + "images": "obrázky", + "load_more": "Načíst více" } diff --git a/public/translations/da/default.json b/public/translations/da/default.json index 8b211f67..d45f88ce 100644 --- a/public/translations/da/default.json +++ b/public/translations/da/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Boards du modererer", "link_to_file": "Link til fil", "support_5chan": "Støt 5chan", - "images": "billeder" + "images": "billeder", + "load_more": "Indlæs mere" } diff --git a/public/translations/de/default.json b/public/translations/de/default.json index 0756ec63..f7089aa8 100644 --- a/public/translations/de/default.json +++ b/public/translations/de/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Von dir moderierte Boards", "link_to_file": "Link zur Datei", "support_5chan": "5chan unterstützen", - "images": "Bilder" + "images": "Bilder", + "load_more": "Mehr laden" } diff --git a/public/translations/el/default.json b/public/translations/el/default.json index cc5a480a..ad304bbd 100644 --- a/public/translations/el/default.json +++ b/public/translations/el/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Πίνακες που διαχειρίζεστε", "link_to_file": "Σύνδεσμος προς αρχείο", "support_5chan": "Υποστηρίξτε το 5chan", - "images": "εικόνες" + "images": "εικόνες", + "load_more": "Φόρτωση περισσότερων" } diff --git a/public/translations/en/default.json b/public/translations/en/default.json index fe7fdd33..df5fa63a 100644 --- a/public/translations/en/default.json +++ b/public/translations/en/default.json @@ -107,6 +107,7 @@ "expand_all_settings": "Expand All Settings", "collapse_all_settings": "Collapse All Settings", "refresh": "Refresh", + "load_more": "Load More", "none": "none", "not_subscribed_to_any_board": "You have not subscribed to any board yet.", "this_post_was_removed": "this post was removed", diff --git a/public/translations/es/default.json b/public/translations/es/default.json index e053e8b0..d560334e 100644 --- a/public/translations/es/default.json +++ b/public/translations/es/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Tableros que moderas", "link_to_file": "Enlace al archivo", "support_5chan": "Apoyar 5chan", - "images": "imágenes" + "images": "imágenes", + "load_more": "Cargar más" } diff --git a/public/translations/fa/default.json b/public/translations/fa/default.json index 09d15f0a..152bda27 100644 --- a/public/translations/fa/default.json +++ b/public/translations/fa/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "تابلوهایی که مدیریت می‌کنید", "link_to_file": "لینک به فایل", "support_5chan": "از 5chan پشتیبانی کنید", - "images": "تصاویر" + "images": "تصاویر", + "load_more": "بارگذاری بیشتر" } diff --git a/public/translations/fi/default.json b/public/translations/fi/default.json index 263f633d..02da1f61 100644 --- a/public/translations/fi/default.json +++ b/public/translations/fi/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Laudat, joita moderoit", "link_to_file": "Linkki tiedostoon", "support_5chan": "Tue 5chan", - "images": "kuvat" + "images": "kuvat", + "load_more": "Lataa lisää" } diff --git a/public/translations/fil/default.json b/public/translations/fil/default.json index da419905..e0fa618e 100644 --- a/public/translations/fil/default.json +++ b/public/translations/fil/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Mga board na minomodera mo", "link_to_file": "Link sa File", "support_5chan": "Suportahan ang 5chan", - "images": "mga larawan" + "images": "mga larawan", + "load_more": "Mag-load ng higit pa" } diff --git a/public/translations/fr/default.json b/public/translations/fr/default.json index e2d1b3b8..c0a5bea0 100644 --- a/public/translations/fr/default.json +++ b/public/translations/fr/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Tableaux que vous modérez", "link_to_file": "Lien vers le fichier", "support_5chan": "Soutenir 5chan", - "images": "images" + "images": "images", + "load_more": "Charger plus" } diff --git a/public/translations/he/default.json b/public/translations/he/default.json index f05e17c7..13540c10 100644 --- a/public/translations/he/default.json +++ b/public/translations/he/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "לוחות שאתה מפקח עליהם", "link_to_file": "קישור לקובץ", "support_5chan": "תמוך ב-5chan", - "images": "תמונות" + "images": "תמונות", + "load_more": "טען עוד" } diff --git a/public/translations/hi/default.json b/public/translations/hi/default.json index 947f82a6..1eb6344e 100644 --- a/public/translations/hi/default.json +++ b/public/translations/hi/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "बोर्ड जिन्हें आप मॉडरेट करते हैं", "link_to_file": "फ़ाइल का लिंक", "support_5chan": "5chan का समर्थन करें", - "images": "छवियाँ" + "images": "छवियाँ", + "load_more": "और लोड करें" } diff --git a/public/translations/hu/default.json b/public/translations/hu/default.json index 698990fb..e3a30504 100644 --- a/public/translations/hu/default.json +++ b/public/translations/hu/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "A táblák, amelyeket moderálsz", "link_to_file": "Link a fájlhoz", "support_5chan": "5chan támogatása", - "images": "képek" + "images": "képek", + "load_more": "További betöltése" } diff --git a/public/translations/id/default.json b/public/translations/id/default.json index c60d6ad1..25e0e303 100644 --- a/public/translations/id/default.json +++ b/public/translations/id/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Papan yang Anda moderasi", "link_to_file": "Tautan ke File", "support_5chan": "Dukung 5chan", - "images": "gambar" + "images": "gambar", + "load_more": "Muat lebih banyak" } diff --git a/public/translations/it/default.json b/public/translations/it/default.json index 111877d5..932221ec 100644 --- a/public/translations/it/default.json +++ b/public/translations/it/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Board che moderi", "link_to_file": "Link al file", "support_5chan": "Supporta 5chan", - "images": "immagini" + "images": "immagini", + "load_more": "Carica altro" } diff --git a/public/translations/ja/default.json b/public/translations/ja/default.json index ef22c392..f814960b 100644 --- a/public/translations/ja/default.json +++ b/public/translations/ja/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "あなたがモデレートする板", "link_to_file": "ファイルへのリンク", "support_5chan": "5chanをサポート", - "images": "画像" + "images": "画像", + "load_more": "さらに読み込む" } diff --git a/public/translations/ko/default.json b/public/translations/ko/default.json index bb6fb054..fe21c5ec 100644 --- a/public/translations/ko/default.json +++ b/public/translations/ko/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "당신이 관리하는 게시판", "link_to_file": "파일 링크", "support_5chan": "5chan 지원", - "images": "이미지" + "images": "이미지", + "load_more": "더 보기" } diff --git a/public/translations/mr/default.json b/public/translations/mr/default.json index 377974ea..fd39694e 100644 --- a/public/translations/mr/default.json +++ b/public/translations/mr/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "तुम्ही मॉडरेट करता ते बोर्ड", "link_to_file": "फाइलची लिंक", "support_5chan": "5chan चे समर्थन करा", - "images": "प्रतिमा" + "images": "प्रतिमा", + "load_more": "अधिक लोड करा" } diff --git a/public/translations/nl/default.json b/public/translations/nl/default.json index a35d3edd..11a91597 100644 --- a/public/translations/nl/default.json +++ b/public/translations/nl/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Boards die je beheert", "link_to_file": "Link naar bestand", "support_5chan": "Steun 5chan", - "images": "afbeeldingen" + "images": "afbeeldingen", + "load_more": "Meer laden" } diff --git a/public/translations/no/default.json b/public/translations/no/default.json index f8b24230..d5fe9e88 100644 --- a/public/translations/no/default.json +++ b/public/translations/no/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Boards du modererer", "link_to_file": "Lenke til fil", "support_5chan": "Støtt 5chan", - "images": "bilder" + "images": "bilder", + "load_more": "Last inn mer" } diff --git a/public/translations/pl/default.json b/public/translations/pl/default.json index eaae1408..6dec70a7 100644 --- a/public/translations/pl/default.json +++ b/public/translations/pl/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Tablice, które moderujesz", "link_to_file": "Link do pliku", "support_5chan": "Wspieraj 5chan", - "images": "obrazy" + "images": "obrazy", + "load_more": "Załaduj więcej" } diff --git a/public/translations/pt/default.json b/public/translations/pt/default.json index 40ceee7f..a87b6978 100644 --- a/public/translations/pt/default.json +++ b/public/translations/pt/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Quadros que você modera", "link_to_file": "Link para o arquivo", "support_5chan": "Apoiar 5chan", - "images": "imagens" + "images": "imagens", + "load_more": "Carregar mais" } diff --git a/public/translations/ro/default.json b/public/translations/ro/default.json index 541833a6..84c32cc4 100644 --- a/public/translations/ro/default.json +++ b/public/translations/ro/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Forumuri pe care le moderezi", "link_to_file": "Link către fișier", "support_5chan": "Sprijiniți 5chan", - "images": "imagini" + "images": "imagini", + "load_more": "Încarcă mai mult" } diff --git a/public/translations/ru/default.json b/public/translations/ru/default.json index fd5b3fa2..df1bec3a 100644 --- a/public/translations/ru/default.json +++ b/public/translations/ru/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Доски, которые вы модерируете", "link_to_file": "Ссылка на файл", "support_5chan": "Поддержать 5chan", - "images": "изображения" + "images": "изображения", + "load_more": "Загрузить ещё" } diff --git a/public/translations/sq/default.json b/public/translations/sq/default.json index e59464ee..f1bbe3f0 100644 --- a/public/translations/sq/default.json +++ b/public/translations/sq/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Bordet që moderoni", "link_to_file": "Lidhje me skedarin", "support_5chan": "Mbështetni 5chan", - "images": "imazhe" + "images": "imazhe", + "load_more": "Ngarko më shumë" } diff --git a/public/translations/sv/default.json b/public/translations/sv/default.json index b273e165..6cd8f83e 100644 --- a/public/translations/sv/default.json +++ b/public/translations/sv/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Boards du modererar", "link_to_file": "Länk till fil", "support_5chan": "Stöd 5chan", - "images": "bilder" + "images": "bilder", + "load_more": "Ladda mer" } diff --git a/public/translations/te/default.json b/public/translations/te/default.json index 0ded48a4..f2c51f17 100644 --- a/public/translations/te/default.json +++ b/public/translations/te/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "మీరు మోడరేట్ చేసే బోర్డ్లు", "link_to_file": "ఫైల్‌కు లింక్", "support_5chan": "5chanకు మద్దతు ఇవ్వండి", - "images": "చిత్రాలు" + "images": "చిత్రాలు", + "load_more": "మరింత లోడ్ చేయండి" } diff --git a/public/translations/th/default.json b/public/translations/th/default.json index 0c8710f9..e1da89fe 100644 --- a/public/translations/th/default.json +++ b/public/translations/th/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "บอร์ดที่คุณดูแล", "link_to_file": "ลิงก์ไปยังไฟล์", "support_5chan": "สนับสนุน 5chan", - "images": "รูปภาพ" + "images": "รูปภาพ", + "load_more": "โหลดเพิ่มเติม" } diff --git a/public/translations/tr/default.json b/public/translations/tr/default.json index 2fe9b8e3..f252c7c2 100644 --- a/public/translations/tr/default.json +++ b/public/translations/tr/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Yönettiğiniz panolar", "link_to_file": "Dosyaya bağlantı", "support_5chan": "5chan'ı Destekle", - "images": "görseller" + "images": "görseller", + "load_more": "Daha fazla yükle" } diff --git a/public/translations/uk/default.json b/public/translations/uk/default.json index 534b50f7..4251b3f5 100644 --- a/public/translations/uk/default.json +++ b/public/translations/uk/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Дошки, які ви модеруєте", "link_to_file": "Посилання на файл", "support_5chan": "Підтримати 5chan", - "images": "зображення" + "images": "зображення", + "load_more": "Завантажити ще" } diff --git a/public/translations/ur/default.json b/public/translations/ur/default.json index 7339230e..bf8fe960 100644 --- a/public/translations/ur/default.json +++ b/public/translations/ur/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "بورڈز جنہیں آپ ماڈریٹ کرتے ہیں", "link_to_file": "فائل کا لنک", "support_5chan": "5chan کی حمایت کریں", - "images": "تصاویر" + "images": "تصاویر", + "load_more": "مزید لوڈ کریں" } diff --git a/public/translations/vi/default.json b/public/translations/vi/default.json index 7a349e19..c8327b13 100644 --- a/public/translations/vi/default.json +++ b/public/translations/vi/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "Các bảng bạn điều hành", "link_to_file": "Liên kết đến tệp", "support_5chan": "Hỗ trợ 5chan", - "images": "hình ảnh" + "images": "hình ảnh", + "load_more": "Tải thêm" } diff --git a/public/translations/zh/default.json b/public/translations/zh/default.json index 3f1d156f..c167878b 100644 --- a/public/translations/zh/default.json +++ b/public/translations/zh/default.json @@ -296,5 +296,6 @@ "boards_you_moderate_nav": "您管理的板块", "link_to_file": "链接到文件", "support_5chan": "支持 5chan", - "images": "图片" + "images": "图片", + "load_more": "加载更多" } diff --git a/src/components/footer/footer.module.css b/src/components/footer/footer.module.css index 2a9395b8..9c73fe95 100644 --- a/src/components/footer/footer.module.css +++ b/src/components/footer/footer.module.css @@ -152,3 +152,60 @@ display: none; } } + +/* Mobile page footer — hidden on desktop, shown on mobile */ +.mobileFooter { + display: none; +} + +@media (max-width: 640px) { + .mobileFooter { + display: block; + text-align: center; + padding: 0 0 16px; + } +} + +.mobileFooterButtons { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: 6px; + padding: 8px 8px; +} + +.mobileFooterPagination { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: 10px; + padding: 4px 8px; + font-size: 16px; + color: var(--boardsbar-desktop-link-text-color); +} + +.mobileFooterPagination a { + text-decoration: none; + color: var(--boardsbar-desktop-link-text-color); +} + +.mobileFooterPaginationCurrent { + font-weight: bold; +} + +.mobileFooterLinks { + padding: 12px 8px 4px; + font-size: 10px; + text-align: center; +} + +.mobileFooterLinks a { + color: var(--boardsbar-desktop-link-text-color); + text-decoration: underline; +} + +.mobileFooterLinks a:hover { + color: var(--boardsbar-desktop-link-text-color-hover); +} diff --git a/src/components/footer/footer.tsx b/src/components/footer/footer.tsx index c47fd71d..59f15790 100644 --- a/src/components/footer/footer.tsx +++ b/src/components/footer/footer.tsx @@ -149,3 +149,19 @@ export const ThreadFooterFirstRow = ({ postCid, threadNumber, subplebbitAddress, ); }; + +/* ----------------------------------------------------------------------------- + * PageFooterMobile + * Mobile-only page footer with content slot and footer links. + * -------------------------------------------------------------------------- */ + +export const PageFooterMobile = ({ children }: { children: React.ReactNode }) => ( + +); diff --git a/src/components/footer/index.ts b/src/components/footer/index.ts index 6051ca79..d39758eb 100644 --- a/src/components/footer/index.ts +++ b/src/components/footer/index.ts @@ -1,2 +1,2 @@ -export { PageFooterDesktop, CatalogFooterFirstRow, ThreadFooterFirstRow, ThreadFooterStyleRow } from './footer'; +export { PageFooterDesktop, PageFooterMobile, CatalogFooterFirstRow, ThreadFooterFirstRow, ThreadFooterStyleRow } from './footer'; export type { PageFooterDesktopProps, CatalogFooterFirstRowProps, ThreadFooterFirstRowProps } from './footer'; diff --git a/src/views/board/board.tsx b/src/views/board/board.tsx index 6d2d964f..3d3c809c 100644 --- a/src/views/board/board.tsx +++ b/src/views/board/board.tsx @@ -1,10 +1,11 @@ import { useCallback, useEffect, useMemo, useRef } from 'react'; -import { useLocation, useNavigate, useNavigationType, useParams } from 'react-router-dom'; +import { Link, useLocation, useNavigate, useNavigationType, useParams } from 'react-router-dom'; import { Comment, useAccount, useAccountComments, useAccountSubplebbits, useFeed, useSubplebbit } from '@bitsocialhq/pkc-react-hooks'; import { useSubplebbitField } from '../../hooks/use-stable-subplebbit'; import { Virtuoso, VirtuosoHandle, StateSnapshot } from 'react-virtuoso'; import { useTranslation } from 'react-i18next'; import styles from './board.module.css'; +import mobileFooterStyles from '../../components/footer/footer.module.css'; import { shouldShowSnow } from '../../lib/snow'; import { useDirectoryAddresses, useDirectories, useDirectoryByAddress } from '../../hooks/use-directories'; import { useFilteredDirectoryAddresses } from '../../hooks/use-filtered-directory-addresses'; @@ -18,7 +19,7 @@ import { getPageFromFeedPath, getSubplebbitAddress, isDirectoryBoard, normalizeM import ErrorDisplay from '../../components/error-display/error-display'; import LoadingEllipsis from '../../components/loading-ellipsis'; import BoardPagination from '../../components/board-pagination'; -import { PageFooterDesktop } from '../../components/footer'; +import { PageFooterDesktop, PageFooterMobile } from '../../components/footer'; import { Post } from '../post'; const lastVirtuosoStates: { [key: string]: StateSnapshot } = {}; @@ -131,6 +132,7 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, i }, [isInAllView, isInSubscriptionsView, isInModView, subplebbitAddress, directoryAddresses, filteredDirectoryAddresses, subscriptions, accountSubplebbitAddresses]); const enableInfiniteScroll = useFeedViewSettingsStore((state) => state.enableInfiniteScroll); + const setEnableInfiniteScroll = useFeedViewSettingsStore((state) => state.setEnableInfiniteScroll); const isForcedInfiniteScroll = isInAllView || isInSubscriptionsView || isInModView; const effectiveInfiniteScroll = enableInfiniteScroll || isForcedInfiniteScroll; const community = useDirectoryByAddress(isInAllView || isInSubscriptionsView || isInModView ? undefined : subplebbitAddress); @@ -267,6 +269,56 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, i } /> + +
+ {!isForcedInfiniteScroll && ( +
+ +
+ )} +
+ + +
+
+ {!isForcedInfiniteScroll && !effectiveInfiniteScroll && ( + <> +
+ {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( + + [ + + {page} + + ] + + ))} +
+
+ + {t('catalog')} + +
+ + )} + {hasMore && !effectiveInfiniteScroll && ( +
+ +
+ )} +
+
), }), @@ -285,6 +337,9 @@ const Board = ({ feedCacheKey, viewType, boardIdentifier: boardIdentifierProp, i paginationBasePath, currentPage, totalPages, + setEnableInfiniteScroll, + reset, + t, ], );