mirror of
https://github.com/plebbit/seedit.git
synced 2026-07-31 18:06:23 -04:00
refactor(nsfw): replace per-tag NSFW filters with single directory nsfw boolean
Remove the topbar Tags dropdown and the four per-tag hide settings (adult/gore/anti/vulgar) inherited from the retired json lists. NSFW status now comes from a per-directory nsfw boolean in the seedit directories metadata, controlled by a single 'Hide communities tagged as NSFW/18+' setting (persisted state migrates automatically).
This commit is contained in:
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "إخفاء المجتمعات الافتراضية من شريط الأدوات العلوي",
|
||||
"media": "وسائط",
|
||||
"hide_communities_tagged_as_nsfw": "إخفاء المجتمعات المعلمة كـ NSFW/18+",
|
||||
"tagged_as_adult": "تم وسمها كـ \"بالغ\"",
|
||||
"tagged_as_gore": "موسوم كـ \"جور\"",
|
||||
"tagged_as_anti": "تم وضع علامة كـ \"مناهض\"",
|
||||
"tagged_as_vulgar": "تم وسمه كـ \"بذيء\"",
|
||||
"drop_here_or": "إسقاط هنا أو",
|
||||
"upload_button_warning": "التحميل التلقائي محظور بواسطة سياسة CORS في متصفحك، ولكنه متاح في تطبيق Seedit لنظام Android وتطبيقات سطح المكتب (Win/Mac/Linux).\n\nاذهب إلى صفحة روابط التنزيل على GitHub؟",
|
||||
"create_community_warning": "إنشاء مجتمع يتطلب تشغيل عقدة كاملة. يقوم تطبيق Seedit لسطح المكتب (Win/Mac/Linux) بتشغيل عقدة كاملة تلقائيًا.\n\nاذهب إلى صفحة روابط التنزيل على GitHub؟",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "تشغيل الفيديوهات تلقائيًا في صفحة التعليقات",
|
||||
"mute_videos_by_default": "كتم الفيديوهات افتراضياً",
|
||||
"expand_media_previews_based_on_community_media_preferences": "قم بتوسيع معاينات الوسائط بناءً على تفضيلات الوسائط في تلك المجتمع",
|
||||
"show_all_nsfw": "عرض كل المحتوى NSFW",
|
||||
"hide_all_nsfw": "إخفاء كل المحتوى غير الآمن",
|
||||
"tags": "الوسوم",
|
||||
"moderator_of": "مشرف على",
|
||||
"not_subscriber_nor_moderator": "أنت لست مشتركًا ولا مشرفًا في أي مجتمع.",
|
||||
"more_posts_last_year": "{{count}} منشورات في {{currentTimeFilterName}}: <1>عرض المزيد من المنشورات من العام الماضي</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "টপবার থেকে ডিফল্ট কমিউনিটিগুলি লুকান",
|
||||
"media": "মিডিয়া",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ হিসেবে ট্যাগকৃত কমিউনিটিগুলি লুকান",
|
||||
"tagged_as_adult": "\"এডাল্ট\" হিসেবে ট্যাগ করা হয়েছে",
|
||||
"tagged_as_gore": "\"গোর\" হিসেবে চিহ্নিত",
|
||||
"tagged_as_anti": "\"এন্টি\" হিসেবে চিহ্নিত",
|
||||
"tagged_as_vulgar": "\"বদতুমিজ\" হিসেবে ট্যাগ করা হয়েছে",
|
||||
"drop_here_or": "এখানে ফেলুন অথবা",
|
||||
"upload_button_warning": "অটো-আপলোড আপনার ব্রাউজারের CORS নীতি দ্বারা ব্লক করা হয়েছে, তবে এটি Seedit অ্যান্ড্রয়েড অ্যাপ এবং ডেস্কটপ অ্যাপ (Win/Mac/Linux)-এ উপলব্ধ।\n\nGitHub এ ডাউনলোড লিঙ্ক পৃষ্ঠায় যান?",
|
||||
"create_community_warning": "একটি কমিউনিটি তৈরি করতে একটি ফুল নোড চালানো প্রয়োজন। Seedit ডেস্কটপ অ্যাপ (Win/Mac/Linux) স্বয়ংক্রিয়ভাবে একটি ফুল নোড চালায়।\n\nGitHub এ ডাউনলোড লিঙ্ক পৃষ্ঠায় যান?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "মন্তব্য পৃষ্ঠায় ভিডিও স্বয়ংক্রিয়ভাবে চালান",
|
||||
"mute_videos_by_default": "ডিফল্টভাবে ভিডিও মিউট করুন",
|
||||
"expand_media_previews_based_on_community_media_preferences": "সেই কমিউনিটির মিডিয়া পছন্দের উপর ভিত্তি করে মিডিয়া প্রিভিউগুলি সম্প্রসারণ করুন",
|
||||
"show_all_nsfw": "সব NSFW দেখান",
|
||||
"hide_all_nsfw": "সব NSFW লুকান",
|
||||
"tags": "ট্যাগসমূহ",
|
||||
"moderator_of": "মডারেটর",
|
||||
"not_subscriber_nor_moderator": "আপনি কোনও কমিউনিটির সদস্য বা মডারেটর নন।",
|
||||
"more_posts_last_year": "{{count}} পোস্ট {{currentTimeFilterName}} এ: <1>গত বছরের আরও পোস্ট দেখান</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Skrýt výchozí komunity z horního panelu",
|
||||
"media": "mediální",
|
||||
"hide_communities_tagged_as_nsfw": "Skrýt komunity označené jako NSFW/18+",
|
||||
"tagged_as_adult": "označeno jako \"dospělý\"",
|
||||
"tagged_as_gore": "označeno jako \"gore\"",
|
||||
"tagged_as_anti": "označeno jako \"anti\"",
|
||||
"tagged_as_vulgar": "označeno jako \"vulgární\"",
|
||||
"drop_here_or": "Přetáhněte sem nebo",
|
||||
"upload_button_warning": "Automatické nahrávání je blokováno politikou CORS vašeho prohlížeče, ale je k dispozici v aplikaci Seedit pro Android a desktopovou aplikaci (Win/Mac/Linux).\n\nPřejděte na stránku odkazů ke stažení na GitHubu?",
|
||||
"create_community_warning": "Vytvoření komunity vyžaduje spuštění plného uzlu. Aplikace Seedit pro desktop (Win/Mac/Linux) automaticky spouští plný uzel.\n\nPřejděte na stránku odkazů ke stažení na GitHubu?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Automatické přehrávání videí na stránce komentářů",
|
||||
"mute_videos_by_default": "Zvuk videí vypnutý ve výchozím nastavení",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Rozbalte náhledy médií na základě preferencí médií dané komunity",
|
||||
"show_all_nsfw": "Zobrazit vše NSFW",
|
||||
"hide_all_nsfw": "Skrýt vše NSFW",
|
||||
"tags": "Štítky",
|
||||
"moderator_of": "moderátor",
|
||||
"not_subscriber_nor_moderator": "Nejste odběratelem ani moderátorem žádné komunity.",
|
||||
"more_posts_last_year": "{{count}} příspěvků v {{currentTimeFilterName}}: <1>zobrazit více příspěvků z minulého roku</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Skjul standardfællesskaber fra topbaren",
|
||||
"media": "medier",
|
||||
"hide_communities_tagged_as_nsfw": "Skjul fællesskaber mærket som NSFW/18+",
|
||||
"tagged_as_adult": "mærket som \"voksen\"",
|
||||
"tagged_as_gore": "mærket som \"gore\"",
|
||||
"tagged_as_anti": "mærket som \"anti\"",
|
||||
"tagged_as_vulgar": "mærket som \"vulgar\"",
|
||||
"drop_here_or": "Drop her eller",
|
||||
"upload_button_warning": "Auto-uploading er blokeret af din browsers CORS-politik, men det er tilgængeligt på Seedit Android-appen og desktopappen (Win/Mac/Linux).\n\nGå til downloadlinks-siden på GitHub?",
|
||||
"create_community_warning": "Oprettelse af et fællesskab kræver, at du kører en fuld node. Seedit desktop-appen (Win/Mac/Linux) kører automatisk en fuld node.\n\nGå til downloadlinks-siden på GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Autoplay videoer på kommentarsiden",
|
||||
"mute_videos_by_default": "Slå lyden fra videoer som standard",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Udvid mediepræsentationer baseret på det fællesskabs mediepræferencer",
|
||||
"show_all_nsfw": "Vis alle NSFW",
|
||||
"hide_all_nsfw": "Skjul alle NSFW",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "moderator af",
|
||||
"not_subscriber_nor_moderator": "Du er hverken abonnent eller moderator i nogen fællesskab.",
|
||||
"more_posts_last_year": "{{count}} indlæg sidste {{currentTimeFilterName}}: <1>vis flere indlæg fra sidste år</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Standardgemeinschaften aus der oberen Leiste ausblenden",
|
||||
"media": "Medien",
|
||||
"hide_communities_tagged_as_nsfw": "Verstecke Communities, die als NSFW/18+ gekennzeichnet sind",
|
||||
"tagged_as_adult": "als \"Erwachsen\" markiert",
|
||||
"tagged_as_gore": "gekennzeichnet als \"gore\"",
|
||||
"tagged_as_anti": "als \"anti\" markiert",
|
||||
"tagged_as_vulgar": "als \"vulgär\" markiert",
|
||||
"drop_here_or": "Hier ablegen oder",
|
||||
"upload_button_warning": "Auto-Upload wird durch die CORS-Richtlinie Ihres Browsers blockiert, ist jedoch in der Seedit Android-App und Desktop-App (Win/Mac/Linux) verfügbar.\n\nGehen Sie zur Download-Link-Seite auf GitHub?",
|
||||
"create_community_warning": "Das Erstellen einer Community erfordert das Ausführen eines vollständigen Knotens. Die Seedit-Desktop-App (Win/Mac/Linux) führt automatisch einen vollständigen Knoten aus.\n\nGehen Sie zur Download-Link-Seite auf GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Videos auf der Kommentarseite automatisch abspielen",
|
||||
"mute_videos_by_default": "Videos standardmäßig stummschalten",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Erweitern Sie Medienvorschauen basierend auf den Medienpräferenzen dieser Community",
|
||||
"show_all_nsfw": "Alle NSFW anzeigen",
|
||||
"hide_all_nsfw": "Alle NSFW ausblenden",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "Moderator von",
|
||||
"not_subscriber_nor_moderator": "Sie sind weder Abonnent noch Moderator einer Community.",
|
||||
"more_posts_last_year": "{{count}} Beiträge im letzten {{currentTimeFilterName}}: <1>zeige mehr Beiträge vom letzten Jahr</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Απόκρυψη προεπιλεγμένων κοινοτήτων από την πάνω μπάρα",
|
||||
"media": "μέσα",
|
||||
"hide_communities_tagged_as_nsfw": "Απόκρυψη κοινοτήτων με ετικέτα NSFW/18+",
|
||||
"tagged_as_adult": "σημειώθηκε ως \"ενήλικας\"",
|
||||
"tagged_as_gore": "επισημασμένο ως \"gore\"",
|
||||
"tagged_as_anti": "επισημασμένο ως \"αντι\"",
|
||||
"tagged_as_vulgar": "επισημάνθηκε ως \"χονδροειδές\"",
|
||||
"drop_here_or": "Μεταφέρετε εδώ ή",
|
||||
"upload_button_warning": "Η αυτόματη αποστολή είναι αποκλεισμένη από την πολιτική CORS του προγράμματος περιήγησής σας, αλλά είναι διαθέσιμη στην εφαρμογή Seedit Android και στην επιτραπέζια εφαρμογή (Win/Mac/Linux).\n\nΜεταβείτε στη σελίδα συνδέσμων λήψης στο GitHub;",
|
||||
"create_community_warning": "Η δημιουργία μιας κοινότητας απαιτεί τη λειτουργία ενός πλήρους κόμβου. Η εφαρμογή Seedit για επιτραπέζιους υπολογιστές (Win/Mac/Linux) εκτελεί αυτόματα έναν πλήρη κόμβο.\n\nΜεταβείτε στη σελίδα συνδέσμων λήψης στο GitHub;",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Αυτόματη αναπαραγωγή βίντεο στη σελίδα σχολίων",
|
||||
"mute_videos_by_default": "Σίγαση βίντεο από προεπιλογή",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Επεκτείνετε τις προεπισκοπήσεις μέσων βάσει των προτιμήσεων μέσων της κοινότητας",
|
||||
"show_all_nsfw": "Εμφάνιση όλων NSFW",
|
||||
"hide_all_nsfw": "Απόκρυψη όλων των NSFW",
|
||||
"tags": "Ετικέτες",
|
||||
"moderator_of": "διαχειριστής του",
|
||||
"not_subscriber_nor_moderator": "Δεν είστε συνδρομητής ούτε διαχειριστής σε καμία κοινότητα.",
|
||||
"more_posts_last_year": "{{count}} αναρτήσεις στο {{currentTimeFilterName}}: <1>δείτε περισσότερες αναρτήσεις από το περασμένο έτος</1>",
|
||||
|
||||
@@ -358,10 +358,6 @@
|
||||
"hide_default_communities_from_topbar": "Hide default communities from topbar",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Hide communities tagged as NSFW/18+",
|
||||
"tagged_as_adult": "tagged as \"adult\"",
|
||||
"tagged_as_gore": "tagged as \"gore\"",
|
||||
"tagged_as_anti": "tagged as \"anti\"",
|
||||
"tagged_as_vulgar": "tagged as \"vulgar\"",
|
||||
"drop_here_or": "Drop here or",
|
||||
"upload_button_warning": "Auto-uploading is blocked by your browser's CORS policy, but it is available on the Seedit Android app and desktop app (Win/Mac/Linux).\n\nGo to the download links page on GitHub?",
|
||||
"create_community_warning": "Creating a community requires running a full node. The Seedit desktop app (Win/Mac/Linux) runs a full node automatically.\n\nGo to the download links page on GitHub?",
|
||||
@@ -384,9 +380,6 @@
|
||||
"autoplay_videos_on_comments_page": "Autoplay videos on the comments page",
|
||||
"mute_videos_by_default": "Mute videos by default",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Expand media previews based on that community's media preferences",
|
||||
"show_all_nsfw": "show all nsfw",
|
||||
"hide_all_nsfw": "hide all nsfw",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "moderator of",
|
||||
"not_subscriber_nor_moderator": "You are not a subscriber nor a moderator of any community.",
|
||||
"more_posts_last_year": "{{count}} posts last {{currentTimeFilterName}}: <1>show more posts from last year</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Ocultar comunidades predeterminadas de la barra superior",
|
||||
"media": "medios",
|
||||
"hide_communities_tagged_as_nsfw": "Ocultar comunidades etiquetadas como NSFW/18+",
|
||||
"tagged_as_adult": "etiquetado como \"adulto\"",
|
||||
"tagged_as_gore": "etiquetado como \"gore\"",
|
||||
"tagged_as_anti": "etiquetado como \"anti\"",
|
||||
"tagged_as_vulgar": "etiquetado como \"vulgar\"",
|
||||
"drop_here_or": "Suelta aquí o",
|
||||
"upload_button_warning": "La carga automática está bloqueada por la política CORS de su navegador, pero está disponible en la aplicación Seedit para Android y en la aplicación de escritorio (Win/Mac/Linux).\n\n¿Vaya a la página de enlaces de descarga en GitHub?",
|
||||
"create_community_warning": "Crear una comunidad requiere ejecutar un nodo completo. La aplicación de escritorio Seedit (Win/Mac/Linux) ejecuta automáticamente un nodo completo.\n\n¿Vaya a la página de enlaces de descarga en GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Reproducción automática de videos en la página de comentarios",
|
||||
"mute_videos_by_default": "Silenciar videos por defecto",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Expande las vistas previas de medios según las preferencias de medios de esa comunidad",
|
||||
"show_all_nsfw": "mostrar todo NSFW",
|
||||
"hide_all_nsfw": "ocultar todo NSFW",
|
||||
"tags": "Etiquetas",
|
||||
"moderator_of": "moderador de",
|
||||
"not_subscriber_nor_moderator": "No eres suscriptor ni moderador de ninguna comunidad.",
|
||||
"more_posts_last_year": "{{count}} publicaciones en {{currentTimeFilterName}}: <1>mostrar más publicaciones del año pasado</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "پنهان کردن جوامع پیشفرض از نوار بالای صفحه",
|
||||
"media": "رسانهها",
|
||||
"hide_communities_tagged_as_nsfw": "پنهان کردن جوامع برچسب خورده به عنوان NSFW/18+",
|
||||
"tagged_as_adult": "برچسب زده شده به عنوان \"بالغ\"",
|
||||
"tagged_as_gore": "برچسبگذاری شده به عنوان \"گور\"",
|
||||
"tagged_as_anti": "برچسب خورده به عنوان \"مخالف\"",
|
||||
"tagged_as_vulgar": "برچسبگذاری شده به عنوان \"زشت\"",
|
||||
"drop_here_or": "اینجا رها کنید یا",
|
||||
"upload_button_warning": "بارگذاری خودکار توسط سیاست CORS مرورگر شما مسدود شده است، اما در اپلیکیشن Seedit برای Android و اپلیکیشن دسکتاپ (Win/Mac/Linux) در دسترس است.\n\nبه صفحه لینکهای دانلود در GitHub بروید؟",
|
||||
"create_community_warning": "ایجاد یک جامعه نیاز به اجرای یک گره کامل دارد. اپلیکیشن دسکتاپ Seedit (Win/Mac/Linux) بهطور خودکار یک گره کامل اجرا میکند.\n\nبه صفحه لینکهای دانلود در GitHub بروید؟",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "پخش خودکار ویدیوها در صفحه نظرات",
|
||||
"mute_videos_by_default": "بیصدا کردن ویدیوها به طور پیشفرض",
|
||||
"expand_media_previews_based_on_community_media_preferences": "پیشنمایشهای رسانهای را بر اساس ترجیحات رسانهای آن جامعه گسترش دهید",
|
||||
"show_all_nsfw": "نمایش همه NSFW",
|
||||
"hide_all_nsfw": "مخفی کردن همه محتوای NSFW",
|
||||
"tags": "برچسبها",
|
||||
"moderator_of": "مدیر",
|
||||
"not_subscriber_nor_moderator": "شما نه عضو مشترک هستید و نه مدیر هیچ جامعهای.",
|
||||
"more_posts_last_year": "{{count}} پست در {{currentTimeFilterName}}: <1>نمایش پستهای بیشتر از سال گذشته</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Piilota oletusyhteisöt yläpalkista",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Piilota yhteisöt, jotka on merkitty NSFW/18+",
|
||||
"tagged_as_adult": "merkitty \"aikuiseksi\"",
|
||||
"tagged_as_gore": "merkitty \"gore\" -tunnisteella",
|
||||
"tagged_as_anti": "merkitty \"anti\"-tunnisteeksi",
|
||||
"tagged_as_vulgar": "merkitty \"vulgaariseksi\"",
|
||||
"drop_here_or": "Pudota tänne tai",
|
||||
"upload_button_warning": "Automaattinen lataus on estetty selaimesi CORS-politiikalla, mutta se on saatavilla Seedit Android -sovelluksessa ja työpöytäsovelluksessa (Win/Mac/Linux).\n\nMene GitHubin latauslinkkisivulle?",
|
||||
"create_community_warning": "Yhteisön luominen vaatii täyden solmun ajamisen. Seeditin työpöytäsovellus (Win/Mac/Linux) ajaa automaattisesti täyden solmun.\n\nMene GitHubin latauslinkkisivulle?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Toista videot automaattisesti kommenttisivulla",
|
||||
"mute_videos_by_default": "Mykistä videot oletuksena",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Laajenna mediakatsauksia kyseisen yhteisön mediatoiveiden perusteella",
|
||||
"show_all_nsfw": "näytä kaikki NSFW",
|
||||
"hide_all_nsfw": "piilota kaikki NSFW",
|
||||
"tags": "Tagit",
|
||||
"moderator_of": "moderaattori",
|
||||
"not_subscriber_nor_moderator": "Et ole tilaaja etkä moderaattori missään yhteisössä.",
|
||||
"more_posts_last_year": "{{count}} julkaisua viime {{currentTimeFilterName}}: <1>näytä lisää julkaisuja viime vuodelta</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Itago ang mga default na komunidad mula sa topbar",
|
||||
"media": "midya",
|
||||
"hide_communities_tagged_as_nsfw": "Itago ang mga komunidad na may label na NSFW/18+",
|
||||
"tagged_as_adult": "tinag na bilang \"adulto\"",
|
||||
"tagged_as_gore": "tinag na \"gore\"",
|
||||
"tagged_as_anti": "minarkahan bilang \"anti\"",
|
||||
"tagged_as_vulgar": "tinag na \"vulgar\"",
|
||||
"drop_here_or": "I-drag dito o",
|
||||
"upload_button_warning": "Ang awtomatikong pag-upload ay naharang ng CORS policy ng iyong browser, ngunit ito ay magagamit sa Seedit Android app at desktop app (Win/Mac/Linux).\n\nPumunta sa page ng download links sa GitHub?",
|
||||
"create_community_warning": "Ang paggawa ng komunidad ay nangangailangan ng pagpapatakbo ng isang buong node. Ang Seedit desktop app (Win/Mac/Linux) ay awtomatikong nagpapatakbo ng isang buong node.\n\nPumunta sa page ng download links sa GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Awtomatikong pag-play ng mga video sa pahina ng mga komento",
|
||||
"mute_videos_by_default": "I-mute ang mga video bilang default",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Palawakin ang mga preview ng media batay sa mga kagustuhan ng media ng komunidad na iyon",
|
||||
"show_all_nsfw": "ipakita lahat ng NSFW",
|
||||
"hide_all_nsfw": "Itago lahat ng NSFW",
|
||||
"tags": "Mga tag",
|
||||
"moderator_of": "moderator ng",
|
||||
"not_subscriber_nor_moderator": "Hindi ka subscriber ni moderator ng anumang komunidad.",
|
||||
"more_posts_last_year": "{{count}} post sa huling {{currentTimeFilterName}}: <1>ipakita ang mas maraming post mula sa nakaraang taon</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Masquer les communautés par défaut de la barre supérieure",
|
||||
"media": "média",
|
||||
"hide_communities_tagged_as_nsfw": "Cacher les communautés étiquetées comme NSFW/18+",
|
||||
"tagged_as_adult": "étiqueté comme \"adulte\"",
|
||||
"tagged_as_gore": "étiqueté comme \"gore\"",
|
||||
"tagged_as_anti": "étiqueté comme \"anti\"",
|
||||
"tagged_as_vulgar": "étiqueté comme \"vulgaire\"",
|
||||
"drop_here_or": "Déposez ici ou",
|
||||
"upload_button_warning": "Le téléchargement automatique est bloqué par la politique CORS de votre navigateur, mais il est disponible sur l'application Seedit Android et l'application de bureau (Win/Mac/Linux).\n\nAllez à la page des liens de téléchargement sur GitHub?",
|
||||
"create_community_warning": "Créer une communauté nécessite l'exécution d'un nœud complet. L'application Seedit pour bureau (Win/Mac/Linux) exécute automatiquement un nœud complet.\n\nAllez à la page des liens de téléchargement sur GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Lecture automatique des vidéos sur la page des commentaires",
|
||||
"mute_videos_by_default": "Mettre les vidéos en sourdine par défaut",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Développez les aperçus des médias en fonction des préférences médias de cette communauté",
|
||||
"show_all_nsfw": "afficher tout NSFW",
|
||||
"hide_all_nsfw": "masquer tout NSFW",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "modérateur de",
|
||||
"not_subscriber_nor_moderator": "Vous n'êtes ni abonné ni modérateur d'aucune communauté.",
|
||||
"more_posts_last_year": "{{count}} publications lors du dernier {{currentTimeFilterName}} : <1>afficher plus de publications de l'année dernière</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "הסתר קהילות ברירת מחדל מהסרגל העליון",
|
||||
"media": "מדיה",
|
||||
"hide_communities_tagged_as_nsfw": "הסתר קהילות שסומנו כ-NSFW/18+",
|
||||
"tagged_as_adult": "סווג כ\"מותאם לבוגרים\"",
|
||||
"tagged_as_gore": "מסומן כ-\"גורה\"",
|
||||
"tagged_as_anti": "מתויג כ\"נגד\"",
|
||||
"tagged_as_vulgar": "סומן כ-\"גס\"",
|
||||
"drop_here_or": "הנח כאן או",
|
||||
"upload_button_warning": "העלאה אוטומטית חסומה על ידי מדיניות ה-CORS של הדפדפן שלך, אך היא זמינה באפליקציית Seedit לאנדרואיד ובאפליקציית הדסקטופ (Win/Mac/Linux).\n\nעבור לדף קישורי ההורדה ב-GitHub?",
|
||||
"create_community_warning": "יצירת קהילה דורשת הפעלת צומת מלא. אפליקציית שולחן העבודה של Seedit (Win/Mac/Linux) מפעילה צומת מלא באופן אוטומטי.\n\nעבור לדף קישורי ההורדה ב-GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "השמעת וידאו אוטומטית בדף ההערות",
|
||||
"mute_videos_by_default": "כיבוי קול לסרטונים כבררת מחדל",
|
||||
"expand_media_previews_based_on_community_media_preferences": "הרחב תצוגות מדיה בהתאם להעדפות המדיה של הקהילה",
|
||||
"show_all_nsfw": "הצג הכל NSFW",
|
||||
"hide_all_nsfw": "הסתר את כל התוכן הלא בטוח",
|
||||
"tags": "תגיות",
|
||||
"moderator_of": "מנהל של",
|
||||
"not_subscriber_nor_moderator": "אתה לא מנוי ולא מפקח על שום קהילה.",
|
||||
"more_posts_last_year": "{{count}} פוסטים ב{{currentTimeFilterName}} האחרון: <1>הצג עוד פוסטים מהשנה שעברה</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "टॉपबार से डिफ़ॉल्ट समुदायों को छिपाएं",
|
||||
"media": "मीडिया",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ के रूप में टैग की गई समुदायों को छिपाएं",
|
||||
"tagged_as_adult": "\"एडल्ट\" के रूप में टैग किया गया",
|
||||
"tagged_as_gore": "\"गोर\" के रूप में चिह्नित",
|
||||
"tagged_as_anti": "\"एंटी\" के रूप में टैग किया गया",
|
||||
"tagged_as_vulgar": "को \"वुल्गर\" के रूप में टैग किया गया",
|
||||
"drop_here_or": "यहां छोड़ें या",
|
||||
"upload_button_warning": "ऑटो-अपलोड आपके ब्राउज़र की CORS नीति द्वारा अवरुद्ध है, लेकिन यह Seedit Android ऐप और डेस्कटॉप ऐप (Win/Mac/Linux) पर उपलब्ध है।\n\nGitHub पर डाउनलोड लिंक पृष्ठ पर जाएं?",
|
||||
"create_community_warning": "एक समुदाय बनाने के लिए एक पूर्ण नोड चलाना आवश्यक है। Seedit डेस्कटॉप ऐप (Win/Mac/Linux) स्वचालित रूप से एक पूर्ण नोड चलाता है।\n\nGitHub पर डाउनलोड लिंक पृष्ठ पर जाएं?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "टिप्पणियों के पृष्ठ पर वीडियो स्वचालित रूप से चलाएं",
|
||||
"mute_videos_by_default": "वीडियो को डिफ़ॉल्ट रूप से म्यूट करें",
|
||||
"expand_media_previews_based_on_community_media_preferences": "उस समुदाय की मीडिया प्राथमिकताओं के आधार पर मीडिया पूर्वावलोकन का विस्तार करें",
|
||||
"show_all_nsfw": "सभी NSFW दिखाएं",
|
||||
"hide_all_nsfw": "सभी NSFW छुपाएं",
|
||||
"tags": "टैग",
|
||||
"moderator_of": "मॉडरेटर",
|
||||
"not_subscriber_nor_moderator": "आप किसी भी समुदाय के सदस्य या मॉडरेटर नहीं हैं।",
|
||||
"more_posts_last_year": "{{count}} पोस्ट पिछले {{currentTimeFilterName}} में: <1>पिछले साल के और पोस्ट दिखाएं</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Alapértelmezett közösségek elrejtése a felső sávból",
|
||||
"media": "médiák",
|
||||
"hide_communities_tagged_as_nsfw": "Rejtse el a NSFW/18+ címkézett közösségeket",
|
||||
"tagged_as_adult": "\"felnőtt\"-ként megjelölve",
|
||||
"tagged_as_gore": "címkézve mint \"gore\"",
|
||||
"tagged_as_anti": "címkézve \"anti\" néven",
|
||||
"tagged_as_vulgar": "megjegyezve mint \"vulgáris\"",
|
||||
"drop_here_or": "Húzza ide, vagy",
|
||||
"upload_button_warning": "Az automatikus feltöltés a böngészője CORS irányelvei által blokkolva van, de elérhető a Seedit Android alkalmazásban és asztali alkalmazásban (Win/Mac/Linux).\n\nMenjen a letöltési linkek oldalára a GitHub-on?",
|
||||
"create_community_warning": "Közösség létrehozása teljes csomópont futtatását igényli. A Seedit asztali alkalmazás (Win/Mac/Linux) automatikusan futtat egy teljes csomópontot.\n\nMenjen a letöltési linkek oldalára a GitHub-on?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Videók automatikus lejátszása a hozzászólások oldalán",
|
||||
"mute_videos_by_default": "Videók alapértelmezett némítása",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Bővítse a média előnézeteket a közösség média preferenciái alapján",
|
||||
"show_all_nsfw": "mutasd az összes NSFW-t",
|
||||
"hide_all_nsfw": "Minden NSFW elrejtése",
|
||||
"tags": "Címkék",
|
||||
"moderator_of": "moderátora",
|
||||
"not_subscriber_nor_moderator": "Nem vagy előfizető vagy moderátor egyetlen közösségben sem.",
|
||||
"more_posts_last_year": "{{count}} bejegyzés a múlt {{currentTimeFilterName}}: <1>több bejegyzés mutatása a múlt évből</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Sembunyikan komunitas default dari topbar",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Sembunyikan komunitas yang ditandai sebagai NSFW/18+",
|
||||
"tagged_as_adult": "ditandai sebagai \"dewasa\"",
|
||||
"tagged_as_gore": "ditandai sebagai \"gore\"",
|
||||
"tagged_as_anti": "ditandai sebagai \"anti\"",
|
||||
"tagged_as_vulgar": "ditandai sebagai \"vulgar\"",
|
||||
"drop_here_or": "Seretkan di sini atau",
|
||||
"upload_button_warning": "Pengunggahan otomatis diblokir oleh kebijakan CORS browser Anda, tetapi tersedia di aplikasi Seedit Android dan aplikasi desktop (Win/Mac/Linux).\n\nPergi ke halaman tautan unduhan di GitHub?",
|
||||
"create_community_warning": "Membuat komunitas memerlukan menjalankan node penuh. Aplikasi desktop Seedit (Win/Mac/Linux) secara otomatis menjalankan node penuh.\n\nPergi ke halaman tautan unduhan di GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Putar otomatis video di halaman komentar",
|
||||
"mute_videos_by_default": "Diamkan video secara default",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Perluas pratinjau media berdasarkan preferensi media komunitas tersebut",
|
||||
"show_all_nsfw": "tampilkan semua NSFW",
|
||||
"hide_all_nsfw": "sembunyikan semua NSFW",
|
||||
"tags": "Tag",
|
||||
"moderator_of": "moderator dari",
|
||||
"not_subscriber_nor_moderator": "Anda bukan pelanggan maupun moderator komunitas manapun.",
|
||||
"more_posts_last_year": "{{count}} postingan pada {{currentTimeFilterName}} terakhir: <1>tampilkan lebih banyak postingan dari tahun lalu</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Nascondi comunità di default dalla topbar",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Nascondi comunità taggate come NSFW/18+",
|
||||
"tagged_as_adult": "taggate come \"adult\"",
|
||||
"tagged_as_gore": "taggate come \"gore\"",
|
||||
"tagged_as_anti": "taggate come \"anti\"",
|
||||
"tagged_as_vulgar": "taggate come \"vulgar\"",
|
||||
"drop_here_or": "Trascina qui o",
|
||||
"upload_button_warning": "Il caricamento automatico è bloccato dalla politica CORS del tuo browser, ma è disponibile nell'app Seedit per Android e nell'app desktop (Win/Mac/Linux).\n\nVai alla pagina dei link per il download su GitHub?",
|
||||
"create_community_warning": "Creare una comunità richiede l'esecuzione di un nodo completo. L'app Seedit per desktop (Win/Mac/Linux) esegue automaticamente un nodo completo.\n\nVai alla pagina dei link per il download su GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Riproduci automaticamente i video nella pagina dei commenti",
|
||||
"mute_videos_by_default": "Disattiva l’audio dei video per impostazione predefinita",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Espandi le anteprime multimediali in base alle preferenze multimediali di quella comunità",
|
||||
"show_all_nsfw": "mostra tutto NSFW",
|
||||
"hide_all_nsfw": "nascondi tutto NSFW",
|
||||
"tags": "Tag",
|
||||
"moderator_of": "moderatore di",
|
||||
"not_subscriber_nor_moderator": "Non sei né iscritto né moderatore di nessuna community.",
|
||||
"more_posts_last_year": "{{count}} post nell'ultimo {{currentTimeFilterName}}: <1>mostra più post dell'anno scorso</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "トップバーからデフォルトのコミュニティを隠す",
|
||||
"media": "メディア",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+としてタグ付けされたコミュニティを非表示にする",
|
||||
"tagged_as_adult": "\"成人\"としてタグ付けされました",
|
||||
"tagged_as_gore": "\"gore\"としてタグ付けされました",
|
||||
"tagged_as_anti": "\"anti\" としてタグ付けされた",
|
||||
"tagged_as_vulgar": "\"vulgar\"としてタグ付けされました",
|
||||
"drop_here_or": "ここにドロップまたは",
|
||||
"upload_button_warning": "自動アップロードはブラウザのCORSポリシーでブロックされていますが、SeeditのAndroidアプリおよびデスクトップアプリ(Win/Mac/Linux)では利用可能です。\n\nGitHubのダウンロードリンクページに移動しますか?",
|
||||
"create_community_warning": "コミュニティを作成するには、フルノードを実行する必要があります。Seeditのデスクトップアプリ(Win/Mac/Linux)は自動的にフルノードを実行します。\n\nGitHubのダウンロードリンクページに移動しますか?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "コメントページで動画を自動再生",
|
||||
"mute_videos_by_default": "動画をデフォルトでミュートにする",
|
||||
"expand_media_previews_based_on_community_media_preferences": "そのコミュニティのメディアの好みに基づいてメディアプレビューを展開する",
|
||||
"show_all_nsfw": "すべてのNSFWを表示",
|
||||
"hide_all_nsfw": "すべてのNSFWを非表示",
|
||||
"tags": "タグ",
|
||||
"moderator_of": "のモデレーター",
|
||||
"not_subscriber_nor_moderator": "あなたはどのコミュニティの購読者でもモデレーターでもありません。",
|
||||
"more_posts_last_year": "{{count}} 件の投稿(直近の{{currentTimeFilterName}}): <1>昨年の投稿をもっと見る</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "상단바에서 기본 커뮤니티 숨기기",
|
||||
"media": "미디어",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+로 태그된 커뮤니티 숨기기",
|
||||
"tagged_as_adult": "\"성인\"으로 태그됨",
|
||||
"tagged_as_gore": "\"gore\"로 태그됨",
|
||||
"tagged_as_anti": "\"anti\"로 태그됨",
|
||||
"tagged_as_vulgar": "\"vulgar\"로 태그됨",
|
||||
"drop_here_or": "여기에 드롭 또는",
|
||||
"upload_button_warning": "자동 업로드는 브라우저의 CORS 정책에 의해 차단되었지만 Seedit Android 앱과 데스크탑 앱(Win/Mac/Linux)에서 사용할 수 있습니다.\n\nGitHub의 다운로드 링크 페이지로 이동하시겠습니까?",
|
||||
"create_community_warning": "커뮤니티를 만들려면 전체 노드를 실행해야 합니다. Seedit 데스크탑 앱 (Win/Mac/Linux)은 자동으로 전체 노드를 실행합니다.\n\nGitHub의 다운로드 링크 페이지로 이동하시겠습니까?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "댓글 페이지에서 동영상 자동 재생",
|
||||
"mute_videos_by_default": "기본적으로 동영상 음소거",
|
||||
"expand_media_previews_based_on_community_media_preferences": "해당 커뮤니티의 미디어 선호도에 따라 미디어 미리보기를 확장합니다",
|
||||
"show_all_nsfw": "모든 NSFW 보기",
|
||||
"hide_all_nsfw": "모든 NSFW 숨기기",
|
||||
"tags": "태그",
|
||||
"moderator_of": "의 관리자",
|
||||
"not_subscriber_nor_moderator": "당신은 어떤 커뮤니티의 구독자도 아니고 중재자도 아닙니다.",
|
||||
"more_posts_last_year": "{{count}} 개 게시물 지난 {{currentTimeFilterName}}: <1>작년 게시물 더 보기</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "टॉपबारमधून डिफॉल्ट समुदाय लपवा",
|
||||
"media": "मीडिया",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ म्हणून टॅग केलेल्या समुदायांना लपवा",
|
||||
"tagged_as_adult": "\"एडल्ट\" म्हणून टॅग केले",
|
||||
"tagged_as_gore": "\"गोर\" म्हणून टॅग केले",
|
||||
"tagged_as_anti": "\"एंटी\" म्हणून टॅग केलेले",
|
||||
"tagged_as_vulgar": "\"vulgar\" म्हणून टॅग केले",
|
||||
"drop_here_or": "इथे ड्रॉप करा किंवा",
|
||||
"upload_button_warning": "ऑटो-अपलोड आपल्या ब्राउझरच्या CORS धोरणामुळे अवरुद्ध आहे, परंतु ते Seedit Android अॅप आणि डेस्कटॉप अॅप (Win/Mac/Linux) वर उपलब्ध आहे.\n\nGitHub वर डाउनलोड लिंक पृष्ठावर जा?",
|
||||
"create_community_warning": "एक समुदाय तयार करण्यासाठी एक पूर्ण नोड चालवणे आवश्यक आहे. Seedit डेस्कटॉप अॅप (Win/Mac/Linux) स्वयंचलितपणे एक पूर्ण नोड चालवते.\n\nGitHub वर डाउनलोड लिंक पृष्ठावर जा?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "टिप्पण्यांच्या पृष्ठावर व्हिडिओ ऑटोप्ले करा",
|
||||
"mute_videos_by_default": "व्हिडिओ डिफॉल्टने म्यूट करा",
|
||||
"expand_media_previews_based_on_community_media_preferences": "त्या समुदायाच्या मीडिया प्राधान्यांनुसार मीडिया प्रीव्ह्यू विस्तारा",
|
||||
"show_all_nsfw": "सर्व NSFW दाखवा",
|
||||
"hide_all_nsfw": "सर्व NSFW लपवा",
|
||||
"tags": "टॅग",
|
||||
"moderator_of": "मॉडरेटर",
|
||||
"not_subscriber_nor_moderator": "तुम कोणत्याही समुदायाचे सदस्य किंवा मॉडरेटर नाही.",
|
||||
"more_posts_last_year": "{{count}} पोस्ट मागील {{currentTimeFilterName}}: <1>मागील वर्षीचे अधिक पोस्ट दाखवा</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Verberg standaardgemeenschappen van de bovenbalk",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Verberg gemeenschappen gemarkeerd als NSFW/18+",
|
||||
"tagged_as_adult": "geëtiketteerd als \"volwassen\"",
|
||||
"tagged_as_gore": "getagd als \"gore\"",
|
||||
"tagged_as_anti": "getagd als \"anti\"",
|
||||
"tagged_as_vulgar": "getagd als \"vulgar\"",
|
||||
"drop_here_or": "Sleep hierheen of",
|
||||
"upload_button_warning": "Auto-upload wordt geblokkeerd door het CORS-beleid van uw browser, maar het is beschikbaar op de Seedit Android-app en desktopapp (Win/Mac/Linux).\n\nGa naar de downloadlinks-pagina op GitHub?",
|
||||
"create_community_warning": "Een gemeenschap creëren vereist het uitvoeren van een volledige node. De Seedit desktop-app (Win/Mac/Linux) voert automatisch een volledige node uit.\n\nGa naar de downloadlinks-pagina op GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Video's automatisch afspelen op de reactiespagina",
|
||||
"mute_videos_by_default": "Video’s standaard dempen",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Breid mediavoorbeelden uit op basis van de mediavoorkeuren van die gemeenschap",
|
||||
"show_all_nsfw": "toon alle NSFW",
|
||||
"hide_all_nsfw": "verberg alle NSFW",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "moderator van",
|
||||
"not_subscriber_nor_moderator": "Je bent geen abonnee of moderator van een gemeenschap.",
|
||||
"more_posts_last_year": "{{count}} berichten afgelopen {{currentTimeFilterName}}: <1>toon meer berichten van vorig jaar</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Skjul standardfellesskap fra toppfeltet",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Skjul samfunn merket som NSFW/18+",
|
||||
"tagged_as_adult": "merket som \"voksen\"",
|
||||
"tagged_as_gore": "merket som \"gore\"",
|
||||
"tagged_as_anti": "merket som \"anti\"",
|
||||
"tagged_as_vulgar": "merket som \"vulgar\"",
|
||||
"drop_here_or": "Slipp her eller",
|
||||
"upload_button_warning": "Auto-opplasting er blokkert av CORS-policyen til nettleseren din, men det er tilgjengelig på Seedit Android-app og desktopapp (Win/Mac/Linux).\n\nGå til nedlastingslenkesiden på GitHub?",
|
||||
"create_community_warning": "Opprettelse av et fellesskap krever at du kjører en full node. Seedit desktop-appen (Win/Mac/Linux) kjører automatisk en full node.\n\nGå til nedlastingslenkesiden på GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Autospill videoer på kommentarsiden",
|
||||
"mute_videos_by_default": "Demp videoer som standard",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Utvid medievisninger basert på det fellesskapets mediepreferanser",
|
||||
"show_all_nsfw": "vis alle NSFW",
|
||||
"hide_all_nsfw": "skjul all NSFW",
|
||||
"tags": "Tagger",
|
||||
"moderator_of": "moderator av",
|
||||
"not_subscriber_nor_moderator": "Du er verken abonnent eller moderator i noe fellesskap.",
|
||||
"more_posts_last_year": "{{count}} innlegg siste {{currentTimeFilterName}}: <1>vis flere innlegg fra i fjor</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Ukryj domyślne społeczności z paska na górze",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Ukryj społeczności oznaczone jako NSFW/18+",
|
||||
"tagged_as_adult": "otagowane jako \"dorosły\"",
|
||||
"tagged_as_gore": "otagowane jako \"gore\"",
|
||||
"tagged_as_anti": "otagowane jako \"anti\"",
|
||||
"tagged_as_vulgar": "oznaczone jako \"wulgarne\"",
|
||||
"drop_here_or": "Upuść tutaj lub",
|
||||
"upload_button_warning": "Automatyczne przesyłanie jest blokowane przez politykę CORS w twojej przeglądarce, ale jest dostępne w aplikacji Seedit na Androida oraz w aplikacji desktopowej (Win/Mac/Linux).\n\nPrzejdź do strony linków do pobrania na GitHubie?",
|
||||
"create_community_warning": "Tworzenie społeczności wymaga uruchomienia pełnego węzła. Aplikacja Seedit desktop (Win/Mac/Linux) automatycznie uruchamia pełny węzeł.\n\nPrzejdź do strony linków do pobrania na GitHubie?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Autoodtwarzanie filmów na stronie komentarzy",
|
||||
"mute_videos_by_default": "Domyślnie wycisz filmy",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Rozwiń podglądy mediów na podstawie preferencji mediów tej społeczności",
|
||||
"show_all_nsfw": "pokaż wszystkie NSFW",
|
||||
"hide_all_nsfw": "ukryj wszystkie NSFW",
|
||||
"tags": "Tagi",
|
||||
"moderator_of": "moderator",
|
||||
"not_subscriber_nor_moderator": "Nie jesteś subskrybentem ani moderatorem żadnej społeczności.",
|
||||
"more_posts_last_year": "{{count}} postów w ostatnim {{currentTimeFilterName}}: <1>pokaż więcej postów z zeszłego roku</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Ocultar comunidades padrão da barra superior",
|
||||
"media": "mídia",
|
||||
"hide_communities_tagged_as_nsfw": "Ocultar comunidades marcadas como NSFW/18+",
|
||||
"tagged_as_adult": "marcado como \"adulto\"",
|
||||
"tagged_as_gore": "marcado como \"gore\"",
|
||||
"tagged_as_anti": "marcado como \"anti\"",
|
||||
"tagged_as_vulgar": "marcado como \"vulgar\"",
|
||||
"drop_here_or": "Solte aqui ou",
|
||||
"upload_button_warning": "O upload automático está bloqueado pela política CORS do seu navegador, mas está disponível no aplicativo Seedit para Android e no aplicativo desktop (Win/Mac/Linux).\n\nVá para a página de links de download no GitHub?",
|
||||
"create_community_warning": "Criar uma comunidade exige a execução de um nó completo. O aplicativo Seedit para desktop (Win/Mac/Linux) executa automaticamente um nó completo.\n\nVá para a página de links de download no GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Reproduzir vídeos automaticamente na página de comentários",
|
||||
"mute_videos_by_default": "Silenciar vídeos por padrão",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Expanda as visualizações de mídia com base nas preferências de mídia daquela comunidade",
|
||||
"show_all_nsfw": "mostrar todo NSFW",
|
||||
"hide_all_nsfw": "ocultar todo NSFW",
|
||||
"tags": "Tags",
|
||||
"moderator_of": "moderador de",
|
||||
"not_subscriber_nor_moderator": "Você não é assinante nem moderador de nenhuma comunidade.",
|
||||
"more_posts_last_year": "{{count}} posts no último {{currentTimeFilterName}}: <1>mostrar mais posts do ano passado</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Ascunde comunitățile implicite din bara de sus",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Ascunde comunitățile etichetate ca NSFW/18+",
|
||||
"tagged_as_adult": "etichetat ca \"adult\"",
|
||||
"tagged_as_gore": "etichetat ca \"gore\"",
|
||||
"tagged_as_anti": "etichetați ca \"anti\"",
|
||||
"tagged_as_vulgar": "marcat ca \"vulgar\"",
|
||||
"drop_here_or": "Aruncați aici sau",
|
||||
"upload_button_warning": "Încărcarea automată este blocată de politica CORS a browser-ului tău, dar este disponibilă în aplicația Seedit pentru Android și aplicațiile desktop (Win/Mac/Linux).\n\nMergi la pagina cu linkuri de descărcare pe GitHub?",
|
||||
"create_community_warning": "Crearea unei comunități necesită rularea unui nod complet. Aplicația Seedit pentru desktop (Win/Mac/Linux) rulează automat un nod complet.\n\nMergi la pagina cu linkuri de descărcare pe GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Redare automată a videoclipurilor pe pagina de comentarii",
|
||||
"mute_videos_by_default": "Dezactivează sunetul videoclipurilor în mod implicit",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Extindeți previzualizările media pe baza preferințelor media ale comunității respective",
|
||||
"show_all_nsfw": "arată tot NSFW",
|
||||
"hide_all_nsfw": "ascunde tot NSFW",
|
||||
"tags": "Etichete",
|
||||
"moderator_of": "moderator al",
|
||||
"not_subscriber_nor_moderator": "Nu ești abonat și nici moderator al vreunei comunități.",
|
||||
"more_posts_last_year": "{{count}} postări în ultimul {{currentTimeFilterName}}: <1>arată mai multe postări din anul trecut</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Скрыть стандартные сообщества с верхней панели",
|
||||
"media": "медиа",
|
||||
"hide_communities_tagged_as_nsfw": "Скрыть сообщества, помеченные как NSFW/18+",
|
||||
"tagged_as_adult": "отмечено как \"взрослый\"",
|
||||
"tagged_as_gore": "помечено как \"gore\"",
|
||||
"tagged_as_anti": "помечено как \"анти\"",
|
||||
"tagged_as_vulgar": "отмечено как \"вульгарное\"",
|
||||
"drop_here_or": "Перетащите сюда или",
|
||||
"upload_button_warning": "Автоматическая загрузка заблокирована политикой CORS вашего браузера, но она доступна в приложении Seedit для Android и в настольных приложениях (Win/Mac/Linux).\n\nПерейдите на страницу ссылок для загрузки на GitHub?",
|
||||
"create_community_warning": "Создание сообщества требует запуска полного узла. Приложение Seedit для настольных ПК (Win/Mac/Linux) автоматически запускает полный узел.\n\nПерейдите на страницу ссылок для загрузки на GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Автовоспроизведение видео на странице комментариев",
|
||||
"mute_videos_by_default": "Отключать звук видео по умолчанию",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Расширьте предварительный просмотр медиа на основе предпочтений медиа этого сообщества",
|
||||
"show_all_nsfw": "показать все NSFW",
|
||||
"hide_all_nsfw": "скрыть весь NSFW",
|
||||
"tags": "Теги",
|
||||
"moderator_of": "модератор",
|
||||
"not_subscriber_nor_moderator": "Вы не являетесь подписчиком или модератором ни одного сообщества.",
|
||||
"more_posts_last_year": "{{count}} постов за последний {{currentTimeFilterName}}: <1>показать больше постов за прошлый год</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Fshih komunitetet e paracaktuara nga barra e sipërme",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Fsheh komunitetet e etiketuar si NSFW/18+",
|
||||
"tagged_as_adult": "etiketuar si \"i rritur\"",
|
||||
"tagged_as_gore": "etiketuar si \"gore\"",
|
||||
"tagged_as_anti": "etiketuar si \"anti\"",
|
||||
"tagged_as_vulgar": "etiketuar si \"vulgar\"",
|
||||
"drop_here_or": "Hidh këtu ose",
|
||||
"upload_button_warning": "Ngarkohet automatikisht është bllokuar nga politika CORS e shfletuesit tuaj, por është në dispozicion në aplikacionin Seedit për Android dhe aplikacionin desktop (Win/Mac/Linux).\n\nShkoni te faqja e lidhjeve për shkarkimin në GitHub?",
|
||||
"create_community_warning": "Krijimi i një komuniteti kërkon ekzekutimin e një nyjeje të plotë. Aplikacioni Seedit për desktop (Win/Mac/Linux) ekzekuton automatikisht një nyje të plotë.\n\nShkoni te faqja e lidhjeve për shkarkimin në GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Luaj automatikisht videot në faqen e komenteve",
|
||||
"mute_videos_by_default": "Çkyçni videot si parazgjedhje",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Zgjeroni parapamjet e mediave bazuar në preferencat e mediave të asaj komuniteti",
|
||||
"show_all_nsfw": "trego të gjitha NSFW",
|
||||
"hide_all_nsfw": "fsheh të gjitha NSFW",
|
||||
"tags": "Etiketat",
|
||||
"moderator_of": "moderator i",
|
||||
"not_subscriber_nor_moderator": "Nuk jeni as abonues as moderator i ndonjë komuniteti.",
|
||||
"more_posts_last_year": "{{count}} postime në {{currentTimeFilterName}} e fundit: <1>shfaq më shumë postime nga viti i kaluar</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Dölj standardgemenskaper från topplistan",
|
||||
"media": "media",
|
||||
"hide_communities_tagged_as_nsfw": "Dölj gemenskaper märkta som NSFW/18+",
|
||||
"tagged_as_adult": "märkt som \"vuxen\"",
|
||||
"tagged_as_gore": "märkt som \"gore\"",
|
||||
"tagged_as_anti": "märkt som \"anti\"",
|
||||
"tagged_as_vulgar": "märkt som \"vulgar\"",
|
||||
"drop_here_or": "Dra hit eller",
|
||||
"upload_button_warning": "Auto-uppladdning blockeras av din webbläsares CORS-policy, men det är tillgängligt i Seedit Android-app och skrivbordsapp (Win/Mac/Linux).\n\nGå till sidan för nedladdningslänkar på GitHub?",
|
||||
"create_community_warning": "Att skapa ett community kräver att du kör en full node. Seedit desktop-appen (Win/Mac/Linux) kör automatiskt en full node.\n\nGå till sidan för nedladdningslänkar på GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Autospelning av videor på kommentarsidan",
|
||||
"mute_videos_by_default": "Stäng av ljudet i videor som standard",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Expandera medieförhandsvisningar baserat på den gemenskapens mediapreferenser",
|
||||
"show_all_nsfw": "visa all NSFW",
|
||||
"hide_all_nsfw": "göm allt NSFW",
|
||||
"tags": "Taggar",
|
||||
"moderator_of": "moderator för",
|
||||
"not_subscriber_nor_moderator": "Du är varken prenumerant eller moderator i någon community.",
|
||||
"more_posts_last_year": "{{count}} inlägg senaste {{currentTimeFilterName}}: <1>visa fler inlägg från förra året</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "టాప్బార్ నుండి డిఫాల్ట్ కమ్యూనిటీలను దాచండి",
|
||||
"media": "మీడియా",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ గా ట్యాగ్ చేయబడిన కమ్యూనిటీలను దాచండి",
|
||||
"tagged_as_adult": "\"ఎడల్ట్\" గా ట్యాగ్ చేయబడింది",
|
||||
"tagged_as_gore": "\"గోర్\" గా ట్యాగ్ చేయబడింది",
|
||||
"tagged_as_anti": "\"ఆంటీ\"గా ట్యాగ్ చేయబడింది",
|
||||
"tagged_as_vulgar": "\"vulgar\" గా ట్యాగ్ చేయబడింది",
|
||||
"drop_here_or": "ఇక్కడ వదిలివేయండి లేదా",
|
||||
"upload_button_warning": "ఆటో-అప్లోడింగ్ మీ బ్రౌజర్ యొక్క CORS విధానం ద్వారా అడ్డుకోబడింది, కానీ ఇది Seedit Android యాప్ మరియు డెస్క్టాప్ యాప్ (Win/Mac/Linux) లో లభిస్తుంది.\n\nGitHub లో డౌన్లోడ్ లింకుల పేజీకి వెళ్లండి?",
|
||||
"create_community_warning": "ఒక కమ్యూనిటీని సృష్టించడానికి పూర్తి నోడు నడపడం అవసరం. Seedit డెస్క్టాప్ యాప్ (Win/Mac/Linux) ఆటోమేటిక్గా పూర్తి నోడును నడుపుతుంది.\n\nGitHub లో డౌన్లోడ్ లింకుల పేజీకి వెళ్లండి?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "వ్యాఖ్యల పేజీలో వీడియోలను ఆటోప్లే చేయండి",
|
||||
"mute_videos_by_default": "డిఫాల్ట్గా వీడియోలను మ్యూట్ చేయండి",
|
||||
"expand_media_previews_based_on_community_media_preferences": "ఆ కమ్యూనిటీ మీడియా అభిరుచుల ఆధారంగా మీడియా ప్రివ్యూలను విస్తరించండి",
|
||||
"show_all_nsfw": "అన్నీ NSFW చూపించు",
|
||||
"hide_all_nsfw": "అన్ని NSFW దాచు",
|
||||
"tags": "ట్యాగ్లు",
|
||||
"moderator_of": "మోడరేటర్",
|
||||
"not_subscriber_nor_moderator": "మీరు ఏ కమ్యూనిటీలో సభ్యుడూ, మోడరేటర్ కూడా కాదు.",
|
||||
"more_posts_last_year": "{{count}} పోస్ట్లు గత {{currentTimeFilterName}}: <1>గత సంవత్సరం నుండి మరిన్ని పోస్ట్లు చూపించు</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "ซ่อนชุมชนเริ่มต้นจากแถบด้านบน",
|
||||
"media": "สื่อ",
|
||||
"hide_communities_tagged_as_nsfw": "ซ่อนชุมชนที่ถูกแท็กเป็น NSFW/18+",
|
||||
"tagged_as_adult": "ถูกแท็กเป็น \"ผู้ใหญ่\"",
|
||||
"tagged_as_gore": "แท็กged เป็น \"gore\"",
|
||||
"tagged_as_anti": "แท็กเป็น \"anti\"",
|
||||
"tagged_as_vulgar": "แท็กเป็น \"vulgar\"",
|
||||
"drop_here_or": "วางที่นี่หรือ",
|
||||
"upload_button_warning": "การอัปโหลดอัตโนมัติถูกบล็อกโดยนโยบาย CORS ของเบราว์เซอร์ของคุณ แต่สามารถใช้ได้ในแอป Seedit สำหรับ Android และแอปเดสก์ท็อป (Win/Mac/Linux)\n\nไปที่หน้าลิงก์ดาวน์โหลดบน GitHub?",
|
||||
"create_community_warning": "การสร้างชุมชนต้องการการรันโหนดเต็ม Seedit desktop app (Win/Mac/Linux) รันโหนดเต็มโดยอัตโนมัติ\n\nไปที่หน้าลิงก์ดาวน์โหลดบน GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "เล่นวิดีโออัตโนมัติบนหน้าคอมเมนต์",
|
||||
"mute_videos_by_default": "ปิดเสียงวิดีโอโดยค่าเริ่มต้น",
|
||||
"expand_media_previews_based_on_community_media_preferences": "ขยายตัวอย่างสื่อโดยอิงตามความชอบสื่อของชุมชนนั้น",
|
||||
"show_all_nsfw": "แสดง NSFW ทั้งหมด",
|
||||
"hide_all_nsfw": "ซ่อนทั้งหมด NSFW",
|
||||
"tags": "แท็ก",
|
||||
"moderator_of": "ผู้ดูแล",
|
||||
"not_subscriber_nor_moderator": "คุณไม่ใช่ผู้สมัครสมาชิกและไม่ใช่ผู้ดูแลชุมชนใดๆ",
|
||||
"more_posts_last_year": "{{count}} โพสต์ใน{{currentTimeFilterName}} ล่าสุด: <1>แสดงโพสต์เพิ่มเติมจากปีที่แล้ว</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Varsayılan toplulukları üst çubuktan gizle",
|
||||
"media": "medya",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ olarak etiketlenmiş toplulukları gizle",
|
||||
"tagged_as_adult": "\"yetişkin\" olarak etiketlendi",
|
||||
"tagged_as_gore": "\"gore\" olarak etiketlendi",
|
||||
"tagged_as_anti": "\"anti\" olarak etiketlendi",
|
||||
"tagged_as_vulgar": "\"vulgar\" olarak etiketlendi",
|
||||
"drop_here_or": "Burası veya bırak",
|
||||
"upload_button_warning": "Otomatik yükleme, tarayıcınızın CORS politikası nedeniyle engelleniyor, ancak Seedit Android uygulaması ve masaüstü uygulamasında (Win/Mac/Linux) mevcuttur.\n\nGitHub'daki indirme bağlantıları sayfasına gidin?",
|
||||
"create_community_warning": "Bir topluluk oluşturmak, tam bir düğüm çalıştırmayı gerektirir. Seedit masaüstü uygulaması (Win/Mac/Linux) otomatik olarak tam bir düğüm çalıştırır.\n\nGitHub'daki indirme bağlantıları sayfasına gidin?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Yorum sayfasında videoları otomatik oynat",
|
||||
"mute_videos_by_default": "Videoları varsayılan olarak sessize al",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Topluluğun medya tercihleri temelinde medya önizlemelerini genişlet",
|
||||
"show_all_nsfw": "tüm NSFW'yi göster",
|
||||
"hide_all_nsfw": "tüm NSFW'yi gizle",
|
||||
"tags": "Etiketler",
|
||||
"moderator_of": "moderatorü",
|
||||
"not_subscriber_nor_moderator": "Hiçbir topluluğun abonesi veya moderatörü değilsiniz.",
|
||||
"more_posts_last_year": "{{count}} gönderi son {{currentTimeFilterName}}: <1>geçen yıldan daha fazla gönderi göster</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Сховати стандартні спільноти з верхньої панелі",
|
||||
"media": "медіа",
|
||||
"hide_communities_tagged_as_nsfw": "Сховати спільноти, позначені як NSFW/18+",
|
||||
"tagged_as_adult": "мітка \"дорослий\"",
|
||||
"tagged_as_gore": "позначено як \"gore\"",
|
||||
"tagged_as_anti": "позначено як \"анти\"",
|
||||
"tagged_as_vulgar": "позначено як \"вульгарне\"",
|
||||
"drop_here_or": "Перетягніть сюди або",
|
||||
"upload_button_warning": "Автозавантаження заблоковано політикою CORS вашого браузера, але воно доступне в додатку Seedit для Android та настільному додатку (Win/Mac/Linux).\n\nПерейдіть на сторінку посилань для завантаження на GitHub?",
|
||||
"create_community_warning": "Створення спільноти вимагає запуску повного вузла. Десктоп-додаток Seedit (Win/Mac/Linux) автоматично запускає повний вузол.\n\nПерейдіть на сторінку посилань для завантаження на GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Автовідтворення відео на сторінці коментарів",
|
||||
"mute_videos_by_default": "Вимикати звук відео за замовчуванням",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Розгорніть попередній перегляд медіа на основі медіапредпочтань цієї спільноти",
|
||||
"show_all_nsfw": "показати всі NSFW",
|
||||
"hide_all_nsfw": "приховати весь NSFW",
|
||||
"tags": "Теги",
|
||||
"moderator_of": "модератор",
|
||||
"not_subscriber_nor_moderator": "Ви не є підписником або модератором жодної спільноти.",
|
||||
"more_posts_last_year": "{{count}} постів за останній {{currentTimeFilterName}}: <1>показати більше постів з минулого року</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "اوپر بار سے ڈیفالٹ کمیونٹیز چھپائیں",
|
||||
"media": "میڈیا",
|
||||
"hide_communities_tagged_as_nsfw": "NSFW/18+ کے طور پر ٹیگ کردہ کمیونٹیز کو چھپائیں",
|
||||
"tagged_as_adult": "\"ایڈلٹ\" کے طور پر ٹیگ کیا گیا",
|
||||
"tagged_as_gore": "\"گور\" کے طور پر ٹیگ کیا گیا",
|
||||
"tagged_as_anti": "\"اینٹی\" کے طور پر ٹیگ کیا گیا",
|
||||
"tagged_as_vulgar": "\"vulgar\" کے طور پر ٹیگ کیا گیا",
|
||||
"drop_here_or": "یہاں چھوڑیں یا",
|
||||
"upload_button_warning": "آٹو اپلوڈ آپ کے براؤزر کی CORS پالیسی کے ذریعہ بلاک کر دیا گیا ہے، لیکن یہ Seedit اینڈروئیڈ ایپ اور ڈیسک ٹاپ ایپ (Win/Mac/Linux) پر دستیاب ہے۔\n\nGitHub پر ڈاؤن لوڈ لنکس پیج پر جائیں؟",
|
||||
"create_community_warning": "کمیونٹی بنانے کے لیے مکمل نوڈ چلانا ضروری ہے۔ Seedit ڈیسک ٹاپ ایپ (Win/Mac/Linux) خودکار طور پر مکمل نوڈ چلاتا ہے۔\n\nGitHub پر ڈاؤن لوڈ لنکس پیج پر جائیں؟",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "کمنٹس پیج پر ویڈیوز خودکار چلائیں",
|
||||
"mute_videos_by_default": "ویڈیوز کو ڈیفالٹ طور پر خاموش کریں",
|
||||
"expand_media_previews_based_on_community_media_preferences": "کمیونٹی کی میڈیا ترجیحات کی بنیاد پر میڈیا پریویوز کو وسعت دیں",
|
||||
"show_all_nsfw": "تمام NSFW دکھائیں",
|
||||
"hide_all_nsfw": "تمام NSFW چھپائیں",
|
||||
"tags": "ٹیگز",
|
||||
"moderator_of": "منتظم",
|
||||
"not_subscriber_nor_moderator": "آپ کسی کمیونٹی کے سبسکرائبر یا ماڈریٹر نہیں ہیں۔",
|
||||
"more_posts_last_year": "{{count}} پوسٹس پچھلے {{currentTimeFilterName}} میں: <1>پچھلے سال کی مزید پوسٹس دکھائیں</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "Ẩn cộng đồng mặc định từ thanh trên",
|
||||
"media": "phương tiện truyền thông",
|
||||
"hide_communities_tagged_as_nsfw": "Ẩn cộng đồng được gắn thẻ là NSFW/18+",
|
||||
"tagged_as_adult": "gắn thẻ là \"người lớn\"",
|
||||
"tagged_as_gore": "được gắn thẻ là \"gore\"",
|
||||
"tagged_as_anti": "được gắn thẻ là \"anti\"",
|
||||
"tagged_as_vulgar": "được gắn thẻ là \"vulgar\"",
|
||||
"drop_here_or": "Thả ở đây hoặc",
|
||||
"upload_button_warning": "Tải lên tự động bị chặn bởi chính sách CORS của trình duyệt của bạn, nhưng có sẵn trên ứng dụng Seedit Android và ứng dụng desktop (Win/Mac/Linux).\n\nĐi đến trang liên kết tải xuống trên GitHub?",
|
||||
"create_community_warning": "Tạo cộng đồng yêu cầu chạy một node đầy đủ. Ứng dụng Seedit desktop (Win/Mac/Linux) tự động chạy một node đầy đủ.\n\nĐi đến trang liên kết tải xuống trên GitHub?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "Phát video tự động trên trang bình luận",
|
||||
"mute_videos_by_default": "Tắt tiếng video theo mặc định",
|
||||
"expand_media_previews_based_on_community_media_preferences": "Mở rộng bản xem trước phương tiện dựa trên sở thích phương tiện của cộng đồng đó",
|
||||
"show_all_nsfw": "hiển thị tất cả NSFW",
|
||||
"hide_all_nsfw": "ẩn tất cả NSFW",
|
||||
"tags": "Thẻ",
|
||||
"moderator_of": "quản trị viên của",
|
||||
"not_subscriber_nor_moderator": "Bạn không phải là người đăng ký cũng không phải là người điều hành của bất kỳ cộng đồng nào.",
|
||||
"more_posts_last_year": "{{count}} bài viết trong {{currentTimeFilterName}} vừa qua: <1>hiển thị thêm bài viết từ năm ngoái</1>",
|
||||
|
||||
@@ -316,10 +316,6 @@
|
||||
"hide_default_communities_from_topbar": "从顶部栏中隐藏默认社区",
|
||||
"media": "媒体",
|
||||
"hide_communities_tagged_as_nsfw": "隐藏标记为 NSFW/18+ 的社区",
|
||||
"tagged_as_adult": "标记为“成人”",
|
||||
"tagged_as_gore": "标记为 \"gore\"",
|
||||
"tagged_as_anti": "标记为\"反\"",
|
||||
"tagged_as_vulgar": "标记为“vulgar”",
|
||||
"drop_here_or": "拖放到此处或",
|
||||
"upload_button_warning": "自动上传被浏览器的CORS政策阻止,但可以在Seedit Android应用程序和桌面应用程序(Win/Mac/Linux)上使用。\n\n前往GitHub上的下载链接页面?",
|
||||
"create_community_warning": "创建社区需要运行一个完整的节点。Seedit桌面应用程序(Win/Mac/Linux)会自动运行一个完整的节点。\n\n前往GitHub上的下载链接页面?",
|
||||
@@ -341,9 +337,6 @@
|
||||
"autoplay_videos_on_comments_page": "在评论页面自动播放视频",
|
||||
"mute_videos_by_default": "默认静音视频",
|
||||
"expand_media_previews_based_on_community_media_preferences": "根据该社区的媒体偏好展开媒体预览",
|
||||
"show_all_nsfw": "显示所有 NSFW",
|
||||
"hide_all_nsfw": "隐藏所有NSFW",
|
||||
"tags": "标签",
|
||||
"moderator_of": "版主",
|
||||
"not_subscriber_nor_moderator": "您既不是任何社区的订阅者,也不是管理员。",
|
||||
"more_posts_last_year": "{{count}} 篇帖子在过去的 {{currentTimeFilterName}}:<1>显示去年的更多帖子</1>",
|
||||
|
||||
@@ -44,7 +44,7 @@ import {
|
||||
import getShortAddress from '../../lib/utils/address-utils';
|
||||
import useContentOptionsStore from '../../stores/use-content-options-store';
|
||||
import useNotFoundStore from '../../stores/use-not-found-store';
|
||||
import { useIsBroadlyNsfwCommunity } from '../../hooks/use-is-broadly-nsfw-community';
|
||||
import { useIsNsfwCommunity } from '../../hooks/use-is-nsfw-community';
|
||||
import useTheme from '../../hooks/use-theme';
|
||||
import useWindowWidth from '../../hooks/use-window-width';
|
||||
import { getCommunityIdentifier } from '../../hooks/use-community-identifier';
|
||||
@@ -324,9 +324,8 @@ const HeaderTitle = ({ title, pendingPostCommunityAddress }: { title: string; pe
|
||||
|
||||
const communityAddress = params.communityAddress;
|
||||
|
||||
const { hideAdultCommunities, hideGoreCommunities, hideAntiCommunities, hideVulgarCommunities } = useContentOptionsStore();
|
||||
const hasUnhiddenAnyNsfwCommunity = !hideAdultCommunities || !hideGoreCommunities || !hideAntiCommunities || !hideVulgarCommunities;
|
||||
const isBroadlyNsfwCommunity = useIsBroadlyNsfwCommunity(communityAddress || '');
|
||||
const { hideNsfwCommunities } = useContentOptionsStore();
|
||||
const isHiddenNsfwCommunity = useIsNsfwCommunity(communityAddress || '') && hideNsfwCommunities;
|
||||
|
||||
const communityTitle = (
|
||||
<Link to={`/s/${isInPendingPostView ? pendingPostCommunityAddress : communityAddress}`}>
|
||||
@@ -338,7 +337,7 @@ const HeaderTitle = ({ title, pendingPostCommunityAddress }: { title: string; pe
|
||||
const profileTitle = <Link to='/profile'>{account?.author?.shortAddress}</Link>;
|
||||
const authorTitle = <Link to={`/u/${params.authorAddress}/c/${params.commentCid}`}>{params.authorAddress && getShortAddress(params.authorAddress)}</Link>;
|
||||
|
||||
if (isBroadlyNsfwCommunity && !hasUnhiddenAnyNsfwCommunity) {
|
||||
if (isHiddenNsfwCommunity) {
|
||||
return <span>{t('over_18')}</span>;
|
||||
} else if (isInCommunitySubmitView) {
|
||||
return (
|
||||
@@ -430,15 +429,10 @@ const Header = () => {
|
||||
|
||||
const communityAddress = params.communityAddress;
|
||||
|
||||
const contentOptionsStore = useContentOptionsStore();
|
||||
const hasUnhiddenAnyNsfwCommunity =
|
||||
!contentOptionsStore.hideAdultCommunities ||
|
||||
!contentOptionsStore.hideGoreCommunities ||
|
||||
!contentOptionsStore.hideAntiCommunities ||
|
||||
!contentOptionsStore.hideVulgarCommunities;
|
||||
const isBroadlyNsfwCommunity = useIsBroadlyNsfwCommunity(communityAddress || '');
|
||||
const { hideNsfwCommunities } = useContentOptionsStore();
|
||||
const isHiddenNsfwCommunity = useIsNsfwCommunity(communityAddress || '') && hideNsfwCommunities;
|
||||
|
||||
const logoIsAvatar = isInCommunityView && suggested?.avatarUrl && !(isBroadlyNsfwCommunity && !hasUnhiddenAnyNsfwCommunity);
|
||||
const logoIsAvatar = isInCommunityView && suggested?.avatarUrl && !isHiddenNsfwCommunity;
|
||||
const logoSrc = logoIsAvatar ? suggested?.avatarUrl : 'assets/sprout/sprout.png';
|
||||
const logoLink = '/';
|
||||
|
||||
@@ -478,14 +472,14 @@ const Header = () => {
|
||||
<HeaderTitle title={title} pendingPostCommunityAddress={accountComment?.subplebbitAddress} />
|
||||
</div>
|
||||
)}
|
||||
{!isMobile && !(isBroadlyNsfwCommunity && !hasUnhiddenAnyNsfwCommunity) && (
|
||||
{!isMobile && !isHiddenNsfwCommunity && (
|
||||
<ul className={styles.tabMenu}>
|
||||
<HeaderTabs />
|
||||
{(isInHomeView || isInHomeAboutView) && <AboutButton />}
|
||||
</ul>
|
||||
)}
|
||||
</div>
|
||||
{isMobile && !isInCommunitySubmitView && !(isBroadlyNsfwCommunity && !hasUnhiddenAnyNsfwCommunity) && (
|
||||
{isMobile && !isInCommunitySubmitView && !isHiddenNsfwCommunity && (
|
||||
<ul className={`${styles.tabMenu} ${isInProfileView ? styles.horizontalScroll : ''}`}>
|
||||
<HeaderTabs />
|
||||
{(isInHomeView || isInHomeAboutView || isInCommunityView || isInHomeAboutView || isInPostPageView) && <AboutButton />}
|
||||
|
||||
@@ -8,10 +8,7 @@ const Over18Warning = () => {
|
||||
const contentOptionsStore = useContentOptionsStore();
|
||||
|
||||
const handleAcceptWarning = () => {
|
||||
contentOptionsStore.setHideAdultCommunities(false);
|
||||
contentOptionsStore.setHideGoreCommunities(false);
|
||||
contentOptionsStore.setHideAntiCommunities(false);
|
||||
contentOptionsStore.setHideVulgarCommunities(false);
|
||||
contentOptionsStore.setHideNsfwCommunities(false);
|
||||
contentOptionsStore.setHasAcceptedWarning(true);
|
||||
};
|
||||
|
||||
|
||||
@@ -43,19 +43,6 @@
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.nsfwFilters {
|
||||
background-image: url("/assets/buttons/droparrowgray.gif");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right bottom;
|
||||
display: inline-block;
|
||||
padding-right: 21px;
|
||||
cursor: pointer;
|
||||
height: 13px;
|
||||
padding-top: 10px;
|
||||
text-transform: uppercase;
|
||||
font-size: 9px;
|
||||
}
|
||||
|
||||
.dropChoices {
|
||||
top: 18px;
|
||||
margin-top: 0;
|
||||
|
||||
@@ -5,12 +5,11 @@ import { useAccount, useAccountCommunities } from '@bitsocial/bitsocial-react-ho
|
||||
import { isAllView, isDomainView, isHomeView, isModView, isCommunityView } from '../../lib/utils/view-utils';
|
||||
import getShortAddress from '../../lib/utils/address-utils';
|
||||
import useContentOptionsStore from '../../stores/use-content-options-store';
|
||||
import { useDefaultSubscriptions, useFilteredDefaultSubscriptions } from '../../hooks/use-default-subscriptions';
|
||||
import { useFilteredDefaultSubscriptions } from '../../hooks/use-default-subscriptions';
|
||||
import { isDirectoryCode, isResolvableCommunityAddress } from '../../lib/utils/directory-codes';
|
||||
import useTimeFilter, { setSessionTimeFilterPreference } from '../../hooks/use-time-filter';
|
||||
import { sortTypes } from '../../constants/sort-types';
|
||||
import { sortLabels } from '../../constants/sort-labels';
|
||||
import { handleNSFWSubscriptionPrompt } from '../../lib/utils/nsfw-subscription-utils';
|
||||
import styles from './topbar.module.css';
|
||||
|
||||
// Directory-code subscriptions (e.g. "memes") have no dot and are shorter than raw public
|
||||
@@ -70,117 +69,6 @@ const CommunitiesDropdown = () => {
|
||||
);
|
||||
};
|
||||
|
||||
const TagFilterDropdown = () => {
|
||||
const { t } = useTranslation();
|
||||
const account = useAccount();
|
||||
const defaultCommunities = useDefaultSubscriptions();
|
||||
const {
|
||||
hideAdultCommunities,
|
||||
hideGoreCommunities,
|
||||
hideAntiCommunities,
|
||||
hideVulgarCommunities,
|
||||
setHideAdultCommunities,
|
||||
setHideGoreCommunities,
|
||||
setHideAntiCommunities,
|
||||
setHideVulgarCommunities,
|
||||
} = useContentOptionsStore();
|
||||
|
||||
const tags = useMemo(
|
||||
() => [
|
||||
{ name: 'adult', isHidden: hideAdultCommunities, setter: setHideAdultCommunities },
|
||||
{ name: 'gore', isHidden: hideGoreCommunities, setter: setHideGoreCommunities },
|
||||
{ name: 'vulgar', isHidden: hideVulgarCommunities, setter: setHideVulgarCommunities },
|
||||
{ name: 'anti', isHidden: hideAntiCommunities, setter: setHideAntiCommunities },
|
||||
],
|
||||
[
|
||||
hideAdultCommunities,
|
||||
hideGoreCommunities,
|
||||
hideAntiCommunities,
|
||||
hideVulgarCommunities,
|
||||
setHideAdultCommunities,
|
||||
setHideGoreCommunities,
|
||||
setHideAntiCommunities,
|
||||
setHideVulgarCommunities,
|
||||
],
|
||||
);
|
||||
|
||||
const [isTagFilterDropdownOpen, setIsTagFilterDropdownOpen] = useState(false);
|
||||
const toggleTagFilterDropdown = () => setIsTagFilterDropdownOpen(!isTagFilterDropdownOpen);
|
||||
const tagFilterDropdownRef = useRef<HTMLDivElement>(null);
|
||||
const tagFilterdropdownItemsRef = useRef<HTMLDivElement>(null);
|
||||
const tagFilterDropdownClass = isTagFilterDropdownOpen ? styles.visible : styles.hidden;
|
||||
|
||||
const allHidden = hideAdultCommunities && hideGoreCommunities && hideAntiCommunities && hideVulgarCommunities;
|
||||
|
||||
const handleToggleAll = async (event: React.MouseEvent) => {
|
||||
event.stopPropagation();
|
||||
const newState = !allHidden;
|
||||
|
||||
if (!newState) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['adult', 'gore', 'anti', 'vulgar'],
|
||||
isShowingAll: true,
|
||||
});
|
||||
}
|
||||
|
||||
setHideAdultCommunities(newState);
|
||||
setHideGoreCommunities(newState);
|
||||
setHideAntiCommunities(newState);
|
||||
setHideVulgarCommunities(newState);
|
||||
};
|
||||
|
||||
const handleToggleTag = async (event: React.MouseEvent, setter: (hide: boolean) => void, currentState: boolean, tagName: string) => {
|
||||
event.stopPropagation();
|
||||
const newState = !currentState;
|
||||
|
||||
if (!newState) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: [tagName],
|
||||
});
|
||||
}
|
||||
|
||||
setter(newState);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const handleClickOutside = (event: MouseEvent) => {
|
||||
if (tagFilterDropdownRef.current && !tagFilterDropdownRef.current.contains(event.target as Node)) {
|
||||
setIsTagFilterDropdownOpen(false);
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener('mousedown', handleClickOutside);
|
||||
return () => {
|
||||
document.removeEventListener('mousedown', handleClickOutside);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className={styles.dropdown} ref={tagFilterDropdownRef} onClick={toggleTagFilterDropdown}>
|
||||
<span className={styles.selectedTitle}>{t('tags')}</span>
|
||||
<div className={`${styles.dropChoices} ${styles.filterDropChoices} ${tagFilterDropdownClass}`} ref={tagFilterdropdownItemsRef}>
|
||||
<div className={styles.dropdownItem} onClick={handleToggleAll} style={{ cursor: 'pointer' }}>
|
||||
<span className={styles.dropdownItemText}>{allHidden ? t('show_all_nsfw') : t('hide_all_nsfw')}</span>
|
||||
</div>
|
||||
{tags.map((tag, index) => (
|
||||
<div key={index} className={styles.dropdownItem} onClick={(e) => handleToggleTag(e, tag.setter, tag.isHidden, tag.name)} style={{ cursor: 'pointer' }}>
|
||||
<span className={styles.dropdownItemText}>
|
||||
{tag.isHidden ? t('show') : t('hide')} <i>{tag.name}</i>
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
<Link to='/settings/content-options' className={`${styles.dropdownItem} ${styles.myCommunitiesItemButtonDotted}`}>
|
||||
{t('content_options')}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const SortTypesDropdown = () => {
|
||||
const { t } = useTranslation();
|
||||
const params = useParams();
|
||||
@@ -335,7 +223,6 @@ const TopBar = memo(() => {
|
||||
<div className={styles.headerArea}>
|
||||
<div className={styles.widthClip}>
|
||||
<CommunitiesDropdown />
|
||||
<TagFilterDropdown />
|
||||
<SortTypesDropdown />
|
||||
<TimeFilterDropdown />
|
||||
<div className={styles.srList}>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
// https://github.com/bitsocialhq/lists/blob/master/README.md
|
||||
export const nsfwTags = ['adult', 'gore', 'vulgar', 'anti'];
|
||||
@@ -6,6 +6,7 @@ import { SEEDIT_DIRECTORY_CODES, isResolvableCommunityAddress } from '../lib/uti
|
||||
export interface DefaultSubscription {
|
||||
title?: string;
|
||||
address: string;
|
||||
nsfw?: boolean;
|
||||
tags?: string[];
|
||||
directoryCode?: string;
|
||||
}
|
||||
@@ -14,8 +15,8 @@ const DIRECTORY_CODES: string[] = [...SEEDIT_DIRECTORY_CODES];
|
||||
|
||||
/**
|
||||
* Default communities derived from the seedit directories: each default directory code
|
||||
* resolves to its highest-ranked online candidate community, with title/tags coming from
|
||||
* the shared seedit-directories-defaults.json metadata. Replaces the retired
|
||||
* resolves to its highest-ranked online candidate community, with title/nsfw/tags coming
|
||||
* from the shared seedit-directories-defaults.json metadata. Replaces the retired
|
||||
* seedit-default-subscriptions.json multisub.
|
||||
*/
|
||||
export const useDefaultSubscriptions = (): DefaultSubscription[] => {
|
||||
@@ -32,6 +33,7 @@ export const useDefaultSubscriptions = (): DefaultSubscription[] => {
|
||||
address,
|
||||
directoryCode: code,
|
||||
...(list?.title ? { title: list.title } : {}),
|
||||
...(list?.nsfw ? { nsfw: list.nsfw } : {}),
|
||||
...(list?.tags ? { tags: list.tags } : {}),
|
||||
},
|
||||
];
|
||||
@@ -41,23 +43,19 @@ export const useDefaultSubscriptions = (): DefaultSubscription[] => {
|
||||
};
|
||||
|
||||
/**
|
||||
* Default communities filtered by the user's content options (NSFW tag filtering against
|
||||
* the directory tags).
|
||||
* Default communities filtered by the user's content options (NSFW directories hidden
|
||||
* unless the user opted in).
|
||||
*/
|
||||
export const useFilteredDefaultSubscriptions = (): DefaultSubscription[] => {
|
||||
const defaultSubscriptions = useDefaultSubscriptions();
|
||||
const { hideAdultCommunities, hideGoreCommunities, hideAntiCommunities, hideVulgarCommunities } = useContentOptionsStore();
|
||||
const { hideNsfwCommunities } = useContentOptionsStore();
|
||||
|
||||
return useMemo(() => {
|
||||
return defaultSubscriptions.filter((subscription) => {
|
||||
const tags = subscription.tags || [];
|
||||
if (hideAdultCommunities && tags.includes('adult')) return false;
|
||||
if (hideGoreCommunities && tags.includes('gore')) return false;
|
||||
if (hideAntiCommunities && tags.includes('anti')) return false;
|
||||
if (hideVulgarCommunities && tags.includes('vulgar')) return false;
|
||||
return true;
|
||||
});
|
||||
}, [defaultSubscriptions, hideAdultCommunities, hideGoreCommunities, hideAntiCommunities, hideVulgarCommunities]);
|
||||
if (!hideNsfwCommunities) {
|
||||
return defaultSubscriptions;
|
||||
}
|
||||
return defaultSubscriptions.filter((subscription) => !subscription.nsfw);
|
||||
}, [defaultSubscriptions, hideNsfwCommunities]);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
import { useMemo } from 'react';
|
||||
import { useDefaultSubscriptions } from './use-default-subscriptions';
|
||||
|
||||
const SENSITIVE_TAGS = ['adult', 'gore', 'anti', 'vulgar'];
|
||||
|
||||
export const useIsBroadlyNsfwCommunity = (communityAddress: string) => {
|
||||
const defaultCommunities = useDefaultSubscriptions();
|
||||
|
||||
return useMemo(() => {
|
||||
if (!communityAddress || !defaultCommunities) return false;
|
||||
|
||||
// Find the community in the default list
|
||||
const community = defaultCommunities.find((sub) => sub.address === communityAddress);
|
||||
|
||||
// Check if the community has any of the sensitive tags
|
||||
return Boolean(community?.tags?.some((tag) => SENSITIVE_TAGS.includes(tag)));
|
||||
}, [communityAddress, defaultCommunities]);
|
||||
};
|
||||
@@ -1,16 +1,18 @@
|
||||
import { useMemo } from 'react';
|
||||
import { useDefaultSubscriptions } from './use-default-subscriptions';
|
||||
|
||||
/**
|
||||
* Whether the community is the winner of a directory marked `nsfw: true` (e.g. "nsfw").
|
||||
* Non-directory communities have no NSFW metadata, so they return false.
|
||||
*/
|
||||
export const useIsNsfwCommunity = (communityAddress: string) => {
|
||||
const defaultCommunities = useDefaultSubscriptions();
|
||||
|
||||
return useMemo(() => {
|
||||
if (!communityAddress || !defaultCommunities) return false;
|
||||
|
||||
// Find the community in the default list
|
||||
const community = defaultCommunities.find((sub) => sub.address === communityAddress);
|
||||
|
||||
// Check if the community has adult or gore tags
|
||||
return Boolean(community?.tags?.includes('adult') || community?.tags?.includes('gore'));
|
||||
return Boolean(community?.nsfw);
|
||||
}, [communityAddress, defaultCommunities]);
|
||||
};
|
||||
|
||||
@@ -74,6 +74,25 @@ describe('normalizeDirectoryList', () => {
|
||||
expect(list?.communities.map((community) => community.address)).toEqual(['g-board.eth']);
|
||||
});
|
||||
|
||||
it('merges the nsfw boolean, preferring the defaults entry over the raw list', () => {
|
||||
const defaults = normalizeDirectoryDefaultsData({
|
||||
directories: { nsfw: { directoryCode: 'nsfw', nsfw: true } },
|
||||
});
|
||||
const fromDefaults = normalizeDirectoryList({ communities: [{ address: 'nsfw-winner.eth' }] }, 'nsfw', defaults);
|
||||
expect(fromDefaults?.nsfw).toBe(true);
|
||||
|
||||
const fromRaw = normalizeDirectoryList({ nsfw: true, communities: [{ address: 'raw-winner.eth' }] }, 'raw');
|
||||
expect(fromRaw?.nsfw).toBe(true);
|
||||
|
||||
const defaultsOverrideRaw = normalizeDirectoryList({ nsfw: true, communities: [{ address: 'sfw-winner.eth' }] }, 'nsfw', {
|
||||
directories: { nsfw: { directoryCode: 'nsfw', nsfw: false } },
|
||||
});
|
||||
expect(defaultsOverrideRaw?.nsfw).toBe(false);
|
||||
|
||||
const absent = normalizeDirectoryList({ communities: [{ address: 'plain-winner.eth' }] }, 'memes');
|
||||
expect(absent?.nsfw).toBeUndefined();
|
||||
});
|
||||
|
||||
it('rejects payloads without valid candidates', () => {
|
||||
expect(normalizeDirectoryList({ communities: [] }, 'memes')).toBeNull();
|
||||
expect(normalizeDirectoryList({ communities: [{ score: 1 }] }, 'memes')).toBeNull();
|
||||
|
||||
@@ -16,6 +16,7 @@ export interface DirectoryList {
|
||||
directoryCode: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
nsfw?: boolean;
|
||||
tags?: string[];
|
||||
createdAt?: number;
|
||||
updatedAt?: number;
|
||||
@@ -26,6 +27,7 @@ export interface DirectoryDefaultsEntry {
|
||||
directoryCode?: string;
|
||||
title?: string;
|
||||
description?: string;
|
||||
nsfw?: boolean;
|
||||
tags?: string[];
|
||||
}
|
||||
|
||||
@@ -66,6 +68,7 @@ const normalizeDirectoryDefaultsEntry = (code: string, raw: unknown): DirectoryD
|
||||
directoryCode: toString(raw.directoryCode) ?? code,
|
||||
...(toString(raw.title) ? { title: toString(raw.title)! } : {}),
|
||||
...(toString(raw.description) ? { description: toString(raw.description)! } : {}),
|
||||
...(typeof raw.nsfw === 'boolean' ? { nsfw: raw.nsfw } : {}),
|
||||
...(tags ? { tags } : {}),
|
||||
};
|
||||
};
|
||||
@@ -115,11 +118,13 @@ export const normalizeDirectoryList = (raw: unknown, fallbackCode: string, defau
|
||||
const title = toString(defaultEntry?.title) ?? toString(raw.title);
|
||||
const description = toString(defaultEntry?.description) ?? toString(raw.description);
|
||||
const tags = toTags(defaultEntry?.tags) ?? toTags(raw.tags);
|
||||
const nsfw = typeof defaultEntry?.nsfw === 'boolean' ? defaultEntry.nsfw : typeof raw.nsfw === 'boolean' ? raw.nsfw : undefined;
|
||||
|
||||
return {
|
||||
directoryCode,
|
||||
...(title ? { title } : {}),
|
||||
...(description ? { description } : {}),
|
||||
...(nsfw !== undefined ? { nsfw } : {}),
|
||||
...(tags ? { tags } : {}),
|
||||
...(toNumber(raw.createdAt) !== undefined ? { createdAt: toNumber(raw.createdAt) } : {}),
|
||||
...(toNumber(raw.updatedAt) !== undefined ? { updatedAt: toNumber(raw.updatedAt) } : {}),
|
||||
|
||||
@@ -1,65 +1,30 @@
|
||||
import { setAccount } from '@bitsocial/bitsocial-react-hooks';
|
||||
import type { DefaultSubscription } from '../../hooks/use-default-subscriptions';
|
||||
|
||||
const NSFW_SUBSCRIPTION_PROMPT_KEY_PREFIX = 'seedit-nsfw-subscription-prompt-shown-';
|
||||
const NSFW_SUBSCRIPTION_PROMPT_KEY = 'seedit-nsfw-subscription-prompt-shown';
|
||||
|
||||
export interface NSFWSubscriptionOptions {
|
||||
account: any;
|
||||
defaultCommunities: any[];
|
||||
tagsToShow: string[];
|
||||
isShowingAll?: boolean;
|
||||
defaultCommunities: DefaultSubscription[];
|
||||
}
|
||||
|
||||
const getPromptKey = (tagsToShow: string[], isShowingAll: boolean): string => {
|
||||
if (isShowingAll) {
|
||||
return `${NSFW_SUBSCRIPTION_PROMPT_KEY_PREFIX}all`;
|
||||
}
|
||||
// Sort tags to ensure consistent key regardless of order
|
||||
const sortedTags = [...tagsToShow].sort();
|
||||
return `${NSFW_SUBSCRIPTION_PROMPT_KEY_PREFIX}${sortedTags.join('-')}`;
|
||||
};
|
||||
|
||||
export const shouldShowNSFWSubscriptionPrompt = (tagsToShow: string[], isShowingAll: boolean = false): boolean => {
|
||||
const key = getPromptKey(tagsToShow, isShowingAll);
|
||||
return !localStorage.getItem(key);
|
||||
};
|
||||
|
||||
export const markNSFWSubscriptionPromptShown = (tagsToShow: string[], isShowingAll: boolean = false): void => {
|
||||
const key = getPromptKey(tagsToShow, isShowingAll);
|
||||
localStorage.setItem(key, 'true');
|
||||
};
|
||||
|
||||
export const getCommunitiesWithTags = (defaultCommunities: any[], tags: string[]): string[] => {
|
||||
return defaultCommunities
|
||||
.filter((sub) => {
|
||||
const subTags = sub.tags || [];
|
||||
return tags.some((tag) => subTags.includes(tag));
|
||||
})
|
||||
.map((sub) => sub.address);
|
||||
};
|
||||
|
||||
export const handleNSFWSubscriptionPrompt = async ({ account, defaultCommunities, tagsToShow, isShowingAll = false }: NSFWSubscriptionOptions): Promise<void> => {
|
||||
if (!shouldShowNSFWSubscriptionPrompt(tagsToShow, isShowingAll) || !account || !defaultCommunities.length) {
|
||||
export const handleNSFWSubscriptionPrompt = async ({ account, defaultCommunities }: NSFWSubscriptionOptions): Promise<void> => {
|
||||
if (localStorage.getItem(NSFW_SUBSCRIPTION_PROMPT_KEY) || !account || !defaultCommunities.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
const communitiesToSubscribe = getCommunitiesWithTags(defaultCommunities, tagsToShow);
|
||||
const communitiesToSubscribe = defaultCommunities.filter((sub) => sub.nsfw).map((sub) => sub.address);
|
||||
|
||||
if (communitiesToSubscribe.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const tagText = isShowingAll
|
||||
? 'all NSFW communities'
|
||||
: tagsToShow.length === 1
|
||||
? `communities tagged as "${tagsToShow[0]}"`
|
||||
: `communities tagged as: ${tagsToShow.join(', ')}`;
|
||||
|
||||
const confirmMessage = `You're now showing ${tagText}. Would you like to subscribe to these communities? This will add them to your subscriptions.`;
|
||||
const confirmMessage = `You're now showing NSFW communities. Would you like to subscribe to these communities? This will add them to your subscriptions.`;
|
||||
|
||||
const shouldSubscribe = window.confirm(confirmMessage);
|
||||
|
||||
// Mark as shown regardless of user choice
|
||||
markNSFWSubscriptionPromptShown(tagsToShow, isShowingAll);
|
||||
localStorage.setItem(NSFW_SUBSCRIPTION_PROMPT_KEY, 'true');
|
||||
|
||||
if (shouldSubscribe) {
|
||||
try {
|
||||
|
||||
@@ -3,15 +3,9 @@ import { persist } from 'zustand/middleware';
|
||||
|
||||
interface ContentOptionsState {
|
||||
blurNsfwThumbnails: boolean;
|
||||
hideAdultCommunities: boolean;
|
||||
hideGoreCommunities: boolean;
|
||||
hideAntiCommunities: boolean;
|
||||
hideVulgarCommunities: boolean;
|
||||
hideNsfwCommunities: boolean;
|
||||
setBlurNsfwThumbnails: (blur: boolean) => void;
|
||||
setHideAdultCommunities: (hide: boolean) => void;
|
||||
setHideGoreCommunities: (hide: boolean) => void;
|
||||
setHideAntiCommunities: (hide: boolean) => void;
|
||||
setHideVulgarCommunities: (hide: boolean) => void;
|
||||
setHideNsfwCommunities: (hide: boolean) => void;
|
||||
thumbnailDisplayOption: 'show' | 'hide' | 'community';
|
||||
setThumbnailDisplayOption: (option: 'show' | 'hide' | 'community') => void;
|
||||
mediaPreviewOption: 'autoExpandAll' | 'autoExpandExceptComments' | 'community';
|
||||
@@ -37,10 +31,7 @@ const useContentOptionsStore = create<ContentOptionsStore>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
blurNsfwThumbnails: true,
|
||||
hideAdultCommunities: true,
|
||||
hideGoreCommunities: true,
|
||||
hideAntiCommunities: true,
|
||||
hideVulgarCommunities: true,
|
||||
hideNsfwCommunities: true,
|
||||
hasAcceptedWarning: false,
|
||||
hideDefaultCommunities: false,
|
||||
enableLocalNotifications: false,
|
||||
@@ -50,10 +41,7 @@ const useContentOptionsStore = create<ContentOptionsStore>()(
|
||||
autoplayVideosOnComments: true,
|
||||
muteVideosOnComments: true,
|
||||
setBlurNsfwThumbnails: (blur) => set({ blurNsfwThumbnails: blur }),
|
||||
setHideAdultCommunities: (hide) => set({ hideAdultCommunities: hide }),
|
||||
setHideGoreCommunities: (hide) => set({ hideGoreCommunities: hide }),
|
||||
setHideAntiCommunities: (hide) => set({ hideAntiCommunities: hide }),
|
||||
setHideVulgarCommunities: (hide) => set({ hideVulgarCommunities: hide }),
|
||||
setHideNsfwCommunities: (hide) => set({ hideNsfwCommunities: hide }),
|
||||
setHasAcceptedWarning: (value) => set({ hasAcceptedWarning: value }),
|
||||
setHideDefaultCommunities: (hide) => set({ hideDefaultCommunities: hide }),
|
||||
setEnableLocalNotifications: (enable) => set({ enableLocalNotifications: enable }),
|
||||
@@ -65,6 +53,21 @@ const useContentOptionsStore = create<ContentOptionsStore>()(
|
||||
}),
|
||||
{
|
||||
name: 'content-options',
|
||||
version: 1,
|
||||
migrate: (persistedState, version) => {
|
||||
const state = persistedState as Record<string, unknown>;
|
||||
if (version === 0) {
|
||||
// Collapse the retired per-tag booleans (adult/gore/anti/vulgar) into the single
|
||||
// NSFW toggle: stay hidden only if the user still had every tag hidden.
|
||||
state.hideNsfwCommunities =
|
||||
state.hideAdultCommunities !== false && state.hideGoreCommunities !== false && state.hideAntiCommunities !== false && state.hideVulgarCommunities !== false;
|
||||
delete state.hideAdultCommunities;
|
||||
delete state.hideGoreCommunities;
|
||||
delete state.hideAntiCommunities;
|
||||
delete state.hideVulgarCommunities;
|
||||
}
|
||||
return state as unknown as ContentOptionsStore;
|
||||
},
|
||||
},
|
||||
),
|
||||
);
|
||||
|
||||
@@ -27,12 +27,12 @@ import Markdown from '../../components/markdown';
|
||||
import Label from '../../components/post/label';
|
||||
import Sidebar from '../../components/sidebar';
|
||||
import SubscribeButton from '../../components/subscribe-button';
|
||||
import { nsfwTags } from '../../constants/nsfw-tags';
|
||||
import _ from 'lodash';
|
||||
|
||||
interface SubplebbitProps {
|
||||
index?: number;
|
||||
subplebbit: CommunityType;
|
||||
nsfw?: boolean;
|
||||
tags?: string[];
|
||||
isUnsubscribed?: boolean;
|
||||
onUnsubscribe?: (address: string) => void;
|
||||
@@ -205,7 +205,7 @@ const Infobar = () => {
|
||||
</div>
|
||||
{currentTag && (
|
||||
<div className={styles.infobar}>
|
||||
{currentTag === 'nsfw' ? t('filtering_by_nsfw') + ' ("adult", "gore", "vulgar", "anti") —' : t('filtering_by_tag', { tag: currentTag }) + ' —'}{' '}
|
||||
{currentTag === 'nsfw' ? t('filtering_by_nsfw') + ' —' : t('filtering_by_tag', { tag: currentTag }) + ' —'}{' '}
|
||||
<Link className={styles.undoLink} to={basePath}>
|
||||
{t('undo')}
|
||||
</Link>
|
||||
@@ -215,7 +215,7 @@ const Infobar = () => {
|
||||
);
|
||||
};
|
||||
|
||||
const CommunityItem = ({ subplebbit, tags, index, isUnsubscribed, onUnsubscribe, directoryCode }: SubplebbitProps) => {
|
||||
const CommunityItem = ({ subplebbit, nsfw, tags, index, isUnsubscribed, onUnsubscribe, directoryCode }: SubplebbitProps) => {
|
||||
const { t } = useTranslation();
|
||||
const { address, createdAt, description, roles, shortAddress, settings, suggested, title } = subplebbit || {};
|
||||
const [avatarLoadFailed, setAvatarLoadFailed] = useState(false);
|
||||
@@ -248,8 +248,6 @@ const CommunityItem = ({ subplebbit, tags, index, isUnsubscribed, onUnsubscribe,
|
||||
const { allActiveUserCount } = useCommunityStats(canLoadCommunity ? { community: getCommunityIdentifier(address) } : undefined);
|
||||
const { isOffline, isOnlineStatusLoading, offlineTitle } = useIsCommunityOffline(subplebbit);
|
||||
|
||||
const isNsfw = tags?.some((tag) => nsfwTags.includes(tag));
|
||||
|
||||
const isMobile = useIsMobile();
|
||||
const descriptionText =
|
||||
description &&
|
||||
@@ -328,10 +326,10 @@ const CommunityItem = ({ subplebbit, tags, index, isUnsubscribed, onUnsubscribe,
|
||||
</span>
|
||||
{(userRole || isUserOwner) && (
|
||||
<Link to={`/s/${address}/settings`}>
|
||||
<span className={`${styles.moderatorIcon} ${isNsfw ? styles.addMarginRight : ''}`} title={userRole || 'owner'} />
|
||||
<span className={`${styles.moderatorIcon} ${nsfw ? styles.addMarginRight : ''}`} title={userRole || 'owner'} />
|
||||
</Link>
|
||||
)}
|
||||
{isNsfw && (
|
||||
{nsfw && (
|
||||
<Link to={getTagFilterRoute('nsfw')}>
|
||||
<span className={styles.over18icon} title='Filter NSFW communities' />
|
||||
</Link>
|
||||
@@ -381,19 +379,18 @@ const AccountSubplebbits = ({ viewRole }: { viewRole: string }) => {
|
||||
})
|
||||
.filter((communityData: any) => {
|
||||
if (currentTag) {
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === (communityData as any).address)?.tags;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === (communityData as any).address);
|
||||
|
||||
if (currentTag === 'nsfw') {
|
||||
return tags?.some((tag) => nsfwTags.includes(tag));
|
||||
} else {
|
||||
return tags?.includes(currentTag);
|
||||
return Boolean(defaultCommunity?.nsfw);
|
||||
}
|
||||
return Boolean(defaultCommunity?.tags?.includes(currentTag));
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.map((communityData, index) => {
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === (communityData as any).address)?.tags;
|
||||
return <CommunityItem key={index} subplebbit={communityData} tags={tags} index={index} />;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === (communityData as any).address);
|
||||
return <CommunityItem key={index} subplebbit={communityData} nsfw={defaultCommunity?.nsfw} tags={defaultCommunity?.tags} index={index} />;
|
||||
});
|
||||
|
||||
if (communityElements.length === 0) {
|
||||
@@ -437,24 +434,25 @@ const SubscriberSubplebbits = () => {
|
||||
// the user can still see and unsubscribe them; plain addresses wait for community data.
|
||||
if (!communityData && !directoryCode) return false;
|
||||
if (currentTag) {
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === address)?.tags;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === address);
|
||||
if (currentTag === 'nsfw') {
|
||||
return Boolean(tags?.some((tag) => nsfwTags.includes(tag)));
|
||||
return Boolean(defaultCommunity?.nsfw);
|
||||
}
|
||||
return Boolean(tags?.includes(currentTag));
|
||||
return Boolean(defaultCommunity?.tags?.includes(currentTag));
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.map(({ entry, directoryCode, address }, index) => {
|
||||
const communityData = address ? communityByAddress[address] : undefined;
|
||||
const subplebbit = communityData ?? ({ address: address ?? entry } as CommunityType);
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === address)?.tags;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === address);
|
||||
return (
|
||||
<CommunityItem
|
||||
key={entry}
|
||||
subplebbit={subplebbit}
|
||||
directoryCode={directoryCode}
|
||||
tags={tags}
|
||||
nsfw={defaultCommunity?.nsfw}
|
||||
tags={defaultCommunity?.tags}
|
||||
index={index}
|
||||
isUnsubscribed={isUnsubscribed(entry)}
|
||||
onUnsubscribe={handleUnsubscribe}
|
||||
@@ -487,19 +485,18 @@ const AllDefaultSubplebbits = () => {
|
||||
.filter((community): community is CommunityType => Boolean(community))
|
||||
.filter((communityData) => {
|
||||
if (currentTag) {
|
||||
const tags = defaultCommunitiesList.find((defaultSub) => defaultSub.address === (communityData as any).address)?.tags;
|
||||
const defaultCommunity = defaultCommunitiesList.find((defaultSub) => defaultSub.address === (communityData as any).address);
|
||||
|
||||
if (currentTag === 'nsfw') {
|
||||
return tags?.some((tag) => nsfwTags.includes(tag));
|
||||
} else {
|
||||
return tags?.includes(currentTag);
|
||||
return Boolean(defaultCommunity?.nsfw);
|
||||
}
|
||||
return Boolean(defaultCommunity?.tags?.includes(currentTag));
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.map((communityData, index) => {
|
||||
const tags = defaultCommunitiesList.find((defaultSub) => defaultSub.address === (communityData as any).address)?.tags;
|
||||
return <CommunityItem key={communityData.address || index} subplebbit={communityData} tags={tags} index={index} />;
|
||||
const defaultCommunity = defaultCommunitiesList.find((defaultSub) => defaultSub.address === (communityData as any).address);
|
||||
return <CommunityItem key={communityData.address || index} subplebbit={communityData} nsfw={defaultCommunity?.nsfw} tags={defaultCommunity?.tags} index={index} />;
|
||||
});
|
||||
|
||||
if (communityElements.length === 0) {
|
||||
@@ -541,24 +538,25 @@ const AllAccountSubplebbits = () => {
|
||||
const communityData = address ? communityByAddress[address] : undefined;
|
||||
if (!communityData && !directoryCode) return false;
|
||||
if (currentTag) {
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === address)?.tags;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === address);
|
||||
if (currentTag === 'nsfw') {
|
||||
return Boolean(tags?.some((tag) => nsfwTags.includes(tag)));
|
||||
return Boolean(defaultCommunity?.nsfw);
|
||||
}
|
||||
return Boolean(tags?.includes(currentTag));
|
||||
return Boolean(defaultCommunity?.tags?.includes(currentTag));
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.map(({ entry, directoryCode, address }, index) => {
|
||||
const communityData = address ? communityByAddress[address] : undefined;
|
||||
const subplebbit = communityData ?? ({ address: address ?? entry } as CommunityType);
|
||||
const tags = defaultCommunities.find((defaultSub) => defaultSub.address === address)?.tags;
|
||||
const defaultCommunity = defaultCommunities.find((defaultSub) => defaultSub.address === address);
|
||||
return (
|
||||
<CommunityItem
|
||||
key={entry}
|
||||
subplebbit={subplebbit}
|
||||
directoryCode={directoryCode}
|
||||
tags={tags}
|
||||
nsfw={defaultCommunity?.nsfw}
|
||||
tags={defaultCommunity?.tags}
|
||||
index={index}
|
||||
isUnsubscribed={isUnsubscribed(entry)}
|
||||
onUnsubscribe={handleUnsubscribe}
|
||||
|
||||
@@ -11,7 +11,7 @@ import useContentOptionsStore from '../../stores/use-content-options-store';
|
||||
import useFeedFiltersStore from '../../stores/use-feed-filters-store';
|
||||
import useFeedResetStore from '../../stores/use-feed-reset-store';
|
||||
import { usePinnedPostsStore } from '../../stores/use-pinned-posts-store';
|
||||
import { useIsBroadlyNsfwCommunity } from '../../hooks/use-is-broadly-nsfw-community';
|
||||
import { useIsNsfwCommunity } from '../../hooks/use-is-nsfw-community';
|
||||
import useIsCommunityOffline from '../../hooks/use-is-community-offline';
|
||||
import { useResolvedCommunityAddress } from '../../hooks/use-resolved-community-address';
|
||||
import { isResolvableCommunityAddress } from '../../lib/utils/directory-codes';
|
||||
@@ -345,10 +345,9 @@ const CommunityView = () => {
|
||||
}, [communityAddress, sortType, timeFilterName, searchQuery]);
|
||||
const lastVirtuosoState = lastVirtuosoStates?.[communityAddress + sortType + timeFilterName + searchQuery];
|
||||
|
||||
// over 18 warning for community with nsfw tag in multisub default list
|
||||
const { hideAdultCommunities, hideGoreCommunities, hideAntiCommunities, hideVulgarCommunities } = useContentOptionsStore();
|
||||
const hasUnhiddenAnyNsfwCommunity = !hideAdultCommunities || !hideGoreCommunities || !hideAntiCommunities || !hideVulgarCommunities;
|
||||
const isBroadlyNsfwCommunity = useIsBroadlyNsfwCommunity(communityAddress || '');
|
||||
// over 18 warning for community served by a directory marked nsfw
|
||||
const { hideNsfwCommunities } = useContentOptionsStore();
|
||||
const isHiddenNsfwCommunity = useIsNsfwCommunity(communityAddress || '') && hideNsfwCommunities;
|
||||
|
||||
const prevErrorMessageRef = useRef<string | undefined>(undefined);
|
||||
useEffect(() => {
|
||||
@@ -366,7 +365,7 @@ const CommunityView = () => {
|
||||
// Derive whether to show error directly from current feed state
|
||||
const shouldShowErrorToUser = Boolean(error?.message && feed.length === 0);
|
||||
|
||||
return isBroadlyNsfwCommunity && !hasUnhiddenAnyNsfwCommunity ? (
|
||||
return isHiddenNsfwCommunity ? (
|
||||
<Over18Warning />
|
||||
) : (
|
||||
<div className={styles.content}>
|
||||
|
||||
@@ -8,7 +8,7 @@ import { sortRepliesByBest } from '../../lib/utils/post-utils';
|
||||
import { isPendingPostView, isPostContextView } from '../../lib/utils/view-utils';
|
||||
import useContentOptionsStore from '../../stores/use-content-options-store';
|
||||
import useFeedResetStore from '../../stores/use-feed-reset-store';
|
||||
import { useIsBroadlyNsfwCommunity } from '../../hooks/use-is-broadly-nsfw-community';
|
||||
import { useIsNsfwCommunity } from '../../hooks/use-is-nsfw-community';
|
||||
import useReplies from '../../hooks/use-replies';
|
||||
import { getCommunityIdentifier } from '../../hooks/use-community-identifier';
|
||||
import useOptionalAccountComment from '../../hooks/use-account-comment';
|
||||
@@ -287,9 +287,9 @@ const PostPage = () => {
|
||||
const _communityAddr = isInPendingPostView ? pendingPost?.subplebbitAddress : communityAddress;
|
||||
const community = useCommunity(_communityAddr ? { community: getCommunityIdentifier(_communityAddr) } : undefined);
|
||||
|
||||
// over 18 warning for community with nsfw tag in multisub default list
|
||||
// over 18 warning for community served by a directory marked nsfw
|
||||
const { hasAcceptedWarning } = useContentOptionsStore();
|
||||
const isBroadlyNsfwCommunity = useIsBroadlyNsfwCommunity(communityAddress || '');
|
||||
const isNsfwCommunity = useIsNsfwCommunity(communityAddress || '');
|
||||
|
||||
useEffect(() => {
|
||||
if (post?.error) {
|
||||
@@ -310,7 +310,7 @@ const PostPage = () => {
|
||||
// Derive whether to show error directly from current post state
|
||||
const shouldShowErrorToUser = Boolean(post?.error && ((post?.replyCount > 0 && post?.replies?.length === 0) || post?.state === 'failed'));
|
||||
|
||||
return isBroadlyNsfwCommunity && !hasAcceptedWarning ? (
|
||||
return isNsfwCommunity && !hasAcceptedWarning ? (
|
||||
<Over18Warning />
|
||||
) : (
|
||||
<div className={styles.content}>
|
||||
|
||||
@@ -42,10 +42,6 @@
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.contentOptions .nsfwTag {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.categoryTitle {
|
||||
flex: 0 0 65px;
|
||||
|
||||
@@ -139,146 +139,28 @@ const CommunitiesOptions = () => {
|
||||
const { t } = useTranslation();
|
||||
const account = useAccount();
|
||||
const defaultCommunities = useDefaultSubscriptions();
|
||||
const {
|
||||
hideAdultCommunities,
|
||||
hideGoreCommunities,
|
||||
hideAntiCommunities,
|
||||
hideVulgarCommunities,
|
||||
setHideAdultCommunities,
|
||||
setHideGoreCommunities,
|
||||
setHideAntiCommunities,
|
||||
setHideVulgarCommunities,
|
||||
hideDefaultCommunities,
|
||||
setHideDefaultCommunities,
|
||||
} = useContentOptionsStore();
|
||||
const { hideNsfwCommunities, setHideNsfwCommunities, hideDefaultCommunities, setHideDefaultCommunities } = useContentOptionsStore();
|
||||
|
||||
return (
|
||||
<div className={styles.contentOptions}>
|
||||
<div className={styles.contentOptionTitle}>{t('default_communities')}</div>
|
||||
<div>
|
||||
<input
|
||||
type='checkbox'
|
||||
id='hideAdultCommunities'
|
||||
ref={(el) => {
|
||||
if (el) {
|
||||
const allHidden = hideAdultCommunities && hideGoreCommunities && hideAntiCommunities && hideVulgarCommunities;
|
||||
const someHidden = hideAdultCommunities || hideGoreCommunities || hideAntiCommunities || hideVulgarCommunities;
|
||||
|
||||
el.checked = allHidden;
|
||||
el.indeterminate = someHidden && !allHidden;
|
||||
}
|
||||
}}
|
||||
onChange={async (e) => {
|
||||
const newValue = e.target.checked;
|
||||
|
||||
// If showing (newValue = false), handle subscription prompt
|
||||
if (!newValue) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['adult', 'gore', 'anti', 'vulgar'],
|
||||
isShowingAll: true,
|
||||
});
|
||||
}
|
||||
|
||||
setHideAdultCommunities(newValue);
|
||||
setHideGoreCommunities(newValue);
|
||||
setHideAntiCommunities(newValue);
|
||||
setHideVulgarCommunities(newValue);
|
||||
}}
|
||||
/>
|
||||
<label htmlFor='hideAdultCommunities'>{t('hide_communities_tagged_as_nsfw')}</label>
|
||||
</div>
|
||||
<div className={styles.nsfwTag}>
|
||||
<label>
|
||||
<input
|
||||
type='checkbox'
|
||||
checked={hideAdultCommunities}
|
||||
checked={hideNsfwCommunities}
|
||||
onChange={async (e) => {
|
||||
const newValue = e.target.checked;
|
||||
|
||||
// If showing (newValue = false), handle subscription prompt
|
||||
if (!newValue) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['adult'],
|
||||
});
|
||||
await handleNSFWSubscriptionPrompt({ account, defaultCommunities });
|
||||
}
|
||||
|
||||
setHideAdultCommunities(newValue);
|
||||
setHideNsfwCommunities(newValue);
|
||||
}}
|
||||
/>
|
||||
{t('tagged_as_adult')}
|
||||
</label>
|
||||
</div>
|
||||
<div className={styles.nsfwTag}>
|
||||
<label>
|
||||
<input
|
||||
type='checkbox'
|
||||
checked={hideGoreCommunities}
|
||||
onChange={async (e) => {
|
||||
const newValue = e.target.checked;
|
||||
|
||||
// If showing (newValue = false), handle subscription prompt
|
||||
if (!newValue) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['gore'],
|
||||
});
|
||||
}
|
||||
|
||||
setHideGoreCommunities(newValue);
|
||||
}}
|
||||
/>
|
||||
{t('tagged_as_gore')}
|
||||
</label>
|
||||
</div>
|
||||
<div className={styles.nsfwTag}>
|
||||
<label>
|
||||
<input
|
||||
type='checkbox'
|
||||
checked={hideAntiCommunities}
|
||||
onChange={async (e) => {
|
||||
const newValue = e.target.checked;
|
||||
|
||||
// If showing (newValue = false), handle subscription prompt
|
||||
if (!newValue) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['anti'],
|
||||
});
|
||||
}
|
||||
|
||||
setHideAntiCommunities(newValue);
|
||||
}}
|
||||
/>
|
||||
{t('tagged_as_anti')}
|
||||
</label>
|
||||
</div>
|
||||
<div className={styles.nsfwTag}>
|
||||
<label>
|
||||
<input
|
||||
type='checkbox'
|
||||
checked={hideVulgarCommunities}
|
||||
onChange={async (e) => {
|
||||
const newValue = e.target.checked;
|
||||
|
||||
// If showing (newValue = false), handle subscription prompt
|
||||
if (!newValue) {
|
||||
await handleNSFWSubscriptionPrompt({
|
||||
account,
|
||||
defaultCommunities,
|
||||
tagsToShow: ['vulgar'],
|
||||
});
|
||||
}
|
||||
|
||||
setHideVulgarCommunities(newValue);
|
||||
}}
|
||||
/>
|
||||
{t('tagged_as_vulgar')}
|
||||
{t('hide_communities_tagged_as_nsfw')}
|
||||
</label>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
Reference in New Issue
Block a user