From 7b9ad2c416e549c475bb56a18e85648cd5e58ab7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 10:28:53 +0200 Subject: [PATCH 01/90] fix(deps): update dependency sass to v1.86.2 (#34358) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2437c9a22d..7a8269ed37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15738,8 +15738,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.86.1 - resolution: "sass@npm:1.86.1" + version: 1.86.2 + resolution: "sass@npm:1.86.2" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15750,7 +15750,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/16733c7cd7ebb180d12c7aa8fdf4647de857901ab55c369f810b3654aa1c4cd61bb0274981d7792f0ccdfb29755aab17afc13c9daad69d8ffc4d761a8314c93a + checksum: 10c0/fe40b63a19e867f460369d495bcdc979598c0b105c9d52164a7e9cc4e12ab91c27337702a1b58575f7da8fd08256b85fd2f34cc8275eb7c57699bfc5029f54a3 languageName: node linkType: hard From e1d67484229d9cc54a26d6cc90fdbc69ccf3166b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 10:42:19 +0200 Subject: [PATCH 02/90] New Crowdin Translations (automated) (#34360) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/ca.json | 1 + app/javascript/mastodon/locales/cs.json | 1 + app/javascript/mastodon/locales/cy.json | 1 + app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/de.json | 1 + app/javascript/mastodon/locales/es-AR.json | 1 + app/javascript/mastodon/locales/es-MX.json | 1 + app/javascript/mastodon/locales/es.json | 1 + app/javascript/mastodon/locales/fi.json | 1 + app/javascript/mastodon/locales/fo.json | 1 + app/javascript/mastodon/locales/gl.json | 1 + app/javascript/mastodon/locales/he.json | 13 ++++-- app/javascript/mastodon/locales/hu.json | 1 + app/javascript/mastodon/locales/is.json | 1 + app/javascript/mastodon/locales/kab.json | 1 + app/javascript/mastodon/locales/nl.json | 1 + app/javascript/mastodon/locales/pt-PT.json | 1 + app/javascript/mastodon/locales/sq.json | 1 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/vi.json | 1 + app/javascript/mastodon/locales/zh-TW.json | 1 + config/locales/he.yml | 38 ++++++++++++++++-- config/locales/lv.yml | 46 ++++++++++++++++++++++ 23 files changed, 110 insertions(+), 7 deletions(-) diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index cdf79c8edc..a282796a50 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicació} other {{counter} publicacions}}", "account.unblock": "Desbloca @{name}", "account.unblock_domain": "Desbloca el domini {domain}", + "account.unblock_domain_short": "Desbloca", "account.unblock_short": "Desbloca", "account.unendorse": "No recomanis en el perfil", "account.unfollow": "Deixa de seguir", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index deced039c2..625ea7ce96 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} many {{counter} příspěvků} other {{counter} příspěvků}}", "account.unblock": "Odblokovat @{name}", "account.unblock_domain": "Odblokovat doménu {domain}", + "account.unblock_domain_short": "Odblokovat", "account.unblock_short": "Odblokovat", "account.unendorse": "Nezvýrazňovat na profilu", "account.unfollow": "Přestat sledovat", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index c107cbebe3..27ecc6e8eb 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} postiad} two {{counter} bostiad} few {{counter} phostiad} many {{counter} postiad} other {{counter} postiad}}", "account.unblock": "Dadrwystro @{name}", "account.unblock_domain": "Dadrwystro parth {domain}", + "account.unblock_domain_short": "Dadrwystro", "account.unblock_short": "Dadrwystro", "account.unendorse": "Peidio a'i ddangos ar fy mhroffil", "account.unfollow": "Dad-ddilyn", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index c5d7fc66f5..d8695c194c 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", "account.unblock": "Fjern blokering af @{name}", "account.unblock_domain": "Fjern blokering af domænet {domain}", + "account.unblock_domain_short": "Afblokér", "account.unblock_short": "Fjern blokering", "account.unendorse": "Fjern visning på din profil", "account.unfollow": "Følg ikke længere", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index debb2db480..6a14858d11 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "account.unblock": "{name} nicht mehr blockieren", "account.unblock_domain": "Blockierung von {domain} aufheben", + "account.unblock_domain_short": "Entsperren", "account.unblock_short": "Blockierung aufheben", "account.unendorse": "Im Profil nicht mehr empfehlen", "account.unfollow": "Entfolgen", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 724fd5d274..2eb96dd5bd 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Desbloquear dominio {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "No destacar en el perfil", "account.unfollow": "Dejar de seguir", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 0fe0f1cad3..dbaf1955e4 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Mostrar a {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "No mostrar en el perfil", "account.unfollow": "Dejar de seguir", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 8d6bb4cdbe..be6a0f95ee 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "account.unblock": "Desbloquear a @{name}", "account.unblock_domain": "Desbloquear dominio {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "No mostrar en el perfil", "account.unfollow": "Dejar de seguir", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 3e5a327301..4be3211045 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}}", "account.unblock": "Kumoa käyttäjän @{name} esto", "account.unblock_domain": "Kumoa verkkotunnuksen {domain} esto", + "account.unblock_domain_short": "Kumoa esto", "account.unblock_short": "Kumoa esto", "account.unendorse": "Kumoa suosittelu profiilissasi", "account.unfollow": "Älä seuraa", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 06ab07023e..636d32729c 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} postur} other {{counter} postar}}", "account.unblock": "Banna ikki @{name}", "account.unblock_domain": "Banna ikki økisnavnið {domain}", + "account.unblock_domain_short": "Banna ikki", "account.unblock_short": "Banna ikki", "account.unendorse": "Vís ikki á vanga", "account.unfollow": "Fylg ikki", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 8106c86714..6eb5457043 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Amosar {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "Non amosar no perfil", "account.unfollow": "Deixar de seguir", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index f31b862a03..f5c6e66f9b 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -64,8 +64,9 @@ "account.show_reblogs": "הצג הדהודים מאת @{name}", "account.statuses_counter": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "account.unblock": "להסיר חסימה ל- @{name}", - "account.unblock_domain": "הסירי את החסימה של קהילת {domain}", - "account.unblock_short": "הסר חסימה", + "account.unblock_domain": "הסרת החסימה של קהילת {domain}", + "account.unblock_domain_short": "הסרת חסימה", + "account.unblock_short": "הסרת חסימה", "account.unendorse": "אל תקדם בפרופיל", "account.unfollow": "הפסקת מעקב", "account.unmute": "הפסקת השתקת @{name}", @@ -905,6 +906,12 @@ "video.expand": "להרחיב וידאו", "video.fullscreen": "מסך מלא", "video.hide": "להסתיר וידאו", + "video.mute": "השתקה", "video.pause": "השהיה", - "video.play": "ניגון" + "video.play": "ניגון", + "video.skip_backward": "דילוג אחורה", + "video.skip_forward": "דילוג קדימה", + "video.unmute": "ביטול השתקה", + "video.volume_down": "הנמכת עוצמת השמע", + "video.volume_up": "הגברת עוצמת שמע" } diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 942c96ffec..2caba889e3 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}", "account.unblock": "@{name} letiltásának feloldása", "account.unblock_domain": "{domain} domain tiltásának feloldása", + "account.unblock_domain_short": "Tiltás feloldása", "account.unblock_short": "Tiltás feloldása", "account.unendorse": "Ne jelenjen meg a profilodon", "account.unfollow": "Követés megszüntetése", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 47cd31fd6b..db257927fc 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} færsla} other {{counter} færslur}}", "account.unblock": "Aflétta útilokun af @{name}", "account.unblock_domain": "Aflétta útilokun lénsins {domain}", + "account.unblock_domain_short": "Aflétta útilokun", "account.unblock_short": "Hætta að loka á", "account.unendorse": "Ekki birta á notandasniði", "account.unfollow": "Hætta að fylgja", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index f62d32226f..912b7b273a 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -61,6 +61,7 @@ "account.statuses_counter": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}}", "account.unblock": "Serreḥ i @{name}", "account.unblock_domain": "Ssken-d {domain}", + "account.unblock_domain_short": "Serreḥ", "account.unblock_short": "Serreḥ", "account.unendorse": "Ur ttwellih ara fell-as deg umaɣnu-inek", "account.unfollow": "Ur ṭṭafaṛ ara", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index c1aef7ff7d..a4af036527 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", "account.unblock": "@{name} deblokkeren", "account.unblock_domain": "{domain} niet langer blokkeren", + "account.unblock_domain_short": "Deblokkeren", "account.unblock_short": "Deblokkeren", "account.unendorse": "Niet op profiel weergeven", "account.unfollow": "Ontvolgen", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index d5df6e59cf..32af518415 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Desbloquear o domínio {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "Não destacar no perfil", "account.unfollow": "Deixar de seguir", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 116b3906a2..a80b3df80d 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} postim} other {{counter} postime}}", "account.unblock": "Zhbllokoje @{name}", "account.unblock_domain": "Zhblloko përkatësinë {domain}", + "account.unblock_domain_short": "Zhbllokoje", "account.unblock_short": "Zhbllokoje", "account.unendorse": "Mos e përfshi në profil", "account.unfollow": "Resht së ndjekuri", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 85b0125c07..eb7931f02c 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}", "account.unblock": "Розблокувати @{name}", "account.unblock_domain": "Розблокувати {domain}", + "account.unblock_domain_short": "Розблокувати", "account.unblock_short": "Розблокувати", "account.unendorse": "Не публікувати у профілі", "account.unfollow": "Відписатися", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index b179f50fa9..21a7e5da47 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, other {{counter} Tút}}", "account.unblock": "Bỏ chặn @{name}", "account.unblock_domain": "Bỏ ẩn {domain}", + "account.unblock_domain_short": "Bỏ chặn", "account.unblock_short": "Bỏ chặn", "account.unendorse": "Ngưng tôn vinh người này", "account.unfollow": "Bỏ theo dõi", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 710814f12d..f2b8665e49 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, other {{count} 則嘟文}}", "account.unblock": "解除封鎖 @{name}", "account.unblock_domain": "解除封鎖網域 {domain}", + "account.unblock_domain_short": "解除封鎖", "account.unblock_short": "解除封鎖", "account.unendorse": "取消於個人檔案推薦對方", "account.unfollow": "取消跟隨", diff --git a/config/locales/he.yml b/config/locales/he.yml index f9b2970fd0..6d575bc564 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -232,7 +232,7 @@ he: silence_account: הגבלת חשבון suspend_account: השעיית חשבון unassigned_report: ביטול הקצאת דו"ח - unblock_email_account: ביטול חסימת כתובת דוא"ל + unblock_email_account: הסרת חסימת כתובת דוא"ל unsensitive_account: ביטול Force-Sensitive לחשבון unsilence_account: ביטול השתקת חשבון unsuspend_account: ביטול השעיית חשבון @@ -263,11 +263,11 @@ he: create_user_role_html: "%{name} יצר את התפקיד של %{target}" demote_user_html: "%{name} הוריד/ה בדרגה את המשתמש %{target}" destroy_announcement_html: "%{name} מחק/ה את ההכרזה %{target}" - destroy_canonical_email_block_html: "%{name} הסיר/ה חסימה מדואל %{target}" + destroy_canonical_email_block_html: "%{name} הסירו חסימה מדואל %{target}" destroy_custom_emoji_html: "%{name} מחק אמוג'י של %{target}" destroy_domain_allow_html: "%{name} לא התיר/ה פדרציה עם הדומיין %{target}" - destroy_domain_block_html: "%{name} הסיר/ה חסימה מהדומיין %{target}" - destroy_email_domain_block_html: '%{name} הסיר/ה חסימה מדומיין הדוא"ל %{target}' + destroy_domain_block_html: החסימה על מתחם %{target} הוסרה ע"י %{name} + destroy_email_domain_block_html: הוסרה חסימת מתחם דוא"ל %{target} בידי %{name} destroy_instance_html: "%{name} טיהר/ה את הדומיין %{target}" destroy_ip_block_html: "%{name} מחק/ה את הכלל עבור IP %{target}" destroy_relay_html: "%{name} מחקו את הממסר %{target}" @@ -495,6 +495,36 @@ he: new: title: יבוא רשימת שרתים חסומים no_file: לא נבחר קובץ + fasp: + debug: + callbacks: + created_at: תאריך יצירה + delete: מחיקה + ip: כתובת IP + request_body: גוף הבקשה + title: ניפוי תקלות בקריאות חוזרות + providers: + active: פעילים + base_url: קישור בסיס + callback: קריאה חוזרת + delete: מחיקה + edit: עריכת ספק + finish_registration: סיום הרשמה + name: שם + providers: ספקים + public_key_fingerprint: טביעת האצבע של המפתח הציבורי + registration_requested: נדרשת הרשמה + registrations: + confirm: אישור + description: קיבלת הרשמה דרך FASP. יש לדחות אותה אם לא ביקשת את ההרשמה הזו מיוזמתך. אם זו בקשה מיוזמתך, יש להשוות בהקפדה אם השם וטביעת האצבע של המפתח הציבורי תואמים לפני אישור הרישום. + reject: דחיה + title: אישור הרשמת FASP + save: שמירה + select_capabilities: בחירת יכולות + sign_in: כניסה + status: מצב + title: ספקי משנה לפדיוורס + title: פרוטוקול FASP follow_recommendations: description_html: "עקבו אחר ההמלצות על מנת לעזור למשתמשים חדשים למצוא תוכן מעניין. במידה ומשתמש לא תקשר מספיק עם משתמשים אחרים כדי ליצור המלצות מעקב, חשבונות אלה יומלצו במקום. הם מחושבים מחדש על בסיסי יומיומי מתערובת של החשבונות הפעילים ביותר עם החשבונות הנעקבים ביותר עבור שפה נתונה." language: עבור שפה diff --git a/config/locales/lv.yml b/config/locales/lv.yml index af65e9e02b..e9bbe35e47 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -304,6 +304,7 @@ lv: title: Audita žurnāls unavailable_instance: "(domēna vārds nav pieejams)" announcements: + back: Atgriezties pie paziņojumiem destroyed_msg: Paziņojums sekmīgi izdzēsts. edit: title: Labot paziņojumu @@ -312,6 +313,9 @@ lv: new: create: Izveidot paziņojumu title: Jauns paziņojums + preview: + explanation_html: 'E-pasta ziņojums tiks nosūtīts %{display_count} lietotājiem. Šis teksts tiks iekļauts e-pasta ziņojumā:' + title: Priekšskatīt paziņojumu publish: Publicēt published_msg: Paziņojums sekmīgi publicēts. scheduled_for: Plānots uz %{time} @@ -1422,6 +1426,48 @@ lv: merge_long: Saglabāt esošos ierakstus un pievienot jaunus overwrite: Pārrakstīt overwrite_long: Nomainīt pašreizējos ierakstus ar jauniem + overwrite_preambles: + blocking_html: + one: Tu gatavojies aizstāt savu lieguma sarakstu ar līdz %{count} kontam no %{filename}. + other: Tu gatavojies aizstāt savu lieguma sarakstu ar līdz %{count} kontiem no %{filename}. + zero: Tu gatavojies aizstāt savu lieguma sarakstu ar līdz %{count} kontiem no %{filename}. + bookmarks_html: + one: Tu gatavojies aizstāt savas grāmatzīmes ar līdz %{count} ierakstam no %{filename}. + other: Tu gatavojies aizstāt savas grāmatzīmes ar līdz %{count} ierakstiem no %{filename}. + zero: Tu gatavojies aizstāt savas grāmatzīmes ar līdz %{count} ierakstiem no %{filename}. + domain_blocking_html: + one: Tu gatavojies aizstāt savu liegto domēnu sarakstu ar līdz %{count} domēnam no %{filename}. + other: Tu gatavojies aizstāt savu liegto domēnu sarakstu ar līdz %{count} domēniem no %{filename}. + zero: Tu gatavojies aizstāt savu liegto domēnu sarakstu ar līdz %{count} domēniem no %{filename}. + following_html: + one: Tu gatavojies sekot līdz %{count} kontam no %{filename} un pārtrauksi sekot citiem. + other: Tu gatavojies sekot līdz %{count} kontiem no %{filename} un pārtrauksi sekot citiem. + zero: Tu gatavojies sekot līdz %{count} kontiem no %{filename} un pārtrauksi sekot citiem. + lists_html: + one: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{count} kontam tiks pievienoti jaunajos sarakstos. + other: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{count} kontiem tiks pievienoti jaunajos sarakstos. + zero: Tu gatavojies aizstāt savus sarakstus ar %{filename} saturu. Līdz %{count} kontiem tiks pievienoti jaunajos sarakstos. + muting_html: + one: Tu gatavojies aizstāt savu apklusināto kontu sarakstu ar līdz %{count} kontam no %{filename}. + other: Tu gatavojies aizstāt savu apklusināto kontu sarakstu ar līdz %{count} kontiem no %{filename}. + zero: Tu gatavojies aizstāt savu apklusināto kontu sarakstu ar līdz %{count} kontiem no %{filename}. + preambles: + blocking_html: + one: Tu gatavojies liegt līdz %{count} kontam no %{filename}. + other: Tu gatavojies liegt līdz %{count} kontiem no %{filename}. + zero: Tu gatavojies liegt līdz %{count} kontiem no %{filename}. + bookmarks_html: + one: Tu gatavojies pievienot līdz %{count} ierakstam no %{filename} savām grāmatzīmēm. + other: Tu gatavojies pievienot līdz %{count} ierakstiem no %{filename} savām grāmatzīmēm. + zero: Tu gatavojies pievienot līdz %{count} ierakstiem no %{filename} savām grāmatzīmēm. + domain_blocking_html: + one: Tu gatavojies liegt līdz %{count} domēnam no %{filename}. + other: Tu gatavojies liegt līdz %{count} domēniem no %{filename}. + zero: Tu gatavojies liegt līdz %{count} domēniem no %{filename}. + following_html: + one: Tu gatavojies sekot līdz %{count} kontam no %{filename}. + other: Tu gatavojies sekot līdz %{count} kontiem no %{filename}. + zero: Tu gatavojies sekot līdz %{count} kontiem no %{filename}. preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē. recent_imports: Nesen importēts states: From d65c3e95ad83d24a52aa8b4c62d93b3770067c74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 17:49:10 +0200 Subject: [PATCH 03/90] chore(deps): update dependency irb to v1.15.2 (#34363) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 80049a7dc2..6aeee348be 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -328,7 +328,7 @@ GEM activesupport (>= 3.0) nokogiri (>= 1.6) io-console (0.8.0) - irb (1.15.1) + irb (1.15.2) pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) From 5859abf2ff6a5d9dd4d8c772add97ad006254793 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 17:49:14 +0200 Subject: [PATCH 04/90] chore(deps): update dependency rubocop to v1.75.2 (#34364) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6aeee348be..3e9b5458b4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -740,7 +740,7 @@ GEM rspec-mocks (~> 3.0) sidekiq (>= 5, < 9) rspec-support (3.13.2) - rubocop (1.75.1) + rubocop (1.75.2) json (~> 2.3) language_server-protocol (~> 3.17.0.2) lint_roller (~> 1.1.0) @@ -748,10 +748,10 @@ GEM parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.43.0, < 2.0) + rubocop-ast (>= 1.44.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.43.0) + rubocop-ast (1.44.0) parser (>= 3.3.7.2) prism (~> 1.4) rubocop-capybara (2.22.1) From 58e3e43e06aeb3e968aa1063f13229d3453a9dd8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 09:24:27 +0200 Subject: [PATCH 05/90] New Crowdin Translations (automated) (#34366) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/cs.json | 8 ++--- app/javascript/mastodon/locales/kab.json | 2 ++ app/javascript/mastodon/locales/tr.json | 1 + app/javascript/mastodon/locales/ug.json | 37 ++++++++++++++++-------- config/locales/lv.yml | 9 ++++++ config/locales/simple_form.de.yml | 2 +- 6 files changed, 42 insertions(+), 17 deletions(-) diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 625ea7ce96..4ffef4f392 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -80,7 +80,7 @@ "admin.dashboard.retention.cohort_size": "Noví uživatelé", "admin.impact_report.instance_accounts": "Profily účtů, které by byli odstaněny", "admin.impact_report.instance_followers": "Sledující, o které by naši uživatelé přišli", - "admin.impact_report.instance_follows": "Sledující, o které by naši uživatelé přišli", + "admin.impact_report.instance_follows": "Sledující, o které by jejich uživatelé přišli", "admin.impact_report.title": "Shrnutí dopadu", "alert.rate_limited.message": "Zkuste to prosím znovu po {retry_time, time, medium}.", "alert.rate_limited.title": "Spojení omezena", @@ -102,7 +102,7 @@ "annual_report.summary.archetype.replier": "Sociální motýlek", "annual_report.summary.followers.followers": "sledujících", "annual_report.summary.followers.total": "{count} celkem", - "annual_report.summary.here_it_is": "Zde je tvůj {year} v přehledu:", + "annual_report.summary.here_it_is": "Zde je tvůj rok {year} v přehledu:", "annual_report.summary.highlighted_post.by_favourites": "nejvíce oblíbený příspěvek", "annual_report.summary.highlighted_post.by_reblogs": "nejvíce boostovaný příspěvek", "annual_report.summary.highlighted_post.by_replies": "příspěvek s nejvíce odpověďmi", @@ -268,7 +268,7 @@ "domain_pill.activitypub_like_language": "ActivityPub je jako jazyk, kterým Mastodon mluví s jinými sociálními sítěmi.", "domain_pill.server": "Server", "domain_pill.their_handle": "Handle:", - "domain_pill.their_server": "Jejich digitální domov, kde žijí jejich všechny příspěvky.", + "domain_pill.their_server": "Jejich digitální domov, kde žijí všechny jejich příspěvky.", "domain_pill.their_username": "Jejich jedinečný identifikátor na jejich serveru. Je možné, že na jiných serverech jsou uživatelé se stejným uživatelským jménem.", "domain_pill.username": "Uživatelské jméno", "domain_pill.whats_in_a_handle": "Co obsahuje handle?", @@ -573,7 +573,7 @@ "notification.label.private_reply": "Privátní odpověď", "notification.label.reply": "Odpověď", "notification.mention": "Zmínka", - "notification.mentioned_you": "{name} vás zmínil", + "notification.mentioned_you": "{name} vás zmínil*a", "notification.moderation-warning.learn_more": "Zjistit více", "notification.moderation_warning": "Obdrželi jste varování od moderátorů", "notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 912b7b273a..c4d9d75c0e 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -248,6 +248,7 @@ "filter_modal.select_filter.search": "Nadi neɣ snulfu-d", "filter_modal.select_filter.title": "Sizdeg tassufeɣt-a", "filter_modal.title.status": "Sizdeg tassufeɣt", + "filtered_notifications_banner.title": "Ilɣa yettwasizdgen", "firehose.all": "Akk", "firehose.local": "Deg uqeddac-ayi", "firehose.remote": "Iqeddacen nniḍen", @@ -426,6 +427,7 @@ "notification_requests.edit_selection": "Ẓreg", "notification_requests.exit_selection": "Immed", "notification_requests.notifications_from": "Alɣuten sɣur {name}", + "notification_requests.title": "Ilɣa yettwasizdgen", "notifications.clear": "Sfeḍ alɣuten", "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk alɣuten-inek·em i lebda?", "notifications.column_settings.admin.report": "Ineqqisen imaynuten:", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index e95efc642a..a33317ac9c 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}", "account.unblock": "@{name} adlı kişinin engelini kaldır", "account.unblock_domain": "{domain} alan adının engelini kaldır", + "account.unblock_domain_short": "Engeli kaldır", "account.unblock_short": "Engeli kaldır", "account.unendorse": "Profilimde öne çıkarma", "account.unfollow": "Takibi bırak", diff --git a/app/javascript/mastodon/locales/ug.json b/app/javascript/mastodon/locales/ug.json index 378f688ba8..e550d7e678 100644 --- a/app/javascript/mastodon/locales/ug.json +++ b/app/javascript/mastodon/locales/ug.json @@ -1,21 +1,34 @@ { - "about.blocks": "ئوتتۇراھال مۇلازىمېتىر", - "about.contact": "ئالاقىلاشقۇچى:", - "account.badges.bot": "Bot", - "account.cancel_follow_request": "Withdraw follow request", - "account.posts": "Toots", - "account.posts_with_replies": "Toots and replies", + "about.blocks": "باشقۇرۇلىدىغان مۇلازىمېتىر", + "about.contact": "ئالاقە:", + "about.disclaimer": "Mastodon ھەقسىز، ئوچۇق كودلۇق يۇمشاق دېتال تاۋار ماركىسى Mastodon gGmbH غا تەۋە.", + "about.domain_blocks.no_reason_available": "سەۋەبىنى ئىشلەتكىلى بولمايدۇ", + "account.badges.bot": "ماشىنا ئادەم", + "account.cancel_follow_request": "ئەگىشىش ئىلتىماسىدىن ۋاز كەچ", + "account.posts": "يازما", + "account.posts_with_replies": "يازما ۋە ئىنكاس", + "account.report": "@{name} نى پاش قىل", "account.requested": "Awaiting approval", - "account_note.placeholder": "Click to add a note", - "column.pins": "Pinned toot", - "community.column_settings.media_only": "Media only", + "account_note.placeholder": "چېكىلسە ئىزاھات قوشىدۇ", + "column.pins": "چوققىلانغان يازما", + "community.column_settings.media_only": "ۋاسىتەلا", "compose_form.encryption_warning": "Posts on Mastodon are not end-to-end encrypted. Do not share any dangerous information over Mastodon.", "compose_form.hashtag_warning": "This post won't be listed under any hashtag as it is unlisted. Only public posts can be searched by hashtag.", "compose_form.placeholder": "What is on your mind?", - "compose_form.publish_form": "Publish", - "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.publish_form": "يېڭى يازما", + "compose_form.reply": "جاۋاب", + "compose_form.save_changes": "يېڭىلا", + "compose_form.spoiler.marked": "مەزمۇن ئاگاھلاندۇرۇشىنى چىقىرىۋەت", "compose_form.spoiler.unmarked": "Text is not hidden", - "confirmations.delete.message": "Are you sure you want to delete this status?", + "compose_form.spoiler_placeholder": "مەزمۇن ئاگاھلاندۇرۇشى (تاللاشچان)", + "confirmation_modal.cancel": "ۋاز كەچ", + "confirmations.block.confirm": "توس", + "confirmations.delete.message": "بۇ يازمىنى راستىنلا ئۆچۈرەمسىز؟", + "confirmations.delete.title": "يازما ئۆچۈرەمدۇ؟", + "confirmations.delete_list.confirm": "ئۆچۈر", + "confirmations.delete_list.message": "بۇ تىزىمنى راستتىنلا مەڭگۈلۈك ئۆچۈرەمسىز؟", + "confirmations.delete_list.title": "تىزىمنى ئۆچۈرەمدۇ؟", + "confirmations.discard_edit_media.confirm": "تاشلىۋەت", "embed.instructions": "Embed this status on your website by copying the code below.", "empty_column.account_timeline": "No toots here!", "empty_column.bookmarked_statuses": "You don't have any bookmarked toots yet. When you bookmark one, it will show up here.", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index e9bbe35e47..07fc9c9780 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -459,7 +459,9 @@ lv: create: Pievienot domēnu resolve: Atrisināt domēnu title: Liegt jaunu e-pasta domēnu + no_email_domain_block_selected: Neviens e-pasta domēna bloks netika mainīts, jo neviens netika atlasīts not_permitted: Nav atļauta + resolved_dns_records_hint_html: Domēna vārds saistās ar zemāk norādītajiem MX domēniem, kuri beigās ir atbildīgi par e-pasta pieņemšana. MX domēna liegšana liegs reģistrēšanos no jebkuras e-pasta adreses, kas izmanto to pašu MX domēnu, pat ja redzamais domēna vārds ir atšķirīgs. Jāuzmanās, lai neliegtu galvenos e-pasta pakalpojuma sniedzējus. resolved_through_html: Atrisināts, izmantojot %{domain} title: Bloķētie e-pasta domēni export_domain_allows: @@ -477,6 +479,13 @@ lv: new: title: Importēt bloķētos domēnus no_file: Nav atlasīts neviens fails + fasp: + debug: + callbacks: + created_at: Izveidots + delete: Izdzēst + ip: IP adrese + request_body: Pieprasījuma saturs follow_recommendations: description_html: "Sekošanas ieteikumi palīdz jauniem lietotājiem ātri arast saistošu saturu. Kad lietotājs nav pietiekami mijiedarbojies ar citiem, lai veidotos pielāgoti sekošanas iteikumi, tiek ieteikti šie konti. Tie tiek pārskaitļoti ik dienas, izmantojot kontu, kuriem ir augstākās nesenās iesaistīšanās un lielākais vietējo sekotāju skaits norādītajā valodā." language: Valodai diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index 016ed4b25a..342a1dbe1c 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -84,7 +84,7 @@ de: backups_retention_period: Nutzer*innen haben die Möglichkeit, Archive ihrer Beiträge zu erstellen, die sie später herunterladen können. Wenn ein positiver Wert gesetzt ist, werden diese Archive nach der festgelegten Anzahl von Tagen automatisch aus deinem Speicher gelöscht. bootstrap_timeline_accounts: Diese Konten werden bei den Follower-Empfehlungen für neu registrierte Nutzer*innen oben angeheftet. closed_registrations_message: Wird angezeigt, wenn Registrierungen deaktiviert sind - content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Das betrifft auch Beiträge, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Das Verwenden dieser Option richtet sich ausschließlich an Server für spezielle Zwecke und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist. + content_cache_retention_period: Sämtliche Beiträge von anderen Servern (einschließlich geteilte Beiträge und Antworten) werden, unabhängig von der Interaktion der lokalen Nutzer*innen mit diesen Beiträgen, nach der festgelegten Anzahl von Tagen gelöscht. Das betrifft auch Beiträge, die von lokalen Nutzer*innen favorisiert oder als Lesezeichen gespeichert wurden. Private Erwähnungen zwischen Nutzer*innen von verschiedenen Servern werden ebenfalls verloren gehen und können nicht wiederhergestellt werden. Diese Option richtet sich ausschließlich an Server mit speziellen Zwecken und wird die allgemeine Nutzungserfahrung beeinträchtigen, wenn sie für den allgemeinen Gebrauch aktiviert ist. custom_css: Du kannst benutzerdefinierte Stile auf die Web-Version von Mastodon anwenden. favicon: WEBP, PNG, GIF oder JPG. Überschreibt das Standard-Mastodon-Favicon mit einem eigenen Symbol. mascot: Überschreibt die Abbildung in der erweiterten Weboberfläche. From 4d3758308a5c65ecdc8d34631abbbc2c50f9f82e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 4 Apr 2025 03:24:32 -0400 Subject: [PATCH 06/90] Use bundler version 2.6.7 (#34362) --- Gemfile.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 3e9b5458b4..1491251676 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -94,7 +94,7 @@ GEM ast (2.4.3) attr_required (1.0.2) aws-eventstream (1.3.2) - aws-partitions (1.1066.0) + aws-partitions (1.1080.0) aws-sdk-core (3.215.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -194,7 +194,7 @@ GEM devise_pam_authenticatable2 (9.2.0) devise (>= 4.0.0) rpam2 (~> 4.0) - diff-lcs (1.6.0) + diff-lcs (1.6.1) discard (1.4.0) activerecord (>= 4.2, < 9.0) docile (1.4.1) @@ -266,10 +266,10 @@ GEM raabro (~> 1.4) globalid (1.2.1) activesupport (>= 6.1) - google-protobuf (4.30.1) + google-protobuf (4.30.2) bigdecimal rake (>= 13) - googleapis-common-protos-types (1.18.0) + googleapis-common-protos-types (1.19.0) google-protobuf (>= 3.18, < 5.a) haml (6.3.0) temple (>= 0.8.2) @@ -426,7 +426,7 @@ GEM mime-types (3.6.2) logger mime-types-data (~> 3.2015) - mime-types-data (3.2025.0318) + mime-types-data (3.2025.0402) mini_mime (1.1.5) mini_portile2 (2.8.8) minitest (5.25.5) @@ -688,7 +688,7 @@ GEM link_header (~> 0.0, >= 0.0.8) rdf-normalize (0.7.0) rdf (~> 3.3) - rdoc (6.12.0) + rdoc (6.13.1) psych (>= 4.0.0) redcarpet (3.6.1) redis (4.8.1) @@ -851,7 +851,7 @@ GEM temple (0.10.3) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) - terrapin (1.0.1) + terrapin (1.1.0) climate_control test-prof (1.4.4) thor (1.3.2) @@ -1085,4 +1085,4 @@ RUBY VERSION ruby 3.4.1p0 BUNDLED WITH - 2.6.6 + 2.6.7 From 9b596dbc78534b3e5c183b498960b94b6fb931cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 09:24:51 +0200 Subject: [PATCH 07/90] fix(deps): update dependency sass to v1.86.3 (#34368) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7a8269ed37..e9694d35fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15738,8 +15738,8 @@ __metadata: linkType: hard "sass@npm:^1.62.1": - version: 1.86.2 - resolution: "sass@npm:1.86.2" + version: 1.86.3 + resolution: "sass@npm:1.86.3" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" @@ -15750,7 +15750,7 @@ __metadata: optional: true bin: sass: sass.js - checksum: 10c0/fe40b63a19e867f460369d495bcdc979598c0b105c9d52164a7e9cc4e12ab91c27337702a1b58575f7da8fd08256b85fd2f34cc8275eb7c57699bfc5029f54a3 + checksum: 10c0/ba819a0828f732adf7a94cd8ca017bce92bc299ffb878836ed1da80a30612bfbbf56a5e42d6dff3ad80d919c2025afb42948fc7b54a7bc61a9a2d58e1e0c558a languageName: node linkType: hard From 4ed9778c85583b42f87a7d431af08b39547b7099 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 09:36:53 +0200 Subject: [PATCH 08/90] chore(deps): update dependency brakeman to v7.0.1 (#34367) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1491251676..a6edb1379b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,7 +126,7 @@ GEM blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) - brakeman (7.0.0) + brakeman (7.0.1) racc browser (6.2.0) brpoplpush-redis_script (0.1.3) From 5f87ae101c5e0e940e148d493eaac1ce31fe24c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:17:29 +0200 Subject: [PATCH 09/90] chore(deps): update dependency strong_migrations to v2.3.0 (#34369) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index a6edb1379b..b949c7ec54 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -840,7 +840,7 @@ GEM stoplight (4.1.1) redlock (~> 1.0) stringio (3.1.6) - strong_migrations (2.2.1) + strong_migrations (2.3.0) activerecord (>= 7) swd (2.0.3) activesupport (>= 3) From b4317faee2c9d19886843476e9f24f37544da095 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:30:53 +0200 Subject: [PATCH 10/90] chore(deps): update dependency linzer to v0.6.4 (#34377) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index b949c7ec54..d4c727c3c4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -395,7 +395,7 @@ GEM rexml link_header (0.0.8) lint_roller (1.1.0) - linzer (0.6.3) + linzer (0.6.4) openssl (~> 3.0, >= 3.0.0) rack (>= 2.2, < 4.0) starry (~> 0.2) From 107a94cf6b2381a1b05426f686e082d3086adfe8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 08:31:06 +0200 Subject: [PATCH 11/90] chore(deps): update dependency brakeman to v7.0.2 (#34376) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index d4c727c3c4..2877b2c743 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,7 +126,7 @@ GEM blurhash (0.1.8) bootsnap (1.18.4) msgpack (~> 1.2) - brakeman (7.0.1) + brakeman (7.0.2) racc browser (6.2.0) brpoplpush-redis_script (0.1.3) From 8451b36a726c98b57f510e25e780360a3ab865cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 06:40:32 +0000 Subject: [PATCH 12/90] chore(deps): update dependency doorkeeper to v5.8.2 (#34372) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2877b2c743..09d5410ca0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -199,7 +199,7 @@ GEM activerecord (>= 4.2, < 9.0) docile (1.4.1) domain_name (0.6.20240107) - doorkeeper (5.8.1) + doorkeeper (5.8.2) railties (>= 5) dotenv (3.1.7) drb (2.2.1) @@ -697,7 +697,7 @@ GEM redlock (1.3.2) redis (>= 3.0.0, < 6.0) regexp_parser (2.10.0) - reline (0.6.0) + reline (0.6.1) io-console (~> 0.5) request_store (1.7.0) rack (>= 1.4) From 0b900339b006144b7de507d2a12a64f1d29508ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 06:42:52 +0000 Subject: [PATCH 13/90] chore(deps): update dependency selenium-webdriver to v4.31.0 (#34379) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 09d5410ca0..4d4d0d1792 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -797,7 +797,7 @@ GEM activerecord (>= 4.0.0) railties (>= 4.0.0) securerandom (0.4.1) - selenium-webdriver (4.30.1) + selenium-webdriver (4.31.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) From 9a056883269226648103ce437deb2f0d79b902d7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 06:45:26 +0000 Subject: [PATCH 14/90] New Crowdin Translations (automated) (#34374) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 1 + app/javascript/mastodon/locales/cs.json | 4 +- app/javascript/mastodon/locales/eo.json | 5 +- app/javascript/mastodon/locales/es-MX.json | 6 +-- app/javascript/mastodon/locales/ga.json | 9 +++- app/javascript/mastodon/locales/it.json | 1 + app/javascript/mastodon/locales/kab.json | 38 ++++++++------- app/javascript/mastodon/locales/nan.json | 54 +++++++++++++++++++++- app/javascript/mastodon/locales/ru.json | 1 + app/javascript/mastodon/locales/sk.json | 6 ++- app/javascript/mastodon/locales/sv.json | 1 + app/javascript/mastodon/locales/th.json | 6 ++- app/javascript/mastodon/locales/zh-HK.json | 7 +++ config/locales/activerecord.es-MX.yml | 2 +- config/locales/activerecord.ga.yml | 2 + config/locales/cy.yml | 30 ++++++++++++ config/locales/doorkeeper.kab.yml | 10 ++-- config/locales/el.yml | 31 +++++++++++++ config/locales/es-MX.yml | 2 +- config/locales/ga.yml | 30 ++++++++++++ config/locales/kab.yml | 4 +- config/locales/lv.yml | 11 +++++ config/locales/ru.yml | 3 ++ config/locales/simple_form.es-MX.yml | 16 +++---- config/locales/simple_form.ga.yml | 8 ++++ config/locales/simple_form.kab.yml | 6 +-- config/locales/simple_form.th.yml | 3 ++ config/locales/th.yml | 8 +++- config/locales/zh-HK.yml | 10 +++- 29 files changed, 265 insertions(+), 50 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index bd2d37c681..eb7a22a04b 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} публикация} other {{counter} публикации}}", "account.unblock": "Отблокиране на @{name}", "account.unblock_domain": "Отблокиране на домейн {domain}", + "account.unblock_domain_short": "Отблокиране", "account.unblock_short": "Отблокиране", "account.unendorse": "Не включвайте в профила", "account.unfollow": "Стоп на следването", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 4ffef4f392..503dc7714d 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -560,7 +560,7 @@ "notification.admin.sign_up.name_and_others": "{name} a {count, plural, one {# další} few {# další} many {# dalších} other {# dalších}} se zaregistrovali", "notification.annual_report.message": "Váš #Wrapstodon {year} na Vás čeká! Podívejte se, jak vypadal tento Váš rok na Mastodonu!", "notification.annual_report.view": "Zobrazit #Wrapstodon", - "notification.favourite": "{name} si oblíbil*a váš příspěvek", + "notification.favourite": "{name} si oblíbil váš příspěvek", "notification.favourite.name_and_others_with_link": "{name} a {count, plural, one {# další si oblíbil} few {# další si oblíbili} other {# dalších si oblíbilo}} Váš příspěvek", "notification.favourite_pm": "{name} si oblíbil vaši soukromou zmínku", "notification.favourite_pm.name_and_others_with_link": "{name} a {count, plural, one {# další si oblíbil} few {# další si oblíbili} other {# dalších si oblíbilo}} Vaši soukromou zmínku", @@ -573,7 +573,7 @@ "notification.label.private_reply": "Privátní odpověď", "notification.label.reply": "Odpověď", "notification.mention": "Zmínka", - "notification.mentioned_you": "{name} vás zmínil*a", + "notification.mentioned_you": "{name} vás zmínil", "notification.moderation-warning.learn_more": "Zjistit více", "notification.moderation_warning": "Obdrželi jste varování od moderátorů", "notification.moderation_warning.action_delete_statuses": "Některé z vašich příspěvků byly odstraněny.", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index accc2b8052..207fa5b955 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural,one {{counter} afiŝo} other {{counter} afiŝoj}}", "account.unblock": "Malbloki @{name}", "account.unblock_domain": "Malbloki la domajnon {domain}", + "account.unblock_domain_short": "Malbloki", "account.unblock_short": "Malbloki", "account.unendorse": "Ne plu rekomendi ĉe la profilo", "account.unfollow": "Ĉesi sekvi", @@ -905,6 +906,8 @@ "video.expand": "Pligrandigi la videon", "video.fullscreen": "Igi plenekrana", "video.hide": "Kaŝu la filmeton", + "video.mute": "Silentigi", "video.pause": "Paŭzigi", - "video.play": "Ekigi" + "video.play": "Ekigi", + "video.unmute": "Ne plu silentigi" } diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index dbaf1955e4..929f962e6a 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -910,8 +910,8 @@ "video.pause": "Pausar", "video.play": "Reproducir", "video.skip_backward": "Saltar atrás", - "video.skip_forward": "Adelantar", + "video.skip_forward": "Saltar adelante", "video.unmute": "Dejar de silenciar", - "video.volume_down": "Bajar volumen", - "video.volume_up": "Subir volumen" + "video.volume_down": "Bajar el volumen", + "video.volume_up": "Subir el volumen" } diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index d3af400c64..cd0d58da4a 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} poist}}", "account.unblock": "Bain bac de @{name}", "account.unblock_domain": "Bain bac den ainm fearainn {domain}", + "account.unblock_domain_short": "Díbhlocáil", "account.unblock_short": "Díbhlocáil", "account.unendorse": "Ná chuir ar an phróifíl mar ghné", "account.unfollow": "Ná lean a thuilleadh", @@ -905,6 +906,12 @@ "video.expand": "Leath físeán", "video.fullscreen": "Lánscáileán", "video.hide": "Cuir físeán i bhfolach", + "video.mute": "Balbhaigh", "video.pause": "Cuir ar sos", - "video.play": "Cuir ar siúl" + "video.play": "Cuir ar siúl", + "video.skip_backward": "Scipeáil siar", + "video.skip_forward": "Scipeáil ar aghaidh", + "video.unmute": "Díbhalbhú", + "video.volume_down": "Toirt síos", + "video.volume_up": "Toirt suas" } diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 9fa5c725b6..99cb78716f 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} post} other {{counter} post}}", "account.unblock": "Sblocca @{name}", "account.unblock_domain": "Sblocca il dominio {domain}", + "account.unblock_domain_short": "Sblocca", "account.unblock_short": "Sblocca", "account.unendorse": "Non mostrare sul profilo", "account.unfollow": "Smetti di seguire", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index c4d9d75c0e..a29bd33468 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -20,10 +20,10 @@ "account.cancel_follow_request": "Sefsex taḍfart", "account.copy": "Nɣel assaɣ ɣer umaɣnu", "account.direct": "Bder-d @{name} weḥd-s", - "account.disable_notifications": "Ḥbes ur iyi-d-ttazen ara alɣuten mi ara d-isuffeɣ @{name}", + "account.disable_notifications": "Ḥbes ur iyi-d-ttazen ara ilɣa mi ara d-isuffeɣ @{name}", "account.domain_blocked": "Taɣult yeffren", "account.edit_profile": "Ẓreg amaɣnu", - "account.enable_notifications": "Azen-iyi-d alɣuten mi ara d-isuffeɣ @{name}", + "account.enable_notifications": "Azen-iyi-d ilɣa mi ara d-isuffeɣ @{name}", "account.endorse": "Welleh fell-as deg umaɣnu-inek", "account.featured_tags.last_status_at": "Tasuffeɣt taneggarut ass n {date}", "account.featured_tags.last_status_never": "Ulac tisuffaɣ", @@ -45,7 +45,7 @@ "account.mention": "Bder-d @{name}", "account.moved_to": "{name} yenna-d dakken amiḍan-is amaynut yuɣal :", "account.mute": "Sgugem @{name}", - "account.mute_notifications_short": "Susem alɣuten", + "account.mute_notifications_short": "Susem ilɣa", "account.mute_short": "Sgugem", "account.muted": "Yettwasgugem", "account.mutual": "Temṭafarem", @@ -75,6 +75,8 @@ "alert.unexpected.message": "Yeḍra-d unezri ur netturaǧu ara.", "alert.unexpected.title": "Ayhuh!", "alt_text_badge.title": "Aḍris asegzan", + "alt_text_modal.add_alt_text": "Rnu aḍris amlellay", + "alt_text_modal.add_text_from_image": "Rnu aḍris amlellay seg tugna", "alt_text_modal.cancel": "Semmet", "alt_text_modal.done": "Immed", "announcement.announcement": "Ulɣu", @@ -116,7 +118,7 @@ "column.home": "Agejdan", "column.lists": "Tibdarin", "column.mutes": "Imiḍanen yettwasgugmen", - "column.notifications": "Alɣuten", + "column.notifications": "Ilɣa", "column.pins": "Tisuffaɣ yettwasenṭḍen", "column.public": "Tasuddemt tamatut", "column_back_button.label": "Tuɣalin", @@ -168,6 +170,7 @@ "confirmations.logout.confirm": "Ffeɣ", "confirmations.logout.message": "D tidet tebɣiḍ ad teffɣeḍ?", "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", + "confirmations.missing_alt_text.confirm": "Rnu aḍris amlellay", "confirmations.missing_alt_text.secondary": "Suffeɣ akken yebɣu yili", "confirmations.mute.confirm": "Sgugem", "confirmations.redraft.confirm": "Kkes sakin ɛiwed tira", @@ -229,7 +232,7 @@ "empty_column.home": "Tasuddemt tagejdant n yisallen d tilemt! Ẓer {public} neɣ nadi ad tafeḍ imseqdacen-nniḍen ad ten-ḍefṛeḍ.", "empty_column.list": "Ar tura ur yelli kra deg umuɣ-a. Ad d-yettwasken da ticki iɛeggalen n wumuɣ-a suffɣen-d kra.", "empty_column.mutes": "Ulac ɣur-k·m imseqdacen i yettwasgugmen.", - "empty_column.notifications": "Ulac ɣur-k·m alɣuten. Sedmer akked yemdanen-nniḍen akken ad tebduḍ adiwenni.", + "empty_column.notifications": "Ulac ɣur-k·m ilɣa. Sedmer akked yemdanen-nniḍen akken ad tebduḍ adiwenni.", "empty_column.public": "Ulac kra da! Aru kra, neɣ ḍfeṛ imdanen i yellan deg yiqeddacen-nniḍen akken ad d-teččar tsuddemt tazayezt", "error.unexpected_crash.next_steps": "Smiren asebter-a, ma ur yekkis ara wugur, ẓer d akken tzemreḍ ad tesqedceḍ Maṣṭudun deg yiminig-nniḍen neɣ deg usnas anaṣli.", "errors.unexpected_crash.copy_stacktrace": "Nɣel stacktrace ɣef wafus", @@ -328,7 +331,7 @@ "keyboard_shortcuts.mention": "akken ad d-bedreḍ ameskar", "keyboard_shortcuts.muted": "akken ad teldiḍ tabdart n yimseqdacen yettwasgugmen", "keyboard_shortcuts.my_profile": "akken ad d-teldiḍ amaɣnu-ik", - "keyboard_shortcuts.notifications": "akken ad d-teldiḍ ajgu n walɣuten", + "keyboard_shortcuts.notifications": "Ad d-yeldi ajgu n yilɣa", "keyboard_shortcuts.open_media": "i tiɣwalin yeldin", "keyboard_shortcuts.pinned": "akken ad teldiḍ tabdart n tjewwiqin yettwasentḍen", "keyboard_shortcuts.profile": "akken ad d-teldiḍ amaɣnu n umeskar", @@ -410,6 +413,7 @@ "notification.admin.sign_up": "Ijerred {name}", "notification.favourite": "{name} yesmenyaf addad-ik·im", "notification.follow": "iṭṭafar-ik·em-id {name}", + "notification.follow.name_and_others": "{name} akked {count, plural, one {# nniḍen} other {# nniḍen}} iḍfeṛ-k·m-id", "notification.follow_request": "{name} yessuter-d ad k·m-yeḍfeṛ", "notification.label.mention": "Abdar", "notification.label.private_mention": "Abdar uslig", @@ -426,12 +430,12 @@ "notification_requests.dismiss": "Agi", "notification_requests.edit_selection": "Ẓreg", "notification_requests.exit_selection": "Immed", - "notification_requests.notifications_from": "Alɣuten sɣur {name}", + "notification_requests.notifications_from": "Ilɣa sɣur {name}", "notification_requests.title": "Ilɣa yettwasizdgen", - "notifications.clear": "Sfeḍ alɣuten", - "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk alɣuten-inek·em i lebda?", + "notifications.clear": "Sfeḍ ilɣa", + "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk ilɣa-inek·em i lebda?", "notifications.column_settings.admin.report": "Ineqqisen imaynuten:", - "notifications.column_settings.alert": "Alɣuten n tnarit", + "notifications.column_settings.alert": "Ilɣa n tnarit", "notifications.column_settings.favourite": "Imenyafen:", "notifications.column_settings.filter_bar.advanced": "Sken-d akk taggayin", "notifications.column_settings.filter_bar.category": "Iri n usizdeg uzrib", @@ -440,12 +444,12 @@ "notifications.column_settings.group": "Agraw", "notifications.column_settings.mention": "Abdar:", "notifications.column_settings.poll": "Igemmaḍ n usenqed:", - "notifications.column_settings.push": "Alɣuten yettudemmren", + "notifications.column_settings.push": "Ilɣa yettudemmren", "notifications.column_settings.reblog": "Seǧhed:", "notifications.column_settings.show": "Ssken-d tilɣa deg ujgu", "notifications.column_settings.sound": "Rmed imesli", "notifications.column_settings.status": "Tisuffaɣ timaynutin :", - "notifications.column_settings.unread_notifications.category": "Alɣuten ur nettwaɣra", + "notifications.column_settings.unread_notifications.category": "Ilɣa ur nettwaɣra", "notifications.column_settings.update": "Iẓreg:", "notifications.filter.all": "Akk", "notifications.filter.boosts": "Seǧhed", @@ -455,9 +459,9 @@ "notifications.filter.polls": "Igemmaḍ n usenqed", "notifications.filter.statuses": "Ileqman n yimdanen i teṭṭafareḍ", "notifications.grant_permission": "Mudd tasiregt.", - "notifications.group": "{count} n walɣuten", - "notifications.mark_as_read": "Creḍ meṛṛa alɣuten am wakken ttwaɣran", - "notifications.permission_denied": "D awezɣi ad yili wermad n walɣuten n tnarit axateṛ turagt tettwagdel", + "notifications.group": "{count} n yilɣa", + "notifications.mark_as_read": "Creḍ akk ilɣa am wakken ttwaɣran", + "notifications.permission_denied": "D awezɣi ad yili wermad n yilɣa n tnarit axateṛ turagt tettwagdel", "notifications.policy.drop": "Anef-as", "notifications.policy.filter": "Sizdeg", "notifications.policy.filter_new_accounts.hint": "Imiḍanen imaynuten i d-yennulfan deg {days, plural, one {yiwen n wass} other {# n wussan}} yezrin", @@ -467,7 +471,7 @@ "notifications.policy.filter_not_following_hint": "Alamma tqebleḍ-ten s ufus", "notifications.policy.filter_not_following_title": "Wid akked tid ur tettḍafareḍ ara", "notifications.policy.filter_private_mentions_title": "Abdar uslig ur yettwasferken ara", - "notifications_permission_banner.enable": "Rmed alɣuten n tnarit", + "notifications_permission_banner.enable": "Rmed ilɣa n tnarit", "notifications_permission_banner.title": "Ur zeggel acemma", "onboarding.follows.back": "Uɣal", "onboarding.follows.done": "Immed", @@ -635,7 +639,7 @@ "status.unpin": "Kkes asenteḍ seg umaɣnu", "subscribed_languages.save": "Sekles ibeddilen", "tabs_bar.home": "Agejdan", - "tabs_bar.notifications": "Alɣuten", + "tabs_bar.notifications": "Ilɣa", "terms_of_service.title": "Tiwtilin n useqdec", "time_remaining.days": "Mazal {number, plural, one {# wass} other {# wussan}}", "time_remaining.hours": "Mazal {number, plural, one {# usarag} other {# yisragen}}", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index 57eef0a874..268dbfa2b7 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, other {{count} ê PO文}}", "account.unblock": "取消封鎖 @{name}", "account.unblock_domain": "Kā域名 {domain} 取消封鎖", + "account.unblock_domain_short": "取消封鎖", "account.unblock_short": "取消封鎖", "account.unendorse": "Mài tī個人資料推薦伊", "account.unfollow": "取消跟tuè", @@ -387,8 +388,8 @@ "hashtag.column_settings.tag_mode.none": "Lóng mài", "hashtag.column_settings.tag_toggle": "Kā追加ê標籤加添kàu tsit ê欄", "hashtag.counter_by_accounts": "{count, plural, one {{counter} ê} other {{counter} ê}}參與ê", - "hashtag.counter_by_uses": "{count, plural, one {{counter} ê} other {{counter} ê}} PO文", - "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} ê} other {{counter} ê}} PO文", + "hashtag.counter_by_uses": "{count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", + "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", "hashtag.follow": "跟tuè hashtag", "hashtag.unfollow": "取消跟tuè hashtag", "hashtags.and_other": "……kap 其他 {count, plural, other {# ê}}", @@ -468,6 +469,55 @@ "keyboard_shortcuts.spoilers": "顯示/隱藏內容警告", "keyboard_shortcuts.start": "Phah開「開始用」欄", "keyboard_shortcuts.toggle_hidden": "顯示/隱藏內容警告後壁ê PO文", + "keyboard_shortcuts.toggle_sensitivity": "顯示/tshàng媒體", + "keyboard_shortcuts.toot": "PO新PO文", + "keyboard_shortcuts.translate": "kā PO文翻譯", + "keyboard_shortcuts.unfocus": "離開輸入框仔/tshiau-tshuē格仔", + "keyboard_shortcuts.up": "佇列單內kā suá khah面頂", + "lightbox.close": "關", + "lightbox.next": "下tsi̍t ê", + "lightbox.previous": "頂tsi̍t ê", + "lightbox.zoom_in": "Tshūn-kiu kàu實際ê sài-suh", + "lightbox.zoom_out": "Tshūn-kiu kàu適當ê sài-suh", + "limited_account_hint.action": "一直顯示個人資料", + "limited_account_hint.title": "Tsit ê 個人資料予 {domain} ê管理員tshàng起來ah。", + "link_preview.author": "Tuì {name}", + "link_preview.more_from_author": "看 {name} ê其他內容", + "link_preview.shares": "{count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", + "lists.add_member": "加", + "lists.add_to_list": "加添kàu列單", + "lists.add_to_lists": "Kā {name} 加添kàu列單", + "lists.create": "建立", + "lists.create_a_list_to_organize": "開新ê列單,組織lí tshù ê時間線", + "lists.create_list": "建立列單", + "lists.delete": "Thâi掉列單", + "lists.done": "做好ah", + "lists.edit": "編輯列單", + "lists.exclusive": "佇tshù ê時間線kā成員tshàng起來。", + "lists.exclusive_hint": "Nā bóo-mi̍h口座佇tsit ê列單,ē tuì lí tshù ê時間線kā tsit ê口座tshàng起來,避免koh看見in ê PO文。", + "lists.find_users_to_add": "Tshuē beh加添ê用者", + "lists.list_members": "列單ê成員", + "lists.list_members_count": "{count, plural, other {# 位成員}}", + "lists.list_name": "列單ê名", + "lists.new_list_name": "新ê列單ê名", + "lists.no_lists_yet": "Iáu無列單。", + "lists.no_members_yet": "Iáu無成員。", + "lists.no_results_found": "Tshuē無結果。", + "lists.remove_member": "Suá掉", + "lists.replies_policy.followed": "所跟tuè ê任何用者", + "lists.replies_policy.list": "列單ê成員", + "lists.replies_policy.none": "無半位", + "lists.save": "儲存", + "lists.search": "Tshiau-tshuē", + "lists.show_replies_to": "列單成員回應ê顯示範圍", + "load_pending": "{count, plural, other {# ê 項目}}", + "loading_indicator.label": "Leh載入……", + "media_gallery.hide": "Khàm掉", + "moved_to_account_banner.text": "Lí ê口座 {disabledAccount} 已經停止使用ah,因為suá kàu {movedToAccount}。", + "mute_modal.hide_from_notifications": "Tuì通知內底khàm掉", + "mute_modal.hide_options": "Khàm掉選項", + "mute_modal.indefinite": "直到我取消消音", + "mute_modal.show_options": "顯示選項", "notification.favourite_pm": "{name} kah意lí ê私人提起", "notification.favourite_pm.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê私人提起", "search_popout.language_code": "ISO語言代碼", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index bc19a93c60..15ae4b9e0a 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} пост} few {{counter} поста} other {{counter} постов}}", "account.unblock": "Разблокировать @{name}", "account.unblock_domain": "Разблокировать {domain}", + "account.unblock_domain_short": "Разблокировать", "account.unblock_short": "Разблокировать", "account.unendorse": "Не рекомендовать в профиле", "account.unfollow": "Отписаться", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index a55455f658..d6aff6b56c 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} príspevok} other {{counter} príspevkov}}", "account.unblock": "Odblokovať @{name}", "account.unblock_domain": "Odblokovať doménu {domain}", + "account.unblock_domain_short": "Odblokovať", "account.unblock_short": "Odblokovať", "account.unendorse": "Nezobrazovať na vlastnom profile", "account.unfollow": "Zrušiť sledovanie", @@ -826,6 +827,9 @@ "video.expand": "Zväčšiť video", "video.fullscreen": "Zobraziť na celú obrazovku", "video.hide": "Skryť video", + "video.mute": "Stíšiť", "video.pause": "Pozastaviť", - "video.play": "Prehrať" + "video.play": "Prehrať", + "video.volume_down": "Hlasitosť nadol", + "video.volume_up": "Hlasitosť nahor" } diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 8dc6161a94..1e2e9c585b 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} inlägg} other {{counter} inlägg}}", "account.unblock": "Avblockera @{name}", "account.unblock_domain": "Avblockera {domain}", + "account.unblock_domain_short": "Avblockera", "account.unblock_short": "Avblockera", "account.unendorse": "Visa inte på profil", "account.unfollow": "Sluta följ", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 859413b899..d9e607f856 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, other {{counter} โพสต์}}", "account.unblock": "เลิกปิดกั้น @{name}", "account.unblock_domain": "เลิกปิดกั้นโดเมน {domain}", + "account.unblock_domain_short": "เลิกปิดกั้น", "account.unblock_short": "เลิกปิดกั้น", "account.unendorse": "ไม่แสดงในโปรไฟล์", "account.unfollow": "เลิกติดตาม", @@ -688,6 +689,7 @@ "poll_button.remove_poll": "เอาการสำรวจความคิดเห็นออก", "privacy.change": "เปลี่ยนความเป็นส่วนตัวของโพสต์", "privacy.direct.long": "ทุกคนที่กล่าวถึงในโพสต์", + "privacy.direct.short": "การกล่าวถึงแบบส่วนตัว", "privacy.private.long": "เฉพาะผู้ติดตามของคุณเท่านั้น", "privacy.private.short": "ผู้ติดตาม", "privacy.public.long": "ใครก็ตามที่อยู่ในและนอก Mastodon", @@ -892,6 +894,8 @@ "video.expand": "ขยายวิดีโอ", "video.fullscreen": "เต็มหน้าจอ", "video.hide": "ซ่อนวิดีโอ", + "video.mute": "ปิดเสียง", "video.pause": "หยุดชั่วคราว", - "video.play": "เล่น" + "video.play": "เล่น", + "video.unmute": "เลิกปิดเสียง" } diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index fb920a6b09..d6ffb2b6bf 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -84,6 +84,8 @@ "alert.unexpected.message": "發生意外錯誤。", "alert.unexpected.title": "失敗!", "alt_text_badge.title": "替代文字", + "alt_text_modal.cancel": "取消", + "alt_text_modal.done": "完成", "announcement.announcement": "公告", "attachments_list.unprocessed": "(未處理)", "audio.hide": "隱藏音訊", @@ -135,6 +137,7 @@ "column_header.pin": "置頂", "column_header.show_settings": "顯示設定", "column_header.unpin": "取消置頂", + "column_search.cancel": "取消", "column_subheading.settings": "設定", "community.column_settings.local_only": "只顯示本站", "community.column_settings.media_only": "只顯示多媒體", @@ -344,6 +347,7 @@ "home.pending_critical_update.title": "有重要的安全更新!", "home.show_announcements": "顯示公告", "ignore_notifications_modal.ignore": "忽略推播通知", + "info_button.label": "幫助", "interaction_modal.on_another_server": "於不同伺服器", "interaction_modal.on_this_server": "於此伺服器", "interaction_modal.title.favourite": "把 {name} 的帖文加入最愛", @@ -394,6 +398,7 @@ "limited_account_hint.title": "此個人檔案已被 {domain} 的管理員隱藏。", "link_preview.author": "由 {name} 提供", "lists.delete": "刪除列表", + "lists.done": "完成", "lists.edit": "編輯列表", "lists.replies_policy.followed": "任何已關注的用戶", "lists.replies_policy.list": "列表中的用戶", @@ -461,6 +466,7 @@ "notification.update": "{name} 編輯了帖文", "notification_requests.accept": "接受", "notification_requests.dismiss": "忽略", + "notification_requests.exit_selection": "完成", "notification_requests.notifications_from": "來自 {name} 的通知", "notification_requests.title": "已過濾之通知", "notifications.clear": "清空通知紀錄", @@ -507,6 +513,7 @@ "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不放過任何事情", + "onboarding.follows.done": "完成", "onboarding.follows.empty": "很遺憾,現在無法顯示任何結果。你可以嘗試搜尋或瀏覽探索頁面來找使用者來追蹤,或者稍後再試。", "onboarding.profile.discoverable": "將個人檔案設為可被搜尋", "onboarding.profile.discoverable_hint": "當你在 Mastodon 上選擇可被搜尋時,你的帖文可能會出現在搜尋結果和熱門,你的個人檔案也可能被推薦給與你興趣相似的人。", diff --git a/config/locales/activerecord.es-MX.yml b/config/locales/activerecord.es-MX.yml index c3b0562c32..02384f1c71 100644 --- a/config/locales/activerecord.es-MX.yml +++ b/config/locales/activerecord.es-MX.yml @@ -56,7 +56,7 @@ es-MX: user: attributes: date_of_birth: - below_limit: está por debajo de la edad mínima + below_limit: está por debajo del límite de edad email: blocked: utiliza un proveedor de correo no autorizado unreachable: no parece existir diff --git a/config/locales/activerecord.ga.yml b/config/locales/activerecord.ga.yml index e5b07470ae..853c705663 100644 --- a/config/locales/activerecord.ga.yml +++ b/config/locales/activerecord.ga.yml @@ -55,6 +55,8 @@ ga: too_soon: róluath, caithfidh sé bheith níos déanaí ná %{date} user: attributes: + date_of_birth: + below_limit: faoi ​​bhun na teorann aoise email: blocked: úsáideann soláthraí ríomhphoist dícheadaithe unreachable: ní cosúil go bhfuil sé ann diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 9349176842..edd89fedc6 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -511,6 +511,36 @@ cy: new: title: Mewnforio blociau parth no_file: Heb ddewis ffeil + fasp: + debug: + callbacks: + created_at: Crëwyd am + delete: Dileu + ip: Cyfeiriad IP + request_body: Gofyn am y corff + title: Adalwasau Dadfygio + providers: + active: Gweithredol + base_url: URL sylfaen + callback: Adalwad + delete: Dileu + edit: Golygu Darparwr + finish_registration: Gorffen cofrestru + name: Enw + providers: Darparwyr + public_key_fingerprint: Ôl bys allwedd cyhoeddus + registration_requested: Cais am gofrestru + registrations: + confirm: Cadarnhau + description: Rydych wedi derbyn cofrestriad gan FASP. Gwrthodwch hyn os nad chi ofynnodd amdano. Os taw chi gychwynnodd hyn, cymharwch yr enw ac allwedd yr ôl bys yn ofalus cyn cadarnhau'r cofrestriad. + reject: Gwrthod + title: Cadarnhau Cofrestriad FASP + save: Cadw + select_capabilities: Dewis Galluoedd + sign_in: Mewngofnodi + status: Statws + title: Fediverse Auxiliary Service Providers + title: FASP follow_recommendations: description_html: "Mae dilyn yr argymhellion yn helpu i ddefnyddwyr newydd ddod o hyd i gynnwys diddorol yn gyflym. Pan nad yw defnyddiwr wedi rhyngweithio digon ag eraill i ffurfio argymhellion dilyn personol, argymhellir y cyfrifon hyn yn lle hynny. Cânt eu hailgyfrifo'n ddyddiol o gymysgedd o gyfrifon gyda'r ymgysylltiadau diweddar uchaf a'r cyfrif dilynwyr lleol uchaf ar gyfer iaith benodol." language: Ar gyfer iaith diff --git a/config/locales/doorkeeper.kab.yml b/config/locales/doorkeeper.kab.yml index fa9e1c540a..c65bada409 100644 --- a/config/locales/doorkeeper.kab.yml +++ b/config/locales/doorkeeper.kab.yml @@ -111,9 +111,9 @@ kab: lists: Tibdarin media: Imeddayen n umidya mutes: Yeggugem - notifications: Alɣuten + notifications: Ilɣa profile: Amaɣnu-k Mastodon - push: Alɣuten yettudemmren + push: Ilɣa yettudemmren reports: Ineqqisen search: Nadi statuses: Tisuffaɣ @@ -127,7 +127,7 @@ kab: admin:read: ad iɣeṛ akk isefka ɣef uqeddac admin:write: ad iẓreg akk isefka ɣef uqeddac follow: ad ibeddel assaɣen n umiḍan - push: ad iṭṭef-d alɣuten-ik·im yettwademren + push: ad iṭṭef-d ilɣa-k·m yettwademren read: ad iɣeṛ akk isefka n umiḍan-ik·im read:accounts: ẓer isallen n yimiḍanen read:blocks: ẓer imiḍanen i tesḥebseḍ @@ -136,7 +136,7 @@ kab: read:follows: ẓer imeḍfaṛen-ik read:lists: ẓer tibdarin-ik·im read:mutes: ẓer wid i tesgugmeḍ - read:notifications: ad iẓer alɣuten-inek·inem + read:notifications: ad iẓer ilɣa-inek·inem read:reports: ẓer ineqqisen-ik·im read:search: anadi deg umkan-ik·im read:statuses: ad iẓer meṛṛa tisuffaɣ @@ -148,4 +148,4 @@ kab: write:follows: ḍfeṛ imdanen write:lists: ad yesnulfu tibdarin write:media: ad yessali ifuyla n umidya - write:notifications: sfeḍ alɣuten-ik·im + write:notifications: sfeḍ ilɣa-k·m diff --git a/config/locales/el.yml b/config/locales/el.yml index 2c6d91298e..d2f4fbba01 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -318,6 +318,9 @@ el: new: create: Δημιουργία ανακοίνωσης title: Νέα ανακοίνωση + preview: + explanation_html: 'Το email θα αποσταλεί σε %{display_count} χρήστες. Το ακόλουθο κείμενο θα συμπεριληφθεί στο e-mail:' + title: Προεπισκόπηση ειδοποίησης ανακοίνωσης publish: Δημοσίευση published_msg: Επιτυχής δημοσίευση ανακοίνωσης! scheduled_for: Προγραμματισμένη για %{time} @@ -476,6 +479,34 @@ el: new: title: Εισαγωγή αποκλεισμένων τομέων no_file: Δεν επιλέχθηκε αρχείο + fasp: + debug: + callbacks: + created_at: Δημιουργήθηκε στις + delete: Διαγραφή + ip: Διεύθυνση IP + request_body: Σώμα αιτήματος + title: Κλήσεις Αποσφαλμάτωσης + providers: + active: Ενεργό + base_url: URL βάσης + callback: Επανάκληση + delete: Διαγραφή + edit: Επεξεργασία Παρόχου + finish_registration: Ολοκλήρωση εγγραφής + name: Όνομα + providers: Πάροχοι + public_key_fingerprint: Αποτύπωμα δημόσιου κλειδιού + registration_requested: Η εγγραφή ζητήθηκε + registrations: + confirm: Επιβεβαίωση + description: Έλαβες μια εγγραφή από ένα FASP. Απέρριψέ την αν δεν την άρχισες εσύ. Αν το άρχισες εσύ, σύγκρινε προσεκτικά το όνομα και το κλειδί αποτύπωμα πριν από την επιβεβαίωση της εγγραφής. + reject: Απόρριψη + title: Επιβεβαίωση Εγγραφής FASP + save: Αποθήκευση + select_capabilities: Επέλεξε Δυνατότητες + sign_in: Σύνδεση + status: Κατάσταση follow_recommendations: description_html: "Ακολουθώντας συστάσεις βοηθάει τους νέους χρήστες να βρουν γρήγορα ενδιαφέρον περιεχόμενο. Όταν ένας χρήστης δεν έχει αλληλεπιδράσει με άλλους αρκετά για να διαμορφώσει εξατομικευμένες συστάσεις, συνιστώνται αυτοί οι λογαριασμοί. Υπολογίζονται εκ νέου σε καθημερινή βάση από ένα σύνολο λογαριασμών με τις υψηλότερες πρόσφατες αλληλεπιδράσεις και μεγαλύτερο αριθμό τοπικών ακόλουθων για μια δεδομένη γλώσσα." language: Για τη γλώσσα diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 5f92f2c85d..a9192740fe 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -500,7 +500,7 @@ es-MX: registration_requested: Se solicitó el registro registrations: confirm: Confirmar - description: Has recibido un registro de un FASP. Recházalo si no lo iniciaste tú. Si lo iniciaste tú, compara cuidadosamente el nombre y la huella de la clave antes de confirmar el registro. + description: Has recibido un registro de un FASP. Recházalo si no lo iniciaste tú. Si lo comenzaste tú, compara cuidadosamente el nombre y la huella de la clave antes de confirmar el registro. reject: Rechazar title: Confirmar registro FASP save: Guardar diff --git a/config/locales/ga.yml b/config/locales/ga.yml index d552c72de7..58d02fc6a9 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -503,6 +503,36 @@ ga: new: title: Iompórtáil bloic fearainn no_file: Níor roghnaíodh aon chomhad + fasp: + debug: + callbacks: + created_at: Cruthaithe ag + delete: Scrios + ip: Seoladh IP + request_body: Comhlacht iarratais + title: Glaonna Dífhabhtaithe + providers: + active: Gníomhach + base_url: Bun-URL + callback: Glao ar ais + delete: Scrios + edit: Cuir Soláthraí in Eagar + finish_registration: Críochnaigh clárú + name: Ainm + providers: Soláthraithe + public_key_fingerprint: Méarloirg eochair phoiblí + registration_requested: Clárú iarrtha + registrations: + confirm: Deimhnigh + description: Fuair ​​tú clárú ó FASP. Diúltaigh é murar chuir tú tús leis seo. Má thionscain tú é seo, déan comparáid chúramach idir an t-ainm agus an eochair-mhéarlorg sula ndearbhaítear an clárúchán. + reject: Diúltaigh + title: Deimhnigh Clárú FASP + save: Sábháil + select_capabilities: Roghnaigh Cumais + sign_in: Sínigh Isteach + status: Stádas + title: Soláthraithe Seirbhíse Cúnta Fediverse + title: FASP follow_recommendations: description_html: "Lean na moltaí cabhraíonn sé le húsáideoirí nua ábhar suimiúil a aimsiú go tapa. Nuair nach mbíonn go leor idirghníomhaithe ag úsáideoir le daoine eile chun moltaí pearsantaithe a leanúint, moltar na cuntais seo ina ionad sin. Déantar iad a athríomh ar bhonn laethúil ó mheascán de chuntais a bhfuil na rannpháirtíochtaí is airde acu le déanaí agus na háirimh áitiúla is airde leanúna do theanga ar leith." language: Don teanga diff --git a/config/locales/kab.yml b/config/locales/kab.yml index 1f6fc8f698..85a88be7bb 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -615,7 +615,7 @@ kab: filters: contexts: account: Imeɣna - notifications: Alɣuten + notifications: Ilɣa thread: Idiwenniyen edit: add_keyword: Rnu awal tasarut @@ -810,7 +810,7 @@ kab: import: Kter import_and_export: Taktert d usifeḍ migrate: Tunigin n umiḍan - notifications: Alɣuten s imayl + notifications: Ilɣa s imayl preferences: Imenyafen profile: Ameɣnu relationships: Imeḍfaṛen akked wid i teṭṭafaṛeḍ diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 07fc9c9780..6a21ad8cee 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -486,6 +486,17 @@ lv: delete: Izdzēst ip: IP adrese request_body: Pieprasījuma saturs + providers: + base_url: Pamata URL + delete: Izdzēst + edit: Labot nodrošinātāju + finish_registration: Pabeigt reģistrēšanos + name: Nosaukums + providers: Nodrošinātāji + public_key_fingerprint: Publiskās atslēgas pirkstu nospiedums + registration_requested: Pieprasīta reģistrēšanās + registrations: + confirm: Apstiprināt follow_recommendations: description_html: "Sekošanas ieteikumi palīdz jauniem lietotājiem ātri arast saistošu saturu. Kad lietotājs nav pietiekami mijiedarbojies ar citiem, lai veidotos pielāgoti sekošanas iteikumi, tiek ieteikti šie konti. Tie tiek pārskaitļoti ik dienas, izmantojot kontu, kuriem ir augstākās nesenās iesaistīšanās un lielākais vietējo sekotāju skaits norādītajā valodā." language: Valodai diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 0501e8cb54..8c06332695 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -495,6 +495,9 @@ ru: new: title: Импорт доменных блокировок no_file: Файл не выбран + fasp: + providers: + sign_in: follow_recommendations: description_html: "Следуйте рекомендациям, чтобы помочь новым пользователям быстро находить интересный контент. Если пользователь не взаимодействовал с другими в достаточной степени, чтобы сформировать персонализированные рекомендации, вместо этого рекомендуется использовать эти учетные записи. Они пересчитываются на ежедневной основе на основе комбинации аккаунтов с наибольшим количеством недавних взаимодействий и наибольшим количеством местных подписчиков для данного языка." language: Для языка diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index b768c6551f..b2f7daf500 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -51,7 +51,7 @@ es-MX: inbox_url: Copia la URL de la página principal del relé que deseas usar irreversible: Las publicaciones filtradas desaparecerán irreversiblemente, incluso si este filtro es eliminado más adelante locale: El idioma de la interfaz de usuario, correos y notificaciones push - password: Utiliza al menos 8 caracteres + password: Usa al menos 8 caracteres phrase: Se aplicará sin importar las mayúsculas o los avisos de contenido de una publicación scopes: Qué APIs de la aplicación tendrán acceso. Si seleccionas el alcance de nivel mas alto, no necesitas seleccionar las individuales. setting_aggregate_reblogs: No mostrar nuevos impulsos para las publicaciones que han sido recientemente impulsadas (sólo afecta a las publicaciones recibidas recientemente) @@ -68,10 +68,10 @@ es-MX: domain_allow: domain: Este dominio podrá obtener datos de este servidor y los datos entrantes serán procesados y archivados email_domain_block: - domain: Este puede ser el nombre de dominio que se muestra en al dirección de correo o el registro MX que utiliza. Se comprobarán al registrarse. + domain: Este puede ser el nombre de dominio que se muestra en la dirección de correo o el registro MX que utiliza. Se comprobarán al registrarse. with_dns_records: Se hará un intento de resolver los registros DNS del dominio dado y los resultados serán también puestos en lista negra featured_tag: - name: 'Aquí están algunas de las etiquetas que más has utilizado recientemente:' + name: 'Aquí están algunas de las etiquetas que más has usado recientemente:' filters: action: Elegir qué acción realizar cuando una publicación coincide con el filtro actions: @@ -90,14 +90,14 @@ es-MX: mascot: Reemplaza la ilustración en la interfaz web avanzada. media_cache_retention_period: Los archivos multimedia de las publicaciones realizadas por usuarios remotos se almacenan en caché en su servidor. Si se establece en un valor positivo, los archivos multimedia se eliminarán tras el número de días especificado. Si los datos multimedia se solicitan después de haber sido eliminados, se volverán a descargar, si el contenido de origen sigue estando disponible. Debido a las restricciones sobre la frecuencia con la que las tarjetas de previsualización de enlaces sondean sitios de terceros, se recomienda establecer este valor en al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese tiempo. min_age: Se pedirá a los usuarios que confirmen su fecha de nacimiento al registrarse - peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, sólo que su servidor lo sabe. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general. + peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, solamente que su servidor lo sabe. Esto es usado por los servicios que recopilan estadísticas sobre la federación en un sentido general. profile_directory: El directorio de perfiles lista a todos los usuarios que han optado por que su cuenta pueda ser descubierta. require_invite_text: Cuando los registros requieren aprobación manual, hace obligatoria la entrada de texto "¿Por qué quieres unirte?" en lugar de opcional site_contact_email: Cómo la gente puede ponerse en contacto contigo para consultas legales o de ayuda. site_contact_username: Cómo puede contactarte la gente en Mastodon. site_extended_description: Cualquier información adicional que pueda ser útil para los visitantes y sus usuarios. Se puede estructurar con formato Markdown. site_short_description: Una breve descripción para ayudar a identificar su servidor de forma única. ¿Quién lo administra, a quién va dirigido? - site_terms: Utiliza tu propia política de privacidad o déjala en blanco para usar la predeterminada Puede estructurarse con formato Markdown. + site_terms: Usa tu propia política de privacidad o déjala en blanco para usar la predeterminada Puede estructurarse con formato Markdown. site_title: Cómo puede referirse la gente a tu servidor además de por el nombre de dominio. status_page_url: URL de una página donde las personas pueden ver el estado de este servidor durante una interrupción theme: El tema que los visitantes no registrados y los nuevos usuarios ven. @@ -138,11 +138,11 @@ es-MX: text: Puede estructurarse con la sintaxis Markdown. terms_of_service_generator: admin_email: Las notificaciones legales incluyen contraavisos, órdenes judiciales, solicitudes de retirada y solicitudes de aplicación de la ley. - arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si utiliza correo electrónico. - arbitration_website: Puede ser un formulario web, o “N/A” si utiliza correo electrónico. + arbitration_address: Puede ser la misma que la dirección física anterior, o "N/A" si usa correo electrónico. + arbitration_website: Puede ser un formulario web, o “N/A” si usa correo electrónico. choice_of_law: Ciudad, región, territorio o estado de las leyes de sustancia interna de las que se regirán todas y cada una de las reclamaciones. dmca_address: Para los operadores de EE. UU., utilice la dirección registrada en el Directorio de Agentes Designados de la DMCA. Un listado de apartados de correos está disponible bajo petición directa, utilice la Solicitud de Renuncia de Apartado de Correos de Agente Designado de la DMCA para enviar un correo electrónico a la Oficina de Derechos de Autor y describa que usted es un moderador de contenidos desde su casa que teme venganza o represalias por sus acciones y necesita utilizar un apartado de correos para eliminar su dirección particular de la vista del público. - dmca_email: Puede ser el mismo correo electrónico utilizado para "Dirección de correo electrónico para avisos legales" de arriba. + dmca_email: Puede ser el mismo correo electrónico usado para “Dirección de correo electrónico para avisos legales” de arriba. domain: Identificación única del servicio en línea que presta. jurisdiction: Indique el país de residencia de quien paga las facturas. Si se trata de una empresa u otra entidad, indique el país en el que está constituida y la ciudad, región, territorio o estado, según proceda. min_age: No debe ser menor de la edad mínima exigida por las leyes de su jurisdicción. diff --git a/config/locales/simple_form.ga.yml b/config/locales/simple_form.ga.yml index af75401d3f..bd8dac2a36 100644 --- a/config/locales/simple_form.ga.yml +++ b/config/locales/simple_form.ga.yml @@ -75,6 +75,7 @@ ga: filters: action: Roghnaigh an gníomh ba cheart a dhéanamh nuair a mheaitseálann postáil an scagaire actions: + blur: Folaigh na meáin taobh thiar de rabhadh, gan an téacs féin a cheilt hide: Cuir an t-ábhar scagtha i bhfolach go hiomlán, ag iompar amhail is nach raibh sé ann warn: Folaigh an t-ábhar scagtha taobh thiar de rabhadh a luann teideal an scagaire form_admin_settings: @@ -88,6 +89,7 @@ ga: favicon: WEBP, PNG, GIF nó JPG. Sáraíonn sé an favicon Mastodon réamhshocraithe le deilbhín saincheaptha. mascot: Sáraíonn sé an léaráid san ardchomhéadan gréasáin. media_cache_retention_period: Déantar comhaid meán ó phoist a dhéanann cianúsáideoirí a thaisceadh ar do fhreastalaí. Nuair a bheidh luach dearfach socraithe, scriosfar na meáin tar éis an líon sonraithe laethanta. Má iarrtar na sonraí meán tar éis é a scriosadh, déanfar é a ath-íoslódáil, má tá an t-ábhar foinse fós ar fáil. Mar gheall ar shrianta ar cé chomh minic is atá cártaí réamhamhairc ag vótaíocht do shuíomhanna tríú páirtí, moltar an luach seo a shocrú go 14 lá ar a laghad, nó ní dhéanfar cártaí réamhamhairc naisc a nuashonrú ar éileamh roimh an am sin. + min_age: Iarrfar ar úsáideoirí a ndáta breithe a dhearbhú le linn clárúcháin peers_api_enabled: Liosta de na hainmneacha fearainn ar tháinig an freastalaí seo orthu sa choinbhleacht. Níl aon sonraí san áireamh anseo faoi cé acu an ndéanann tú cónascadh le freastalaí ar leith, díreach go bhfuil a fhios ag do fhreastalaí faoi. Úsáideann seirbhísí a bhailíonn staitisticí ar chónaidhm go ginearálta é seo. profile_directory: Liostaíonn an t-eolaire próifíle na húsáideoirí go léir a roghnaigh isteach le bheith in-aimsithe. require_invite_text: Nuair a bhíonn faomhadh láimhe ag teastáil le haghaidh clárúcháin, déan an "Cén fáth ar mhaith leat a bheith páirteach?" ionchur téacs éigeantach seachas roghnach @@ -146,6 +148,7 @@ ga: min_age: Níor chóir go mbeidís faoi bhun na haoise íosta a éilíonn dlíthe do dhlínse. user: chosen_languages: Nuair a dhéantar iad a sheiceáil, ní thaispeánfar ach postálacha i dteangacha roghnaithe in amlínte poiblí + date_of_birth: Ní mór dúinn a chinntiú go bhfuil tú ar a laghad %{age} chun Mastodon a úsáid. Ní stórálfaimid é seo. role: Rialaíonn an ról na ceadanna atá ag an úsáideoir. user_role: color: Dath le húsáid don ról ar fud an Chomhéadain, mar RGB i bhformáid heicsidheachúlach @@ -258,6 +261,7 @@ ga: name: Haischlib filters: actions: + blur: Folaigh na meáin le rabhadh hide: Cuir i bhfolach go hiomlán warn: Cuir i bhfolach le rabhadh form_admin_settings: @@ -271,6 +275,7 @@ ga: favicon: Favicon mascot: Mascóg saincheaptha (oidhreacht) media_cache_retention_period: Tréimhse choinneála taisce meán + min_age: Riachtanas aoise íosta peers_api_enabled: Foilsigh liosta de na freastalaithe aimsithe san API profile_directory: Cumasaigh eolaire próifíle registrations_mode: Cé atá in ann clárú @@ -349,6 +354,9 @@ ga: jurisdiction: Dlínse dhlíthiúil min_age: Aois íosta user: + date_of_birth_1i: Lá + date_of_birth_2i: Mí + date_of_birth_3i: Bliain role: Ról time_zone: Crios ama user_role: diff --git a/config/locales/simple_form.kab.yml b/config/locales/simple_form.kab.yml index c14f6376a0..c0ff7e598e 100644 --- a/config/locales/simple_form.kab.yml +++ b/config/locales/simple_form.kab.yml @@ -18,7 +18,7 @@ kab: bot: Smekti-d wiyaḍ dakken amiḍan-a ixeddem s wudem amezwer tigawin tiwurmanin yernu ur yezmir ara ad yettwaɛass email: Ad n-teṭṭfeḍ imayl i usentem irreversible: Tisuffaɣ i tessazedgeḍ ad ttwakksent i lebda, ula ma tekkseḍ imsizdeg-nni ar zdat - locale: Tutlayt n ugrudem, imaylen d walɣuten yettudemren + locale: Tutlayt n ugrudem, imaylen d yilɣa yettudemren password: Seqdec ma drus 8 n yisekkilen setting_always_send_emails: S umata, ilɣa s yimayl ur d-ttwaceyyεen ara mi ara tesseqdaceḍ Mastodon s wudem urmid setting_display_media_default: Ffer imidyaten yettwacreḍ d infariyen @@ -115,8 +115,8 @@ kab: theme: Asentel amezwer thumbnail: Tanfult n uqeddac interactions: - must_be_follower: Ssewḥel alɣuten sɣur wid akked tid ur yellin ara d imeḍfaren-ik·im - must_be_following: Ssewḥel alɣuten sɣur wid akked tid ur tettḍafareḍ ara + must_be_follower: Ssewḥel ilɣa sɣur wid akk d tid ur yellin ara d imeḍfaren-ik·im + must_be_following: Ssewḥel ilɣa sɣur wid akked tid ur tettḍafareḍ ara must_be_following_dm: Sewḥel iznan usriden sɣur wid akked tid ur tettḍafareḍ ara invite: comment: Awennit diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index dfaa61e0cc..530bd60ad1 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -324,6 +324,9 @@ th: terms_of_service_generator: domain: โดเมน user: + date_of_birth_1i: วัน + date_of_birth_2i: เดือน + date_of_birth_3i: ปี role: บทบาท time_zone: โซนเวลา user_role: diff --git a/config/locales/th.yml b/config/locales/th.yml index 9b7ae7897d..19f9e4da1f 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -466,6 +466,12 @@ th: new: title: นำเข้าการปิดกั้นโดเมน no_file: ไม่ได้เลือกไฟล์ + fasp: + debug: + callbacks: + created_at: สร้างเมื่อ + delete: ลบ + ip: ที่อยู่ IP follow_recommendations: description_html: "คำแนะนำการติดตามช่วยให้ผู้ใช้ใหม่ค้นหาเนื้อหาที่น่าสนใจได้อย่างรวดเร็ว เมื่อผู้ใช้ไม่ได้โต้ตอบกับผู้อื่นมากพอที่จะสร้างคำแนะนำการติดตามเฉพาะบุคคล จะแนะนำบัญชีเหล่านี้แทน จะคำนวณคำแนะนำใหม่เป็นประจำทุกวันจากบัญชีต่าง ๆ ที่มีการมีส่วนร่วมล่าสุดสูงสุดและจำนวนผู้ติดตามในเซิร์ฟเวอร์สูงสุดสำหรับภาษาที่กำหนด" language: สำหรับภาษา @@ -1636,7 +1642,7 @@ th: last_active: ใช้งานล่าสุด most_recent: ล่าสุด moved: ย้ายแล้ว - mutual: ร่วมกัน + mutual: คนที่มีร่วมกัน primary: หลัก relationship: ความสัมพันธ์ remove_selected_domains: เอาผู้ติดตามทั้งหมดออกจากโดเมนที่เลือก diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index 7278058dce..43f4f3ecba 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -38,7 +38,7 @@ zh-HK: current_email: 現時電郵 label: 更改電郵 new_email: 新的電郵 - submit: 改變電郵 + submit: 更改電郵 title: 改變 %{username} 的電郵 change_role: changed_msg: 成功更改身份! @@ -182,6 +182,7 @@ zh-HK: destroy_domain_block: 刪除已封鎖的域名 destroy_instance: 清除網域 destroy_ip_block: 刪除 IP 規則 + destroy_relay: 刪除中繼 destroy_status: 刪除文章 destroy_unavailable_domain: 刪除無效域名 destroy_user_role: 刪除身份 @@ -425,6 +426,12 @@ zh-HK: new: title: 匯入封鎖的網域 no_file: 未選擇檔案 + fasp: + debug: + callbacks: + delete: 刪除 + providers: + delete: 刪除 follow_recommendations: description_html: "跟隨建議幫助新使用者快速找到有趣內容。 當使用者尚未和其他帳號足夠多的互動以產生個人化建議時,以下帳號將被推荐。這些是一句指定語言的近期參與度和本地粉絲數最高之帳戶組合每日重新計算。" language: 按語言 @@ -1549,6 +1556,7 @@ zh-HK: import: 匯入 import_and_export: 匯入及匯出 migrate: 帳戶遷移 + notifications: 電郵通知 preferences: 偏好設定 profile: 個人資料 relationships: 關注及追隨者 From 264ecdcc13d39ab929230e62e454b67532fbebc5 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 7 Apr 2025 11:31:00 +0200 Subject: [PATCH 15/90] Bump version to v4.3.7 (#34385) --- CHANGELOG.md | 23 +++++++++++++++++++++++ docker-compose.yml | 6 +++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7b0f64146..4dd4783597 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,29 @@ All notable changes to this project will be documented in this file. +## [4.3.7] - 2025-04-02 + +### Add + +- Add delay to profile updates to debounce them (#34137 by @ClearlyClaire) +- Add support for paginating partial collections in `SynchronizeFollowersService` (#34272 and #34277 by @ClearlyClaire) + +### Changed + +- Change account suspensions to be federated to recently-followed accounts as well (#34294 by @ClearlyClaire) +- Change `AccountReachFinder` to consider statuses based on suspension date (#32805 and #34291 by @ClearlyClaire and @mjankowski) +- Change user archive signed URL TTL from 10 seconds to 1 hour (#34254 by @ClearlyClaire) + +### Fixed + +- Fix static version of animated PNG emojis not being properly extracted (#34337 by @ClearlyClaire) +- Fix filters not applying in detailed view, favourites and bookmarks (#34259 and #34260 by @ClearlyClaire) +- Fix handling of malformed/unusual HTML (#34201 by @ClearlyClaire) +- Fix `CacheBuster` being queued for missing media attachments (#34253 by @ClearlyClaire) +- Fix incorrect URL being used when cache busting (#34189 by @ClearlyClaire) +- Fix streaming server refusing unix socket path in `DATABASE_URL` (#34091 by @ClearlyClaire) +- Fix “x” hotkey not working on boosted filtered posts (#33758 by @ClearlyClaire) + ## [4.3.6] - 2025-03-13 ### Security diff --git a/docker-compose.yml b/docker-compose.yml index 95375d17d0..ba34d858a4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,7 +59,7 @@ services: web: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.3.6 + image: ghcr.io/mastodon/mastodon:v4.3.7 restart: always env_file: .env.production command: bundle exec puma -C config/puma.rb @@ -83,7 +83,7 @@ services: # build: # dockerfile: ./streaming/Dockerfile # context: . - image: ghcr.io/mastodon/mastodon-streaming:v4.3.6 + image: ghcr.io/mastodon/mastodon-streaming:v4.3.7 restart: always env_file: .env.production command: node ./streaming/index.js @@ -102,7 +102,7 @@ services: sidekiq: # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes # build: . - image: ghcr.io/mastodon/mastodon:v4.3.6 + image: ghcr.io/mastodon/mastodon:v4.3.7 restart: always env_file: .env.production command: bundle exec sidekiq From 54aefa90145960de5c80b4ee4f6b60accd8d9a6c Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 7 Apr 2025 12:55:04 +0200 Subject: [PATCH 16/90] Fix visual glitches with filtering posts (#34387) --- app/javascript/styles/mastodon/components.scss | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 66513750e6..d2a1c2b7b8 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5271,6 +5271,9 @@ a.status-card { &__results { &__item { + display: flex; + align-items: center; + gap: 0.5em; cursor: pointer; color: $primary-text-color; font-size: 14px; @@ -6275,7 +6278,7 @@ a.status-card { a { text-decoration: none; - color: $inverted-text-color; + color: $highlight-text-color; font-weight: 500; &:hover { From ff7230df065461ad3fafefdb974f723641059388 Mon Sep 17 00:00:00 2001 From: Echo Date: Mon, 7 Apr 2025 12:56:30 +0200 Subject: [PATCH 17/90] Forces radio buttons to be correctly centred (#34389) --- app/javascript/styles/mastodon/components.scss | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index d2a1c2b7b8..a399553f29 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7572,14 +7572,11 @@ a.status-card { } .radio-button__input.checked::before { - position: absolute; - left: 2px; - top: 2px; content: ''; display: block; border-radius: 50%; - width: 12px; - height: 12px; + width: calc(100% - 4px); + height: calc(100% - 4px); background: $ui-highlight-color; } From 94ae96b9bc1753d5ccbea1c9ab2dae15d284b4ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:29:21 +0200 Subject: [PATCH 18/90] chore(deps): update dependency haml_lint to v0.62.0 (#34394) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 4d4d0d1792..865686a5bd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -280,7 +280,7 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.61.1) + haml_lint (0.62.0) haml (>= 5.0) parallel (~> 1.10) rainbow From f31b5334353a594b17770495a925484aceb51186 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:46:46 +0200 Subject: [PATCH 19/90] New Crowdin Translations (automated) (#34395) Co-authored-by: GitHub Actions --- config/locales/lv.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 6a21ad8cee..9ed84286d8 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -262,6 +262,7 @@ lv: destroy_custom_emoji_html: "%{name} izdzēsa emocijzīmi %{target}" destroy_domain_allow_html: "%{name} neatļāva federāciju ar domēnu %{target}" destroy_domain_block_html: "%{name} atbloķēja domēnu %{target}" + destroy_email_domain_block_html: "%{name} atcēla e-pasta domēna %{target} liegumu" destroy_instance_html: "%{name} attīrija domēnu %{target}" destroy_ip_block_html: "%{name} izdzēsa nosacījumu priekš IP %{target}" destroy_status_html: "%{name} noņēma ziņu %{target}" @@ -486,8 +487,10 @@ lv: delete: Izdzēst ip: IP adrese request_body: Pieprasījuma saturs + title: Atkļūdošanas atpakaļsaukumi providers: base_url: Pamata URL + callback: Atpakaļsaukums delete: Izdzēst edit: Labot nodrošinātāju finish_registration: Pabeigt reģistrēšanos @@ -497,6 +500,15 @@ lv: registration_requested: Pieprasīta reģistrēšanās registrations: confirm: Apstiprināt + description: Tu saņēmi reģistrēšanos no FĀPS. Tā ir jānoraida, ja to neveici. Ja veici, rūpīgi jāsalīdzina nosaukums un atslēgas pirkstu nospiedums, pirms reģistrēšanās apstiprināšanas. + reject: Noraidīt + title: Apstiprināt FĀPS reģistrēšanos + save: Saglabāt + select_capabilities: Atlasīt spējas + sign_in: Pieteikties + status: Stāvoklis + title: Fediverse ārējie pakalpojumu sniedzēji + title: FĀPS follow_recommendations: description_html: "Sekošanas ieteikumi palīdz jauniem lietotājiem ātri arast saistošu saturu. Kad lietotājs nav pietiekami mijiedarbojies ar citiem, lai veidotos pielāgoti sekošanas iteikumi, tiek ieteikti šie konti. Tie tiek pārskaitļoti ik dienas, izmantojot kontu, kuriem ir augstākās nesenās iesaistīšanās un lielākais vietējo sekotāju skaits norādītajā valodā." language: Valodai @@ -643,6 +655,9 @@ lv: actions_description_remote_html: Izlem, kādas darbības jāveic, lai atrisinātu šo ziņojumu. Tas ietekmēs tikai to, kā tavs serveris sazinās ar šo attālo kontu un apstrādā tā saturu. actions_no_posts: Šim ziņojumam nav saistītu ierakstu, kurus izdzēst add_to_report: Pievienot varāk paziņošanai + already_suspended_badges: + local: Jau ir apturēts šajā serverī + remote: Jau ir apturēts viņu serverī are_you_sure: Vai esi pārliecināts? assign_to_self: Piešķirt man assigned: Piešķirtais satura pārraudzītājs @@ -702,6 +717,7 @@ lv: delete_data_html: Dzēsiet lietotāja @%{acct} profilu un saturu pēc 30 dienām, ja vien to darbība pa šo laiku netiks atcelta preview_preamble_html: "@%{acct} saņems brīdinājumu ar šādu saturu:" record_strike_html: Ierakstiet brīdinājumu pret @%{acct}, lai palīdzētu jums izvērst turpmākus pārkāpumus no šī konta + send_email_html: Nosūtīt @%{acct} brīdinājuma e-pasta ziņojumu warning_placeholder: Izvēles papildu pamatojums satura pārraudzības darbībai. target_origin: Ziņotā konta izcelsme title: Ziņojumi @@ -743,6 +759,7 @@ lv: manage_appeals: Pārvaldīt Pārsūdzības manage_appeals_description: Ļauj lietotājiem pārskatīt iebildumus pret satura pārraudzības darbībām manage_blocks: Pārvaldīt Bloķus + manage_blocks_description: Ļauj lietotājiem liegt e-pasta pakalpojumu sniedzējus un IP adreses manage_custom_emojis: Pārvaldīt Pielāgotās Emocijzīmes manage_custom_emojis_description: Ļauj lietotājiem pārvaldīt pielāgotās emocijzīmes serverī manage_federation: Pārvaldīt Federāciju @@ -760,6 +777,7 @@ lv: manage_taxonomies: Pārvaldīt Taksonomijas manage_taxonomies_description: Ļauj lietotājiem pārskatīt aktuālāko saturu un atjaunināt tēmturu iestatījumus manage_user_access: Pārvaldīt Lietotāju Piekļuves + manage_user_access_description: Ļauj lietotājiem atspējot citu lietotāju divupakāpju autentificēšanos, mainīt savu e-pasta adresi un atiestatīt savu paroli manage_users: Pārvaldīt Lietotājus manage_users_description: Ļauj lietotājiem skatīt citu lietotāju informāciju un veikt pret viņiem satura pārraudzības darbības manage_webhooks: Pārvaldīt Tīmekļa Aizķeres @@ -834,6 +852,7 @@ lv: destroyed_msg: Vietnes augšupielāde sekmīgi izdzēsta. software_updates: critical_update: Kritiski - lūdzu, ātri atjaunini + description: Ir ieteicams uzturēt savu Mastodon serveri atjauninātu, lai gūtu labumu no jaunākajiem labojumiem un iespējām. Vēl jo vairāk, dažreiz ir ļoti svarīgi savlaicīgi atjaunināt Mastodon, lai izvairītos no drošības nepilnībām. Šo iemeslu dēļ Mastodon pārbauda atjauninājumus ik pēc 30 minūtēm, un paziņos atbilstoši e-pasta paziņojumu iestatījumiem. documentation_link: Uzzināt vairāk release_notes: Laidiena piezīmes title: Pieejamie atjauninājumi From ebfd48b0f2566733268705888c3836aa7d2a4da8 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Apr 2025 09:18:52 +0200 Subject: [PATCH 20/90] Remove 4.1 support from SECURITY.md (#34386) --- SECURITY.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 43ab4454c4..26c06e67f8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,9 +13,8 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through ## Supported Versions -| Version | Supported | -| ------- | ---------------- | -| 4.3.x | Yes | -| 4.2.x | Yes | -| 4.1.x | Until 2025-04-08 | -| < 4.1 | No | +| Version | Supported | +| ------- | --------- | +| 4.3.x | Yes | +| 4.2.x | Yes | +| < 4.2 | No | From d81983f181c5051804438c99a27be5939e293cff Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 8 Apr 2025 12:35:54 +0200 Subject: [PATCH 21/90] Fix the delete suggestion button not working and using a deprecated endpoint (#34396) --- app/javascript/mastodon/api/suggestions.ts | 2 +- app/javascript/mastodon/features/explore/components/card.jsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/api/suggestions.ts b/app/javascript/mastodon/api/suggestions.ts index d4817698cc..976986c0ab 100644 --- a/app/javascript/mastodon/api/suggestions.ts +++ b/app/javascript/mastodon/api/suggestions.ts @@ -5,4 +5,4 @@ export const apiGetSuggestions = (limit: number) => apiRequestGet('v2/suggestions', { limit }); export const apiDeleteSuggestion = (accountId: string) => - apiRequestDelete(`v1/suggestions/${accountId}`); + apiRequestDelete(`v2/suggestions/${accountId}`); diff --git a/app/javascript/mastodon/features/explore/components/card.jsx b/app/javascript/mastodon/features/explore/components/card.jsx index 15470ec24c..9617781b53 100644 --- a/app/javascript/mastodon/features/explore/components/card.jsx +++ b/app/javascript/mastodon/features/explore/components/card.jsx @@ -25,7 +25,7 @@ export const Card = ({ id, source }) => { const dispatch = useDispatch(); const handleDismiss = useCallback(() => { - dispatch(dismissSuggestion(id)); + dispatch(dismissSuggestion({ accountId: id })); }, [id, dispatch]); let label; From 36afb4557a460b911585305892f20f16668cf1d9 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Apr 2025 16:32:17 +0200 Subject: [PATCH 22/90] Fix incorrect deprecation warning for `DELETE /api/v1/suggestions/:id` (#34397) --- app/controllers/api/v1/suggestions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/v1/suggestions_controller.rb b/app/controllers/api/v1/suggestions_controller.rb index 918ec45beb..df9346832f 100644 --- a/app/controllers/api/v1/suggestions_controller.rb +++ b/app/controllers/api/v1/suggestions_controller.rb @@ -4,7 +4,7 @@ class Api::V1::SuggestionsController < Api::BaseController include Authorization include DeprecationConcern - deprecate_api '2021-05-16' + deprecate_api '2021-05-16', only: [:index] before_action -> { doorkeeper_authorize! :read, :'read:accounts' }, only: :index before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index From f66d092b322628bfe0e83882cd54e58895886c5a Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 8 Apr 2025 16:49:49 +0200 Subject: [PATCH 23/90] Fix usage of incorrect API endpoint for suggestion deletion (#34398) --- app/javascript/mastodon/api/suggestions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/api/suggestions.ts b/app/javascript/mastodon/api/suggestions.ts index 976986c0ab..d4817698cc 100644 --- a/app/javascript/mastodon/api/suggestions.ts +++ b/app/javascript/mastodon/api/suggestions.ts @@ -5,4 +5,4 @@ export const apiGetSuggestions = (limit: number) => apiRequestGet('v2/suggestions', { limit }); export const apiDeleteSuggestion = (accountId: string) => - apiRequestDelete(`v2/suggestions/${accountId}`); + apiRequestDelete(`v1/suggestions/${accountId}`); From 887336f2c66b6ac5049d10bf5f27fa69a15e0745 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 16:58:42 +0200 Subject: [PATCH 24/90] fix(deps): update dependency tesseract.js to v6.0.1 (#34388) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e9694d35fd..1568040692 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17265,8 +17265,8 @@ __metadata: linkType: hard "tesseract.js@npm:^6.0.0": - version: 6.0.0 - resolution: "tesseract.js@npm:6.0.0" + version: 6.0.1 + resolution: "tesseract.js@npm:6.0.1" dependencies: bmp-js: "npm:^0.1.0" idb-keyval: "npm:^6.2.0" @@ -17277,7 +17277,7 @@ __metadata: tesseract.js-core: "npm:^6.0.0" wasm-feature-detect: "npm:^1.2.11" zlibjs: "npm:^0.3.1" - checksum: 10c0/f65b816eabc16266bfa74ea61db73afa2d21ce0f57041b87b96abdff8954e042ee16637edea20aaf752227bc075052ca12021f4f68d5d25d52f062ebc4c644e1 + checksum: 10c0/1d73bb1fbc00c8629756d9594989d8bbfabda657a8cad84922ad68eb0f073148c82845bf71a882e5d2427a46edb5a470356864e60562c7a8442bddd70251435a languageName: node linkType: hard From bdf9baa2e82a3e363b73990e24697c3a321feeae Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 8 Apr 2025 18:06:23 +0200 Subject: [PATCH 25/90] Refactor `` into TypeScript (#34355) --- app/javascript/mastodon/actions/tags.js | 81 --------- app/javascript/mastodon/api/tags.ts | 14 +- .../mastodon/components/hashtag.tsx | 4 + .../mastodon/features/followed_tags/index.jsx | 95 ----------- .../mastodon/features/followed_tags/index.tsx | 161 ++++++++++++++++++ .../mastodon/reducers/followed_tags.js | 43 ----- app/javascript/mastodon/reducers/index.ts | 2 - .../styles/mastodon/components.scss | 10 +- 8 files changed, 181 insertions(+), 229 deletions(-) delete mode 100644 app/javascript/mastodon/actions/tags.js delete mode 100644 app/javascript/mastodon/features/followed_tags/index.jsx create mode 100644 app/javascript/mastodon/features/followed_tags/index.tsx delete mode 100644 app/javascript/mastodon/reducers/followed_tags.js diff --git a/app/javascript/mastodon/actions/tags.js b/app/javascript/mastodon/actions/tags.js deleted file mode 100644 index 6e0c95288a..0000000000 --- a/app/javascript/mastodon/actions/tags.js +++ /dev/null @@ -1,81 +0,0 @@ -import api, { getLinks } from '../api'; - -export const FOLLOWED_HASHTAGS_FETCH_REQUEST = 'FOLLOWED_HASHTAGS_FETCH_REQUEST'; -export const FOLLOWED_HASHTAGS_FETCH_SUCCESS = 'FOLLOWED_HASHTAGS_FETCH_SUCCESS'; -export const FOLLOWED_HASHTAGS_FETCH_FAIL = 'FOLLOWED_HASHTAGS_FETCH_FAIL'; - -export const FOLLOWED_HASHTAGS_EXPAND_REQUEST = 'FOLLOWED_HASHTAGS_EXPAND_REQUEST'; -export const FOLLOWED_HASHTAGS_EXPAND_SUCCESS = 'FOLLOWED_HASHTAGS_EXPAND_SUCCESS'; -export const FOLLOWED_HASHTAGS_EXPAND_FAIL = 'FOLLOWED_HASHTAGS_EXPAND_FAIL'; - -export const fetchFollowedHashtags = () => (dispatch) => { - dispatch(fetchFollowedHashtagsRequest()); - - api().get('/api/v1/followed_tags').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(fetchFollowedHashtagsSuccess(response.data, next ? next.uri : null)); - }).catch(err => { - dispatch(fetchFollowedHashtagsFail(err)); - }); -}; - -export function fetchFollowedHashtagsRequest() { - return { - type: FOLLOWED_HASHTAGS_FETCH_REQUEST, - }; -} - -export function fetchFollowedHashtagsSuccess(followed_tags, next) { - return { - type: FOLLOWED_HASHTAGS_FETCH_SUCCESS, - followed_tags, - next, - }; -} - -export function fetchFollowedHashtagsFail(error) { - return { - type: FOLLOWED_HASHTAGS_FETCH_FAIL, - error, - }; -} - -export function expandFollowedHashtags() { - return (dispatch, getState) => { - const url = getState().getIn(['followed_tags', 'next']); - - if (url === null) { - return; - } - - dispatch(expandFollowedHashtagsRequest()); - - api().get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandFollowedHashtagsSuccess(response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(expandFollowedHashtagsFail(error)); - }); - }; -} - -export function expandFollowedHashtagsRequest() { - return { - type: FOLLOWED_HASHTAGS_EXPAND_REQUEST, - }; -} - -export function expandFollowedHashtagsSuccess(followed_tags, next) { - return { - type: FOLLOWED_HASHTAGS_EXPAND_SUCCESS, - followed_tags, - next, - }; -} - -export function expandFollowedHashtagsFail(error) { - return { - type: FOLLOWED_HASHTAGS_EXPAND_FAIL, - error, - }; -} diff --git a/app/javascript/mastodon/api/tags.ts b/app/javascript/mastodon/api/tags.ts index 2cb802800c..4b111def81 100644 --- a/app/javascript/mastodon/api/tags.ts +++ b/app/javascript/mastodon/api/tags.ts @@ -1,4 +1,4 @@ -import { apiRequestPost, apiRequestGet } from 'mastodon/api'; +import api, { getLinks, apiRequestPost, apiRequestGet } from 'mastodon/api'; import type { ApiHashtagJSON } from 'mastodon/api_types/tags'; export const apiGetTag = (tagId: string) => @@ -9,3 +9,15 @@ export const apiFollowTag = (tagId: string) => export const apiUnfollowTag = (tagId: string) => apiRequestPost(`v1/tags/${tagId}/unfollow`); + +export const apiGetFollowedTags = async (url?: string) => { + const response = await api().request({ + method: 'GET', + url: url ?? '/api/v1/followed_tags', + }); + + return { + tags: response.data, + links: getLinks(response), + }; +}; diff --git a/app/javascript/mastodon/components/hashtag.tsx b/app/javascript/mastodon/components/hashtag.tsx index 30c20e0abd..1fe41e1e8b 100644 --- a/app/javascript/mastodon/components/hashtag.tsx +++ b/app/javascript/mastodon/components/hashtag.tsx @@ -106,6 +106,7 @@ export interface HashtagProps { to: string; uses?: number; withGraph?: boolean; + children?: React.ReactNode; } export const Hashtag: React.FC = ({ @@ -117,6 +118,7 @@ export const Hashtag: React.FC = ({ className, description, withGraph = true, + children, }) => (
@@ -158,5 +160,7 @@ export const Hashtag: React.FC = ({
)} + + {children &&
{children}
}
); diff --git a/app/javascript/mastodon/features/followed_tags/index.jsx b/app/javascript/mastodon/features/followed_tags/index.jsx deleted file mode 100644 index 21248e6de9..0000000000 --- a/app/javascript/mastodon/features/followed_tags/index.jsx +++ /dev/null @@ -1,95 +0,0 @@ -import PropTypes from 'prop-types'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { Helmet } from 'react-helmet'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; - -import { debounce } from 'lodash'; - -import TagIcon from '@/material-icons/400-24px/tag.svg?react'; -import { expandFollowedHashtags, fetchFollowedHashtags } from 'mastodon/actions/tags'; -import ColumnHeader from 'mastodon/components/column_header'; -import { Hashtag } from 'mastodon/components/hashtag'; -import ScrollableList from 'mastodon/components/scrollable_list'; -import Column from 'mastodon/features/ui/components/column'; - -const messages = defineMessages({ - heading: { id: 'followed_tags', defaultMessage: 'Followed hashtags' }, -}); - -const mapStateToProps = state => ({ - hashtags: state.getIn(['followed_tags', 'items']), - isLoading: state.getIn(['followed_tags', 'isLoading'], true), - hasMore: !!state.getIn(['followed_tags', 'next']), -}); - -class FollowedTags extends ImmutablePureComponent { - - static propTypes = { - params: PropTypes.object.isRequired, - dispatch: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - hashtags: ImmutablePropTypes.list, - isLoading: PropTypes.bool, - hasMore: PropTypes.bool, - multiColumn: PropTypes.bool, - }; - - componentDidMount() { - this.props.dispatch(fetchFollowedHashtags()); - } - - handleLoadMore = debounce(() => { - this.props.dispatch(expandFollowedHashtags()); - }, 300, { leading: true }); - - render () { - const { intl, hashtags, isLoading, hasMore, multiColumn } = this.props; - - const emptyMessage = ; - - return ( - - - - - {hashtags.map((hashtag) => ( - day.get('uses')).toArray()} - /> - ))} - - - - - - - ); - } - -} - -export default connect(mapStateToProps)(injectIntl(FollowedTags)); diff --git a/app/javascript/mastodon/features/followed_tags/index.tsx b/app/javascript/mastodon/features/followed_tags/index.tsx new file mode 100644 index 0000000000..21d63a6fec --- /dev/null +++ b/app/javascript/mastodon/features/followed_tags/index.tsx @@ -0,0 +1,161 @@ +import { useEffect, useState, useCallback, useRef } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { isFulfilled } from '@reduxjs/toolkit'; + +import TagIcon from '@/material-icons/400-24px/tag.svg?react'; +import { unfollowHashtag } from 'mastodon/actions/tags_typed'; +import { apiGetFollowedTags } from 'mastodon/api/tags'; +import type { ApiHashtagJSON } from 'mastodon/api_types/tags'; +import { Button } from 'mastodon/components/button'; +import { Column } from 'mastodon/components/column'; +import type { ColumnRef } from 'mastodon/components/column'; +import { ColumnHeader } from 'mastodon/components/column_header'; +import { Hashtag } from 'mastodon/components/hashtag'; +import ScrollableList from 'mastodon/components/scrollable_list'; +import { useAppDispatch } from 'mastodon/store'; + +const messages = defineMessages({ + heading: { id: 'followed_tags', defaultMessage: 'Followed hashtags' }, +}); + +const FollowedTag: React.FC<{ + tag: ApiHashtagJSON; + onUnfollow: (arg0: string) => void; +}> = ({ tag, onUnfollow }) => { + const dispatch = useAppDispatch(); + const tagId = tag.name; + + const handleClick = useCallback(() => { + void dispatch(unfollowHashtag({ tagId })).then((result) => { + if (isFulfilled(result)) { + onUnfollow(tagId); + } + + return ''; + }); + }, [dispatch, onUnfollow, tagId]); + + const people = + parseInt(tag.history[0].accounts) + + parseInt(tag.history[1]?.accounts ?? ''); + + return ( + + + + ); +}; + +const FollowedTags: React.FC<{ multiColumn: boolean }> = ({ multiColumn }) => { + const intl = useIntl(); + const [tags, setTags] = useState([]); + const [loading, setLoading] = useState(false); + const [next, setNext] = useState(); + const hasMore = !!next; + const columnRef = useRef(null); + + useEffect(() => { + setLoading(true); + + void apiGetFollowedTags() + .then(({ tags, links }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + setTags(tags); + setLoading(false); + setNext(next?.uri); + + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, [setTags, setLoading, setNext]); + + const handleLoadMore = useCallback(() => { + setLoading(true); + + void apiGetFollowedTags(next) + .then(({ tags, links }) => { + const next = links.refs.find((link) => link.rel === 'next'); + + setLoading(false); + setTags((previousTags) => [...previousTags, ...tags]); + setNext(next?.uri); + + return ''; + }) + .catch(() => { + setLoading(false); + }); + }, [setTags, setLoading, setNext, next]); + + const handleUnfollow = useCallback( + (tagId: string) => { + setTags((tags) => tags.filter((tag) => tag.name !== tagId)); + }, + [setTags], + ); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, []); + + const emptyMessage = ( + + ); + + return ( + + + + + {tags.map((tag) => ( + + ))} + + + + {intl.formatMessage(messages.heading)} + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default FollowedTags; diff --git a/app/javascript/mastodon/reducers/followed_tags.js b/app/javascript/mastodon/reducers/followed_tags.js deleted file mode 100644 index afea8e3b35..0000000000 --- a/app/javascript/mastodon/reducers/followed_tags.js +++ /dev/null @@ -1,43 +0,0 @@ -import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; - -import { - FOLLOWED_HASHTAGS_FETCH_REQUEST, - FOLLOWED_HASHTAGS_FETCH_SUCCESS, - FOLLOWED_HASHTAGS_FETCH_FAIL, - FOLLOWED_HASHTAGS_EXPAND_REQUEST, - FOLLOWED_HASHTAGS_EXPAND_SUCCESS, - FOLLOWED_HASHTAGS_EXPAND_FAIL, -} from 'mastodon/actions/tags'; - -const initialState = ImmutableMap({ - items: ImmutableList(), - isLoading: false, - next: null, -}); - -export default function followed_tags(state = initialState, action) { - switch(action.type) { - case FOLLOWED_HASHTAGS_FETCH_REQUEST: - return state.set('isLoading', true); - case FOLLOWED_HASHTAGS_FETCH_SUCCESS: - return state.withMutations(map => { - map.set('items', fromJS(action.followed_tags)); - map.set('isLoading', false); - map.set('next', action.next); - }); - case FOLLOWED_HASHTAGS_FETCH_FAIL: - return state.set('isLoading', false); - case FOLLOWED_HASHTAGS_EXPAND_REQUEST: - return state.set('isLoading', true); - case FOLLOWED_HASHTAGS_EXPAND_SUCCESS: - return state.withMutations(map => { - map.update('items', set => set.concat(fromJS(action.followed_tags))); - map.set('isLoading', false); - map.set('next', action.next); - }); - case FOLLOWED_HASHTAGS_EXPAND_FAIL: - return state.set('isLoading', false); - default: - return state; - } -} diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts index cd5f55a868..e98d835f47 100644 --- a/app/javascript/mastodon/reducers/index.ts +++ b/app/javascript/mastodon/reducers/index.ts @@ -13,7 +13,6 @@ import conversations from './conversations'; import custom_emojis from './custom_emojis'; import { dropdownMenuReducer } from './dropdown_menu'; import filters from './filters'; -import followed_tags from './followed_tags'; import height_cache from './height_cache'; import history from './history'; import { listsReducer } from './lists'; @@ -73,7 +72,6 @@ const reducers = { markers: markersReducer, picture_in_picture: pictureInPictureReducer, history, - followed_tags, notificationPolicy: notificationPolicyReducer, notificationRequests: notificationRequestsReducer, }; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index a399553f29..5d011d8f32 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -8110,13 +8110,9 @@ noscript { &__item { display: flex; align-items: center; - padding: 15px; + padding: 16px; border-bottom: 1px solid var(--background-border-color); - gap: 15px; - - &:last-child { - border-bottom: 0; - } + gap: 8px; &__name { flex: 1 1 auto; @@ -8223,7 +8219,7 @@ noscript { } &--compact &__item { - padding: 10px; + padding: 12px; } } From 6a39f00745ab2da7917f9584f94ef1eb456001c4 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 8 Apr 2025 18:06:31 +0200 Subject: [PATCH 26/90] Refactor `` and `` into TypeScript (#34356) --- .../features/bookmarked_statuses/index.jsx | 115 ----------------- .../features/bookmarked_statuses/index.tsx | 116 ++++++++++++++++++ .../features/favourited_statuses/index.jsx | 115 ----------------- .../features/favourited_statuses/index.tsx | 116 ++++++++++++++++++ .../mastodon/reducers/status_lists.js | 1 + app/javascript/mastodon/selectors/index.js | 5 +- app/javascript/mastodon/selectors/statuses.ts | 15 +++ 7 files changed, 249 insertions(+), 234 deletions(-) delete mode 100644 app/javascript/mastodon/features/bookmarked_statuses/index.jsx create mode 100644 app/javascript/mastodon/features/bookmarked_statuses/index.tsx delete mode 100644 app/javascript/mastodon/features/favourited_statuses/index.jsx create mode 100644 app/javascript/mastodon/features/favourited_statuses/index.tsx create mode 100644 app/javascript/mastodon/selectors/statuses.ts diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx b/app/javascript/mastodon/features/bookmarked_statuses/index.jsx deleted file mode 100644 index 122baafd6c..0000000000 --- a/app/javascript/mastodon/features/bookmarked_statuses/index.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import PropTypes from 'prop-types'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { Helmet } from 'react-helmet'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; - -import { debounce } from 'lodash'; - -import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; -import { fetchBookmarkedStatuses, expandBookmarkedStatuses } from 'mastodon/actions/bookmarks'; -import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; -import ColumnHeader from 'mastodon/components/column_header'; -import StatusList from 'mastodon/components/status_list'; -import Column from 'mastodon/features/ui/components/column'; -import { getStatusList } from 'mastodon/selectors'; - -const messages = defineMessages({ - heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' }, -}); - -const mapStateToProps = state => ({ - statusIds: getStatusList(state, 'bookmarks'), - isLoading: state.getIn(['status_lists', 'bookmarks', 'isLoading'], true), - hasMore: !!state.getIn(['status_lists', 'bookmarks', 'next']), -}); - -class Bookmarks extends ImmutablePureComponent { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - statusIds: ImmutablePropTypes.list.isRequired, - intl: PropTypes.object.isRequired, - columnId: PropTypes.string, - multiColumn: PropTypes.bool, - hasMore: PropTypes.bool, - isLoading: PropTypes.bool, - }; - - UNSAFE_componentWillMount () { - this.props.dispatch(fetchBookmarkedStatuses()); - } - - handlePin = () => { - const { columnId, dispatch } = this.props; - - if (columnId) { - dispatch(removeColumn(columnId)); - } else { - dispatch(addColumn('BOOKMARKS', {})); - } - }; - - handleMove = (dir) => { - const { columnId, dispatch } = this.props; - dispatch(moveColumn(columnId, dir)); - }; - - handleHeaderClick = () => { - this.column.scrollTop(); - }; - - setRef = c => { - this.column = c; - }; - - handleLoadMore = debounce(() => { - this.props.dispatch(expandBookmarkedStatuses()); - }, 300, { leading: true }); - - render () { - const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; - const pinned = !!columnId; - - const emptyMessage = ; - - return ( - - - - - - - {intl.formatMessage(messages.heading)} - - - - ); - } - -} - -export default connect(mapStateToProps)(injectIntl(Bookmarks)); diff --git a/app/javascript/mastodon/features/bookmarked_statuses/index.tsx b/app/javascript/mastodon/features/bookmarked_statuses/index.tsx new file mode 100644 index 0000000000..5d4574b05b --- /dev/null +++ b/app/javascript/mastodon/features/bookmarked_statuses/index.tsx @@ -0,0 +1,116 @@ +import { useEffect, useRef, useCallback } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import { + fetchBookmarkedStatuses, + expandBookmarkedStatuses, +} from 'mastodon/actions/bookmarks'; +import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; +import { Column } from 'mastodon/components/column'; +import type { ColumnRef } from 'mastodon/components/column'; +import { ColumnHeader } from 'mastodon/components/column_header'; +import StatusList from 'mastodon/components/status_list'; +import { getStatusList } from 'mastodon/selectors'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +const messages = defineMessages({ + heading: { id: 'column.bookmarks', defaultMessage: 'Bookmarks' }, +}); + +const Bookmarks: React.FC<{ + columnId: string; + multiColumn: boolean; +}> = ({ columnId, multiColumn }) => { + const intl = useIntl(); + const dispatch = useAppDispatch(); + const columnRef = useRef(null); + const statusIds = useAppSelector((state) => + getStatusList(state, 'bookmarks'), + ); + const isLoading = useAppSelector( + (state) => + state.status_lists.getIn(['bookmarks', 'isLoading'], true) as boolean, + ); + const hasMore = useAppSelector( + (state) => !!state.status_lists.getIn(['bookmarks', 'next']), + ); + + useEffect(() => { + dispatch(fetchBookmarkedStatuses()); + }, [dispatch]); + + const handlePin = useCallback(() => { + if (columnId) { + dispatch(removeColumn(columnId)); + } else { + dispatch(addColumn('BOOKMARKS', {})); + } + }, [dispatch, columnId]); + + const handleMove = useCallback( + (dir: number) => { + dispatch(moveColumn(columnId, dir)); + }, + [dispatch, columnId], + ); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, []); + + const handleLoadMore = useCallback(() => { + dispatch(expandBookmarkedStatuses()); + }, [dispatch]); + + const pinned = !!columnId; + + const emptyMessage = ( + + ); + + return ( + + + + + + + {intl.formatMessage(messages.heading)} + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default Bookmarks; diff --git a/app/javascript/mastodon/features/favourited_statuses/index.jsx b/app/javascript/mastodon/features/favourited_statuses/index.jsx deleted file mode 100644 index 9e0b982239..0000000000 --- a/app/javascript/mastodon/features/favourited_statuses/index.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import PropTypes from 'prop-types'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { Helmet } from 'react-helmet'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; - -import { debounce } from 'lodash'; - -import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; -import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; -import { fetchFavouritedStatuses, expandFavouritedStatuses } from 'mastodon/actions/favourites'; -import ColumnHeader from 'mastodon/components/column_header'; -import StatusList from 'mastodon/components/status_list'; -import Column from 'mastodon/features/ui/components/column'; -import { getStatusList } from 'mastodon/selectors'; - -const messages = defineMessages({ - heading: { id: 'column.favourites', defaultMessage: 'Favorites' }, -}); - -const mapStateToProps = state => ({ - statusIds: getStatusList(state, 'favourites'), - isLoading: state.getIn(['status_lists', 'favourites', 'isLoading'], true), - hasMore: !!state.getIn(['status_lists', 'favourites', 'next']), -}); - -class Favourites extends ImmutablePureComponent { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - statusIds: ImmutablePropTypes.list.isRequired, - intl: PropTypes.object.isRequired, - columnId: PropTypes.string, - multiColumn: PropTypes.bool, - hasMore: PropTypes.bool, - isLoading: PropTypes.bool, - }; - - UNSAFE_componentWillMount () { - this.props.dispatch(fetchFavouritedStatuses()); - } - - handlePin = () => { - const { columnId, dispatch } = this.props; - - if (columnId) { - dispatch(removeColumn(columnId)); - } else { - dispatch(addColumn('FAVOURITES', {})); - } - }; - - handleMove = (dir) => { - const { columnId, dispatch } = this.props; - dispatch(moveColumn(columnId, dir)); - }; - - handleHeaderClick = () => { - this.column.scrollTop(); - }; - - setRef = c => { - this.column = c; - }; - - handleLoadMore = debounce(() => { - this.props.dispatch(expandFavouritedStatuses()); - }, 300, { leading: true }); - - render () { - const { intl, statusIds, columnId, multiColumn, hasMore, isLoading } = this.props; - const pinned = !!columnId; - - const emptyMessage = ; - - return ( - - - - - - - {intl.formatMessage(messages.heading)} - - - - ); - } - -} - -export default connect(mapStateToProps)(injectIntl(Favourites)); diff --git a/app/javascript/mastodon/features/favourited_statuses/index.tsx b/app/javascript/mastodon/features/favourited_statuses/index.tsx new file mode 100644 index 0000000000..908a8ae4a1 --- /dev/null +++ b/app/javascript/mastodon/features/favourited_statuses/index.tsx @@ -0,0 +1,116 @@ +import { useEffect, useRef, useCallback } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import { addColumn, removeColumn, moveColumn } from 'mastodon/actions/columns'; +import { + fetchFavouritedStatuses, + expandFavouritedStatuses, +} from 'mastodon/actions/favourites'; +import { Column } from 'mastodon/components/column'; +import type { ColumnRef } from 'mastodon/components/column'; +import { ColumnHeader } from 'mastodon/components/column_header'; +import StatusList from 'mastodon/components/status_list'; +import { getStatusList } from 'mastodon/selectors'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +const messages = defineMessages({ + heading: { id: 'column.favourites', defaultMessage: 'Favorites' }, +}); + +const Favourites: React.FC<{ columnId: string; multiColumn: boolean }> = ({ + columnId, + multiColumn, +}) => { + const dispatch = useAppDispatch(); + const intl = useIntl(); + const columnRef = useRef(null); + const statusIds = useAppSelector((state) => + getStatusList(state, 'favourites'), + ); + const isLoading = useAppSelector( + (state) => + state.status_lists.getIn(['favourites', 'isLoading'], true) as boolean, + ); + const hasMore = useAppSelector( + (state) => !!state.status_lists.getIn(['favourites', 'next']), + ); + + useEffect(() => { + dispatch(fetchFavouritedStatuses()); + }, [dispatch]); + + const handlePin = useCallback(() => { + if (columnId) { + dispatch(removeColumn(columnId)); + } else { + dispatch(addColumn('FAVOURITES', {})); + } + }, [dispatch, columnId]); + + const handleMove = useCallback( + (dir: number) => { + dispatch(moveColumn(columnId, dir)); + }, + [dispatch, columnId], + ); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, []); + + const handleLoadMore = useCallback(() => { + dispatch(expandFavouritedStatuses()); + }, [dispatch]); + + const pinned = !!columnId; + + const emptyMessage = ( + + ); + + return ( + + + + + + + {intl.formatMessage(messages.heading)} + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default Favourites; diff --git a/app/javascript/mastodon/reducers/status_lists.js b/app/javascript/mastodon/reducers/status_lists.js index 6cb6a937bb..c9d39130ee 100644 --- a/app/javascript/mastodon/reducers/status_lists.js +++ b/app/javascript/mastodon/reducers/status_lists.js @@ -96,6 +96,7 @@ const removeOneFromList = (state, listType, status) => { return state.updateIn([listType, 'items'], (list) => list.delete(status.get('id'))); }; +/** @type {import('@reduxjs/toolkit').Reducer} */ export default function statusLists(state = initialState, action) { switch(action.type) { case FAVOURITED_STATUSES_FETCH_REQUEST: diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index 5ccaba23fd..3119b285b2 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -6,6 +6,7 @@ import { me } from '../initial_state'; import { getFilters } from './filters'; export { makeGetAccount } from "./accounts"; +export { getStatusList } from "./statuses"; export const makeGetStatus = () => { return createSelector( @@ -77,7 +78,3 @@ export const makeGetReport = () => createSelector([ (_, base) => base, (state, _, targetAccountId) => state.getIn(['accounts', targetAccountId]), ], (base, targetAccount) => base.set('target_account', targetAccount)); - -export const getStatusList = createSelector([ - (state, type) => state.getIn(['status_lists', type, 'items']), -], (items) => items.toList()); diff --git a/app/javascript/mastodon/selectors/statuses.ts b/app/javascript/mastodon/selectors/statuses.ts new file mode 100644 index 0000000000..4d045e924a --- /dev/null +++ b/app/javascript/mastodon/selectors/statuses.ts @@ -0,0 +1,15 @@ +import { createSelector } from '@reduxjs/toolkit'; +import type { OrderedSet as ImmutableOrderedSet } from 'immutable'; + +import type { RootState } from 'mastodon/store'; + +export const getStatusList = createSelector( + [ + ( + state: RootState, + type: 'favourites' | 'bookmarks' | 'pins' | 'trending', + ) => + state.status_lists.getIn([type, 'items']) as ImmutableOrderedSet, + ], + (items) => items.toList(), +); From 0e5be63fb327403902076df602ec2dd410ada789 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 8 Apr 2025 18:28:14 +0200 Subject: [PATCH 27/90] Change unfollow button label from "Mutual" to "Unfollow" in web UI (#34392) --- .../mastodon/components/follow_button.tsx | 7 +- .../components/account_header.tsx | 99 +++---------------- 2 files changed, 15 insertions(+), 91 deletions(-) diff --git a/app/javascript/mastodon/components/follow_button.tsx b/app/javascript/mastodon/components/follow_button.tsx index f49abfd2b3..4a22bb1c3f 100644 --- a/app/javascript/mastodon/components/follow_button.tsx +++ b/app/javascript/mastodon/components/follow_button.tsx @@ -16,8 +16,7 @@ const messages = defineMessages({ unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, follow: { id: 'account.follow', defaultMessage: 'Follow' }, followBack: { id: 'account.follow_back', defaultMessage: 'Follow back' }, - mutual: { id: 'account.mutual', defaultMessage: 'Mutual' }, - edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, + editProfile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, }); export const FollowButton: React.FC<{ @@ -73,11 +72,9 @@ export const FollowButton: React.FC<{ if (!signedIn) { label = intl.formatMessage(messages.follow); } else if (accountId === me) { - label = intl.formatMessage(messages.edit_profile); + label = intl.formatMessage(messages.editProfile); } else if (!relationship) { label = ; - } else if (relationship.following && relationship.followed_by) { - label = intl.formatMessage(messages.mutual); } else if (relationship.following || relationship.requested) { label = intl.formatMessage(messages.unfollow); } else if (relationship.followed_by) { diff --git a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx index 9505d48010..ae1724a728 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx @@ -37,10 +37,10 @@ import { FollowingCounter, StatusesCounter, } from 'mastodon/components/counters'; +import { FollowButton } from 'mastodon/components/follow_button'; import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; -import { LoadingIndicator } from 'mastodon/components/loading_indicator'; import { ShortNumber } from 'mastodon/components/short_number'; import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import { DomainPill } from 'mastodon/features/account/components/domain_pill'; @@ -51,7 +51,6 @@ import { useIdentity } from 'mastodon/identity_context'; import { autoPlayGif, me, domain as localDomain } from 'mastodon/initial_state'; import type { Account } from 'mastodon/models/account'; import type { DropdownMenu } from 'mastodon/models/dropdown_menu'; -import type { Relationship } from 'mastodon/models/relationship'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION, @@ -179,20 +178,6 @@ const titleFromAccount = (account: Account) => { return `${prefix} (@${acct})`; }; -const messageForFollowButton = (relationship?: Relationship) => { - if (!relationship) return messages.follow; - - if (relationship.get('following') && relationship.get('followed_by')) { - return messages.mutual; - } else if (relationship.get('following') || relationship.get('requested')) { - return messages.unfollow; - } else if (relationship.get('followed_by')) { - return messages.followBack; - } else { - return messages.follow; - } -}; - const dateFormatOptions: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric', @@ -215,20 +200,6 @@ export const AccountHeader: React.FC<{ const hidden = useAppSelector((state) => getAccountHidden(state, accountId)); const handleLinkClick = useLinks(); - const handleFollow = useCallback(() => { - if (!account) { - return; - } - - if (relationship?.following || relationship?.requested) { - dispatch( - openModal({ modalType: 'CONFIRM_UNFOLLOW', modalProps: { account } }), - ); - } else { - dispatch(followAccount(account.id)); - } - }, [dispatch, account, relationship]); - const handleBlock = useCallback(() => { if (!account) { return; @@ -365,23 +336,6 @@ export const AccountHeader: React.FC<{ ); }, [dispatch, account]); - const handleInteractionModal = useCallback(() => { - if (!account) { - return; - } - - dispatch( - openModal({ - modalType: 'INTERACTION', - modalProps: { - type: 'follow', - accountId: account.id, - url: account.uri, - }, - }), - ); - }, [dispatch, account]); - const handleOpenAvatar = useCallback( (e: React.MouseEvent) => { if (e.button !== 0 || e.ctrlKey || e.metaKey) { @@ -417,10 +371,6 @@ export const AccountHeader: React.FC<{ }); }, [account]); - const handleEditProfile = useCallback(() => { - window.open('/settings/profile', '_blank'); - }, []); - const handleMouseEnter = useCallback( ({ currentTarget }: React.MouseEvent) => { if (autoPlayGif) { @@ -680,9 +630,12 @@ export const AccountHeader: React.FC<{ return null; } - let actionBtn, bellBtn, lockedIcon, shareBtn; + let actionBtn: React.ReactNode, + bellBtn: React.ReactNode, + lockedIcon: React.ReactNode, + shareBtn: React.ReactNode; - const info = []; + const info: React.ReactNode[] = []; if (me !== account.id && relationship?.blocking) { info.push( @@ -750,43 +703,17 @@ export const AccountHeader: React.FC<{ ); } - if (me !== account.id) { - if (signedIn && !relationship) { - // Wait until the relationship is loaded - actionBtn = ( - - ); - } else if (!relationship?.blocking) { - actionBtn = ( - + ); + } else if (isExternalLinkItem(option)) { + element = ( + + {text} + + ); + } else { + element = ( + + {text} + + ); + } + + return ( +
  • + {element} +
  • + ); + }; + + const renderItemMethod = renderItem ?? nativeRenderItem; + + return ( +
    + {(loading || !items) && } + + {!loading && renderHeader && items && ( +
    + {renderHeader(items)} +
    + )} + + {!loading && items && ( +
      + {items.map((option, i) => + renderItemMethod(option, i, { + onClick: handleClick, + onKeyUp: handleItemKeyUp, + }), + )} +
    + )} +
    + ); +}; + +interface DropdownProps { + children?: React.ReactElement; + icon?: string; + iconComponent?: IconProp; + items?: Item[]; + loading?: boolean; + title?: string; + disabled?: boolean; + scrollable?: boolean; + scrollKey?: string; + status?: ImmutableMap; + renderItem?: RenderItemFn; + renderHeader?: RenderHeaderFn; + onOpen?: () => void; + onItemClick?: (arg0: Item, arg1: number) => void; +} + +const offset = [5, 5] as OffsetValue; +const popperConfig = { strategy: 'fixed' } as UsePopperOptions; + +export const Dropdown = ({ + children, + icon, + iconComponent, + items, + loading, + title = 'Menu', + disabled, + scrollable, + status, + renderItem, + renderHeader, + onOpen, + onItemClick, + scrollKey, +}: DropdownProps) => { + const dispatch = useAppDispatch(); + const openDropdownId = useAppSelector((state) => state.dropdownMenu.openId); + const openedViaKeyboard = useAppSelector( + (state) => state.dropdownMenu.keyboard, + ); + const [currentId] = useState(id++); + const open = currentId === openDropdownId; + const activeElement = useRef(null); + const targetRef = useRef(null); + + const handleClose = useCallback(() => { + if (activeElement.current) { + activeElement.current.focus({ preventScroll: true }); + activeElement.current = null; + } + + dispatch( + closeModal({ + modalType: 'ACTIONS', + ignoreFocus: false, + }), + ); + + dispatch(closeDropdownMenu({ id: currentId })); + }, [dispatch, currentId]); + + const handleClick = useCallback( + (e: React.MouseEvent | React.KeyboardEvent) => { + const { type } = e; + + if (open) { + handleClose(); + } else { + onOpen?.(); + + if (status) { + dispatch(fetchRelationships([status.getIn(['account', 'id'])])); + } + + if (isUserTouching()) { + dispatch( + openModal({ + modalType: 'ACTIONS', + modalProps: { + status, + actions: items, + onClick: onItemClick, + }, + }), + ); + } else { + dispatch( + openDropdownMenu({ + id: currentId, + keyboard: type !== 'click', + scrollKey, + }), + ); + } + } + }, + [ + dispatch, + currentId, + scrollKey, + onOpen, + onItemClick, + open, + status, + items, + handleClose, + ], + ); + + const handleMouseDown = useCallback(() => { + if (!open && document.activeElement instanceof HTMLElement) { + activeElement.current = document.activeElement; + } + }, [open]); + + const handleButtonKeyDown = useCallback( + (e: React.KeyboardEvent) => { + switch (e.key) { + case ' ': + case 'Enter': + handleMouseDown(); + break; + } + }, + [handleMouseDown], + ); + + const handleKeyPress = useCallback( + (e: React.KeyboardEvent) => { + switch (e.key) { + case ' ': + case 'Enter': + handleClick(e); + e.stopPropagation(); + e.preventDefault(); + break; + } + }, + [handleClick], + ); + + const handleItemClick = useCallback( + (e: React.MouseEvent | React.KeyboardEvent) => { + const i = Number(e.currentTarget.getAttribute('data-index')); + const item = items?.[i]; + + handleClose(); + + if (!item) { + return; + } + + if (typeof onItemClick === 'function') { + e.preventDefault(); + onItemClick(item, i); + } else if (isActionItem(item)) { + e.preventDefault(); + item.action(); + } + }, + [handleClose, onItemClick, items], + ); + + useEffect(() => { + return () => { + if (currentId === openDropdownId) { + handleClose(); + } + }; + }, [currentId, openDropdownId, handleClose]); + + let button: React.ReactElement; + + if (children) { + button = cloneElement(Children.only(children), { + onClick: handleClick, + onMouseDown: handleMouseDown, + onKeyDown: handleButtonKeyDown, + onKeyPress: handleKeyPress, + ref: targetRef, + }); + } else if (icon && iconComponent) { + button = ( + + ); + } else { + return null; + } + + return ( + <> + {button} + + + {({ props, arrowProps, placement }) => ( +
    +
    +
    + + +
    +
    + )} + + + ); +}; diff --git a/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js b/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js deleted file mode 100644 index 726fee9076..0000000000 --- a/app/javascript/mastodon/components/edited_timestamp/containers/dropdown_menu_container.js +++ /dev/null @@ -1,32 +0,0 @@ -import { connect } from 'react-redux'; - -import { openDropdownMenu, closeDropdownMenu } from 'mastodon/actions/dropdown_menu'; -import { fetchHistory } from 'mastodon/actions/history'; -import DropdownMenu from 'mastodon/components/dropdown_menu'; - -/** - * - * @param {import('mastodon/store').RootState} state - * @param {*} props - */ -const mapStateToProps = (state, { statusId }) => ({ - openDropdownId: state.dropdownMenu.openId, - openedViaKeyboard: state.dropdownMenu.keyboard, - items: state.getIn(['history', statusId, 'items']), - loading: state.getIn(['history', statusId, 'loading']), -}); - -const mapDispatchToProps = (dispatch, { statusId }) => ({ - - onOpen (id, onItemClick, keyboard) { - dispatch(fetchHistory(statusId)); - dispatch(openDropdownMenu({ id, keyboard })); - }, - - onClose (id) { - dispatch(closeDropdownMenu({ id })); - }, - -}); - -export default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu); diff --git a/app/javascript/mastodon/components/edited_timestamp/index.jsx b/app/javascript/mastodon/components/edited_timestamp/index.jsx deleted file mode 100644 index f8fa043259..0000000000 --- a/app/javascript/mastodon/components/edited_timestamp/index.jsx +++ /dev/null @@ -1,77 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { FormattedMessage, injectIntl } from 'react-intl'; - -import { connect } from 'react-redux'; - -import { openModal } from 'mastodon/actions/modal'; -import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; -import InlineAccount from 'mastodon/components/inline_account'; -import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; - -import DropdownMenu from './containers/dropdown_menu_container'; - -const mapDispatchToProps = (dispatch, { statusId }) => ({ - - onItemClick (index) { - dispatch(openModal({ - modalType: 'COMPARE_HISTORY', - modalProps: { index, statusId }, - })); - }, - -}); - -class EditedTimestamp extends PureComponent { - - static propTypes = { - statusId: PropTypes.string.isRequired, - timestamp: PropTypes.string.isRequired, - intl: PropTypes.object.isRequired, - onItemClick: PropTypes.func.isRequired, - }; - - handleItemClick = (item, i) => { - const { onItemClick } = this.props; - onItemClick(i); - }; - - renderHeader = items => { - return ( - - ); - }; - - renderItem = (item, index, { onClick, onKeyPress }) => { - const formattedDate = ; - const formattedName = ; - - const label = item.get('original') ? ( - - ) : ( - - ); - - return ( -
  • - -
  • - ); - }; - - render () { - const { timestamp, statusId } = this.props; - - return ( - - - - ); - } - -} - -export default connect(null, mapDispatchToProps)(injectIntl(EditedTimestamp)); diff --git a/app/javascript/mastodon/components/edited_timestamp/index.tsx b/app/javascript/mastodon/components/edited_timestamp/index.tsx new file mode 100644 index 0000000000..770cf33f8c --- /dev/null +++ b/app/javascript/mastodon/components/edited_timestamp/index.tsx @@ -0,0 +1,140 @@ +import { useCallback } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import type { Map as ImmutableMap, List as ImmutableList } from 'immutable'; + +import { fetchHistory } from 'mastodon/actions/history'; +import { openModal } from 'mastodon/actions/modal'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; +import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; +import InlineAccount from 'mastodon/components/inline_account'; +import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +type HistoryItem = ImmutableMap; + +export const EditedTimestamp: React.FC<{ + statusId: string; + timestamp: string; +}> = ({ statusId, timestamp }) => { + const dispatch = useAppDispatch(); + const items = useAppSelector( + (state) => + ( + state.history.getIn([statusId, 'items']) as + | ImmutableList + | undefined + )?.toArray() as HistoryItem[], + ); + const loading = useAppSelector( + (state) => state.history.getIn([statusId, 'loading']) as boolean, + ); + + const handleOpen = useCallback(() => { + dispatch(fetchHistory(statusId)); + }, [dispatch, statusId]); + + const handleItemClick = useCallback( + (_item: HistoryItem, i: number) => { + dispatch( + openModal({ + modalType: 'COMPARE_HISTORY', + modalProps: { index: i, statusId }, + }), + ); + }, + [dispatch, statusId], + ); + + const renderHeader = useCallback((items: HistoryItem[]) => { + return ( + + ); + }, []); + + const renderItem = useCallback( + ( + item: HistoryItem, + index: number, + { + onClick, + onKeyUp, + }: { + onClick: React.MouseEventHandler; + onKeyUp: React.KeyboardEventHandler; + }, + ) => { + const formattedDate = ( + + ); + const formattedName = ( + + ); + + const label = (item.get('original') as boolean) ? ( + + ) : ( + + ); + + return ( +
  • + +
  • + ); + }, + [], + ); + + return ( + + items={items} + loading={loading} + renderItem={renderItem} + scrollable + renderHeader={renderHeader} + onOpen={handleOpen} + onItemClick={handleItemClick} + > + + + ); +}; diff --git a/app/javascript/mastodon/components/icon_button.tsx b/app/javascript/mastodon/components/icon_button.tsx index 179df83627..8ec665bbd8 100644 --- a/app/javascript/mastodon/components/icon_button.tsx +++ b/app/javascript/mastodon/components/icon_button.tsx @@ -1,4 +1,4 @@ -import { PureComponent, createRef } from 'react'; +import { useState, useEffect, useCallback, forwardRef } from 'react'; import classNames from 'classnames'; @@ -15,99 +15,108 @@ interface Props { onMouseDown?: React.MouseEventHandler; onKeyDown?: React.KeyboardEventHandler; onKeyPress?: React.KeyboardEventHandler; - active: boolean; + active?: boolean; expanded?: boolean; style?: React.CSSProperties; activeStyle?: React.CSSProperties; - disabled: boolean; + disabled?: boolean; inverted?: boolean; - animate: boolean; - overlay: boolean; - tabIndex: number; + animate?: boolean; + overlay?: boolean; + tabIndex?: number; counter?: number; href?: string; - ariaHidden: boolean; + ariaHidden?: boolean; } -interface States { - activate: boolean; - deactivate: boolean; -} -export class IconButton extends PureComponent { - buttonRef = createRef(); - static defaultProps = { - active: false, - disabled: false, - animate: false, - overlay: false, - tabIndex: 0, - ariaHidden: false, - }; - - state = { - activate: false, - deactivate: false, - }; - - UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (!nextProps.animate) return; - - if (this.props.active && !nextProps.active) { - this.setState({ activate: false, deactivate: true }); - } else if (!this.props.active && nextProps.active) { - this.setState({ activate: true, deactivate: false }); - } - } - - handleClick: React.MouseEventHandler = (e) => { - e.preventDefault(); - - if (!this.props.disabled && this.props.onClick != null) { - this.props.onClick(e); - } - }; - - handleKeyPress: React.KeyboardEventHandler = (e) => { - if (this.props.onKeyPress && !this.props.disabled) { - this.props.onKeyPress(e); - } - }; - - handleMouseDown: React.MouseEventHandler = (e) => { - if (!this.props.disabled && this.props.onMouseDown) { - this.props.onMouseDown(e); - } - }; - - handleKeyDown: React.KeyboardEventHandler = (e) => { - if (!this.props.disabled && this.props.onKeyDown) { - this.props.onKeyDown(e); - } - }; - - render() { - const style = { - ...this.props.style, - ...(this.props.active ? this.props.activeStyle : {}), - }; - - const { - active, +export const IconButton = forwardRef( + ( + { className, - disabled, expanded, icon, iconComponent, inverted, - overlay, - tabIndex, title, counter, href, - ariaHidden, - } = this.props; + style, + activeStyle, + onClick, + onKeyDown, + onKeyPress, + onMouseDown, + active = false, + disabled = false, + animate = false, + overlay = false, + tabIndex = 0, + ariaHidden = false, + }, + buttonRef, + ) => { + const [activate, setActivate] = useState(false); + const [deactivate, setDeactivate] = useState(false); - const { activate, deactivate } = this.state; + useEffect(() => { + if (!animate) { + return; + } + + if (activate && !active) { + setActivate(false); + setDeactivate(true); + } else if (!activate && active) { + setActivate(true); + setDeactivate(false); + } + }, [setActivate, setDeactivate, animate, active, activate]); + + const handleClick: React.MouseEventHandler = useCallback( + (e) => { + e.preventDefault(); + + if (!disabled) { + onClick?.(e); + } + }, + [disabled, onClick], + ); + + const handleKeyPress: React.KeyboardEventHandler = + useCallback( + (e) => { + if (!disabled) { + onKeyPress?.(e); + } + }, + [disabled, onKeyPress], + ); + + const handleMouseDown: React.MouseEventHandler = + useCallback( + (e) => { + if (!disabled) { + onMouseDown?.(e); + } + }, + [disabled, onMouseDown], + ); + + const handleKeyDown: React.KeyboardEventHandler = + useCallback( + (e) => { + if (!disabled) { + onKeyDown?.(e); + } + }, + [disabled, onKeyDown], + ); + + const buttonStyle = { + ...style, + ...(active ? activeStyle : {}), + }; const classes = classNames(className, 'icon-button', { active, @@ -146,18 +155,19 @@ export class IconButton extends PureComponent { aria-hidden={ariaHidden} title={title} className={classes} - onClick={this.handleClick} - onMouseDown={this.handleMouseDown} - onKeyDown={this.handleKeyDown} - // eslint-disable-next-line @typescript-eslint/no-deprecated - onKeyPress={this.handleKeyPress} - style={style} + onClick={handleClick} + onMouseDown={handleMouseDown} + onKeyDown={handleKeyDown} + onKeyPress={handleKeyPress} // eslint-disable-line @typescript-eslint/no-deprecated + style={buttonStyle} tabIndex={tabIndex} disabled={disabled} - ref={this.buttonRef} + ref={buttonRef} > {contents} ); - } -} + }, +); + +IconButton.displayName = 'IconButton'; diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 9cd2d8d20c..344524f8be 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -25,7 +25,7 @@ import { identityContextPropShape, withIdentity } from 'mastodon/identity_contex import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'mastodon/permissions'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; -import DropdownMenuContainer from '../containers/dropdown_menu_container'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { me } from '../initial_state'; import { IconButton } from './icon_button'; @@ -390,7 +390,7 @@ class StatusActionBar extends ImmutablePureComponent {
    - ({ - openDropdownId: state.dropdownMenu.openId, - openedViaKeyboard: state.dropdownMenu.keyboard, -}); - -/** - * @param {any} dispatch - * @param {Object} root0 - * @param {any} [root0.status] - * @param {any} root0.items - * @param {any} [root0.scrollKey] - */ -const mapDispatchToProps = (dispatch, { status, items, scrollKey }) => ({ - onOpen(id, onItemClick, keyboard) { - if (status) { - dispatch(fetchRelationships([status.getIn(['account', 'id'])])); - } - - dispatch(isUserTouching() ? openModal({ - modalType: 'ACTIONS', - modalProps: { - status, - actions: items, - onClick: onItemClick, - }, - }) : openDropdownMenu({ id, keyboard, scrollKey })); - }, - - onClose(id) { - dispatch(closeModal({ - modalType: 'ACTIONS', - ignoreFocus: false, - })); - dispatch(closeDropdownMenu({ id })); - }, -}); - -export default connect(mapStateToProps, mapDispatchToProps)(DropdownMenu); diff --git a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx index ae1724a728..ca12834528 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx @@ -37,12 +37,12 @@ import { FollowingCounter, StatusesCounter, } from 'mastodon/components/counters'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { FollowButton } from 'mastodon/components/follow_button'; import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; import { Icon } from 'mastodon/components/icon'; import { IconButton } from 'mastodon/components/icon_button'; import { ShortNumber } from 'mastodon/components/short_number'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import { DomainPill } from 'mastodon/features/account/components/domain_pill'; import AccountNoteContainer from 'mastodon/features/account/containers/account_note_container'; import FollowRequestNoteContainer from 'mastodon/features/account/containers/follow_request_note_container'; @@ -50,7 +50,7 @@ import { useLinks } from 'mastodon/hooks/useLinks'; import { useIdentity } from 'mastodon/identity_context'; import { autoPlayGif, me, domain as localDomain } from 'mastodon/initial_state'; import type { Account } from 'mastodon/models/account'; -import type { DropdownMenu } from 'mastodon/models/dropdown_menu'; +import type { MenuItem } from 'mastodon/models/dropdown_menu'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION, @@ -406,7 +406,7 @@ export const AccountHeader: React.FC<{ const remoteDomain = isRemote ? account?.acct.split('@')[1] : null; const menu = useMemo(() => { - const arr: DropdownMenu = []; + const arr: MenuItem[] = []; if (!account) { return arr; @@ -806,13 +806,11 @@ export const AccountHeader: React.FC<{
    {!hidden && bellBtn} {!hidden && shareBtn} - {!hidden && actionBtn}
    diff --git a/app/javascript/mastodon/features/compose/components/action_bar.jsx b/app/javascript/mastodon/features/compose/components/action_bar.tsx similarity index 55% rename from app/javascript/mastodon/features/compose/components/action_bar.jsx rename to app/javascript/mastodon/features/compose/components/action_bar.tsx index f7339141ad..af24c565f6 100644 --- a/app/javascript/mastodon/features/compose/components/action_bar.jsx +++ b/app/javascript/mastodon/features/compose/components/action_bar.tsx @@ -2,64 +2,82 @@ import { useMemo } from 'react'; import { defineMessages, useIntl } from 'react-intl'; -import { useDispatch } from 'react-redux'; - import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; import { openModal } from 'mastodon/actions/modal'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; +import { useAppDispatch } from 'mastodon/store'; const messages = defineMessages({ edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, pins: { id: 'navigation_bar.pins', defaultMessage: 'Pinned posts' }, - preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, - follow_requests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, + preferences: { + id: 'navigation_bar.preferences', + defaultMessage: 'Preferences', + }, + follow_requests: { + id: 'navigation_bar.follow_requests', + defaultMessage: 'Follow requests', + }, favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' }, lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' }, - followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' }, + followed_tags: { + id: 'navigation_bar.followed_tags', + defaultMessage: 'Followed hashtags', + }, blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' }, - domain_blocks: { id: 'navigation_bar.domain_blocks', defaultMessage: 'Blocked domains' }, + domain_blocks: { + id: 'navigation_bar.domain_blocks', + defaultMessage: 'Blocked domains', + }, mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' }, filters: { id: 'navigation_bar.filters', defaultMessage: 'Muted words' }, logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' }, bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' }, }); -export const ActionBar = () => { - const dispatch = useDispatch(); +export const ActionBar: React.FC = () => { + const dispatch = useAppDispatch(); const intl = useIntl(); const menu = useMemo(() => { const handleLogoutClick = () => { - dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT' })); + dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT', modalProps: {} })); }; - return ([ - { text: intl.formatMessage(messages.edit_profile), href: '/settings/profile' }, - { text: intl.formatMessage(messages.preferences), href: '/settings/preferences' }, + return [ + { + text: intl.formatMessage(messages.edit_profile), + href: '/settings/profile', + }, + { + text: intl.formatMessage(messages.preferences), + href: '/settings/preferences', + }, { text: intl.formatMessage(messages.pins), to: '/pinned' }, null, - { text: intl.formatMessage(messages.follow_requests), to: '/follow_requests' }, + { + text: intl.formatMessage(messages.follow_requests), + to: '/follow_requests', + }, { text: intl.formatMessage(messages.favourites), to: '/favourites' }, { text: intl.formatMessage(messages.bookmarks), to: '/bookmarks' }, { text: intl.formatMessage(messages.lists), to: '/lists' }, - { text: intl.formatMessage(messages.followed_tags), to: '/followed_tags' }, + { + text: intl.formatMessage(messages.followed_tags), + to: '/followed_tags', + }, null, { text: intl.formatMessage(messages.mutes), to: '/mutes' }, { text: intl.formatMessage(messages.blocks), to: '/blocks' }, - { text: intl.formatMessage(messages.domain_blocks), to: '/domain_blocks' }, + { + text: intl.formatMessage(messages.domain_blocks), + to: '/domain_blocks', + }, { text: intl.formatMessage(messages.filters), href: '/filters' }, null, { text: intl.formatMessage(messages.logout), action: handleLogoutClick }, - ]); + ]; }, [intl, dispatch]); - return ( - - ); + return ; }; diff --git a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx index 0d154db1e1..c27cd3727f 100644 --- a/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx +++ b/app/javascript/mastodon/features/direct_timeline/components/conversation.jsx @@ -24,7 +24,7 @@ import AvatarComposite from 'mastodon/components/avatar_composite'; import { IconButton } from 'mastodon/components/icon_button'; import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; import StatusContent from 'mastodon/components/status_content'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { autoPlayGif } from 'mastodon/initial_state'; import { makeGetStatus } from 'mastodon/selectors'; @@ -205,7 +205,7 @@ export const Conversation = ({ conversation, scrollKey, onMoveUp, onMoveDown })
    - {menu.length > 0 && ( - )} diff --git a/app/javascript/mastodon/features/lists/index.tsx b/app/javascript/mastodon/features/lists/index.tsx index 25a537336e..a455597127 100644 --- a/app/javascript/mastodon/features/lists/index.tsx +++ b/app/javascript/mastodon/features/lists/index.tsx @@ -13,9 +13,9 @@ import { fetchLists } from 'mastodon/actions/lists'; import { openModal } from 'mastodon/actions/modal'; import { Column } from 'mastodon/components/column'; import { ColumnHeader } from 'mastodon/components/column_header'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { Icon } from 'mastodon/components/icon'; import ScrollableList from 'mastodon/components/scrollable_list'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; import { getOrderedLists } from 'mastodon/selectors/lists'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; @@ -60,12 +60,11 @@ const ListItem: React.FC<{ {title} -
    diff --git a/app/javascript/mastodon/features/notifications/components/notification_request.jsx b/app/javascript/mastodon/features/notifications/components/notification_request.jsx index 626929ae50..9c9365d088 100644 --- a/app/javascript/mastodon/features/notifications/components/notification_request.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification_request.jsx @@ -17,7 +17,7 @@ import { initReport } from 'mastodon/actions/reports'; import { Avatar } from 'mastodon/components/avatar'; import { CheckBox } from 'mastodon/components/check_box'; import { IconButton } from 'mastodon/components/icon_button'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { makeGetAccount } from 'mastodon/selectors'; import { toCappedNumber } from 'mastodon/utils/numbers'; diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx index ccaed312b4..b2bdd0ec77 100644 --- a/app/javascript/mastodon/features/notifications/requests.jsx +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -23,7 +23,7 @@ import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import { Icon } from 'mastodon/components/icon'; import ScrollableList from 'mastodon/components/scrollable_list'; -import DropdownMenuContainer from 'mastodon/containers/dropdown_menu_container'; +import { Dropdown } from 'mastodon/components/dropdown_menu'; import { NotificationRequest } from './components/notification_request'; import { PolicyControls } from './components/policy_controls'; @@ -126,7 +126,7 @@ const SelectRow = ({selectAllChecked, toggleSelectAll, selectedItems, selectionM
    0 && !selectAllChecked} onChange={handleSelectAll} />
    - - +
    ); diff --git a/app/javascript/mastodon/features/status/components/detailed_status.tsx b/app/javascript/mastodon/features/status/components/detailed_status.tsx index 0e6ee8c1ea..2fa43ac132 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.tsx +++ b/app/javascript/mastodon/features/status/components/detailed_status.tsx @@ -14,7 +14,7 @@ import { Link } from 'react-router-dom'; import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react'; import { AnimatedNumber } from 'mastodon/components/animated_number'; import { ContentWarning } from 'mastodon/components/content_warning'; -import EditedTimestamp from 'mastodon/components/edited_timestamp'; +import { EditedTimestamp } from 'mastodon/components/edited_timestamp'; import { FilterWarning } from 'mastodon/components/filter_warning'; import { FormattedDateWrapper } from 'mastodon/components/formatted_date'; import type { StatusLike } from 'mastodon/components/hashtag_bar'; diff --git a/app/javascript/mastodon/models/dropdown_menu.ts b/app/javascript/mastodon/models/dropdown_menu.ts index 35a29ab62a..ceea9ad4dd 100644 --- a/app/javascript/mastodon/models/dropdown_menu.ts +++ b/app/javascript/mastodon/models/dropdown_menu.ts @@ -3,16 +3,18 @@ interface BaseMenuItem { dangerous?: boolean; } -interface ActionMenuItem extends BaseMenuItem { +export interface ActionMenuItem extends BaseMenuItem { action: () => void; } -interface LinkMenuItem extends BaseMenuItem { +export interface LinkMenuItem extends BaseMenuItem { to: string; } -interface ExternalLinkMenuItem extends BaseMenuItem { +export interface ExternalLinkMenuItem extends BaseMenuItem { href: string; + target?: string; + method?: 'post' | 'put' | 'delete'; } export type MenuItem = @@ -20,5 +22,3 @@ export type MenuItem = | LinkMenuItem | ExternalLinkMenuItem | null; - -export type DropdownMenu = MenuItem[]; diff --git a/app/javascript/mastodon/reducers/dropdown_menu.ts b/app/javascript/mastodon/reducers/dropdown_menu.ts index 59e19bb16d..0e46f0ee80 100644 --- a/app/javascript/mastodon/reducers/dropdown_menu.ts +++ b/app/javascript/mastodon/reducers/dropdown_menu.ts @@ -3,15 +3,15 @@ import { createReducer } from '@reduxjs/toolkit'; import { closeDropdownMenu, openDropdownMenu } from '../actions/dropdown_menu'; interface DropdownMenuState { - openId: string | null; + openId: number | null; keyboard: boolean; - scrollKey: string | null; + scrollKey: string | undefined; } const initialState: DropdownMenuState = { openId: null, keyboard: false, - scrollKey: null, + scrollKey: undefined, }; export const dropdownMenuReducer = createReducer(initialState, (builder) => { @@ -27,7 +27,7 @@ export const dropdownMenuReducer = createReducer(initialState, (builder) => { .addCase(closeDropdownMenu, (state, { payload: { id } }) => { if (state.openId === id) { state.openId = null; - state.scrollKey = null; + state.scrollKey = undefined; } }); }); From 498372fd06bfb0235b75888629ca5de0336ccd71 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 09:57:18 +0200 Subject: [PATCH 30/90] New Crowdin Translations (automated) (#34403) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 2 +- app/javascript/mastodon/locales/fi.json | 2 +- app/javascript/mastodon/locales/lad.json | 13 ++++++++++- config/locales/fi.yml | 2 +- config/locales/lad.yml | 12 ++++++++++ config/locales/lv.yml | 29 ++++++++++++++++++++++++ config/locales/simple_form.lad.yml | 3 +++ 7 files changed, 59 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index eb7a22a04b..bf5a5b1016 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -675,7 +675,7 @@ "onboarding.follows.title": "Последвайте хора, за да започнете", "onboarding.profile.discoverable": "Правене на моя профил откриваем", "onboarding.profile.discoverable_hint": "Включвайки откриваемостта в Mastodon, вашите публикации може да се появят при резултатите от търсене и изгряващи неща, и вашия профил може да бъде предложен на хора с подобни интереси като вашите.", - "onboarding.profile.display_name": "Името на показ", + "onboarding.profile.display_name": "Показвано име", "onboarding.profile.display_name_hint": "Вашето пълно име или псевдоним…", "onboarding.profile.note": "Биография", "onboarding.profile.note_hint": "Може да @споменавате други хора или #хаштагове…", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 4be3211045..53df277b70 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -240,7 +240,7 @@ "conversation.mark_as_read": "Merkitse luetuksi", "conversation.open": "Näytä keskustelu", "conversation.with": "{names} kanssa", - "copy_icon_button.copied": "Sisältö kopioitiin leikepöydälle", + "copy_icon_button.copied": "Kopioitu leikepöydälle", "copypaste.copied": "Kopioitu", "copypaste.copy_to_clipboard": "Kopioi leikepöydälle", "directory.federated": "Tunnetusta fediversumista", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index ab410dc2a8..d9d941f8e8 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", "account.unblock": "Dezbloka a @{name}", "account.unblock_domain": "Dezbloka domeno {domain}", + "account.unblock_domain_short": "Dezbloka", "account.unblock_short": "Dezbloka", "account.unendorse": "No avalia en profil", "account.unfollow": "Desige", @@ -86,6 +87,7 @@ "alert.unexpected.message": "Afito un yerro no asperado.", "alert.unexpected.title": "Atyo!", "alt_text_badge.title": "Teksto alternativo", + "alt_text_modal.add_alt_text": "Adjusta teksto alternativo", "alt_text_modal.cancel": "Anula", "alt_text_modal.change_thumbnail": "Troka minyatura", "alt_text_modal.done": "Fecho", @@ -195,9 +197,12 @@ "confirmations.discard_edit_media.message": "Tienes trokamientos no guadrados en la deskripsion o vista previa. Keres efasarlos entanto?", "confirmations.edit.confirm": "Edita", "confirmations.edit.message": "Si edites agora, kitaras el mesaj kualo estas eskriviendo aktualmente. Estas siguro ke keres fazerlo?", + "confirmations.follow_to_list.title": "Segir utilizador?", "confirmations.logout.confirm": "Sal", "confirmations.logout.message": "Estas siguro ke keres salir de tu kuento?", "confirmations.logout.title": "Salir?", + "confirmations.missing_alt_text.confirm": "Adjusta teksto alternativo", + "confirmations.missing_alt_text.title": "Adjustar teksto alternativo?", "confirmations.mute.confirm": "Silensia", "confirmations.redraft.confirm": "Efasa i reeskrive", "confirmations.redraft.message": "Estas siguro ke keres efasar esta publikasyon i reeskrivirla? Pedreras todos los favoritos i repartajasyones asosiados kon esta publikasyon i repuestas a eya seran guerfanadas.", @@ -372,6 +377,7 @@ "ignore_notifications_modal.not_followers_title": "Inyorar avizos de personas a las kualas no te sigen?", "ignore_notifications_modal.not_following_title": "Inyorar avizos de personas a las kualas no siges?", "ignore_notifications_modal.private_mentions_title": "Ignorar avizos de mensyones privadas no solisitadas?", + "info_button.label": "Ayuda", "interaction_modal.on_another_server": "En otro sirvidor", "interaction_modal.on_this_server": "En este sirvidor", "interaction_modal.title.favourite": "Endika ke te plaze publikasyon de {name}", @@ -426,6 +432,7 @@ "link_preview.shares": "{count, plural, one {{counter} publikasyon} other {{counter} publikasyones}}", "lists.add_member": "Adjusta", "lists.add_to_list": "Adjusta a lista", + "lists.create": "Kriya", "lists.create_list": "Kriya lista", "lists.delete": "Efasa lista", "lists.done": "Fecho", @@ -588,6 +595,7 @@ "poll_button.remove_poll": "Kita anketa", "privacy.change": "Troka privasita de publikasyon", "privacy.direct.long": "Todos enmentados en la publikasyon", + "privacy.direct.short": "Enmentadura privada", "privacy.private.long": "Solo para tus suivantes", "privacy.private.short": "Suivantes", "privacy.public.long": "Todos en i afuera de Mastodon", @@ -682,6 +690,7 @@ "search_results.accounts": "Profiles", "search_results.all": "Todos", "search_results.hashtags": "Etiketas", + "search_results.no_results": "No ay rezultados.", "search_results.see_all": "Ve todo", "search_results.statuses": "Publikasyones", "search_results.title": "Bushka por \"{q}\"", @@ -775,6 +784,8 @@ "video.expand": "Espande video", "video.fullscreen": "Ekran kompleto", "video.hide": "Eskonde video", + "video.mute": "Silensia", "video.pause": "Pauza", - "video.play": "Reproduze" + "video.play": "Reproduze", + "video.unmute": "Desilensia" } diff --git a/config/locales/fi.yml b/config/locales/fi.yml index e999748ad9..fcb180518f 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -457,7 +457,7 @@ fi: domain: Verkkotunnus new: create: Lisää verkkotunnus - resolve: Selvitä verkkotunnus + resolve: Resolvoi verkkotunnus title: Estä uusi sähköpostiverkkotunnus no_email_domain_block_selected: Sähköpostiverkkotunnusten estoja ei muutettu, koska yhtäkään ei ollut valittuna not_permitted: Ei sallittu diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 86dbc668c0..c1364fbb01 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -462,6 +462,18 @@ lad: new: title: Importa blokos de domeno no_file: Dinguna dosya tiene sido eskojida + fasp: + debug: + callbacks: + delete: Efasa + providers: + name: Nombre + registrations: + confirm: Konfirma + reject: Refuza + save: Guadra + sign_in: Konektate + status: Estado follow_recommendations: description_html: "Las rekomendasyones de kuentos ayudan a los muevos utilizadores a topar presto kontenido enteresante. Kuando un utilizador no tiene enteraktuado kon otros lo sufisiente komo para djenerar rekomendasyones personalizadas de kuentos a las ke segir, en sus lugar se le rekomiendan estes kuentos. Se rekalkulan diariamente a partir de una mikstura de kuentos kon el mayor numero de enteraksyones rezientes i kon el mayor numero de suivantes lokales kon una lingua determinada." language: Para la lingua diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 9ed84286d8..151cc6cf6c 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1507,6 +1507,14 @@ lv: one: Tu gatavojies sekot līdz %{count} kontam no %{filename}. other: Tu gatavojies sekot līdz %{count} kontiem no %{filename}. zero: Tu gatavojies sekot līdz %{count} kontiem no %{filename}. + lists_html: + one: Tu gatavojies pievienot līdz pat %{count} kontam no %{filename} saviem sarakstiem. Tiks izveidoti jauni saraksti, ja nav saraksta, kurā pievienot. + other: Tu gatavojies pievienot līdz pat %{count} kontiem no %{filename} saviem sarakstiem. Tiks izveidoti jauni saraksti, ja nav saraksta, kurā pievienot. + zero: Tu gatavojies pievienot līdz pat %{count} kontiem no %{filename} saviem sarakstiem. Tiks izveidoti jauni saraksti, ja nav saraksta, kurā pievienot. + muting_html: + one: Tu gatavojies apklusināt līdz pat %{count} kontam no %{filename}. + other: Tu gatavojies apklusināt līdz pat %{count} kontiem no %{filename}. + zero: Tu gatavojies apklusināt līdz pat %{count} kontiem no %{filename}. preface: Tu vari ievietot datus, kurus esi izguvis no cita servera, kā, piemēram, cilvēku sarakstu, kuriem Tu seko vai kurus bloķē. recent_imports: Nesen importēts states: @@ -1578,6 +1586,7 @@ lv: unsubscribe: action: Jā, atcelt abonēšanu complete: Anulēts + confirmation_html: Vai tiešām atteikties no %{type} saņemšanas savā e-pasta adresē %{email} par %{domain} esošo Mastodon? Vienmēr var abonēt no jauna savos e-pasta paziņojumu iestatījumos. emails: notification_emails: favourite: izlases paziņojumu e-pasta ziņojumi @@ -1585,10 +1594,13 @@ lv: follow_request: sekošanas pieprasījumu e-pasta ziņojumi mention: pieminēšanas paziņojumu e-pasta ziņojumi reblog: pastiprinājumu paziņojumu e-pasta ziņojumi + resubscribe_html: Ja abonements tika atcelts kļūdas dēļ, abonēt no jauna var savos e-pasta paziņojumu iestatījumos. + success_html: Tu vairs savā e-pasta adresē %{email} nesaņemsi %{type} par %{domain} esošo Mastodon. title: Atcelt abonēšanu media_attachments: validations: images_and_video: Nevar pievienot videoklipu tādai ziņai, kura jau satur attēlus + not_found: Informācijas nesējs %{ids} nav atrasts vai jau pievienots citam ierakstam not_ready: Nevar pievienot failus, kuru apstrāde nav pabeigta. Pēc brīža mēģini vēlreiz! too_many: Nevar pievienot vairāk kā 4 failus migrations: @@ -1666,6 +1678,7 @@ lv: subject: "%{name} laboja ierakstu" notifications: administration_emails: Pārvaldītāju e-pasta paziņojumi + email_events: E-pasta paziņojumu notikumi email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:' number: human: @@ -1722,6 +1735,9 @@ lv: errors: limit_reached: Sasniegts dažādu reakciju limits unrecognized_emoji: nav atpazīta emocijzīme + redirects: + prompt: Ja uzticies šai saitei, jāklikšķina uz tās, lai turpinātu. + title: Tu atstāj %{instance}. relationships: activity: Konta aktivitāte confirm_follow_selected_followers: Vai tiešām vēlies sekot atlasītajiem sekotājiem? @@ -1833,10 +1849,13 @@ lv: severed_relationships: download: Lejupielādēt (%{count}) event_type: + account_suspension: Konta apturēšana (%{target_name}) + domain_block: Servera apturēšana (%{target_name}) user_domain_block: Jūs bloķējāt %{target_name} lost_followers: Zaudētie sekotāji lost_follows: Zaudētie sekojumi preamble: Tu vari zaudēt sekojamos un sekotājus, kad liedz domēnu vai kad satura pārraudzītāji izlemj apturēt attālu serveri. Kad t as notiek, būs iespējams lejupielādēt sarakstus ar pārtrauktajām saiknēm, kurus tad var izpētīt un, iespējams, ievietot citā serverī. + purged: Informāciju par šo serveri notīrīja Tava servera pārvaldītāji. type: Notikums statuses: attached: @@ -1926,6 +1945,7 @@ lv: contrast: Mastodon (Augsts kontrasts) default: Mastodon (Tumšs) mastodon-light: Mastodon (Gaišs) + system: Automātisks (ievēro sistēmas izskatu) time: formats: default: "%b %d, %Y, %H:%M" @@ -1952,6 +1972,10 @@ lv: recovery_instructions_html: Ja kādreiz zaudēsi piekļuvi savam tālrunim, vari izmantot kādu no zemāk norādītajiem atkopes kodiem, lai atgūtu piekļuvi savam kontam. Atkpes kodi jātur drošībā. Piemēram, tos var izdrukāt un glabāt kopā ar citiem svarīgiem dokumentiem. webauthn: Drošības atslēgas user_mailer: + announcement_published: + description: "%{domain} pārvaldītāji veic paziņojumu:" + subject: Pakalpojuma paziņojums + title: "%{domain} pakalpojuma paziņojums" appeal_approved: action: Konta iestatījumi explanation: Apelācija par brīdinājumu jūsu kontam %{strike_date}, ko iesniedzāt %{appeal_date}, ir apstiprināta. Jūsu konts atkal ir labā stāvoklī. @@ -1962,8 +1986,13 @@ lv: subject: Jūsu %{date} apelācija ir noraidīta title: Apelācija noraidīta backup_ready: + explanation: Tu pieprasīji pilnu sava Mastodon konta rezerves kopiju. + extra: Tā tagad ir gatava lejupielādei. subject: Tavs arhīvs ir gatavs lejupielādei title: Arhīva līdzņemšana + failed_2fa: + details: 'Šeit ir informācija par pieteikšanās mēģinājumu:' + explanation: Kāds mēģināja pieteikties Tavā kontā, bet norādīja nederīgu otro autentificēšanās soli. suspicious_sign_in: change_password: mainīt paroli details: 'Šeit ir pieteikšanās izvērsums:' diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 6fef9f7422..a3f70bd361 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -311,6 +311,9 @@ lad: terms_of_service_generator: domain: Domeno user: + date_of_birth_1i: Diya + date_of_birth_2i: Mez + date_of_birth_3i: Anyo role: Rolo time_zone: Zona de tiempo user_role: From 6deadd596d44a036ce2376d713092a805a81c593 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 9 Apr 2025 09:42:57 -0400 Subject: [PATCH 31/90] Remove deprecated single-argument variation of `UnfilterNotificationsWorker` (#33353) --- app/workers/unfilter_notifications_worker.rb | 21 +++------------- .../unfilter_notifications_worker_spec.rb | 24 +++++++++---------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb index 53a35ce12c..cb8a46b8f4 100644 --- a/app/workers/unfilter_notifications_worker.rb +++ b/app/workers/unfilter_notifications_worker.rb @@ -4,25 +4,14 @@ class UnfilterNotificationsWorker include Sidekiq::Worker include Redisable - # Earlier versions of the feature passed a `notification_request` ID - # If `to_account_id` is passed, the first argument is an account ID - # TODO for after 4.3.0: drop the single-argument case - def perform(notification_request_or_account_id, from_account_id = nil) - if from_account_id.present? - @notification_request = nil - @from_account = Account.find_by(id: from_account_id) - @recipient = Account.find_by(id: notification_request_or_account_id) - else - @notification_request = NotificationRequest.find_by(id: notification_request_or_account_id) - @from_account = @notification_request&.from_account - @recipient = @notification_request&.account - end + def perform(account_id, from_account_id) + @from_account = Account.find_by(id: from_account_id) + @recipient = Account.find_by(id: account_id) return if @from_account.nil? || @recipient.nil? push_to_conversations! unfilter_notifications! - remove_request! decrement_worker_count! end @@ -36,10 +25,6 @@ class UnfilterNotificationsWorker filtered_notifications.in_batches.update_all(filtered: false) end - def remove_request! - @notification_request&.destroy! - end - def filtered_notifications Notification.where(account: @recipient, from_account: @from_account, filtered: true) end diff --git a/spec/workers/unfilter_notifications_worker_spec.rb b/spec/workers/unfilter_notifications_worker_spec.rb index 464a4520ff..2fd130301f 100644 --- a/spec/workers/unfilter_notifications_worker_spec.rb +++ b/spec/workers/unfilter_notifications_worker_spec.rb @@ -5,6 +5,7 @@ require 'rails_helper' RSpec.describe UnfilterNotificationsWorker do let(:recipient) { Fabricate(:account) } let(:sender) { Fabricate(:account) } + let(:worker) { described_class.new } before do # Populate multiple kinds of filtered notifications @@ -67,23 +68,22 @@ RSpec.describe UnfilterNotificationsWorker do end describe '#perform' do - context 'with single argument (prerelease behavior)' do - subject { described_class.new.perform(notification_request.id) } - - let(:notification_request) { Fabricate(:notification_request, from_account: sender, account: recipient) } + context 'with recipient and sender' do + subject { worker.perform(recipient.id, sender.id) } it_behaves_like 'shared behavior' - - it 'destroys the notification request' do - expect { subject } - .to change { NotificationRequest.exists?(notification_request.id) }.to(false) - end end - context 'with two arguments' do - subject { described_class.new.perform(recipient.id, sender.id) } + context 'with missing records' do + it 'runs without error for missing sender' do + expect { worker.perform(recipient.id, nil) } + .to_not raise_error + end - it_behaves_like 'shared behavior' + it 'runs without error for missing recipient' do + expect { worker.perform(nil, sender.id) } + .to_not raise_error + end end end end From a89ddcfd2d8f8dc5159e874dd33edc3f6c57fe7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:01:39 +0200 Subject: [PATCH 32/90] New Crowdin Translations (automated) (#34407) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/fa.json | 1 + app/javascript/mastodon/locales/pt-BR.json | 1 + config/locales/fa.yml | 16 ++++++++++++++ config/locales/lv.yml | 25 ++++++++++++++-------- config/locales/pt-BR.yml | 16 ++++++++++++++ config/locales/simple_form.fa.yml | 3 +++ 6 files changed, 53 insertions(+), 9 deletions(-) diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index f4758e5afb..27f0bf4e9a 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} فرسته} other {{counter} فرسته}}", "account.unblock": "رفع مسدودیت ‎@{name}", "account.unblock_domain": "رفع مسدودیت دامنهٔ {domain}", + "account.unblock_domain_short": "آنبلاک", "account.unblock_short": "رفع مسدودیت", "account.unendorse": "معرّفی نکردن در نمایه", "account.unfollow": "پی‌نگرفتن", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 3ac1946503..5279159d79 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -65,6 +65,7 @@ "account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}", "account.unblock": "Desbloquear @{name}", "account.unblock_domain": "Desbloquear domínio {domain}", + "account.unblock_domain_short": "Desbloquear", "account.unblock_short": "Desbloquear", "account.unendorse": "Remover", "account.unfollow": "Deixar de seguir", diff --git a/config/locales/fa.yml b/config/locales/fa.yml index b5dce6dabf..f1c74829c9 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -479,6 +479,22 @@ fa: new: title: درون‌ریزی انسدادهای دامنه no_file: هیچ پرونده‌ای گزیده نشده + fasp: + debug: + callbacks: + delete: حذف + providers: + active: فعال + delete: حذف + finish_registration: تکمیل ثبت‌نام + name: نام + providers: ارائه دهندگان + registrations: + confirm: تایید + reject: رد کردن + save: ذخیره + sign_in: ورود + status: وضعیت follow_recommendations: description_html: "پیشنهادات پیگیری به کاربران جدید کک می‌کند تا سریع‌تر محتوای جالب را پیدا کنند. زمانی که کاربری هنوز به اندازه کافی با دیگران تعامل نداشته است تا پیشنهادات پیگیری شخصی‌سازی‌شده دریافت کند، این حساب‌ها را به جای آن فهرست مشاهده خواهد کرد. این حساب‌ها به صورت روزانه و در ترکیب با بیشتری تعاملات و بالاترین دنبال‌کنندگان محلی برای یک زبان مشخص بازمحاسبه می‌شوند." language: برای زبان diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 151cc6cf6c..fad8a2609e 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -259,6 +259,7 @@ lv: create_user_role_html: "%{name} nomainīja %{target} lomu" demote_user_html: "%{name} pazemināja lietotāju %{target}" destroy_announcement_html: "%{name} izdzēsa paziņojumu %{target}" + destroy_canonical_email_block_html: "%{name} atcēla e-pasta adreses liegumu ar jaucējvērtību %{target}" destroy_custom_emoji_html: "%{name} izdzēsa emocijzīmi %{target}" destroy_domain_allow_html: "%{name} neatļāva federāciju ar domēnu %{target}" destroy_domain_block_html: "%{name} atbloķēja domēnu %{target}" @@ -409,7 +410,7 @@ lv: permanent_action: Apturēšanas atsaukšana neatjaunos nekādus datus vai attiecības. preamble_html: Tu gatavojies apturēt domēna %{domain} un tā apakšdomēnu darbību. remove_all_data: Tādējādi no tava servera tiks noņemts viss šī domēna kontu saturs, multivide un profila dati. - stop_communication: Jūsu serveris pārtrauks sazināties ar šiem serveriem. + stop_communication: Tavs serveris pārtrauks sazināties ar šiem serveriem. title: Apstiprināt domēna %{domain} bloķēšanu undo_relationships: Tādējādi tiks atsauktas jebkuras sekošanas attiecības starp šo un tavu serveru kontiem. created_msg: Domēna bloķēšana tagad tiek apstrādāta @@ -949,11 +950,13 @@ lv: message_html: "Tava objektu krātuve ir nepareizi konfigurēta. Tavu lietotāju privātums ir apdraudēts." tags: moderation: + not_trendable: Nav izplatīts not_usable: Nav izmantojams pending_review: Gaida pārskatīšanu review_requested: Pieprasīta pārskatīšana reviewed: Pārskatīts title: Stāvoklis + trendable: Izplatīts unreviewed: Nepārskatīts usable: Izmantojams name: Nosaukums @@ -1312,7 +1315,7 @@ lv: appeal_approved: Šis brīdinājums tika sekmīgi pārsūdzēts un vairs nav spēkā appeal_rejected: Apelācija ir noraidīta appeal_submitted_at: Apelācija iesniegta - appealed_msg: Jūsu apelācija ir iesniegta. Ja tā tiks apstiprināta, jums tiks paziņots. + appealed_msg: Tava pārsūdzība ir iesniegta. Ja tā tiks apstiprināta, Tev tiks paziņots. appeals: submit: Iesniegt apelāciju approve_appeal: Apstiprināt apelāciju @@ -1332,9 +1335,9 @@ lv: sensitive: Konta atzīmēšana kā jūtīgu silence: Konta ierobežošana suspend: Konta apturēšana - your_appeal_approved: Jūsu apelācija ir apstiprināta + your_appeal_approved: Tava pārsūdzība tika apstiprināta your_appeal_pending: Jūs esat iesniedzis apelāciju - your_appeal_rejected: Jūsu apelācija ir noraidīta + your_appeal_rejected: Tava pārsūdzība tika noraidīta edit_profile: basic_information: Pamata informācija hint_html: "Pielāgo, ko cilvēki redz Tavā publiskajā profilā un blakus Taviem ierakstiem. Ir lielāka iespējamība, ka citi clivēki sekos Tev un mijiedarbosies ar Tevi, ja Tev ir aizpildīts profils un profila attēls." @@ -1929,7 +1932,7 @@ lv: '7889238': 3 mēneši min_age_label: Vecuma slieksnis min_favs: Saglabāt ziņas izlsasē vismaz - min_favs_hint: Nedzēš nevienu jūsu ziņu, kas ir saņēmusi vismaz tik daudz izcēlumu. Atstājiet tukšu, lai dzēstu ziņas neatkarīgi no to izcēlumu skaita + min_favs_hint: Neizdzēš nevienu no Taviem ierakstiem, kas ir pievienoti šādā daudzumā izlašu. Atstāt tukšu, lai izdzēstu ierakstus neatkarīgi no tā, cik izlasēs tie ir pievienoti min_reblogs: Saglabāt ziņas izceltas vismaz min_reblogs_hint: Neizdzēš nevienu no tavām ziņām, kas ir izceltas vismaz tik reižu. Atstāj tukšu, lai dzēstu ziņas neatkarīgi no to izcēlumu skaita stream_entries: @@ -1978,12 +1981,13 @@ lv: title: "%{domain} pakalpojuma paziņojums" appeal_approved: action: Konta iestatījumi - explanation: Apelācija par brīdinājumu jūsu kontam %{strike_date}, ko iesniedzāt %{appeal_date}, ir apstiprināta. Jūsu konts atkal ir labā stāvoklī. - subject: Jūsu %{date} apelācija ir apstiprināta + explanation: Pārsūdzība par brīdinājumu Tavam kontam %{strike_date}, ko iesniedzi %{appeal_date}, ir apstiprināta. Tavs konts atkal ir labā stāvoklī. + subject: Tava %{date} iesniegtā pārsūdzība tika apstiprināta title: Apelācija apstiprināta appeal_rejected: - explanation: Apelācija par brīdinājumu jūsu kontam %{strike_date}, ko iesniedzāt %{appeal_date}, ir noraidīta. - subject: Jūsu %{date} apelācija ir noraidīta + explanation: Pārsūdzība par brīdinājumu Tavam kontam %{strike_date}, ko iesniedzi %{appeal_date}, tika noraidīta. + subject: Tava %{date} iesniegta pārsūdzība tika noraidīta + subtitle: Tava pārsūdzība tika noraidīta. title: Apelācija noraidīta backup_ready: explanation: Tu pieprasīji pilnu sava Mastodon konta rezerves kopiju. @@ -1993,6 +1997,9 @@ lv: failed_2fa: details: 'Šeit ir informācija par pieteikšanās mēģinājumu:' explanation: Kāds mēģināja pieteikties Tavā kontā, bet norādīja nederīgu otro autentificēšanās soli. + further_actions_html: Ja tas nebiji Tu, mēs iesakām nekavējoties %{action}, jo var būt noticis drošības pārkāpums. + subject: Otrās pakāpes autentificēšanās atteice + title: Neizdevās otrās pakāpes autentificēšanās suspicious_sign_in: change_password: mainīt paroli details: 'Šeit ir pieteikšanās izvērsums:' diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 6a8fdda024..a2e142ab55 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -320,6 +320,7 @@ pt-BR: title: Novo anúncio preview: explanation_html: 'Esse e-mail será enviado a %{display_count} usuários. O texto a seguir será incluído ao e-mail:' + title: Visualizar anúncio publish: Publicar published_msg: Anúncio publicado! scheduled_for: Agendado para %{time} @@ -484,19 +485,30 @@ pt-BR: created_at: Criado em delete: Apagar ip: Endereço de IP + request_body: Corpo da solicitação + title: Depurar Callbacks providers: + active: Ativo base_url: URL Base + callback: Callback delete: Apagar + edit: Editar provedor finish_registration: Finalizar o cadastro name: Nome + providers: Provedores public_key_fingerprint: Impressão digital de chave pública registration_requested: Cadastro solicitado registrations: confirm: Confirmar + description: Você recebeu um registro de um FASP. Rejeite se você não tiver iniciado isso. Se você iniciou isso, compare cuidadosamente o nome e a impressão digital da chave antes de confirmar o registro. reject: Rejeitar + title: Confirmar o registro FASP save: Salvar + select_capabilities: Selecionar recursos sign_in: Entrar status: Estado + title: Provedores de serviços auxiliares do Fediverso + title: FASP follow_recommendations: description_html: "A recomendação de contas ajuda os novos usuários a encontrar rapidamente conteúdo interessante. Quando um usuário ainda não tiver interagido o suficiente para gerar recomendações de contas, essas contas serão recomendadas. Essas recomendações são recalculadas diariamente a partir de uma lista de contas com alto engajamento e maior número de seguidores locais em uma dada língua." language: Na língua @@ -1927,6 +1939,10 @@ pt-BR: recovery_instructions_html: Se você perder acesso ao seu celular, você pode usar um dos códigos de recuperação abaixo para acessar a sua conta. Mantenha os códigos de recuperação em um local seguro. Por exemplo, você pode imprimi-los e guardá-los junto a outros documentos importantes. webauthn: Chaves de segurança user_mailer: + announcement_published: + description: 'Os administradores do %{domain} estão fazendo um anúncio:' + subject: Anúncio de serviço + title: Anúncio de serviço de %{domain} appeal_approved: action: Configurações da conta explanation: A revisão da punição na sua conta em %{strike_date} que você enviou em %{appeal_date} foi aprovada. Sua conta está novamente em situação regular. diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index 520b684847..9f46cdec7d 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -349,6 +349,9 @@ fa: jurisdiction: صلاحیت قانونی min_age: کمینهٔ زمان user: + date_of_birth_1i: روز + date_of_birth_2i: ماه + date_of_birth_3i: سال role: نقش time_zone: منطقهٔ زمانی user_role: From e74d682b218096578d59f9a310a85e315dac1b6a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:02:44 +0200 Subject: [PATCH 33/90] chore(deps): update dependency linzer to v0.6.5 (#34409) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 865686a5bd..86cfaa3132 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -395,7 +395,7 @@ GEM rexml link_header (0.0.8) lint_roller (1.1.0) - linzer (0.6.4) + linzer (0.6.5) openssl (~> 3.0, >= 3.0.0) rack (>= 2.2, < 4.0) starry (~> 0.2) From 4c2f64907bb7220db5c6323dd18fb8d37443741c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 10 Apr 2025 08:49:24 -0400 Subject: [PATCH 34/90] Remove deprecated `Import` model (#34371) --- .../dimension/space_usage_dimension.rb | 1 - app/models/import.rb | 46 ---- app/services/import_service.rb | 144 ----------- app/workers/import/relationship_worker.rb | 57 ----- app/workers/import_worker.rb | 17 -- config/initializers/paperclip.rb | 2 +- db/migrate/20250410144908_drop_imports.rb | 11 + db/schema.rb | 16 +- lib/mastodon/cli/media.rb | 2 - spec/fabricators/import_fabricator.rb | 7 - spec/models/import_spec.rb | 10 - spec/services/import_service_spec.rb | 242 ------------------ spec/workers/import_worker_spec.rb | 23 -- 13 files changed, 13 insertions(+), 565 deletions(-) delete mode 100644 app/models/import.rb delete mode 100644 app/services/import_service.rb delete mode 100644 app/workers/import/relationship_worker.rb delete mode 100644 app/workers/import_worker.rb create mode 100644 db/migrate/20250410144908_drop_imports.rb delete mode 100644 spec/fabricators/import_fabricator.rb delete mode 100644 spec/models/import_spec.rb delete mode 100644 spec/services/import_service_spec.rb delete mode 100644 spec/workers/import_worker_spec.rb diff --git a/app/lib/admin/metrics/dimension/space_usage_dimension.rb b/app/lib/admin/metrics/dimension/space_usage_dimension.rb index f1b6dba040..0d3fd8db33 100644 --- a/app/lib/admin/metrics/dimension/space_usage_dimension.rb +++ b/app/lib/admin/metrics/dimension/space_usage_dimension.rb @@ -45,7 +45,6 @@ class Admin::Metrics::Dimension::SpaceUsageDimension < Admin::Metrics::Dimension PreviewCard.sum(:image_file_size), Account.sum(Arel.sql('COALESCE(avatar_file_size, 0) + COALESCE(header_file_size, 0)')), Backup.sum(:dump_file_size), - Import.sum(:data_file_size), SiteUpload.sum(:file_file_size), ].sum diff --git a/app/models/import.rb b/app/models/import.rb deleted file mode 100644 index 4bdb392014..0000000000 --- a/app/models/import.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -# == Schema Information -# -# Table name: imports -# -# id :bigint(8) not null, primary key -# type :integer not null -# approved :boolean default(FALSE), not null -# created_at :datetime not null -# updated_at :datetime not null -# data_file_name :string -# data_content_type :string -# data_file_size :integer -# data_updated_at :datetime -# account_id :bigint(8) not null -# overwrite :boolean default(FALSE), not null -# - -# NOTE: This is a deprecated model, only kept to not break ongoing imports -# on upgrade. See `BulkImport` and `Form::Import` for its replacements. - -class Import < ApplicationRecord - FILE_TYPES = %w(text/plain text/csv application/csv).freeze - MODES = %i(merge overwrite).freeze - - self.inheritance_column = false - - belongs_to :account - - enum :type, { following: 0, blocking: 1, muting: 2, domain_blocking: 3, bookmarks: 4 } - - validates :type, presence: true - - has_attached_file :data - validates_attachment_content_type :data, content_type: FILE_TYPES - validates_attachment_presence :data - - def mode - overwrite? ? :overwrite : :merge - end - - def mode=(str) - self.overwrite = str.to_sym == :overwrite - end -end diff --git a/app/services/import_service.rb b/app/services/import_service.rb deleted file mode 100644 index a695df2fc9..0000000000 --- a/app/services/import_service.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: true - -require 'csv' - -# NOTE: This is a deprecated service, only kept to not break ongoing imports -# on upgrade. See `BulkImportService` for its replacement. - -class ImportService < BaseService - ROWS_PROCESSING_LIMIT = 20_000 - - def call(import) - @import = import - @account = @import.account - - case @import.type - when 'following' - import_follows! - when 'blocking' - import_blocks! - when 'muting' - import_mutes! - when 'domain_blocking' - import_domain_blocks! - when 'bookmarks' - import_bookmarks! - end - end - - private - - def import_follows! - parse_import_data!(['Account address']) - import_relationships!('follow', 'unfollow', @account.following, ROWS_PROCESSING_LIMIT, reblogs: { header: 'Show boosts', default: true }, notify: { header: 'Notify on new posts', default: false }, languages: { header: 'Languages', default: nil }) - end - - def import_blocks! - parse_import_data!(['Account address']) - import_relationships!('block', 'unblock', @account.blocking, ROWS_PROCESSING_LIMIT) - end - - def import_mutes! - parse_import_data!(['Account address']) - import_relationships!('mute', 'unmute', @account.muting, ROWS_PROCESSING_LIMIT, notifications: { header: 'Hide notifications', default: true }) - end - - def import_domain_blocks! - parse_import_data!(['#domain']) - items = @data.take(ROWS_PROCESSING_LIMIT).map { |row| row['#domain'].strip } - - if @import.overwrite? - presence_hash = items.index_with(true) - - @account.domain_blocks.find_each do |domain_block| - if presence_hash[domain_block.domain] - items.delete(domain_block.domain) - else - @account.unblock_domain!(domain_block.domain) - end - end - end - - items.each do |domain| - @account.block_domain!(domain) - end - - AfterAccountDomainBlockWorker.push_bulk(items) do |domain| - [@account.id, domain] - end - end - - def import_relationships!(action, undo_action, overwrite_scope, limit, extra_fields = {}) - local_domain_suffix = "@#{Rails.configuration.x.local_domain}" - items = @data.take(limit).map { |row| [row['Account address']&.strip&.delete_suffix(local_domain_suffix), extra_fields.to_h { |key, field_settings| [key, row[field_settings[:header]]&.strip || field_settings[:default]] }] }.reject { |(id, _)| id.blank? } - - if @import.overwrite? - presence_hash = items.each_with_object({}) { |(id, extra), mapping| mapping[id] = [true, extra] } - - overwrite_scope.reorder(nil).find_each do |target_account| - if presence_hash[target_account.acct] - items.delete(target_account.acct) - extra = presence_hash[target_account.acct][1] - Import::RelationshipWorker.perform_async(@account.id, target_account.acct, action, extra.stringify_keys) - else - Import::RelationshipWorker.perform_async(@account.id, target_account.acct, undo_action) - end - end - end - - head_items = items.uniq { |acct, _| acct.split('@')[1] } - tail_items = items - head_items - - Import::RelationshipWorker.push_bulk(head_items + tail_items) do |acct, extra| - [@account.id, acct, action, extra.stringify_keys] - end - end - - def import_bookmarks! - parse_import_data!(['#uri']) - items = @data.take(ROWS_PROCESSING_LIMIT).map { |row| row['#uri'].strip } - - if @import.overwrite? - presence_hash = items.index_with(true) - - @account.bookmarks.find_each do |bookmark| - if presence_hash[bookmark.status.uri] - items.delete(bookmark.status.uri) - else - bookmark.destroy! - end - end - end - - statuses = items.filter_map do |uri| - status = ActivityPub::TagManager.instance.uri_to_resource(uri, Status) - next if status.nil? && ActivityPub::TagManager.instance.local_uri?(uri) - - status || ActivityPub::FetchRemoteStatusService.new.call(uri) - rescue *Mastodon::HTTP_CONNECTION_ERRORS, Mastodon::UnexpectedResponseError - nil - rescue => e - Rails.logger.warn "Unexpected error when importing bookmark: #{e}" - nil - end - - account_ids = statuses.map(&:account_id) - preloaded_relations = @account.relations_map(account_ids, skip_blocking_and_muting: true) - - statuses.keep_if { |status| StatusPolicy.new(@account, status, preloaded_relations).show? } - - statuses.each do |status| - @account.bookmarks.find_or_create_by!(account: @account, status: status) - end - end - - def parse_import_data!(default_headers) - data = CSV.parse(import_data, headers: true) - data = CSV.parse(import_data, headers: default_headers) unless data.headers&.first&.strip&.include?(' ') - @data = data.compact_blank - end - - def import_data - Paperclip.io_adapters.for(@import.data).read.force_encoding(Encoding::UTF_8) - end -end diff --git a/app/workers/import/relationship_worker.rb b/app/workers/import/relationship_worker.rb deleted file mode 100644 index 2298b095a7..0000000000 --- a/app/workers/import/relationship_worker.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true - -# NOTE: This is a deprecated worker, only kept to not break ongoing imports -# on upgrade. See `Import::RowWorker` for its replacement. - -class Import::RelationshipWorker - include Sidekiq::Worker - - sidekiq_options queue: 'pull', retry: 8, dead: false - - def perform(account_id, target_account_uri, relationship, options) - from_account = Account.find(account_id) - target_domain = domain(target_account_uri) - target_account = stoplight_wrapper(target_domain).run { ResolveAccountService.new.call(target_account_uri, { check_delivery_availability: true }) } - options.symbolize_keys! - - return if target_account.nil? - - case relationship - when 'follow' - begin - FollowService.new.call(from_account, target_account, **options) - rescue ActiveRecord::RecordInvalid - raise if FollowLimitValidator.limit_for_account(from_account) < from_account.following_count - end - when 'unfollow' - UnfollowService.new.call(from_account, target_account) - when 'block' - BlockService.new.call(from_account, target_account) - when 'unblock' - UnblockService.new.call(from_account, target_account) - when 'mute' - MuteService.new.call(from_account, target_account, **options) - when 'unmute' - UnmuteService.new.call(from_account, target_account) - end - rescue ActiveRecord::RecordNotFound - true - end - - def domain(uri) - domain = uri.is_a?(Account) ? uri.domain : uri.split('@')[1] - TagManager.instance.local_domain?(domain) ? nil : TagManager.instance.normalize_domain(domain) - end - - def stoplight_wrapper(domain) - if domain.present? - Stoplight("source:#{domain}") - .with_fallback { nil } - .with_threshold(1) - .with_cool_off_time(5.minutes.seconds) - .with_error_handler { |error, handle| error.is_a?(HTTP::Error) || error.is_a?(OpenSSL::SSL::SSLError) ? handle.call(error) : raise(error) } - else - Stoplight('domain-blank') - end - end -end diff --git a/app/workers/import_worker.rb b/app/workers/import_worker.rb deleted file mode 100644 index b6afb972a9..0000000000 --- a/app/workers/import_worker.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -# NOTE: This is a deprecated worker, only kept to not break ongoing imports -# on upgrade. See `ImportWorker` for its replacement. - -class ImportWorker - include Sidekiq::Worker - - sidekiq_options queue: 'pull', retry: false - - def perform(import_id) - import = Import.find(import_id) - ImportService.new.call(import) - ensure - import&.destroy - end -end diff --git a/config/initializers/paperclip.rb b/config/initializers/paperclip.rb index ed16d50a76..6d908fa477 100644 --- a/config/initializers/paperclip.rb +++ b/config/initializers/paperclip.rb @@ -169,7 +169,7 @@ else end Rails.application.reloader.to_prepare do - Paperclip.options[:content_type_mappings] = { csv: Import::FILE_TYPES } + Paperclip.options[:content_type_mappings] = { csv: %w(text/plain text/csv application/csv) } end # In some places in the code, we rescue this exception, but we don't always diff --git a/db/migrate/20250410144908_drop_imports.rb b/db/migrate/20250410144908_drop_imports.rb new file mode 100644 index 0000000000..7be9daf750 --- /dev/null +++ b/db/migrate/20250410144908_drop_imports.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class DropImports < ActiveRecord::Migration[7.1] + def up + drop_table :imports + end + + def down + raise ActiveRecord::IrreversibleMigration + end +end diff --git a/db/schema.rb b/db/schema.rb index 26db259464..b09360ff43 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.0].define(version: 2025_03_13_123400) do +ActiveRecord::Schema[8.0].define(version: 2025_04_10_144908) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" @@ -555,19 +555,6 @@ ActiveRecord::Schema[8.0].define(version: 2025_03_13_123400) do t.index ["user_id"], name: "index_identities_on_user_id" end - create_table "imports", force: :cascade do |t| - t.integer "type", null: false - t.boolean "approved", default: false, null: false - t.datetime "created_at", precision: nil, null: false - t.datetime "updated_at", precision: nil, null: false - t.string "data_file_name" - t.string "data_content_type" - t.integer "data_file_size" - t.datetime "data_updated_at", precision: nil - t.bigint "account_id", null: false - t.boolean "overwrite", default: false, null: false - end - create_table "invites", force: :cascade do |t| t.bigint "user_id", null: false t.string "code", default: "", null: false @@ -1329,7 +1316,6 @@ ActiveRecord::Schema[8.0].define(version: 2025_03_13_123400) do add_foreign_key "follows", "accounts", name: "fk_32ed1b5560", on_delete: :cascade add_foreign_key "generated_annual_reports", "accounts" add_foreign_key "identities", "users", name: "fk_bea040f377", on_delete: :cascade - add_foreign_key "imports", "accounts", name: "fk_6db1b6e408", on_delete: :cascade add_foreign_key "invites", "users", on_delete: :cascade add_foreign_key "list_accounts", "accounts", on_delete: :cascade add_foreign_key "list_accounts", "follow_requests", on_delete: :cascade diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb index 84ec13eaab..1059eb6066 100644 --- a/lib/mastodon/cli/media.rb +++ b/lib/mastodon/cli/media.rb @@ -293,7 +293,6 @@ module Mastodon::CLI Account Backup CustomEmoji - Import MediaAttachment PreviewCard SiteUpload @@ -309,7 +308,6 @@ module Mastodon::CLI [:headers, Account.sum(:header_file_size), Account.local.sum(:header_file_size)], [:preview_cards, PreviewCard.sum(:image_file_size), nil], [:backups, Backup.sum(:dump_file_size), nil], - [:imports, Import.sum(:data_file_size), nil], [:settings, SiteUpload.sum(:file_file_size), nil], ].map { |label, total, local| [label.to_s.titleize, number_to_human_size(total), local.present? ? number_to_human_size(local) : nil] } end diff --git a/spec/fabricators/import_fabricator.rb b/spec/fabricators/import_fabricator.rb deleted file mode 100644 index 4951bb9a4d..0000000000 --- a/spec/fabricators/import_fabricator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -Fabricator(:import) do - account - type :following - data { attachment_fixture('imports.txt') } -end diff --git a/spec/models/import_spec.rb b/spec/models/import_spec.rb deleted file mode 100644 index 587e0a9d26..0000000000 --- a/spec/models/import_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Import do - describe 'Validations' do - it { is_expected.to validate_presence_of(:type) } - it { is_expected.to validate_presence_of(:data) } - end -end diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb deleted file mode 100644 index 2e1358c635..0000000000 --- a/spec/services/import_service_spec.rb +++ /dev/null @@ -1,242 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ImportService, :inline_jobs do - include RoutingHelper - - let!(:account) { Fabricate(:account, locked: false) } - let!(:bob) { Fabricate(:account, username: 'bob', locked: false) } - let!(:eve) { Fabricate(:account, username: 'eve', domain: 'example.com', locked: false, protocol: :activitypub, inbox_url: 'https://example.com/inbox') } - - before do - stub_request(:post, 'https://example.com/inbox').to_return(status: 200) - end - - context 'when importing old-style list of muted users' do - subject { described_class.new } - - let(:csv) { attachment_fixture('mute-imports.txt') } - - describe 'when no accounts are muted' do - let(:import) { Import.create(account: account, type: 'muting', data: csv) } - - it 'mutes the listed accounts, including notifications' do - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - end - end - - describe 'when some accounts are muted and overwrite is not set' do - let(:import) { Import.create(account: account, type: 'muting', data: csv) } - - it 'mutes the listed accounts, including notifications' do - account.mute!(bob, notifications: false) - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - end - end - - describe 'when some accounts are muted and overwrite is set' do - let(:import) { Import.create(account: account, type: 'muting', data: csv, overwrite: true) } - - it 'mutes the listed accounts, including notifications' do - account.mute!(bob, notifications: false) - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - end - end - end - - context 'when importing new-style list of muted users' do - subject { described_class.new } - - let(:csv) { attachment_fixture('new-mute-imports.txt') } - - describe 'when no accounts are muted' do - let(:import) { Import.create(account: account, type: 'muting', data: csv) } - - it 'mutes the listed accounts, respecting notifications' do - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - expect(Mute.find_by(account: account, target_account: eve).hide_notifications).to be false - end - end - - describe 'when some accounts are muted and overwrite is not set' do - let(:import) { Import.create(account: account, type: 'muting', data: csv) } - - it 'mutes the listed accounts, respecting notifications' do - account.mute!(bob, notifications: true) - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - expect(Mute.find_by(account: account, target_account: eve).hide_notifications).to be false - end - end - - describe 'when some accounts are muted and overwrite is set' do - let(:import) { Import.create(account: account, type: 'muting', data: csv, overwrite: true) } - - it 'mutes the listed accounts, respecting notifications' do - account.mute!(bob, notifications: true) - subject.call(import) - expect(account.muting.count).to eq 2 - expect(Mute.find_by(account: account, target_account: bob).hide_notifications).to be true - expect(Mute.find_by(account: account, target_account: eve).hide_notifications).to be false - end - end - end - - context 'when importing old-style list of followed users' do - subject { described_class.new } - - let(:csv) { attachment_fixture('mute-imports.txt') } - - describe 'when no accounts are followed' do - let(:import) { Import.create(account: account, type: 'following', data: csv) } - - it 'follows the listed accounts, including boosts' do - subject.call(import) - - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - end - end - - describe 'when some accounts are already followed and overwrite is not set' do - let(:import) { Import.create(account: account, type: 'following', data: csv) } - - it 'follows the listed accounts, including notifications' do - account.follow!(bob, reblogs: false) - subject.call(import) - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - end - end - - describe 'when some accounts are already followed and overwrite is set' do - let(:import) { Import.create(account: account, type: 'following', data: csv, overwrite: true) } - - it 'mutes the listed accounts, including notifications' do - account.follow!(bob, reblogs: false) - subject.call(import) - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - end - end - end - - context 'when importing new-style list of followed users' do - subject { described_class.new } - - let(:csv) { attachment_fixture('new-following-imports.txt') } - - describe 'when no accounts are followed' do - let(:import) { Import.create(account: account, type: 'following', data: csv) } - - it 'follows the listed accounts, respecting boosts' do - subject.call(import) - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false - end - end - - describe 'when some accounts are already followed and overwrite is not set' do - let(:import) { Import.create(account: account, type: 'following', data: csv) } - - it 'mutes the listed accounts, respecting notifications' do - account.follow!(bob, reblogs: true) - subject.call(import) - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false - end - end - - describe 'when some accounts are already followed and overwrite is set' do - let(:import) { Import.create(account: account, type: 'following', data: csv, overwrite: true) } - - it 'mutes the listed accounts, respecting notifications' do - account.follow!(bob, reblogs: true) - subject.call(import) - expect(account.following.count).to eq 1 - expect(account.follow_requests.count).to eq 1 - expect(Follow.find_by(account: account, target_account: bob).show_reblogs).to be true - expect(FollowRequest.find_by(account: account, target_account: eve).show_reblogs).to be false - end - end - end - - # Based on the bug report 20571 where UTF-8 encoded domains were rejecting import of their users - # - # https://github.com/mastodon/mastodon/issues/20571 - context 'with a utf-8 encoded domains' do - subject { described_class.new } - - let!(:nare) { Fabricate(:account, username: 'nare', domain: 'թութ.հայ', locked: false, protocol: :activitypub, inbox_url: 'https://թութ.հայ/inbox') } - let(:csv) { attachment_fixture('utf8-followers.txt') } - let(:import) { Import.create(account: account, type: 'following', data: csv) } - - # Make sure to not actually go to the remote server - before do - stub_request(:post, nare.inbox_url).to_return(status: 200) - end - - it 'follows the listed account' do - expect(account.follow_requests.count).to eq 0 - subject.call(import) - expect(account.follow_requests.count).to eq 1 - end - end - - context 'when importing bookmarks' do - subject { described_class.new } - - let(:csv) { attachment_fixture('bookmark-imports.txt') } - let(:local_account) { Fabricate(:account, username: 'foo', domain: nil) } - let!(:remote_status) { Fabricate(:status, uri: 'https://example.com/statuses/1312') } - let!(:direct_status) { Fabricate(:status, uri: 'https://example.com/statuses/direct', visibility: :direct) } - - around do |example| - local_before = Rails.configuration.x.local_domain - web_before = Rails.configuration.x.web_domain - Rails.configuration.x.local_domain = 'local.com' - Rails.configuration.x.web_domain = 'local.com' - example.run - Rails.configuration.x.web_domain = web_before - Rails.configuration.x.local_domain = local_before - end - - before do - service = instance_double(ActivityPub::FetchRemoteStatusService) - allow(ActivityPub::FetchRemoteStatusService).to receive(:new).and_return(service) - allow(service).to receive(:call).with('https://unknown-remote.com/users/bar/statuses/1') do - Fabricate(:status, uri: 'https://unknown-remote.com/users/bar/statuses/1') - end - end - - describe 'when no bookmarks are set' do - let(:import) { Import.create(account: account, type: 'bookmarks', data: csv) } - - it 'adds the toots the user has access to to bookmarks' do - local_status = Fabricate(:status, account: local_account, uri: 'https://local.com/users/foo/statuses/42', id: 42, local: true) - subject.call(import) - expect(account.bookmarks.map { |bookmark| bookmark.status.id }).to include(local_status.id) - expect(account.bookmarks.map { |bookmark| bookmark.status.id }).to include(remote_status.id) - expect(account.bookmarks.map { |bookmark| bookmark.status.id }).to_not include(direct_status.id) - expect(account.bookmarks.count).to eq 3 - end - end - end -end diff --git a/spec/workers/import_worker_spec.rb b/spec/workers/import_worker_spec.rb deleted file mode 100644 index 1d34aafe86..0000000000 --- a/spec/workers/import_worker_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ImportWorker do - let(:worker) { described_class.new } - let(:service) { instance_double(ImportService, call: true) } - - describe '#perform' do - before do - allow(ImportService).to receive(:new).and_return(service) - end - - let(:import) { Fabricate(:import) } - - it 'sends the import to the service' do - worker.perform(import.id) - - expect(service).to have_received(:call).with(import) - expect { import.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - end -end From de19af36500365ecb5993a456b56188da1c7c03e Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 10 Apr 2025 09:51:17 -0400 Subject: [PATCH 35/90] Extract `frontend_translations` helper to support module (#34400) --- spec/support/system_helpers.rb | 6 ++++++ spec/system/account_notes_spec.rb | 2 +- spec/system/log_out_spec.rb | 12 ++++++++---- spec/system/new_statuses_spec.rb | 15 +-------------- spec/system/share_entrypoint_spec.rb | 16 +++------------- 5 files changed, 19 insertions(+), 32 deletions(-) diff --git a/spec/support/system_helpers.rb b/spec/support/system_helpers.rb index ffbba177b3..44bbc64a59 100644 --- a/spec/support/system_helpers.rb +++ b/spec/support/system_helpers.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true module SystemHelpers + FRONTEND_TRANSLATIONS = JSON.parse Rails.root.join('app', 'javascript', 'mastodon', 'locales', 'en.json').read + def submit_button I18n.t('generic.save_changes') end @@ -16,4 +18,8 @@ module SystemHelpers def css_id(record) "##{dom_id(record)}" end + + def frontend_translations(key) + FRONTEND_TRANSLATIONS[key] + end end diff --git a/spec/system/account_notes_spec.rb b/spec/system/account_notes_spec.rb index c4054f204e..1d125e1984 100644 --- a/spec/system/account_notes_spec.rb +++ b/spec/system/account_notes_spec.rb @@ -18,7 +18,7 @@ RSpec.describe 'Account notes', :inline_jobs, :js, :streaming do visit_profile(other_account) note_text = 'This is a personal note' - fill_in 'Click to add note', with: note_text + fill_in frontend_translations('account_note.placeholder'), with: note_text # This is a bit awkward since there is no button to save the change # The easiest way is to send ctrl+enter ourselves diff --git a/spec/system/log_out_spec.rb b/spec/system/log_out_spec.rb index 2e52254ca0..ebbf5a5772 100644 --- a/spec/system/log_out_spec.rb +++ b/spec/system/log_out_spec.rb @@ -17,8 +17,9 @@ RSpec.describe 'Log out' do click_on 'Logout' end - expect(page).to have_title(I18n.t('auth.login')) - expect(page).to have_current_path('/auth/sign_in') + expect(page) + .to have_title(I18n.t('auth.login')) + .and have_current_path('/auth/sign_in') end end @@ -28,6 +29,8 @@ RSpec.describe 'Log out' do ignore_js_error(/Failed to load resource: the server responded with a status of 422/) visit root_path + expect(page) + .to have_css('body', class: 'app-body') within '.navigation-bar' do click_on 'Menu' @@ -39,8 +42,9 @@ RSpec.describe 'Log out' do click_on 'Log out' - expect(page).to have_title(I18n.t('auth.login')) - expect(page).to have_current_path('/auth/sign_in') + expect(page) + .to have_title(I18n.t('auth.login')) + .and have_current_path('/auth/sign_in') end end end diff --git a/spec/system/new_statuses_spec.rb b/spec/system/new_statuses_spec.rb index 480c77cf87..d14bcc0058 100644 --- a/spec/system/new_statuses_spec.rb +++ b/spec/system/new_statuses_spec.rb @@ -17,20 +17,7 @@ RSpec.describe 'NewStatuses', :inline_jobs, :js, :streaming do status_text = 'This is a new status!' within('.compose-form') do - fill_in "What's on your mind?", with: status_text - click_on 'Post' - end - - expect(page) - .to have_css('.status__content__text', text: status_text) - end - - it 'can be posted again' do - visit_homepage - status_text = 'This is a second status!' - - within('.compose-form') do - fill_in "What's on your mind?", with: status_text + fill_in frontend_translations('compose_form.placeholder'), with: status_text click_on 'Post' end diff --git a/spec/system/share_entrypoint_spec.rb b/spec/system/share_entrypoint_spec.rb index 7ccfee599a..b55ea31657 100644 --- a/spec/system/share_entrypoint_spec.rb +++ b/spec/system/share_entrypoint_spec.rb @@ -23,24 +23,14 @@ RSpec.describe 'Share page', :js, :streaming do fill_in_form expect(page) - .to have_css('.notification-bar-message', text: translations['compose.published.body']) + .to have_css('.notification-bar-message', text: frontend_translations('compose.published.body')) end def fill_in_form within('.compose-form') do - fill_in translations['compose_form.placeholder'], + fill_in frontend_translations('compose_form.placeholder'), with: 'This is a new status!' - click_on translations['compose_form.publish'] + click_on frontend_translations('compose_form.publish') end end - - def translations - # TODO: Extract to system spec helper for re-use? - JSON.parse( - Rails - .root - .join('app', 'javascript', 'mastodon', 'locales', 'en.json') - .read - ) - end end From 5d817a758d0d16924364489092f661b82451e1c9 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 10 Apr 2025 16:02:52 +0200 Subject: [PATCH 36/90] Add dropdown to lists of accounts in web UI (#34391) --- .../mastodon/components/account.tsx | 176 +++++++++++------- 1 file changed, 107 insertions(+), 69 deletions(-) diff --git a/app/javascript/mastodon/components/account.tsx b/app/javascript/mastodon/components/account.tsx index 55f1e6fb91..f6241504f6 100644 --- a/app/javascript/mastodon/components/account.tsx +++ b/app/javascript/mastodon/components/account.tsx @@ -1,4 +1,4 @@ -import { useCallback } from 'react'; +import { useCallback, useMemo } from 'react'; import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; @@ -12,6 +12,7 @@ import { muteAccount, unmuteAccount, } from 'mastodon/actions/accounts'; +import { openModal } from 'mastodon/actions/modal'; import { initMuteModal } from 'mastodon/actions/mutes'; import { Avatar } from 'mastodon/components/avatar'; import { Button } from 'mastodon/components/button'; @@ -23,7 +24,7 @@ import { RelativeTimestamp } from 'mastodon/components/relative_timestamp'; import { ShortNumber } from 'mastodon/components/short_number'; import { Skeleton } from 'mastodon/components/skeleton'; import { VerifiedBadge } from 'mastodon/components/verified_badge'; -import { me } from 'mastodon/initial_state'; +import type { MenuItem } from 'mastodon/models/dropdown_menu'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; const messages = defineMessages({ @@ -46,6 +47,14 @@ const messages = defineMessages({ mute: { id: 'account.mute_short', defaultMessage: 'Mute' }, block: { id: 'account.block_short', defaultMessage: 'Block' }, more: { id: 'status.more', defaultMessage: 'More' }, + addToLists: { + id: 'account.add_or_remove_from_list', + defaultMessage: 'Add or Remove from lists', + }, + openOriginalPage: { + id: 'account.open_original_page', + defaultMessage: 'Open original page', + }, }); export const Account: React.FC<{ @@ -60,6 +69,7 @@ export const Account: React.FC<{ const account = useAppSelector((state) => state.accounts.get(id)); const relationship = useAppSelector((state) => state.relationships.get(id)); const dispatch = useAppDispatch(); + const accountUrl = account?.url; const handleBlock = useCallback(() => { if (relationship?.blocking) { @@ -77,13 +87,62 @@ export const Account: React.FC<{ } }, [dispatch, id, account, relationship]); - const handleMuteNotifications = useCallback(() => { - dispatch(muteAccount(id, true)); - }, [dispatch, id]); + const menu = useMemo(() => { + let arr: MenuItem[] = []; - const handleUnmuteNotifications = useCallback(() => { - dispatch(muteAccount(id, false)); - }, [dispatch, id]); + if (defaultAction === 'mute') { + const handleMuteNotifications = () => { + dispatch(muteAccount(id, true)); + }; + + const handleUnmuteNotifications = () => { + dispatch(muteAccount(id, false)); + }; + + arr = [ + { + text: intl.formatMessage( + relationship?.muting_notifications + ? messages.unmute_notifications + : messages.mute_notifications, + ), + action: relationship?.muting_notifications + ? handleUnmuteNotifications + : handleMuteNotifications, + }, + ]; + } else if (defaultAction !== 'block') { + const handleAddToLists = () => { + dispatch( + openModal({ + modalType: 'LIST_ADDER', + modalProps: { + accountId: id, + }, + }), + ); + }; + + arr = [ + { + text: intl.formatMessage(messages.addToLists), + action: handleAddToLists, + }, + ]; + + if (accountUrl) { + arr.unshift( + { + text: intl.formatMessage(messages.openOriginalPage), + href: accountUrl, + }, + null, + ); + } + } + + return arr; + }, [dispatch, intl, id, accountUrl, relationship, defaultAction]); if (hidden) { return ( @@ -94,68 +153,42 @@ export const Account: React.FC<{ ); } - let buttons; + let button: React.ReactNode, dropdown: React.ReactNode; - if (account && account.id !== me && relationship) { - const { requested, blocking, muting } = relationship; - - if (requested) { - buttons = ; - } else if (blocking) { - buttons = ( -
    - {!minimal &&
    {buttons}
    } + {!minimal && ( +
    + {dropdown} + {button} +
    + )} {account && From 678c8dfeec2c221cf609b924161dc03cebfa41e1 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 10 Apr 2025 16:34:27 +0200 Subject: [PATCH 37/90] Refactor `StatusCacheHydrator` (#34414) --- app/lib/status_cache_hydrator.rb | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/app/lib/status_cache_hydrator.rb b/app/lib/status_cache_hydrator.rb index 34f6199ec0..676e9e62a0 100644 --- a/app/lib/status_cache_hydrator.rb +++ b/app/lib/status_cache_hydrator.rb @@ -26,12 +26,7 @@ class StatusCacheHydrator def hydrate_non_reblog_payload(empty_payload, account_id) empty_payload.tap do |payload| - payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.id) - payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.id) - payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.conversation_id) - payload[:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.id) - payload[:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.id) if @status.account_id == account_id - payload[:filtered] = mapped_applied_custom_filter(account_id, @status) + fill_status_payload(payload, @status, account_id) if payload[:poll] payload[:poll][:voted] = @status.account_id == account_id @@ -45,18 +40,12 @@ class StatusCacheHydrator payload[:muted] = false payload[:bookmarked] = false payload[:pinned] = false if @status.account_id == account_id - payload[:filtered] = mapped_applied_custom_filter(account_id, @status.reblog) # If the reblogged status is being delivered to the author who disabled the display of the application # used to create the status, we need to hydrate it here too payload[:reblog][:application] = payload_reblog_application if payload[:reblog][:application].nil? && @status.reblog.account_id == account_id - payload[:reblog][:favourited] = Favourite.exists?(account_id: account_id, status_id: @status.reblog_of_id) - payload[:reblog][:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: @status.reblog_of_id) - payload[:reblog][:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: @status.reblog.conversation_id) - payload[:reblog][:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: @status.reblog_of_id) - payload[:reblog][:pinned] = StatusPin.exists?(account_id: account_id, status_id: @status.reblog_of_id) if @status.reblog.account_id == account_id - payload[:reblog][:filtered] = payload[:filtered] + fill_status_payload(payload[:reblog], @status.reblog, account_id) if payload[:reblog][:poll] if @status.reblog.account_id == account_id @@ -69,11 +58,21 @@ class StatusCacheHydrator end end + payload[:filtered] = payload[:reblog][:filtered] payload[:favourited] = payload[:reblog][:favourited] payload[:reblogged] = payload[:reblog][:reblogged] end end + def fill_status_payload(payload, status, account_id) + payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: status.id) + payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: status.id) + payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: status.conversation_id) + payload[:bookmarked] = Bookmark.exists?(account_id: account_id, status_id: status.id) + payload[:pinned] = StatusPin.exists?(account_id: account_id, status_id: status.id) if status.account_id == account_id + payload[:filtered] = mapped_applied_custom_filter(account_id, status) + end + def mapped_applied_custom_filter(account_id, status) CustomFilter .apply_cached_filters(CustomFilter.cached_filters_for(account_id), status) From d43bfa95aab836a12de5df4f302c820417610bac Mon Sep 17 00:00:00 2001 From: Echo Date: Thu, 10 Apr 2025 17:40:30 +0200 Subject: [PATCH 38/90] Adds featured tab to web (#34405) --- .../mastodon/components/hashtag.tsx | 2 +- .../mastodon/components/navigation_portal.tsx | 21 +-- .../mastodon/components/remote_hint.tsx | 43 +++++ .../account/components/featured_tags.jsx | 51 ------ .../containers/featured_tags_container.js | 17 -- .../mastodon/features/account/navigation.jsx | 52 ------ .../components/empty_message.tsx | 50 ++++++ .../components/featured_tag.tsx | 51 ++++++ .../features/account_featured/index.tsx | 156 ++++++++++++++++++ .../features/account_gallery/index.tsx | 81 +-------- .../components/account_header.tsx | 3 + .../features/account_timeline/index.jsx | 34 +--- app/javascript/mastodon/features/ui/index.jsx | 2 + .../features/ui/util/async-components.js | 4 + app/javascript/mastodon/hooks/useAccountId.ts | 37 +++++ .../mastodon/hooks/useAccountVisibility.ts | 20 +++ app/javascript/mastodon/locales/en.json | 5 +- config/routes.rb | 1 + 18 files changed, 385 insertions(+), 245 deletions(-) create mode 100644 app/javascript/mastodon/components/remote_hint.tsx delete mode 100644 app/javascript/mastodon/features/account/components/featured_tags.jsx delete mode 100644 app/javascript/mastodon/features/account/containers/featured_tags_container.js delete mode 100644 app/javascript/mastodon/features/account/navigation.jsx create mode 100644 app/javascript/mastodon/features/account_featured/components/empty_message.tsx create mode 100644 app/javascript/mastodon/features/account_featured/components/featured_tag.tsx create mode 100644 app/javascript/mastodon/features/account_featured/index.tsx create mode 100644 app/javascript/mastodon/hooks/useAccountId.ts create mode 100644 app/javascript/mastodon/hooks/useAccountVisibility.ts diff --git a/app/javascript/mastodon/components/hashtag.tsx b/app/javascript/mastodon/components/hashtag.tsx index 1fe41e1e8b..346c95183f 100644 --- a/app/javascript/mastodon/components/hashtag.tsx +++ b/app/javascript/mastodon/components/hashtag.tsx @@ -102,7 +102,7 @@ export interface HashtagProps { description?: React.ReactNode; history?: number[]; name: string; - people: number; + people?: number; to: string; uses?: number; withGraph?: boolean; diff --git a/app/javascript/mastodon/components/navigation_portal.tsx b/app/javascript/mastodon/components/navigation_portal.tsx index 08f91ce18a..d3ac8baa6e 100644 --- a/app/javascript/mastodon/components/navigation_portal.tsx +++ b/app/javascript/mastodon/components/navigation_portal.tsx @@ -1,25 +1,6 @@ -import { Switch, Route } from 'react-router-dom'; - -import AccountNavigation from 'mastodon/features/account/navigation'; import Trends from 'mastodon/features/getting_started/containers/trends_container'; import { showTrends } from 'mastodon/initial_state'; -const DefaultNavigation: React.FC = () => (showTrends ? : null); - export const NavigationPortal: React.FC = () => ( -
    - - - - - - - - - -
    +
    {showTrends && }
    ); diff --git a/app/javascript/mastodon/components/remote_hint.tsx b/app/javascript/mastodon/components/remote_hint.tsx new file mode 100644 index 0000000000..772aa805db --- /dev/null +++ b/app/javascript/mastodon/components/remote_hint.tsx @@ -0,0 +1,43 @@ +import { FormattedMessage } from 'react-intl'; + +import { useAppSelector } from 'mastodon/store'; + +import { TimelineHint } from './timeline_hint'; + +interface RemoteHintProps { + accountId?: string; +} + +export const RemoteHint: React.FC = ({ accountId }) => { + const account = useAppSelector((state) => + accountId ? state.accounts.get(accountId) : undefined, + ); + const domain = account?.acct ? account.acct.split('@')[1] : undefined; + if ( + !account || + !account.url || + account.acct !== account.username || + !domain + ) { + return null; + } + + return ( + + } + label={ + {domain} }} + /> + } + /> + ); +}; diff --git a/app/javascript/mastodon/features/account/components/featured_tags.jsx b/app/javascript/mastodon/features/account/components/featured_tags.jsx deleted file mode 100644 index 56a9efac02..0000000000 --- a/app/javascript/mastodon/features/account/components/featured_tags.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import PropTypes from 'prop-types'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -import { Hashtag } from 'mastodon/components/hashtag'; - -const messages = defineMessages({ - lastStatusAt: { id: 'account.featured_tags.last_status_at', defaultMessage: 'Last post on {date}' }, - empty: { id: 'account.featured_tags.last_status_never', defaultMessage: 'No posts' }, -}); - -class FeaturedTags extends ImmutablePureComponent { - - static propTypes = { - account: ImmutablePropTypes.record, - featuredTags: ImmutablePropTypes.list, - tagged: PropTypes.string, - intl: PropTypes.object.isRequired, - }; - - render () { - const { account, featuredTags, intl } = this.props; - - if (!account || account.get('suspended') || featuredTags.isEmpty()) { - return null; - } - - return ( -
    -

    }} />

    - - {featuredTags.take(3).map(featuredTag => ( - 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)} - /> - ))} -
    - ); - } - -} - -export default injectIntl(FeaturedTags); diff --git a/app/javascript/mastodon/features/account/containers/featured_tags_container.js b/app/javascript/mastodon/features/account/containers/featured_tags_container.js deleted file mode 100644 index 726c805f78..0000000000 --- a/app/javascript/mastodon/features/account/containers/featured_tags_container.js +++ /dev/null @@ -1,17 +0,0 @@ -import { List as ImmutableList } from 'immutable'; -import { connect } from 'react-redux'; - -import { makeGetAccount } from 'mastodon/selectors'; - -import FeaturedTags from '../components/featured_tags'; - -const mapStateToProps = () => { - const getAccount = makeGetAccount(); - - return (state, { accountId }) => ({ - account: getAccount(state, accountId), - featuredTags: state.getIn(['user_lists', 'featured_tags', accountId, 'items'], ImmutableList()), - }); -}; - -export default connect(mapStateToProps)(FeaturedTags); diff --git a/app/javascript/mastodon/features/account/navigation.jsx b/app/javascript/mastodon/features/account/navigation.jsx deleted file mode 100644 index aa78135de2..0000000000 --- a/app/javascript/mastodon/features/account/navigation.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { connect } from 'react-redux'; - -import FeaturedTags from 'mastodon/features/account/containers/featured_tags_container'; -import { normalizeForLookup } from 'mastodon/reducers/accounts_map'; - -const mapStateToProps = (state, { match: { params: { acct } } }) => { - const accountId = state.getIn(['accounts_map', normalizeForLookup(acct)]); - - if (!accountId) { - return { - isLoading: true, - }; - } - - return { - accountId, - isLoading: false, - }; -}; - -class AccountNavigation extends PureComponent { - - static propTypes = { - match: PropTypes.shape({ - params: PropTypes.shape({ - acct: PropTypes.string, - tagged: PropTypes.string, - }).isRequired, - }).isRequired, - - accountId: PropTypes.string, - isLoading: PropTypes.bool, - }; - - render () { - const { accountId, isLoading, match: { params: { tagged } } } = this.props; - - if (isLoading) { - return null; - } - - return ( - - ); - } - -} - -export default connect(mapStateToProps)(AccountNavigation); diff --git a/app/javascript/mastodon/features/account_featured/components/empty_message.tsx b/app/javascript/mastodon/features/account_featured/components/empty_message.tsx new file mode 100644 index 0000000000..9dd8ffdfe0 --- /dev/null +++ b/app/javascript/mastodon/features/account_featured/components/empty_message.tsx @@ -0,0 +1,50 @@ +import { FormattedMessage } from 'react-intl'; + +import { LimitedAccountHint } from 'mastodon/features/account_timeline/components/limited_account_hint'; + +interface EmptyMessageProps { + suspended: boolean; + hidden: boolean; + blockedBy: boolean; + accountId?: string; +} + +export const EmptyMessage: React.FC = ({ + accountId, + suspended, + hidden, + blockedBy, +}) => { + if (!accountId) { + return null; + } + + let message: React.ReactNode = null; + + if (suspended) { + message = ( + + ); + } else if (hidden) { + message = ; + } else if (blockedBy) { + message = ( + + ); + } else { + message = ( + + ); + } + + return
    {message}
    ; +}; diff --git a/app/javascript/mastodon/features/account_featured/components/featured_tag.tsx b/app/javascript/mastodon/features/account_featured/components/featured_tag.tsx new file mode 100644 index 0000000000..7b476ba01d --- /dev/null +++ b/app/javascript/mastodon/features/account_featured/components/featured_tag.tsx @@ -0,0 +1,51 @@ +import { defineMessages, useIntl } from 'react-intl'; + +import type { Map as ImmutableMap } from 'immutable'; + +import { Hashtag } from 'mastodon/components/hashtag'; + +export type TagMap = ImmutableMap< + 'id' | 'name' | 'url' | 'statuses_count' | 'last_status_at' | 'accountId', + string | null +>; + +interface FeaturedTagProps { + tag: TagMap; + account: string; +} + +const messages = defineMessages({ + lastStatusAt: { + id: 'account.featured_tags.last_status_at', + defaultMessage: 'Last post on {date}', + }, + empty: { + id: 'account.featured_tags.last_status_never', + defaultMessage: 'No posts', + }, +}); + +export const FeaturedTag: React.FC = ({ tag, account }) => { + const intl = useIntl(); + const name = tag.get('name') ?? ''; + const count = Number.parseInt(tag.get('statuses_count') ?? ''); + return ( + 0 + ? intl.formatMessage(messages.lastStatusAt, { + date: intl.formatDate(tag.get('last_status_at') ?? '', { + month: 'short', + day: '2-digit', + }), + }) + : intl.formatMessage(messages.empty) + } + /> + ); +}; diff --git a/app/javascript/mastodon/features/account_featured/index.tsx b/app/javascript/mastodon/features/account_featured/index.tsx new file mode 100644 index 0000000000..70e411f61a --- /dev/null +++ b/app/javascript/mastodon/features/account_featured/index.tsx @@ -0,0 +1,156 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { useParams } from 'react-router'; + +import type { Map as ImmutableMap } from 'immutable'; +import { List as ImmutableList } from 'immutable'; + +import { fetchFeaturedTags } from 'mastodon/actions/featured_tags'; +import { expandAccountFeaturedTimeline } from 'mastodon/actions/timelines'; +import { ColumnBackButton } from 'mastodon/components/column_back_button'; +import { LoadingIndicator } from 'mastodon/components/loading_indicator'; +import { RemoteHint } from 'mastodon/components/remote_hint'; +import StatusContainer from 'mastodon/containers/status_container'; +import { useAccountId } from 'mastodon/hooks/useAccountId'; +import { useAccountVisibility } from 'mastodon/hooks/useAccountVisibility'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +import { AccountHeader } from '../account_timeline/components/account_header'; +import Column from '../ui/components/column'; + +import { EmptyMessage } from './components/empty_message'; +import { FeaturedTag } from './components/featured_tag'; +import type { TagMap } from './components/featured_tag'; + +interface Params { + acct?: string; + id?: string; +} + +const AccountFeatured = () => { + const accountId = useAccountId(); + const { suspended, blockedBy, hidden } = useAccountVisibility(accountId); + const forceEmptyState = suspended || blockedBy || hidden; + const { acct = '' } = useParams(); + + const dispatch = useAppDispatch(); + + useEffect(() => { + if (accountId) { + void dispatch(expandAccountFeaturedTimeline(accountId)); + dispatch(fetchFeaturedTags(accountId)); + } + }, [accountId, dispatch]); + + const isLoading = useAppSelector( + (state) => + !accountId || + !!(state.timelines as ImmutableMap).getIn([ + `account:${accountId}:pinned`, + 'isLoading', + ]) || + !!state.user_lists.getIn(['featured_tags', accountId, 'isLoading']), + ); + const featuredTags = useAppSelector( + (state) => + state.user_lists.getIn( + ['featured_tags', accountId, 'items'], + ImmutableList(), + ) as ImmutableList, + ); + const featuredStatusIds = useAppSelector( + (state) => + (state.timelines as ImmutableMap).getIn( + [`account:${accountId}:pinned`, 'items'], + ImmutableList(), + ) as ImmutableList, + ); + + if (isLoading) { + return ( + +
    + +
    +
    + ); + } + + if (featuredStatusIds.isEmpty() && featuredTags.isEmpty()) { + return ( + + + ); + } + + return ( + + + +
    + {accountId && ( + + )} + {!featuredTags.isEmpty() && ( + <> +

    + +

    + {featuredTags.map((tag) => ( + + ))} + + )} + {!featuredStatusIds.isEmpty() && ( + <> +

    + +

    + {featuredStatusIds.map((statusId) => ( + + ))} + + )} + +
    +
    + ); +}; + +const AccountFeaturedWrapper = ({ + children, + accountId, +}: React.PropsWithChildren<{ accountId?: string }>) => { + return ( + + +
    + {accountId && } + {children} +
    +
    + ); +}; + +// eslint-disable-next-line import/no-default-export +export default AccountFeatured; diff --git a/app/javascript/mastodon/features/account_gallery/index.tsx b/app/javascript/mastodon/features/account_gallery/index.tsx index 60afdadc81..0027329c93 100644 --- a/app/javascript/mastodon/features/account_gallery/index.tsx +++ b/app/javascript/mastodon/features/account_gallery/index.tsx @@ -2,25 +2,22 @@ import { useEffect, useCallback } from 'react'; import { FormattedMessage } from 'react-intl'; -import { useParams } from 'react-router-dom'; - import { createSelector } from '@reduxjs/toolkit'; import type { Map as ImmutableMap } from 'immutable'; import { List as ImmutableList } from 'immutable'; -import { lookupAccount, fetchAccount } from 'mastodon/actions/accounts'; import { openModal } from 'mastodon/actions/modal'; import { expandAccountMediaTimeline } from 'mastodon/actions/timelines'; import { ColumnBackButton } from 'mastodon/components/column_back_button'; +import { RemoteHint } from 'mastodon/components/remote_hint'; import ScrollableList from 'mastodon/components/scrollable_list'; -import { TimelineHint } from 'mastodon/components/timeline_hint'; import { AccountHeader } from 'mastodon/features/account_timeline/components/account_header'; import { LimitedAccountHint } from 'mastodon/features/account_timeline/components/limited_account_hint'; import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; import Column from 'mastodon/features/ui/components/column'; +import { useAccountId } from 'mastodon/hooks/useAccountId'; +import { useAccountVisibility } from 'mastodon/hooks/useAccountVisibility'; import type { MediaAttachment } from 'mastodon/models/media_attachment'; -import { normalizeForLookup } from 'mastodon/reducers/accounts_map'; -import { getAccountHidden } from 'mastodon/selectors/accounts'; import type { RootState } from 'mastodon/store'; import { useAppSelector, useAppDispatch } from 'mastodon/store'; @@ -56,53 +53,11 @@ const getAccountGallery = createSelector( }, ); -interface Params { - acct?: string; - id?: string; -} - -const RemoteHint: React.FC<{ - accountId: string; -}> = ({ accountId }) => { - const account = useAppSelector((state) => state.accounts.get(accountId)); - const acct = account?.acct; - const url = account?.url; - const domain = acct ? acct.split('@')[1] : undefined; - - if (!url) { - return null; - } - - return ( - - } - label={ - {domain} }} - /> - } - /> - ); -}; - export const AccountGallery: React.FC<{ multiColumn: boolean; }> = ({ multiColumn }) => { - const { acct, id } = useParams(); const dispatch = useAppDispatch(); - const accountId = useAppSelector( - (state) => - id ?? - (state.accounts_map.get(normalizeForLookup(acct)) as string | undefined), - ); + const accountId = useAccountId(); const attachments = useAppSelector((state) => accountId ? getAccountGallery(state, accountId) @@ -123,33 +78,15 @@ export const AccountGallery: React.FC<{ const account = useAppSelector((state) => accountId ? state.accounts.get(accountId) : undefined, ); - const blockedBy = useAppSelector( - (state) => - state.relationships.getIn([accountId, 'blocked_by'], false) as boolean, - ); - const suspended = useAppSelector( - (state) => state.accounts.getIn([accountId, 'suspended'], false) as boolean, - ); const isAccount = !!account; - const remote = account?.acct !== account?.username; - const hidden = useAppSelector((state) => - accountId ? getAccountHidden(state, accountId) : false, - ); + + const { suspended, blockedBy, hidden } = useAccountVisibility(accountId); + const maxId = attachments.last()?.getIn(['status', 'id']) as | string | undefined; useEffect(() => { - if (!accountId) { - dispatch(lookupAccount(acct)); - } - }, [dispatch, accountId, acct]); - - useEffect(() => { - if (accountId && !isAccount) { - dispatch(fetchAccount(accountId)); - } - if (accountId && isAccount) { void dispatch(expandAccountMediaTimeline(accountId)); } @@ -233,7 +170,7 @@ export const AccountGallery: React.FC<{ defaultMessage='Profile unavailable' /> ); - } else if (remote && attachments.isEmpty()) { + } else if (attachments.isEmpty()) { emptyMessage = ; } else { emptyMessage = ( @@ -259,7 +196,7 @@ export const AccountGallery: React.FC<{ ) } alwaysPrepend - append={remote && accountId && } + append={accountId && } scrollKey='account_gallery' isLoading={isLoading} hasMore={!forceEmptyState && hasMore} diff --git a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx index ca12834528..c8fb3d2ae7 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx @@ -956,6 +956,9 @@ export const AccountHeader: React.FC<{ {!(hideTabs || hidden) && (
    + + + diff --git a/app/javascript/mastodon/features/account_timeline/index.jsx b/app/javascript/mastodon/features/account_timeline/index.jsx index 886191e668..a5223275b3 100644 --- a/app/javascript/mastodon/features/account_timeline/index.jsx +++ b/app/javascript/mastodon/features/account_timeline/index.jsx @@ -7,12 +7,10 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; -import { TimelineHint } from 'mastodon/components/timeline_hint'; import BundleColumnError from 'mastodon/features/ui/components/bundle_column_error'; import { me } from 'mastodon/initial_state'; import { normalizeForLookup } from 'mastodon/reducers/accounts_map'; import { getAccountHidden } from 'mastodon/selectors/accounts'; -import { useAppSelector } from 'mastodon/store'; import { lookupAccount, fetchAccount } from '../../actions/accounts'; import { fetchFeaturedTags } from '../../actions/featured_tags'; @@ -21,6 +19,7 @@ import { ColumnBackButton } from '../../components/column_back_button'; import { LoadingIndicator } from '../../components/loading_indicator'; import StatusList from '../../components/status_list'; import Column from '../ui/components/column'; +import { RemoteHint } from 'mastodon/components/remote_hint'; import { AccountHeader } from './components/account_header'; import { LimitedAccountHint } from './components/limited_account_hint'; @@ -47,11 +46,8 @@ const mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = fa return { accountId, - remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])), - remoteUrl: state.getIn(['accounts', accountId, 'url']), isAccount: !!state.getIn(['accounts', accountId]), statusIds: state.getIn(['timelines', `account:${path}`, 'items'], emptyList), - featuredStatusIds: withReplies ? ImmutableList() : state.getIn(['timelines', `account:${accountId}:pinned${tagged ? `:${tagged}` : ''}`, 'items'], emptyList), isLoading: state.getIn(['timelines', `account:${path}`, 'isLoading']), hasMore: state.getIn(['timelines', `account:${path}`, 'hasMore']), suspended: state.getIn(['accounts', accountId, 'suspended'], false), @@ -60,24 +56,6 @@ const mapStateToProps = (state, { params: { acct, id, tagged }, withReplies = fa }; }; -const RemoteHint = ({ accountId, url }) => { - const acct = useAppSelector(state => state.accounts.get(accountId)?.acct); - const domain = acct ? acct.split('@')[1] : undefined; - - return ( - } - label={{domain} }} />} - /> - ); -}; - -RemoteHint.propTypes = { - url: PropTypes.string.isRequired, - accountId: PropTypes.string.isRequired, -}; - class AccountTimeline extends ImmutablePureComponent { static propTypes = { @@ -89,7 +67,6 @@ class AccountTimeline extends ImmutablePureComponent { accountId: PropTypes.string, dispatch: PropTypes.func.isRequired, statusIds: ImmutablePropTypes.list, - featuredStatusIds: ImmutablePropTypes.list, isLoading: PropTypes.bool, hasMore: PropTypes.bool, withReplies: PropTypes.bool, @@ -97,8 +74,6 @@ class AccountTimeline extends ImmutablePureComponent { isAccount: PropTypes.bool, suspended: PropTypes.bool, hidden: PropTypes.bool, - remote: PropTypes.bool, - remoteUrl: PropTypes.string, multiColumn: PropTypes.bool, }; @@ -161,7 +136,7 @@ class AccountTimeline extends ImmutablePureComponent { }; render () { - const { accountId, statusIds, featuredStatusIds, isLoading, hasMore, blockedBy, suspended, isAccount, hidden, multiColumn, remote, remoteUrl } = this.props; + const { accountId, statusIds, isLoading, hasMore, blockedBy, suspended, isAccount, hidden, multiColumn, remote, remoteUrl } = this.props; if (isLoading && statusIds.isEmpty()) { return ( @@ -191,8 +166,6 @@ class AccountTimeline extends ImmutablePureComponent { emptyMessage = ; } - const remoteMessage = remote ? : null; - return ( @@ -200,10 +173,9 @@ class AccountTimeline extends ImmutablePureComponent { } alwaysPrepend - append={remoteMessage} + append={} scrollKey='account_timeline' statusIds={forceEmptyState ? emptyList : statusIds} - featuredStatusIds={featuredStatusIds} isLoading={isLoading} hasMore={!forceEmptyState && hasMore} onLoadMore={this.handleLoadMore} diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index a1cb8212d2..bb9720c17f 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -73,6 +73,7 @@ import { About, PrivacyPolicy, TermsOfService, + AccountFeatured, } from './util/async-components'; import { ColumnsContextProvider } from './util/columns_context'; import { WrappedSwitch, WrappedRoute } from './util/react_router_helpers'; @@ -236,6 +237,7 @@ class SwitchingColumnsArea extends PureComponent { + diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 8c3b342778..ec493ae283 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -66,6 +66,10 @@ export function AccountGallery () { return import(/* webpackChunkName: "features/account_gallery" */'../../account_gallery'); } +export function AccountFeatured() { + return import(/* webpackChunkName: "features/account_featured" */'../../account_featured'); +} + export function Followers () { return import(/* webpackChunkName: "features/followers" */'../../followers'); } diff --git a/app/javascript/mastodon/hooks/useAccountId.ts b/app/javascript/mastodon/hooks/useAccountId.ts new file mode 100644 index 0000000000..1cc819ca59 --- /dev/null +++ b/app/javascript/mastodon/hooks/useAccountId.ts @@ -0,0 +1,37 @@ +import { useEffect } from 'react'; + +import { useParams } from 'react-router'; + +import { fetchAccount, lookupAccount } from 'mastodon/actions/accounts'; +import { normalizeForLookup } from 'mastodon/reducers/accounts_map'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +interface Params { + acct?: string; + id?: string; +} + +export function useAccountId() { + const { acct, id } = useParams(); + const accountId = useAppSelector( + (state) => + id ?? + (state.accounts_map.get(normalizeForLookup(acct)) as string | undefined), + ); + + const account = useAppSelector((state) => + accountId ? state.accounts.get(accountId) : undefined, + ); + const isAccount = !!account; + + const dispatch = useAppDispatch(); + useEffect(() => { + if (!accountId) { + dispatch(lookupAccount(acct)); + } else if (!isAccount) { + dispatch(fetchAccount(accountId)); + } + }, [dispatch, accountId, acct, isAccount]); + + return accountId; +} diff --git a/app/javascript/mastodon/hooks/useAccountVisibility.ts b/app/javascript/mastodon/hooks/useAccountVisibility.ts new file mode 100644 index 0000000000..55651af5a0 --- /dev/null +++ b/app/javascript/mastodon/hooks/useAccountVisibility.ts @@ -0,0 +1,20 @@ +import { getAccountHidden } from 'mastodon/selectors/accounts'; +import { useAppSelector } from 'mastodon/store'; + +export function useAccountVisibility(accountId?: string) { + const blockedBy = useAppSelector( + (state) => !!state.relationships.getIn([accountId, 'blocked_by'], false), + ); + const suspended = useAppSelector( + (state) => !!state.accounts.getIn([accountId, 'suspended'], false), + ); + const hidden = useAppSelector((state) => + accountId ? Boolean(getAccountHidden(state, accountId)) : false, + ); + + return { + blockedBy, + suspended, + hidden, + }; +} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index ebd5412cf2..0a0f043b4d 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -27,9 +27,11 @@ "account.edit_profile": "Edit profile", "account.enable_notifications": "Notify me when @{name} posts", "account.endorse": "Feature on profile", + "account.featured": "Featured", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Posts", "account.featured_tags.last_status_at": "Last post on {date}", "account.featured_tags.last_status_never": "No posts", - "account.featured_tags.title": "{name}'s featured hashtags", "account.follow": "Follow", "account.follow_back": "Follow back", "account.followers": "Followers", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Search results", "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", + "empty_column.account_featured": "This list is empty", "empty_column.account_hides_collections": "This user has chosen to not make this information available", "empty_column.account_suspended": "Account suspended", "empty_column.account_timeline": "No posts here!", diff --git a/config/routes.rb b/config/routes.rb index 5b130c517b..2fff44851e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -129,6 +129,7 @@ Rails.application.routes.draw do constraints(username: %r{[^@/.]+}) do with_options to: 'accounts#show' do get '/@:username', as: :short_account + get '/@:username/featured' get '/@:username/with_replies', as: :short_account_with_replies get '/@:username/media', as: :short_account_media get '/@:username/tagged/:tag', as: :short_account_tag From 1d7b45093d4eec197ca8cdb81bda0eeeb70bf95e Mon Sep 17 00:00:00 2001 From: Essem Date: Thu, 10 Apr 2025 23:27:12 -0500 Subject: [PATCH 39/90] Fix notification request screen breaking due to dropdown (#34423) --- .../notifications/components/notification_request.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/notifications/components/notification_request.jsx b/app/javascript/mastodon/features/notifications/components/notification_request.jsx index 9c9365d088..381bb1153f 100644 --- a/app/javascript/mastodon/features/notifications/components/notification_request.jsx +++ b/app/javascript/mastodon/features/notifications/components/notification_request.jsx @@ -105,11 +105,10 @@ export const NotificationRequest = ({ id, accountId, notificationsCount, checked
    -
    From e7537769301d9f5467da2f749d7db460da8b621c Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 11 Apr 2025 04:09:40 -0400 Subject: [PATCH 40/90] Fix `Style/HashTransformValues` cop (#34416) --- .rubocop_todo.yml | 8 +------- app/serializers/rest/web_push_subscription_serializer.rb | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index f63a3ebf39..c3c41f3c5d 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp` -# using RuboCop version 1.75.1. +# using RuboCop version 1.75.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -58,12 +58,6 @@ Style/FormatStringToken: Style/GuardClause: Enabled: false -# This cop supports unsafe autocorrection (--autocorrect-all). -Style/HashTransformValues: - Exclude: - - 'app/serializers/rest/web_push_subscription_serializer.rb' - - 'app/services/import_service.rb' - # Configuration parameters: AllowedMethods. # AllowedMethods: respond_to_missing? Style/OptionalBooleanParameter: diff --git a/app/serializers/rest/web_push_subscription_serializer.rb b/app/serializers/rest/web_push_subscription_serializer.rb index 4cb980bb93..01825a3bb0 100644 --- a/app/serializers/rest/web_push_subscription_serializer.rb +++ b/app/serializers/rest/web_push_subscription_serializer.rb @@ -6,7 +6,7 @@ class REST::WebPushSubscriptionSerializer < ActiveModel::Serializer delegate :standard, to: :object def alerts - (object.data&.dig('alerts') || {}).each_with_object({}) { |(k, v), h| h[k] = ActiveModel::Type::Boolean.new.cast(v) } + (object.data&.dig('alerts') || {}).transform_values { |v| ActiveModel::Type::Boolean.new.cast(v) } end def server_key From 7d50942b362c0758fc5d0cdf86e9c8b7c65dfddf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 08:16:00 +0000 Subject: [PATCH 41/90] New Crowdin Translations (automated) (#34424) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/an.json | 1 - app/javascript/mastodon/locales/ar.json | 1 - app/javascript/mastodon/locales/ast.json | 1 - app/javascript/mastodon/locales/az.json | 1 - app/javascript/mastodon/locales/be.json | 1 - app/javascript/mastodon/locales/bg.json | 1 - app/javascript/mastodon/locales/bn.json | 1 - app/javascript/mastodon/locales/br.json | 1 - app/javascript/mastodon/locales/ca.json | 1 - app/javascript/mastodon/locales/ckb.json | 1 - app/javascript/mastodon/locales/cs.json | 1 - app/javascript/mastodon/locales/cy.json | 5 ++- app/javascript/mastodon/locales/da.json | 5 ++- app/javascript/mastodon/locales/de.json | 5 ++- app/javascript/mastodon/locales/el.json | 1 - app/javascript/mastodon/locales/en-GB.json | 1 - app/javascript/mastodon/locales/eo.json | 4 ++- app/javascript/mastodon/locales/es-AR.json | 5 ++- app/javascript/mastodon/locales/es-MX.json | 5 ++- app/javascript/mastodon/locales/es.json | 5 ++- app/javascript/mastodon/locales/et.json | 1 - app/javascript/mastodon/locales/eu.json | 1 - app/javascript/mastodon/locales/fa.json | 1 - app/javascript/mastodon/locales/fi.json | 4 ++- app/javascript/mastodon/locales/fil.json | 1 - app/javascript/mastodon/locales/fo.json | 5 ++- app/javascript/mastodon/locales/fr-CA.json | 1 - app/javascript/mastodon/locales/fr.json | 1 - app/javascript/mastodon/locales/fy.json | 1 - app/javascript/mastodon/locales/ga.json | 1 - app/javascript/mastodon/locales/gd.json | 1 - app/javascript/mastodon/locales/gl.json | 5 ++- app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/hi.json | 1 - app/javascript/mastodon/locales/hr.json | 1 - app/javascript/mastodon/locales/hu.json | 5 ++- app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 1 - app/javascript/mastodon/locales/ie.json | 1 - app/javascript/mastodon/locales/io.json | 1 - app/javascript/mastodon/locales/is.json | 5 ++- app/javascript/mastodon/locales/it.json | 5 ++- app/javascript/mastodon/locales/ja.json | 1 - app/javascript/mastodon/locales/kk.json | 1 - app/javascript/mastodon/locales/ko.json | 1 - app/javascript/mastodon/locales/ku.json | 1 - app/javascript/mastodon/locales/la.json | 1 - app/javascript/mastodon/locales/lad.json | 1 - app/javascript/mastodon/locales/lt.json | 1 - app/javascript/mastodon/locales/lv.json | 11 +++--- app/javascript/mastodon/locales/mr.json | 1 - app/javascript/mastodon/locales/ms.json | 1 - app/javascript/mastodon/locales/my.json | 1 - app/javascript/mastodon/locales/nan.json | 1 - app/javascript/mastodon/locales/ne.json | 1 - app/javascript/mastodon/locales/nl.json | 5 ++- app/javascript/mastodon/locales/nn.json | 5 ++- app/javascript/mastodon/locales/no.json | 1 - app/javascript/mastodon/locales/oc.json | 1 - app/javascript/mastodon/locales/pl.json | 1 - app/javascript/mastodon/locales/pt-BR.json | 1 - app/javascript/mastodon/locales/pt-PT.json | 1 - app/javascript/mastodon/locales/ro.json | 1 - app/javascript/mastodon/locales/ru.json | 2 +- app/javascript/mastodon/locales/ry.json | 1 - app/javascript/mastodon/locales/sa.json | 1 - app/javascript/mastodon/locales/sc.json | 1 - app/javascript/mastodon/locales/sco.json | 1 - app/javascript/mastodon/locales/sk.json | 1 - app/javascript/mastodon/locales/sl.json | 1 - app/javascript/mastodon/locales/sq.json | 5 ++- app/javascript/mastodon/locales/sr-Latn.json | 1 - app/javascript/mastodon/locales/sr.json | 1 - app/javascript/mastodon/locales/sv.json | 1 - app/javascript/mastodon/locales/th.json | 1 - app/javascript/mastodon/locales/tok.json | 1 - app/javascript/mastodon/locales/tr.json | 5 ++- app/javascript/mastodon/locales/tt.json | 1 - app/javascript/mastodon/locales/uk.json | 5 ++- app/javascript/mastodon/locales/ur.json | 1 - app/javascript/mastodon/locales/uz.json | 1 - app/javascript/mastodon/locales/vi.json | 5 ++- app/javascript/mastodon/locales/zh-CN.json | 1 - app/javascript/mastodon/locales/zh-HK.json | 1 - app/javascript/mastodon/locales/zh-TW.json | 5 ++- config/locales/lv.yml | 38 ++++++++++---------- config/locales/ru.yml | 1 + config/locales/simple_form.lv.yml | 10 +++--- 88 files changed, 110 insertions(+), 113 deletions(-) diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index 605c86f73e..49b6f41eac 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -25,7 +25,6 @@ "account.endorse": "Amostrar en perfil", "account.featured_tags.last_status_at": "Zaguera publicación lo {date}", "account.featured_tags.last_status_never": "Sin publicacions", - "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", "account.followers": "Seguidores", "account.followers.empty": "Encara no sigue dengún a este usuario.", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index fc8e559dfc..326dd8fbc5 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -29,7 +29,6 @@ "account.endorse": "أوصِ به على صفحتك الشخصية", "account.featured_tags.last_status_at": "آخر منشور في {date}", "account.featured_tags.last_status_never": "لا توجد رسائل", - "account.featured_tags.title": "وسوم {name} المميَّزة", "account.follow": "متابعة", "account.follow_back": "تابعه بالمثل", "account.followers": "مُتابِعون", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index d43a0276dc..5edce9a4d8 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -27,7 +27,6 @@ "account.enable_notifications": "Avisame cuando @{name} espublice artículos", "account.endorse": "Destacar nel perfil", "account.featured_tags.last_status_never": "Nun hai nenguna publicación", - "account.featured_tags.title": "Etiquetes destacaes de: {name}", "account.follow": "Siguir", "account.follow_back": "Siguir tamién", "account.followers": "Siguidores", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index 6a52c706b4..550312f31d 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -29,7 +29,6 @@ "account.endorse": "Profildə seçilmişlərə əlavə et", "account.featured_tags.last_status_at": "Son paylaşım {date} tarixində olub", "account.featured_tags.last_status_never": "Paylaşım yoxdur", - "account.featured_tags.title": "{name} istifadəçisinin seçilmiş heşteqləri", "account.follow": "İzlə", "account.follow_back": "Sən də izlə", "account.followers": "İzləyicilər", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index 6c6e10270f..9011fdfd63 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -29,7 +29,6 @@ "account.endorse": "Паказваць у профілі", "account.featured_tags.last_status_at": "Апошні допіс ад {date}", "account.featured_tags.last_status_never": "Няма допісаў", - "account.featured_tags.title": "Тэгі, выбраныя {name}", "account.follow": "Падпісацца", "account.follow_back": "Падпісацца ў адказ", "account.followers": "Падпісчыкі", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index bf5a5b1016..5c032755ff 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -29,7 +29,6 @@ "account.endorse": "Представи в профила", "account.featured_tags.last_status_at": "Последна публикация на {date}", "account.featured_tags.last_status_never": "Няма публикации", - "account.featured_tags.title": "Главни хаштагове на {name}", "account.follow": "Последване", "account.follow_back": "Последване взаимно", "account.followers": "Последователи", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index ed2b06289f..ec0f4eb447 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -29,7 +29,6 @@ "account.endorse": "প্রোফাইলে ফিচার করুন", "account.featured_tags.last_status_at": "{date} এ সর্বশেষ পোস্ট", "account.featured_tags.last_status_never": "কোনো পোস্ট নেই", - "account.featured_tags.title": "{name} এর ফিচার করা Hashtag সমূহ", "account.follow": "অনুসরণ", "account.follow_back": "তাকে অনুসরণ করো", "account.followers": "অনুসরণকারী", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index fad38721b0..51e3723d19 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -28,7 +28,6 @@ "account.endorse": "Lakaat war-wel war ar profil", "account.featured_tags.last_status_at": "Toud diwezhañ : {date}", "account.featured_tags.last_status_never": "Embannadur ebet", - "account.featured_tags.title": "Hashtagoù pennañ {name}", "account.follow": "Heuliañ", "account.follow_back": "Heuliañ d'ho tro", "account.followers": "Tud koumanantet", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index a282796a50..d6ebbbc1d8 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -29,7 +29,6 @@ "account.endorse": "Recomana en el perfil", "account.featured_tags.last_status_at": "Darrer tut el {date}", "account.featured_tags.last_status_never": "No hi ha tuts", - "account.featured_tags.title": "etiquetes destacades de {name}", "account.follow": "Segueix", "account.follow_back": "Segueix tu també", "account.followers": "Seguidors", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 765eacd080..31f2dbbc11 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -28,7 +28,6 @@ "account.endorse": "ناساندن لە پرۆفایل", "account.featured_tags.last_status_at": "دوایین پۆست لە {date}", "account.featured_tags.last_status_never": "هیچ پۆستێک نییە", - "account.featured_tags.title": "هاشتاگە تایبەتەکانی {name}", "account.follow": "بەدواداچوون", "account.follow_back": "فۆڵۆو بکەنەوە", "account.followers": "شوێنکەوتووان", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 503dc7714d..25657f9cbf 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -29,7 +29,6 @@ "account.endorse": "Zvýraznit na profilu", "account.featured_tags.last_status_at": "Poslední příspěvek {date}", "account.featured_tags.last_status_never": "Žádné příspěvky", - "account.featured_tags.title": "Hlavní hashtagy uživatele {name}", "account.follow": "Sledovat", "account.follow_back": "Také sledovat", "account.followers": "Sledující", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 27ecc6e8eb..3bf10be7fb 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -27,9 +27,11 @@ "account.edit_profile": "Golygu proffil", "account.enable_notifications": "Rhowch wybod i fi pan fydd @{name} yn postio", "account.endorse": "Dangos ar fy mhroffil", + "account.featured": "Dethol", + "account.featured.hashtags": "Hashnodau", + "account.featured.posts": "Postiadau", "account.featured_tags.last_status_at": "Y postiad olaf ar {date}", "account.featured_tags.last_status_never": "Dim postiadau", - "account.featured_tags.title": "Prif hashnodau {name}", "account.follow": "Dilyn", "account.follow_back": "Dilyn nôl", "account.followers": "Dilynwyr", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Canlyniadau chwilio", "emoji_button.symbols": "Symbolau", "emoji_button.travel": "Teithio a Llefydd", + "empty_column.account_featured": "Mae'r rhestr hon yn wag", "empty_column.account_hides_collections": "Mae'r defnyddiwr wedi dewis i beidio rhannu'r wybodaeth yma", "empty_column.account_suspended": "Cyfrif wedi'i atal", "empty_column.account_timeline": "Dim postiadau yma!", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index d8695c194c..b72e40eaf7 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -27,9 +27,11 @@ "account.edit_profile": "Redigér profil", "account.enable_notifications": "Advisér mig, når @{name} poster", "account.endorse": "Fremhæv på profil", + "account.featured": "Fremhævet", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Indlæg", "account.featured_tags.last_status_at": "Seneste indlæg {date}", "account.featured_tags.last_status_never": "Ingen indlæg", - "account.featured_tags.title": "{name}s fremhævede etiketter", "account.follow": "Følg", "account.follow_back": "Følg tilbage", "account.followers": "Følgere", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser og steder", + "empty_column.account_featured": "Denne liste er tom", "empty_column.account_hides_collections": "Brugeren har valgt ikke at gøre denne information tilgængelig", "empty_column.account_suspended": "Konto suspenderet", "empty_column.account_timeline": "Ingen indlæg her!", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 6a14858d11..943c5ae8b2 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -27,9 +27,11 @@ "account.edit_profile": "Profil bearbeiten", "account.enable_notifications": "Benachrichtige mich wenn @{name} etwas postet", "account.endorse": "Im Profil empfehlen", + "account.featured": "Empfohlen", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Beiträge", "account.featured_tags.last_status_at": "Letzter Beitrag am {date}", "account.featured_tags.last_status_never": "Keine Beiträge", - "account.featured_tags.title": "Von {name} vorgestellte Hashtags", "account.follow": "Folgen", "account.follow_back": "Ebenfalls folgen", "account.followers": "Follower", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Suchergebnisse", "emoji_button.symbols": "Symbole", "emoji_button.travel": "Reisen & Orte", + "empty_column.account_featured": "Diese Liste ist leer", "empty_column.account_hides_collections": "Das Konto hat sich dazu entschieden, diese Information nicht zu veröffentlichen", "empty_column.account_suspended": "Konto gesperrt", "empty_column.account_timeline": "Keine Beiträge vorhanden!", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 1918c4371e..0b9e42cbe9 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -29,7 +29,6 @@ "account.endorse": "Προβολή στο προφίλ", "account.featured_tags.last_status_at": "Τελευταία ανάρτηση στις {date}", "account.featured_tags.last_status_never": "Καμία ανάρτηση", - "account.featured_tags.title": "προβεβλημένες ετικέτες του/της {name}", "account.follow": "Ακολούθησε", "account.follow_back": "Ακολούθησε και εσύ", "account.followers": "Ακόλουθοι", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 2f461cd19d..b46d02baa9 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -29,7 +29,6 @@ "account.endorse": "Feature on profile", "account.featured_tags.last_status_at": "Last post on {date}", "account.featured_tags.last_status_never": "No posts", - "account.featured_tags.title": "{name}'s featured hashtags", "account.follow": "Follow", "account.follow_back": "Follow back", "account.followers": "Followers", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 207fa5b955..1d360e59d7 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -27,9 +27,10 @@ "account.edit_profile": "Redakti la profilon", "account.enable_notifications": "Sciigu min kiam @{name} afiŝos", "account.endorse": "Prezenti ĉe via profilo", + "account.featured.hashtags": "Kradvortoj", + "account.featured.posts": "Afiŝoj", "account.featured_tags.last_status_at": "Lasta afîŝo je {date}", "account.featured_tags.last_status_never": "Neniu afiŝo", - "account.featured_tags.title": "Rekomendataj kradvortoj de {name}", "account.follow": "Sekvi", "account.follow_back": "Sekvu reen", "account.followers": "Sekvantoj", @@ -294,6 +295,7 @@ "emoji_button.search_results": "Serĉaj rezultoj", "emoji_button.symbols": "Simboloj", "emoji_button.travel": "Vojaĝoj kaj lokoj", + "empty_column.account_featured": "Ĉi tiu listo estas malplena", "empty_column.account_hides_collections": "Ĉi tiu uzanto elektis ne disponebligi ĉi tiu informon", "empty_column.account_suspended": "Konto suspendita", "empty_column.account_timeline": "Neniuj afiŝoj ĉi tie!", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 2eb96dd5bd..cc694ebfe7 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -27,9 +27,11 @@ "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificarme cuando @{name} envíe mensajes", "account.endorse": "Destacar en el perfil", + "account.featured": "Destacados", + "account.featured.hashtags": "Etiquetas", + "account.featured.posts": "Mensajes", "account.featured_tags.last_status_at": "Último mensaje: {date}", "account.featured_tags.last_status_never": "Sin mensajes", - "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", "account.follow_back": "Seguir", "account.followers": "Seguidores", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_featured": "Esta lista está vacía", "empty_column.account_hides_collections": "Este usuario eligió no publicar esta información", "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay mensajes acá!", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 929f962e6a..45b002ce0f 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -27,9 +27,11 @@ "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificarme cuando @{name} publique algo", "account.endorse": "Destacar en mi perfil", + "account.featured": "Destacado", + "account.featured.hashtags": "Etiquetas", + "account.featured.posts": "Publicaciones", "account.featured_tags.last_status_at": "Última publicación el {date}", "account.featured_tags.last_status_never": "Sin publicaciones", - "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", "account.follow_back": "Seguir también", "account.followers": "Seguidores", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_featured": "Esta lista está vacía", "empty_column.account_hides_collections": "Este usuario ha elegido no hacer disponible esta información", "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay publicaciones aquí!", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index be6a0f95ee..2575d901f5 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -27,9 +27,11 @@ "account.edit_profile": "Editar perfil", "account.enable_notifications": "Notificarme cuando @{name} publique algo", "account.endorse": "Destacar en el perfil", + "account.featured": "Destacado", + "account.featured.hashtags": "Etiquetas", + "account.featured.posts": "Publicaciones", "account.featured_tags.last_status_at": "Última publicación el {date}", "account.featured_tags.last_status_never": "Sin publicaciones", - "account.featured_tags.title": "Etiquetas destacadas de {name}", "account.follow": "Seguir", "account.follow_back": "Seguir también", "account.followers": "Seguidores", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Resultados de búsqueda", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viajes y lugares", + "empty_column.account_featured": "Esta lista está vacía", "empty_column.account_hides_collections": "Este usuario ha decidido no mostrar esta información", "empty_column.account_suspended": "Cuenta suspendida", "empty_column.account_timeline": "¡No hay publicaciones aquí!", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index d2fb81bee6..3e0610126e 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -29,7 +29,6 @@ "account.endorse": "Too profiilil esile", "account.featured_tags.last_status_at": "Viimane postitus {date}", "account.featured_tags.last_status_never": "Postitusi pole", - "account.featured_tags.title": "{name} esiletõstetud sildid", "account.follow": "Jälgi", "account.follow_back": "Jälgi vastu", "account.followers": "Jälgijad", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index 5507e7f343..0c73c9f540 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -29,7 +29,6 @@ "account.endorse": "Nabarmendu profilean", "account.featured_tags.last_status_at": "Azken bidalketa {date} datan", "account.featured_tags.last_status_never": "Bidalketarik ez", - "account.featured_tags.title": "{name} erabiltzailearen nabarmendutako traolak", "account.follow": "Jarraitu", "account.follow_back": "Jarraitu bueltan", "account.followers": "Jarraitzaileak", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 27f0bf4e9a..3e31eb8a15 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -29,7 +29,6 @@ "account.endorse": "معرّفی در نمایه", "account.featured_tags.last_status_at": "آخرین فرسته در {date}", "account.featured_tags.last_status_never": "بدون فرسته", - "account.featured_tags.title": "برچسب‌های برگزیدهٔ {name}", "account.follow": "پی‌گرفتن", "account.follow_back": "دنبال کردن متقابل", "account.followers": "پی‌گیرندگان", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 53df277b70..b33e9f6163 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -27,9 +27,10 @@ "account.edit_profile": "Muokkaa profiilia", "account.enable_notifications": "Ilmoita minulle, kun @{name} julkaisee", "account.endorse": "Suosittele profiilissasi", + "account.featured.hashtags": "Aihetunnisteet", + "account.featured.posts": "Julkaisut", "account.featured_tags.last_status_at": "Viimeisin julkaisu {date}", "account.featured_tags.last_status_never": "Ei julkaisuja", - "account.featured_tags.title": "Käyttäjän {name} suosittelemat aihetunnisteet", "account.follow": "Seuraa", "account.follow_back": "Seuraa takaisin", "account.followers": "Seuraajat", @@ -294,6 +295,7 @@ "emoji_button.search_results": "Hakutulokset", "emoji_button.symbols": "Symbolit", "emoji_button.travel": "Matkailu ja paikat", + "empty_column.account_featured": "Tämä lista on tyhjä", "empty_column.account_hides_collections": "Käyttäjä on päättänyt pitää nämä tiedot yksityisinä", "empty_column.account_suspended": "Tili jäädytetty", "empty_column.account_timeline": "Ei viestejä täällä.", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 4c33ac01a1..c13d0a8afe 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -29,7 +29,6 @@ "account.endorse": "I-tampok sa profile", "account.featured_tags.last_status_at": "Huling post noong {date}", "account.featured_tags.last_status_never": "Walang mga post", - "account.featured_tags.title": "Nakatampok na hashtag ni {name}", "account.follow": "Sundan", "account.follow_back": "Sundan pabalik", "account.followers": "Mga tagasunod", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 636d32729c..82939adcce 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -27,9 +27,11 @@ "account.edit_profile": "Broyt vanga", "account.enable_notifications": "Boða mær frá, tá @{name} skrivar", "account.endorse": "Víst á vangamyndini", + "account.featured": "Tikin fram", + "account.featured.hashtags": "Frámerki", + "account.featured.posts": "Postar", "account.featured_tags.last_status_at": "Seinasta strongur skrivaður {date}", "account.featured_tags.last_status_never": "Einki uppslag", - "account.featured_tags.title": "Tvíkrossar hjá {name}", "account.follow": "Fylg", "account.follow_back": "Fylg aftur", "account.followers": "Fylgjarar", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Leitiúrslit", "emoji_button.symbols": "Ímyndir", "emoji_button.travel": "Ferðing og støð", + "empty_column.account_featured": "Hesin listin er tómur", "empty_column.account_hides_collections": "Hesin brúkarin hevur valt, at hesar upplýsingarnar ikki skulu vera tøkar", "empty_column.account_suspended": "Kontan gjørd óvirkin", "empty_column.account_timeline": "Einki uppslag her!", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index dd497adbbb..ad71d98ff8 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -29,7 +29,6 @@ "account.endorse": "Inclure sur profil", "account.featured_tags.last_status_at": "Dernière publication {date}", "account.featured_tags.last_status_never": "Aucune publication", - "account.featured_tags.title": "Hashtags inclus de {name}", "account.follow": "Suivre", "account.follow_back": "Suivre en retour", "account.followers": "abonné·e·s", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 5b76cbfde6..de653eec8f 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -29,7 +29,6 @@ "account.endorse": "Recommander sur votre profil", "account.featured_tags.last_status_at": "Dernier message le {date}", "account.featured_tags.last_status_never": "Aucun message", - "account.featured_tags.title": "Les hashtags en vedette de {name}", "account.follow": "Suivre", "account.follow_back": "Suivre en retour", "account.followers": "Abonné·e·s", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 46da3ea09d..e3c3222868 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -29,7 +29,6 @@ "account.endorse": "Op profyl werjaan", "account.featured_tags.last_status_at": "Lêste berjocht op {date}", "account.featured_tags.last_status_never": "Gjin berjochten", - "account.featured_tags.title": "Utljochte hashtags fan {name}", "account.follow": "Folgje", "account.follow_back": "Weromfolgje", "account.followers": "Folgers", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index cd0d58da4a..5935b39e2d 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -29,7 +29,6 @@ "account.endorse": "Cuir ar an phróifíl mar ghné", "account.featured_tags.last_status_at": "Postáil is déanaí ar {date}", "account.featured_tags.last_status_never": "Gan aon phoist", - "account.featured_tags.title": "Haischlib faoi thrácht {name}", "account.follow": "Lean", "account.follow_back": "Leanúint ar ais", "account.followers": "Leantóirí", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 69aa5f69ef..f295db0b43 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -29,7 +29,6 @@ "account.endorse": "Brosnaich air a’ phròifil", "account.featured_tags.last_status_at": "Am post mu dheireadh {date}", "account.featured_tags.last_status_never": "Gun phost", - "account.featured_tags.title": "Na tagaichean hais brosnaichte aig {name}", "account.follow": "Lean", "account.follow_back": "Lean air ais", "account.followers": "Luchd-leantainn", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 6eb5457043..57e7b5ee5a 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -27,9 +27,11 @@ "account.edit_profile": "Editar perfil", "account.enable_notifications": "Noficarme cando @{name} publique", "account.endorse": "Amosar no perfil", + "account.featured": "Destacado", + "account.featured.hashtags": "Cancelos", + "account.featured.posts": "Publicacións", "account.featured_tags.last_status_at": "Última publicación o {date}", "account.featured_tags.last_status_never": "Sen publicacións", - "account.featured_tags.title": "Cancelos destacados de {name}", "account.follow": "Seguir", "account.follow_back": "Seguir tamén", "account.followers": "Seguidoras", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Resultados da procura", "emoji_button.symbols": "Símbolos", "emoji_button.travel": "Viaxes e Lugares", + "empty_column.account_featured": "A lista está baleira", "empty_column.account_hides_collections": "A usuaria decideu non facer pública esta información", "empty_column.account_suspended": "Conta suspendida", "empty_column.account_timeline": "Non hai publicacións aquí!", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index f5c6e66f9b..89d36dc962 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -29,7 +29,6 @@ "account.endorse": "קדם את החשבון בפרופיל", "account.featured_tags.last_status_at": "חצרוץ אחרון בתאריך {date}", "account.featured_tags.last_status_never": "אין חצרוצים", - "account.featured_tags.title": "התגיות המועדפות של {name}", "account.follow": "לעקוב", "account.follow_back": "לעקוב בחזרה", "account.followers": "עוקבים", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index 10c5356719..a3eec9544c 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -28,7 +28,6 @@ "account.endorse": "प्रोफ़ाइल पर दिखाए", "account.featured_tags.last_status_at": "{date} का अंतिम पोस्ट", "account.featured_tags.last_status_never": "कोई पोस्ट नहीं है", - "account.featured_tags.title": "{name} के चुनिंदा हैशटैग", "account.follow": "फॉलो करें", "account.follow_back": "फॉलो करें", "account.followers": "फॉलोवर", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 092647bd31..38807b28b2 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -28,7 +28,6 @@ "account.endorse": "Istakni na profilu", "account.featured_tags.last_status_at": "Zadnji post {date}", "account.featured_tags.last_status_never": "Nema postova", - "account.featured_tags.title": "Istaknuti hashtagovi {name}", "account.follow": "Prati", "account.follow_back": "Slijedi natrag", "account.followers": "Pratitelji", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 2caba889e3..826dca6137 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -27,9 +27,11 @@ "account.edit_profile": "Profil szerkesztése", "account.enable_notifications": "Figyelmeztessen, ha @{name} bejegyzést tesz közzé", "account.endorse": "Kiemelés a profilodon", + "account.featured": "Kiemelt", + "account.featured.hashtags": "Hashtagek", + "account.featured.posts": "Bejegyzések", "account.featured_tags.last_status_at": "Legutolsó bejegyzés ideje: {date}", "account.featured_tags.last_status_never": "Nincs bejegyzés", - "account.featured_tags.title": "{name} kiemelt hashtagjei", "account.follow": "Követés", "account.follow_back": "Viszontkövetés", "account.followers": "Követő", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Keresési találatok", "emoji_button.symbols": "Szimbólumok", "emoji_button.travel": "Utazás és helyek", + "empty_column.account_featured": "Ez a lista üres", "empty_column.account_hides_collections": "Ez a felhasználó úgy döntött, hogy nem teszi elérhetővé ezt az információt.", "empty_column.account_suspended": "Fiók felfüggesztve", "empty_column.account_timeline": "Itt nincs bejegyzés!", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index d4706dbf8c..7f4f66796e 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -29,7 +29,6 @@ "account.endorse": "Evidentiar sur le profilo", "account.featured_tags.last_status_at": "Ultime message publicate le {date}", "account.featured_tags.last_status_never": "Necun message", - "account.featured_tags.title": "Hashtags eminente de {name}", "account.follow": "Sequer", "account.follow_back": "Sequer in retorno", "account.followers": "Sequitores", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index f4724b6f4f..102e547d40 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -29,7 +29,6 @@ "account.endorse": "Tampilkan di profil", "account.featured_tags.last_status_at": "Kiriman terakhir pada {date}", "account.featured_tags.last_status_never": "Tidak ada kiriman", - "account.featured_tags.title": "Tagar {name} yang difiturkan", "account.follow": "Ikuti", "account.follow_back": "Ikuti balik", "account.followers": "Pengikut", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index ba5ad494ce..7cd463727f 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -28,7 +28,6 @@ "account.endorse": "Recomandar sur profil", "account.featured_tags.last_status_at": "Ultim posta ye {date}", "account.featured_tags.last_status_never": "Null postas", - "account.featured_tags.title": "Recomandat hashtags de {name}", "account.follow": "Sequer", "account.follow_back": "Sequer reciprocmen", "account.followers": "Sequitores", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 21723e10b8..596ca4c3fe 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -29,7 +29,6 @@ "account.endorse": "Traito di profilo", "account.featured_tags.last_status_at": "Antea posto ye {date}", "account.featured_tags.last_status_never": "Nula posti", - "account.featured_tags.title": "Ekstaca gretvorti di {name}", "account.follow": "Sequar", "account.follow_back": "Anke sequez", "account.followers": "Sequanti", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index db257927fc..5f956c71f6 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -27,9 +27,11 @@ "account.edit_profile": "Breyta notandasniði", "account.enable_notifications": "Láta mig vita þegar @{name} sendir inn", "account.endorse": "Birta á notandasniði", + "account.featured": "Með aukið vægi", + "account.featured.hashtags": "Myllumerki", + "account.featured.posts": "Færslur", "account.featured_tags.last_status_at": "Síðasta færsla þann {date}", "account.featured_tags.last_status_never": "Engar færslur", - "account.featured_tags.title": "Myllumerki hjá {name} með aukið vægi", "account.follow": "Fylgjast með", "account.follow_back": "Fylgjast með til baka", "account.followers": "Fylgjendur", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Leitarniðurstöður", "emoji_button.symbols": "Tákn", "emoji_button.travel": "Ferðalög og staðir", + "empty_column.account_featured": "Þessi listi er tómur", "empty_column.account_hides_collections": "Notandinn hefur valið að gera ekki tiltækar þessar upplýsingar", "empty_column.account_suspended": "Notandaaðgangur í frysti", "empty_column.account_timeline": "Engar færslur hér!", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 99cb78716f..36770c675f 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -27,9 +27,11 @@ "account.edit_profile": "Modifica profilo", "account.enable_notifications": "Avvisami quando @{name} pubblica un post", "account.endorse": "In evidenza sul profilo", + "account.featured": "In primo piano", + "account.featured.hashtags": "Hashtag", + "account.featured.posts": "Post", "account.featured_tags.last_status_at": "Ultimo post il {date}", "account.featured_tags.last_status_never": "Nessun post", - "account.featured_tags.title": "Hashtag in evidenza di {name}", "account.follow": "Segui", "account.follow_back": "Segui a tua volta", "account.followers": "Follower", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Risultati della ricerca", "emoji_button.symbols": "Simboli", "emoji_button.travel": "Viaggi & Luoghi", + "empty_column.account_featured": "Questa lista è vuota", "empty_column.account_hides_collections": "Questo utente ha scelto di non rendere disponibili queste informazioni", "empty_column.account_suspended": "Profilo sospeso", "empty_column.account_timeline": "Nessun post qui!", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index ab9a5ce64c..847c479b23 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -29,7 +29,6 @@ "account.endorse": "プロフィールで紹介する", "account.featured_tags.last_status_at": "最終投稿 {date}", "account.featured_tags.last_status_never": "投稿がありません", - "account.featured_tags.title": "{name}の注目ハッシュタグ", "account.follow": "フォロー", "account.follow_back": "フォローバック", "account.followers": "フォロワー", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 120e2415b5..adc3cdc230 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -25,7 +25,6 @@ "account.enable_notifications": "@{name} постары туралы ескерту", "account.endorse": "Профильде ұсыну", "account.featured_tags.last_status_never": "Пост жоқ", - "account.featured_tags.title": "{name} таңдаулы хэштегтері", "account.follow": "Жазылу", "account.followers": "Жазылушы", "account.followers.empty": "Бұл қолданушыға әлі ешкім жазылмаған.", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 76f94fb43f..be6e4be7e1 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -29,7 +29,6 @@ "account.endorse": "프로필에 추천하기", "account.featured_tags.last_status_at": "{date}에 마지막으로 게시", "account.featured_tags.last_status_never": "게시물 없음", - "account.featured_tags.title": "{name} 님의 추천 해시태그", "account.follow": "팔로우", "account.follow_back": "맞팔로우", "account.followers": "팔로워", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index f867908f37..23ee9fc932 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -29,7 +29,6 @@ "account.endorse": "Taybetiyên li ser profîl", "account.featured_tags.last_status_at": "Şandiya dawî di {date} de", "account.featured_tags.last_status_never": "Şandî tune ne", - "account.featured_tags.title": "{name}'s hashtagên taybet", "account.follow": "Bişopîne", "account.follow_back": "Bişopîne", "account.followers": "Şopîner", diff --git a/app/javascript/mastodon/locales/la.json b/app/javascript/mastodon/locales/la.json index f422230cb8..c6e5d85c07 100644 --- a/app/javascript/mastodon/locales/la.json +++ b/app/javascript/mastodon/locales/la.json @@ -23,7 +23,6 @@ "account.domain_blocked": "Dominium impeditum", "account.edit_profile": "Recolere notionem", "account.featured_tags.last_status_never": "Nulla contributa", - "account.featured_tags.title": "Hashtag notātī {name}", "account.followers_counter": "{count, plural, one {{counter} sectator} other {{counter} sectatores}}", "account.following_counter": "{count, plural, one {{counter} sectans} other {{counter} sectans}}", "account.moved_to": "{name} significavit eum suam rationem novam nunc esse:", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index d9d941f8e8..f67ef676ad 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -29,7 +29,6 @@ "account.endorse": "Avalia en profil", "account.featured_tags.last_status_at": "Ultima publikasyon de {date}", "account.featured_tags.last_status_never": "No ay publikasyones", - "account.featured_tags.title": "Etiketas avaliadas de {name}", "account.follow": "Sige", "account.follow_back": "Sige tamyen", "account.followers": "Suivantes", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index f112bc73d9..7110e809c1 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -29,7 +29,6 @@ "account.endorse": "Rodyti profilyje", "account.featured_tags.last_status_at": "Paskutinis įrašas {date}", "account.featured_tags.last_status_never": "Nėra įrašų", - "account.featured_tags.title": "{name} rodomi saitažodžiai", "account.follow": "Sekti", "account.follow_back": "Sekti atgal", "account.followers": "Sekėjai", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 203b321574..27760c59ff 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -29,7 +29,6 @@ "account.endorse": "Izcelts profilā", "account.featured_tags.last_status_at": "Beidzamā ziņa {date}", "account.featured_tags.last_status_never": "Ierakstu nav", - "account.featured_tags.title": "{name} izceltie tēmturi", "account.follow": "Sekot", "account.follow_back": "Sekot atpakaļ", "account.followers": "Sekotāji", @@ -54,7 +53,7 @@ "account.muted": "Apklusināts", "account.mutual": "Abpusēji", "account.no_bio": "Apraksts nav sniegts.", - "account.open_original_page": "Atvērt oriģinālo lapu", + "account.open_original_page": "Atvērt pirmavota lapu", "account.posts": "Ieraksti", "account.posts_with_replies": "Ieraksti un atbildes", "account.report": "Sūdzēties par @{name}", @@ -214,7 +213,7 @@ "confirmations.missing_alt_text.secondary": "Vienalga iesūtīt", "confirmations.mute.confirm": "Apklusināt", "confirmations.redraft.confirm": "Dzēst un pārrakstīt", - "confirmations.redraft.message": "Vai tiešām vēlies dzēst šo ziņu un no jauna noformēt to? Izlase un pastiprinājumi tiks zaudēti, un atbildes uz sākotnējo ziņu tiks atstātas bez autoratlīdzības.", + "confirmations.redraft.message": "Vai tiešām vēlies izdzēst šo ierakstu un veidot jaunu tā uzmetumu? Pievienošana izlasēs un pastiprinājumi tiks zaudēti, un sākotnējā ieraksta atbildes paliks bez saiknes ar to.", "confirmations.redraft.title": "Dzēst un rakstīt vēlreiz?", "confirmations.reply.confirm": "Atbildēt", "confirmations.reply.message": "Tūlītēja atbildēšana pārrakstīs pašlaik sastādīto ziņu. Vai tiešām turpināt?", @@ -597,7 +596,7 @@ "report.close": "Darīts", "report.comment.title": "Vai, tavuprāt, mums vēl būtu kas jāzina?", "report.forward": "Pārsūtīt {target}", - "report.forward_hint": "Konts ir no cita servera. Vai nosūtīt anonimizētu sūdzības kopiju arī tam?", + "report.forward_hint": "Konts ir no cita servera. Vai nosūtīt anonimizētu ziņojuma kopiju arī tur?", "report.mute": "Apklusināt", "report.mute_explanation": "Tu neredzēsi viņu ierakstus. Viņi joprojām var Tev sekot un redzēt Tavus ierakstus un nezinās, ka viņi ir apklusināti.", "report.next": "Tālāk", @@ -692,7 +691,7 @@ "status.pinned": "Piesprausts ieraksts", "status.read_more": "Lasīt vairāk", "status.reblog": "Pastiprināt", - "status.reblog_private": "Pastiprināt, nemainot redzamību", + "status.reblog_private": "Pastiprināt ar sākotnējo redzamību", "status.reblogged_by": "{name} pastiprināja", "status.reblogs": "{count, plural, zero {pastiprinājumu} one {pastiprinājums} other {pastiprinājumi}}", "status.reblogs.empty": "Neviens šo ierakstu vēl nav pastiprinājis. Kad būs, tie parādīsies šeit.", @@ -706,7 +705,7 @@ "status.share": "Kopīgot", "status.show_less_all": "Rādīt mazāk visiem", "status.show_more_all": "Rādīt vairāk visiem", - "status.show_original": "Rādīt oriģinālu", + "status.show_original": "Rādīt pirmavotu", "status.title.with_attachments": "{user} publicējis {attachmentCount, plural, one {pielikumu} other {{attachmentCount} pielikumus}}", "status.translate": "Tulkot", "status.translated_from_with": "Tulkots no {lang} izmantojot {provider}", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 94f9aef261..919a34532f 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -28,7 +28,6 @@ "account.endorse": "प्रोफाइलवरील वैशिष्ट्य", "account.featured_tags.last_status_at": "शेवटचे पोस्ट {date} रोजी", "account.featured_tags.last_status_never": "पोस्ट नाहीत", - "account.featured_tags.title": "{name} चे वैशिष्ट्यीकृत हॅशटॅग", "account.follow": "अनुयायी व्हा", "account.follow_back": "आपणही अनुसरण करा", "account.followers": "अनुयायी", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index af80cc20cf..f6a34116e8 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -29,7 +29,6 @@ "account.endorse": "Tampilkan di profil", "account.featured_tags.last_status_at": "Hantaran terakhir pada {date}", "account.featured_tags.last_status_never": "Tiada hantaran", - "account.featured_tags.title": "Tanda pagar pilihan {name}", "account.follow": "Ikuti", "account.follow_back": "Ikut balik", "account.followers": "Pengikut", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 51cba22153..362537edeb 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -28,7 +28,6 @@ "account.endorse": "အကောင့်ပရိုဖိုင်တွင်ဖော်ပြပါ", "account.featured_tags.last_status_at": "နောက်ဆုံးပို့စ်ကို {date} တွင် တင်ခဲ့သည်။", "account.featured_tags.last_status_never": "ပို့စ်တင်ထားခြင်းမရှိပါ", - "account.featured_tags.title": "ဖော်ပြထားသောဟက်ရှ်တက်ခ်များ", "account.follow": "စောင့်ကြည့်", "account.followers": "စောင့်ကြည့်သူများ", "account.followers.empty": "ဤသူကို စောင့်ကြည့်သူ မရှိသေးပါ။", diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index 268dbfa2b7..1ae348871f 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -29,7 +29,6 @@ "account.endorse": "用個人資料推薦對方", "account.featured_tags.last_status_at": "頂kái tī {date} Po文", "account.featured_tags.last_status_never": "無PO文", - "account.featured_tags.title": "{name} ê推薦hashtag", "account.follow": "跟tuè", "account.follow_back": "Tuè tńg去", "account.followers": "跟tuè lí ê", diff --git a/app/javascript/mastodon/locales/ne.json b/app/javascript/mastodon/locales/ne.json index 696f9fbed8..af2c922cbd 100644 --- a/app/javascript/mastodon/locales/ne.json +++ b/app/javascript/mastodon/locales/ne.json @@ -25,7 +25,6 @@ "account.enable_notifications": "@{name} ले पोस्ट गर्दा मलाई सूचित गर्नुहोस्", "account.endorse": "प्रोफाइलमा फिचर गर्नुहोस्", "account.featured_tags.last_status_never": "कुनै पोस्ट छैन", - "account.featured_tags.title": "{name}का विशेष ह्यासट्यागहरू", "account.follow": "फलो गर्नुहोस", "account.follow_back": "फलो ब्याक गर्नुहोस्", "account.followers": "फलोअरहरु", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index a4af036527..e22b7b3774 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -27,9 +27,11 @@ "account.edit_profile": "Profiel bewerken", "account.enable_notifications": "Geef een melding wanneer @{name} een bericht plaatst", "account.endorse": "Op profiel weergeven", + "account.featured": "Uitgelicht", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Berichten", "account.featured_tags.last_status_at": "Laatste bericht op {date}", "account.featured_tags.last_status_never": "Geen berichten", - "account.featured_tags.title": "Uitgelichte hashtags van {name}", "account.follow": "Volgen", "account.follow_back": "Terugvolgen", "account.followers": "Volgers", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Zoekresultaten", "emoji_button.symbols": "Symbolen", "emoji_button.travel": "Reizen en locaties", + "empty_column.account_featured": "Deze lijst is leeg", "empty_column.account_hides_collections": "Deze gebruiker heeft ervoor gekozen deze informatie niet beschikbaar te maken", "empty_column.account_suspended": "Account opgeschort", "empty_column.account_timeline": "Hier zijn geen berichten!", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 4e0e96d974..ab867017a9 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -27,9 +27,11 @@ "account.edit_profile": "Rediger profil", "account.enable_notifications": "Varsle meg når @{name} skriv innlegg", "account.endorse": "Vis på profilen", + "account.featured": "Utvald", + "account.featured.hashtags": "Emneknaggar", + "account.featured.posts": "Innlegg", "account.featured_tags.last_status_at": "Sist nytta {date}", "account.featured_tags.last_status_never": "Ingen innlegg", - "account.featured_tags.title": "{name} sine framheva emneknaggar", "account.follow": "Fylg", "account.follow_back": "Fylg tilbake", "account.followers": "Fylgjarar", @@ -293,6 +295,7 @@ "emoji_button.search_results": "Søkeresultat", "emoji_button.symbols": "Symbol", "emoji_button.travel": "Reise & stader", + "empty_column.account_featured": "Denne lista er tom", "empty_column.account_hides_collections": "Denne brukaren har valt å ikkje gjere denne informasjonen tilgjengeleg", "empty_column.account_suspended": "Kontoen er utestengd", "empty_column.account_timeline": "Ingen tut her!", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index 584132ffe6..a18ccdc0dc 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -29,7 +29,6 @@ "account.endorse": "Vis frem på profilen", "account.featured_tags.last_status_at": "Siste innlegg {date}", "account.featured_tags.last_status_never": "Ingen Innlegg", - "account.featured_tags.title": "{name} sine fremhevede emneknagger", "account.follow": "Følg", "account.follow_back": "Følg tilbake", "account.followers": "Følgere", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 616f8a64af..74ae8fad4d 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -26,7 +26,6 @@ "account.endorse": "Mostrar pel perfil", "account.featured_tags.last_status_at": "Darrièra publicacion lo {date}", "account.featured_tags.last_status_never": "Cap de publicacion", - "account.featured_tags.title": "Etiquetas en avant de {name}", "account.follow": "Sègre", "account.follow_back": "Sègre en retorn", "account.followers": "Seguidors", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index c6b2a5d412..ed827bcf29 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -29,7 +29,6 @@ "account.endorse": "Wyróżnij na profilu", "account.featured_tags.last_status_at": "Ostatni post {date}", "account.featured_tags.last_status_never": "Brak postów", - "account.featured_tags.title": "Polecane hasztagi {name}", "account.follow": "Obserwuj", "account.follow_back": "Również obserwuj", "account.followers": "Obserwujący", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 5279159d79..55cfeea582 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -29,7 +29,6 @@ "account.endorse": "Recomendar", "account.featured_tags.last_status_at": "Última publicação em {date}", "account.featured_tags.last_status_never": "Sem publicações", - "account.featured_tags.title": "Hashtags em destaque de {name}", "account.follow": "Seguir", "account.follow_back": "Seguir de volta", "account.followers": "Seguidores", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 32af518415..87c9e5846a 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -29,7 +29,6 @@ "account.endorse": "Destacar no perfil", "account.featured_tags.last_status_at": "Última publicação em {date}", "account.featured_tags.last_status_never": "Sem publicações", - "account.featured_tags.title": "Etiquetas destacadas por {name}", "account.follow": "Seguir", "account.follow_back": "Seguir também", "account.followers": "Seguidores", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index 56d577f3f0..8fec42bbd0 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -29,7 +29,6 @@ "account.endorse": "Promovează pe profil", "account.featured_tags.last_status_at": "Ultima postare pe {date}", "account.featured_tags.last_status_never": "Fără postări", - "account.featured_tags.title": "Haștagurile recomandate de {name}", "account.follow": "Urmărește", "account.follow_back": "Urmăreşte înapoi", "account.followers": "Urmăritori", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 15ae4b9e0a..6763a354f3 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -27,9 +27,9 @@ "account.edit_profile": "Редактировать", "account.enable_notifications": "Уведомлять о постах от @{name}", "account.endorse": "Рекомендовать в профиле", + "account.featured": "Избранное", "account.featured_tags.last_status_at": "Последний пост {date}", "account.featured_tags.last_status_never": "Нет постов", - "account.featured_tags.title": "Избранные хэштеги {name}", "account.follow": "Подписаться", "account.follow_back": "Подписаться в ответ", "account.followers": "Подписчики", diff --git a/app/javascript/mastodon/locales/ry.json b/app/javascript/mastodon/locales/ry.json index 8fd083efc3..ed9751634e 100644 --- a/app/javascript/mastodon/locales/ry.json +++ b/app/javascript/mastodon/locales/ry.json @@ -28,7 +28,6 @@ "account.endorse": "Указовати на профілови", "account.featured_tags.last_status_at": "Датум послідньої публикації {date}", "account.featured_tags.last_status_never": "Ниє публикацій", - "account.featured_tags.title": "Ублюблені гештеґы {name}", "account.follow": "Пудписати ся", "account.follow_back": "Пудписати ся тоже", "account.followers": "Пудписникы", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 1ecc057023..ce88bda740 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -26,7 +26,6 @@ "account.endorse": "व्यक्तिगतविवरणे वैशिष्ट्यम्", "account.featured_tags.last_status_at": "{date} दिने गतस्थापनम्", "account.featured_tags.last_status_never": "न पत्रम्", - "account.featured_tags.title": "{name} इत्यस्य विशेषहैस्टैगः", "account.follow": "अनुस्रियताम्", "account.followers": "अनुसर्तारः", "account.followers.empty": "नाऽनुसर्तारो वर्तन्ते", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index c885078a73..79ef6f6ef5 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -29,7 +29,6 @@ "account.endorse": "Cussìgia in su profilu tuo", "account.featured_tags.last_status_at": "Ùrtima publicatzione in su {date}", "account.featured_tags.last_status_never": "Peruna publicatzione", - "account.featured_tags.title": "Etichetas de {name} in evidèntzia", "account.follow": "Sighi", "account.follow_back": "Sighi tue puru", "account.followers": "Sighiduras", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 5960fb7760..872a61a8a2 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -25,7 +25,6 @@ "account.endorse": "Shaw oan profile", "account.featured_tags.last_status_at": "Last post oan {date}", "account.featured_tags.last_status_never": "Nae posts", - "account.featured_tags.title": "{name}'s hielichtit hashtags", "account.follow": "Follae", "account.followers": "Follaers", "account.followers.empty": "Naebody follaes this uiser yit.", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index d6aff6b56c..57fc3be484 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -29,7 +29,6 @@ "account.endorse": "Zobraziť na vlastnom profile", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", - "account.featured_tags.title": "Odporúčané hashtagy účtu {name}", "account.follow": "Sledovať", "account.follow_back": "Sledovať späť", "account.followers": "Sledovatelia", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index e6c0b67427..eef20456de 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -29,7 +29,6 @@ "account.endorse": "Izpostavi v profilu", "account.featured_tags.last_status_at": "Zadnja objava {date}", "account.featured_tags.last_status_never": "Ni objav", - "account.featured_tags.title": "Izpostavljeni ključniki osebe {name}", "account.follow": "Sledi", "account.follow_back": "Sledi nazaj", "account.followers": "Sledilci", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index a80b3df80d..bb1668b2ef 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -27,9 +27,11 @@ "account.edit_profile": "Përpunoni profilin", "account.enable_notifications": "Njoftomë, kur poston @{name}", "account.endorse": "Pasqyrojeni në profil", + "account.featured": "Të zgjedhur", + "account.featured.hashtags": "Hashtag-ë", + "account.featured.posts": "Postime", "account.featured_tags.last_status_at": "Postimi i fundit më {date}", "account.featured_tags.last_status_never": "Pa postime", - "account.featured_tags.title": "Hashtagë të zgjedhur të {name}", "account.follow": "Ndiqeni", "account.follow_back": "Ndiqe gjithashtu", "account.followers": "Ndjekës", @@ -289,6 +291,7 @@ "emoji_button.search_results": "Përfundime kërkimi", "emoji_button.symbols": "Simbole", "emoji_button.travel": "Udhëtime & Vende", + "empty_column.account_featured": "Kjo listë është e zbrazët", "empty_column.account_hides_collections": "Ky përdorues ka zgjedhur të mos e japë këtë informacion", "empty_column.account_suspended": "Llogaria u pezullua", "empty_column.account_timeline": "S’ka mesazhe këtu!", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 3d077cbe22..2d00533e0e 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -28,7 +28,6 @@ "account.endorse": "Istakni na profilu", "account.featured_tags.last_status_at": "Poslednja objava {date}", "account.featured_tags.last_status_never": "Nema objava", - "account.featured_tags.title": "Istaknute heš oznake korisnika {name}", "account.follow": "Prati", "account.follow_back": "Uzvrati praćenje", "account.followers": "Pratioci", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index 43c57b3e25..af323bed27 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -28,7 +28,6 @@ "account.endorse": "Истакни на профилу", "account.featured_tags.last_status_at": "Последња објава {date}", "account.featured_tags.last_status_never": "Нема објава", - "account.featured_tags.title": "Истакнуте хеш ознаке корисника {name}", "account.follow": "Прати", "account.follow_back": "Узврати праћење", "account.followers": "Пратиоци", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 1e2e9c585b..c23a645135 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -29,7 +29,6 @@ "account.endorse": "Visa på profil", "account.featured_tags.last_status_at": "Senaste inlägg den {date}", "account.featured_tags.last_status_never": "Inga inlägg", - "account.featured_tags.title": "{name}s utvalda hashtaggar", "account.follow": "Följ", "account.follow_back": "Följ tillbaka", "account.followers": "Följare", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d9e607f856..429d0db428 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -29,7 +29,6 @@ "account.endorse": "แสดงในโปรไฟล์", "account.featured_tags.last_status_at": "โพสต์ล่าสุดเมื่อ {date}", "account.featured_tags.last_status_never": "ไม่มีโพสต์", - "account.featured_tags.title": "แฮชแท็กที่น่าสนใจของ {name}", "account.follow": "ติดตาม", "account.follow_back": "ติดตามกลับ", "account.followers": "ผู้ติดตาม", diff --git a/app/javascript/mastodon/locales/tok.json b/app/javascript/mastodon/locales/tok.json index 59dd34eb5c..08ce6fd324 100644 --- a/app/javascript/mastodon/locales/tok.json +++ b/app/javascript/mastodon/locales/tok.json @@ -29,7 +29,6 @@ "account.endorse": "lipu jan la o suli e ni", "account.featured_tags.last_status_at": "sitelen pini pi jan ni li lon tenpo {date}", "account.featured_tags.last_status_never": "toki ala li lon", - "account.featured_tags.title": "{name} la kulupu ni pi toki suli li pona", "account.follow": "o kute", "account.follow_back": "jan ni li kute e sina. o kute", "account.followers": "jan kute", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index a33317ac9c..fa5a84dd68 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -27,9 +27,11 @@ "account.edit_profile": "Profili düzenle", "account.enable_notifications": "@{name} kişisinin gönderi bildirimlerini aç", "account.endorse": "Profilimde öne çıkar", + "account.featured": "Öne çıkan", + "account.featured.hashtags": "Etiketler", + "account.featured.posts": "Gönderiler", "account.featured_tags.last_status_at": "Son gönderinin tarihi {date}", "account.featured_tags.last_status_never": "Gönderi yok", - "account.featured_tags.title": "{name} kişisinin öne çıkan etiketleri", "account.follow": "Takip et", "account.follow_back": "Geri takip et", "account.followers": "Takipçi", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Arama sonuçları", "emoji_button.symbols": "Semboller", "emoji_button.travel": "Seyahat ve Yerler", + "empty_column.account_featured": "Bu liste boş", "empty_column.account_hides_collections": "Bu kullanıcı bu bilgiyi sağlamayı tercih etmemiştir", "empty_column.account_suspended": "Hesap askıya alındı", "empty_column.account_timeline": "Burada hiç gönderi yok!", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 602d676361..ee50180ced 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -27,7 +27,6 @@ "account.endorse": "Профильдә тәкъдим итү", "account.featured_tags.last_status_at": "Соңгы хәбәр {date}", "account.featured_tags.last_status_never": "Хәбәрләр юк", - "account.featured_tags.title": "{name} тәкъдим ителгән хэштеглар", "account.follow": "Язылу", "account.followers": "Язылучы", "account.followers.empty": "Әле беркем дә язылмаган.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index eb7931f02c..b995713c52 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -27,9 +27,11 @@ "account.edit_profile": "Редагувати профіль", "account.enable_notifications": "Повідомляти мене про дописи @{name}", "account.endorse": "Рекомендувати у моєму профілі", + "account.featured": "Рекомендоване", + "account.featured.hashtags": "Хештеги", + "account.featured.posts": "Дописи", "account.featured_tags.last_status_at": "Останній допис {date}", "account.featured_tags.last_status_never": "Немає дописів", - "account.featured_tags.title": "{name} виділяє хештеґи", "account.follow": "Підписатися", "account.follow_back": "Стежити також", "account.followers": "Підписники", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Результати пошуку", "emoji_button.symbols": "Символи", "emoji_button.travel": "Подорожі та місця", + "empty_column.account_featured": "Список порожній", "empty_column.account_hides_collections": "Цей користувач вирішив не робити цю інформацію доступною", "empty_column.account_suspended": "Обліковий запис заблоковано", "empty_column.account_timeline": "Тут немає дописів!", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index cd50b512b4..e28ad93828 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -22,7 +22,6 @@ "account.endorse": "مشکص پر نمایاں کریں", "account.featured_tags.last_status_at": "آخری پوسٹ {date} کو", "account.featured_tags.last_status_never": "کوئی مراسلہ نہیں", - "account.featured_tags.title": "{name} کے نمایاں ہیش ٹیگز", "account.follow": "پیروی کریں", "account.follow_back": "اکاؤنٹ کو فالو بیک ", "account.followers": "پیروکار", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index e58ab35444..6dd350651d 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -25,7 +25,6 @@ "account.endorse": "Profildagi xususiyat", "account.featured_tags.last_status_at": "Oxirgi post: {date}", "account.featured_tags.last_status_never": "Habarlar yo'q", - "account.featured_tags.title": "{name} ning taniqli hashtaglari", "account.follow": "Obuna bo‘lish", "account.followers": "Obunachilar", "account.followers.empty": "Bu foydalanuvchini hali hech kim kuzatmaydi.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 21a7e5da47..a608b3ed85 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -27,9 +27,11 @@ "account.edit_profile": "Sửa hồ sơ", "account.enable_notifications": "Nhận thông báo khi @{name} đăng tút", "account.endorse": "Tôn vinh người này", + "account.featured": "Nổi bật", + "account.featured.hashtags": "Hashtag", + "account.featured.posts": "Tút", "account.featured_tags.last_status_at": "Tút gần nhất {date}", "account.featured_tags.last_status_never": "Chưa có tút", - "account.featured_tags.title": "Hashtag của {name}", "account.follow": "Theo dõi", "account.follow_back": "Theo dõi lại", "account.followers": "Người theo dõi", @@ -294,6 +296,7 @@ "emoji_button.search_results": "Kết quả tìm kiếm", "emoji_button.symbols": "Biểu tượng", "emoji_button.travel": "Du lịch", + "empty_column.account_featured": "Danh sách trống", "empty_column.account_hides_collections": "Người này đã chọn ẩn thông tin", "empty_column.account_suspended": "Tài khoản vô hiệu hóa", "empty_column.account_timeline": "Chưa có tút nào!", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 050e1308b6..48f12d241a 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -29,7 +29,6 @@ "account.endorse": "在个人资料中推荐此用户", "account.featured_tags.last_status_at": "上次发言于 {date}", "account.featured_tags.last_status_never": "暂无嘟文", - "account.featured_tags.title": "{name} 的精选标签", "account.follow": "关注", "account.follow_back": "回关", "account.followers": "关注者", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index d6ffb2b6bf..493d06b672 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -29,7 +29,6 @@ "account.endorse": "在個人檔案中推薦對方", "account.featured_tags.last_status_at": "上次帖文於 {date}", "account.featured_tags.last_status_never": "暫無文章", - "account.featured_tags.title": "{name} 的精選標籤", "account.follow": "關注", "account.follow_back": "追蹤對方", "account.followers": "追蹤者", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index f2b8665e49..3bb8ed4cbc 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -27,9 +27,11 @@ "account.edit_profile": "編輯個人檔案", "account.enable_notifications": "當 @{name} 嘟文時通知我", "account.endorse": "於個人檔案推薦對方", + "account.featured": "精選內容", + "account.featured.hashtags": "主題標籤", + "account.featured.posts": "嘟文", "account.featured_tags.last_status_at": "上次嘟文於 {date}", "account.featured_tags.last_status_never": "沒有嘟文", - "account.featured_tags.title": "{name} 的推薦主題標籤", "account.follow": "跟隨", "account.follow_back": "跟隨回去", "account.followers": "跟隨者", @@ -294,6 +296,7 @@ "emoji_button.search_results": "搜尋結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅遊與地點", + "empty_column.account_featured": "此列表為空", "empty_column.account_hides_collections": "這位使用者選擇不提供此資訊", "empty_column.account_suspended": "帳號已被停權", "empty_column.account_timeline": "這裡還沒有嘟文!", diff --git a/config/locales/lv.yml b/config/locales/lv.yml index fad8a2609e..2bb5abf2de 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -19,10 +19,10 @@ lv: pin_errors: following: Tev ir jāseko personai, kuru vēlies atbalstīt posts: - one: Ziņa - other: Ziņas - zero: Ziņu - posts_tab_heading: Ziņas + one: Ieraksts + other: Ieraksti + zero: Ierakstu + posts_tab_heading: Ieraksti self_follow_error: Nav ļauts sekot savam kontam admin: account_actions: @@ -120,7 +120,7 @@ lv: public: Publisks push_subscription_expires: PuSH abonements beidzas redownload: Atsvaidzināt profilu - redownloaded_msg: "%{username} profils sekmīgi atsvaidzināts no izcelsmes" + redownloaded_msg: "%{username} profils sekmīgi atsvaidzināts no pirmavota" reject: Noraidīt rejected_msg: "%{username} reģistrēšanās pieteikums sekmīgi noraidīts" remote_suspension_irreversible: Šī konta dati ir neatgriezeniski dzēsti. @@ -152,7 +152,7 @@ lv: targeted_reports: Ziņojuši citi silence: Ierobežot silenced: Ierobežots - statuses: Ziņas + statuses: Ieraksti strikes: Iepriekšējie streiki subscribe: Abonēt suspend: Apturēt @@ -176,7 +176,7 @@ lv: whitelisted: Atļauts federācijai action_logs: action_types: - approve_appeal: Apstiprināt Apelāciju + approve_appeal: Apstiprināt pārsūdzību approve_user: Apstiprināt lietotāju assigned_to_self_report: Piešķirt Pārskatu change_email_user: Mainīt lietotāja e-pasta adresi @@ -218,11 +218,11 @@ lv: memorialize_account: Saglabāt Kontu Piemiņai promote_user: Izceltt Lietotāju publish_terms_of_service: Publicēt pakalpojuma izmantošanas noteikumus - reject_appeal: Noraidīt Apelāciju + reject_appeal: Noraidīt pārsūdzību reject_user: Noraidīt lietotāju remove_avatar_user: Noņemt profila attēlu reopen_report: Atkārtoti Atvērt Ziņojumu - resend_user: Atkārtoti nosūtīt Apstiprinājuma Pastu + resend_user: Atkārtoti nosūtīt apstiprinājuma e-pasta ziņojumu reset_password_user: Atiestatīt Paroli resolve_report: Atrisināt Ziņojumu sensitive_account: Uzspiesti atzimēt kontu kā jūtīgu @@ -241,7 +241,7 @@ lv: update_status: Atjaunināt ziņu update_user_role: Atjaunināt lomu actions: - approve_appeal_html: "%{name} apstiprināja satura pārraudzības lēmuma iebildumu no %{target}" + approve_appeal_html: "%{name} apstiprināja satura pārraudzības lēmuma pārsūdzību no %{target}" approve_user_html: "%{name} apstiprināja reģistrēšanos no %{target}" assigned_to_self_report_html: "%{name} piešķīra pārskatu %{target} sev" change_email_user_html: "%{name} nomainīja lietotāja %{target} e-pasta adresi" @@ -277,7 +277,7 @@ lv: memorialize_account_html: "%{name} pārvērta %{target} kontu par atmiņas lapu" promote_user_html: "%{name} paaugstināja lietotāju %{target}" publish_terms_of_service_html: "%{name} padarīja pieejamus pakalpojuma izmantošanas noteikumu atjauninājumus" - reject_appeal_html: "%{name} noraidīja satura pārraudzības lēmuma iebildumu no %{target}" + reject_appeal_html: "%{name} noraidīja satura pārraudzības lēmuma pārsūdzību no %{target}" reject_user_html: "%{name} noraidīja reģistrēšanos no %{target}" remove_avatar_user_html: "%{name} noņēma %{target} profila attēlu" reopen_report_html: "%{name} atkārtoti atvēra ziņojumu %{target}" @@ -560,7 +560,7 @@ lv: instance_languages_dimension: Populārākās valodas instance_media_attachments_measure: saglabātie multivides pielikumi instance_reports_measure: ziņojumi par viņiem - instance_statuses_measure: saglabātās ziņas + instance_statuses_measure: saglabātie ieraksti delivery: all: Visas clear: Notīrīt piegādes kļūdas @@ -625,7 +625,7 @@ lv: disable: Atspējot disabled: Atspējots enable: Iespējot - enable_hint: Kad tas būs iespējots, tavs serveris abonēs visas publiskās ziņas no šī releja un sāks tam sūtīt šī servera publiskās ziņas. + enable_hint: Tiklīdz iespējots, serveris abonēs visus šī releja publiskos ierakstus un sāks tam sūtīt šī iservera publiskos ierakstus. enabled: Iespējots inbox_url: Releja URL pending: Gaida apstiprinājumu no releja @@ -709,7 +709,7 @@ lv: silence_html: 'Jūs gatavojaties ierobežot @%{acct} kontu. Tas:' suspend_html: 'Jūs gatavojaties apturēt @%{acct} kontu. Tas:' actions: - delete_html: Noņemt aizskarošās ziņas + delete_html: Noņemt aizskarošos ierakstus mark_as_sensitive_html: Atzīmēt aizskarošo ierakstu informācijas nesējus kā jūtīgus silence_html: Ievērojami ierobežo @%{acct} sasniedzamību, padarot viņa profilu un saturu redzamu tikai cilvēkiem, kas jau seko tam vai pašrocīgi uzmeklē profilu suspend_html: Apturēt @%{acct}, padarot viņu profilu un saturu nepieejamu un neiespējamu mijiedarbību ar @@ -720,7 +720,7 @@ lv: record_strike_html: Ierakstiet brīdinājumu pret @%{acct}, lai palīdzētu jums izvērst turpmākus pārkāpumus no šī konta send_email_html: Nosūtīt @%{acct} brīdinājuma e-pasta ziņojumu warning_placeholder: Izvēles papildu pamatojums satura pārraudzības darbībai. - target_origin: Ziņotā konta izcelsme + target_origin: Konta, par kuru ziņots, izcelsme title: Ziņojumi unassign: Atsaukt unknown_action_msg: 'Nezināms konts: %{action}' @@ -882,12 +882,12 @@ lv: title: Multivide metadata: Metadati no_history: Šis ieraksts nav bijis labots - no_status_selected: Neviena ziņa netika mainīta, jo neviena netika atlasīta + no_status_selected: Neviens ieraksts netika mainīts, jo nekas netika atlasīts open: Atvērt ziņu - original_status: Oriģinālā ziņa + original_status: Sākotnējais ieraksts reblogs: Reblogi replied_to_html: Atbildēja %{acct_link} - status_changed: Ziņa mainīta + status_changed: Ieraksts izmainīts status_title: Publicēja @%{name} title: Konta ieraksti - @%{name} trending: Aktuāli @@ -1983,6 +1983,7 @@ lv: action: Konta iestatījumi explanation: Pārsūdzība par brīdinājumu Tavam kontam %{strike_date}, ko iesniedzi %{appeal_date}, ir apstiprināta. Tavs konts atkal ir labā stāvoklī. subject: Tava %{date} iesniegtā pārsūdzība tika apstiprināta + subtitle: Tavs konts atkal ir labā stāvoklī. title: Apelācija apstiprināta appeal_rejected: explanation: Pārsūdzība par brīdinājumu Tavam kontam %{strike_date}, ko iesniedzi %{appeal_date}, tika noraidīta. @@ -2010,6 +2011,7 @@ lv: terms_of_service_changed: agreement: Ar %{domain} izmantošanas tuprināšanu tiek piekrists šiem noteikumiem. Ja ir iebildumi pret atjauninātajiem noteikumiem, savu piekrišanu var atcelt jebkurā laikā ar sava konta izdzēšanu. changelog: 'Šeit īsumā ir aprakstīts, ko šis atjauninājums nozīmē:' + description: 'Šis e-pasta ziņojums tika saņemts, jo mēs veicam dažas izmaiņas savos pakalpojuma izmantošanas noteikumos %{domain}. Šie atjauninājumi stāsies spēkā %{date}. Mēs aicinām pārskatīt pilnus atjauninātos noteikumus šeit:' sign_off: "%{domain} komanda" subject: Mūsu pakalpojuma izmantošanas noteikumu atjauninājumi subtitle: Mainās %{domain} pakalpojuma izmantošanas noteikumi diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 8c06332695..1f01f622f5 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -498,6 +498,7 @@ ru: fasp: providers: sign_in: + status: Пост follow_recommendations: description_html: "Следуйте рекомендациям, чтобы помочь новым пользователям быстро находить интересный контент. Если пользователь не взаимодействовал с другими в достаточной степени, чтобы сформировать персонализированные рекомендации, вместо этого рекомендуется использовать эти учетные записи. Они пересчитываются на ежедневной основе на основе комбинации аккаунтов с наибольшим количеством недавних взаимодействий и наибольшим количеством местных подписчиков для данного языка." language: Для языка diff --git a/config/locales/simple_form.lv.yml b/config/locales/simple_form.lv.yml index 0c362b0a30..287ce36a5d 100644 --- a/config/locales/simple_form.lv.yml +++ b/config/locales/simple_form.lv.yml @@ -25,7 +25,7 @@ lv: type_html: Izvēlies, ko darīt ar %{acct} types: disable: Neļauj lietotājam izmantot savu kontu, bet neizdzēs vai neslēp tā saturu. - none: Izmanto šo, lai nosūtītu lietotājam brīdinājumu, neradot nekādas citas darbības. + none: Šis ir izmantojams, lai nosūtītu lietotājam brīdinājumu bez jebkādu citu darbību izraisīšanas. sensitive: Visus šī lietotāja informācijas nesēju pielikumus uzspiesti atzīmēt kā jūtīgus. silence: Neļaut lietotājam veikt ierakstus ar publisku redzamību, paslēpt viņa ierakstus un paziņojumus no cilvēkiem, kas tam neseko. Tiek aizvērti visi ziņojumi par šo kontu. suspend: Novērs jebkādu mijiedarbību no šī konta vai uz to un dzēs tā saturu. Atgriežams 30 dienu laikā. Tiek aizvērti visi šī konta pārskati. @@ -45,8 +45,8 @@ lv: context: Viens vai vairāki konteksti, kur jāpiemēro filtrs current_password: Drošības nolūkos, lūdzu, ievadi pašreizējā konta paroli current_username: Lai apstiprinātu, lūdzu, ievadi pašreizējā konta paroli - digest: Tiek nosūtīts tikai pēc ilgstošas bezdarbības un tikai tad, ja savas prombūtnes laikā esi saņēmis jebkādas personīgas ziņas - email: Tev tiks nosūtīts apstiprinājuma e-pasts + digest: Tiek nosūtīts tikai pēc ilgstošas bezdarbības un tikai tad, ja savas prombūtnes laikā saņēmi jebkādas personīgas ziņas + email: Tev tiks nosūtīts apstiprinājuma e-pasta ziņojums header: WEBP, PNG, GIF vai JPG. Ne vairāk kā %{size}. Tiks samazināts līdz %{dimensions}px inbox_url: Nokopē URL no tā releja sākumlapas, kuru vēlies izmantot irreversible: Filtrētās ziņas neatgriezeniski pazudīs, pat ja filtrs vēlāk tiks noņemts @@ -125,7 +125,7 @@ lv: hint: Izvēles. Sniedz vairāk informācijas par noteikumu text: Jāapraksta nosacījums vai prasība šī servera lietotājiem. Jāmēģina to veidot īsu un vienkāršu sessions: - otp: 'Jāievada tālruņa lietotnes izveidots divpakāpju kods vai jāizmanto viens no saviem atkopes kodie:' + otp: 'Jāievada tālruņa lietotnes izveidots divpakāpju kods vai jāizmanto viens no saviem atkopes kodiem:' webauthn: Ja tā ir USB atslēga, noteikti ievieto to un, ja nepieciešams, pieskaries tai. settings: indexable: Tava profila lapa var tikt parādīta Google, Bing un citu meklēšanas dzinēju rezultātos. @@ -213,7 +213,7 @@ lv: max_uses: Maksimālais lietojumu skaits new_password: Jauna parole note: Par sevi - otp_attempt: Divfaktoru kods + otp_attempt: Divpakāpju kods password: Parole phrase: Atslēgvārds vai frāze setting_advanced_layout: Iespējot paplašināto tīmekļa saskarni From 23edac59ec33c9a4e6d48c4ebd9f7412cbaef42f Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Apr 2025 11:28:25 +0200 Subject: [PATCH 42/90] Fix dropdown menus not working on mobile (#34428) --- .../mastodon/components/dropdown_menu.tsx | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/app/javascript/mastodon/components/dropdown_menu.tsx b/app/javascript/mastodon/components/dropdown_menu.tsx index a5d2deaae1..fc3e9e1321 100644 --- a/app/javascript/mastodon/components/dropdown_menu.tsx +++ b/app/javascript/mastodon/components/dropdown_menu.tsx @@ -354,6 +354,28 @@ export const Dropdown = ({ dispatch(closeDropdownMenu({ id: currentId })); }, [dispatch, currentId]); + const handleItemClick = useCallback( + (e: React.MouseEvent | React.KeyboardEvent) => { + const i = Number(e.currentTarget.getAttribute('data-index')); + const item = items?.[i]; + + handleClose(); + + if (!item) { + return; + } + + if (typeof onItemClick === 'function') { + e.preventDefault(); + onItemClick(item, i); + } else if (isActionItem(item)) { + e.preventDefault(); + item.action(); + } + }, + [handleClose, onItemClick, items], + ); + const handleClick = useCallback( (e: React.MouseEvent | React.KeyboardEvent) => { const { type } = e; @@ -374,7 +396,7 @@ export const Dropdown = ({ modalProps: { status, actions: items, - onClick: onItemClick, + onClick: handleItemClick, }, }), ); @@ -394,7 +416,7 @@ export const Dropdown = ({ currentId, scrollKey, onOpen, - onItemClick, + handleItemClick, open, status, items, @@ -434,28 +456,6 @@ export const Dropdown = ({ [handleClick], ); - const handleItemClick = useCallback( - (e: React.MouseEvent | React.KeyboardEvent) => { - const i = Number(e.currentTarget.getAttribute('data-index')); - const item = items?.[i]; - - handleClose(); - - if (!item) { - return; - } - - if (typeof onItemClick === 'function') { - e.preventDefault(); - onItemClick(item, i); - } else if (isActionItem(item)) { - e.preventDefault(); - item.action(); - } - }, - [handleClose, onItemClick, items], - ); - useEffect(() => { return () => { if (currentId === openDropdownId) { From 720889cc97e05944abe1b0f83c52722b98a71222 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 11:28:44 +0200 Subject: [PATCH 43/90] fix(deps): update dependency dotenv to v16.5.0 (#34425) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1568040692..5ad52872a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7678,9 +7678,9 @@ __metadata: linkType: hard "dotenv@npm:^16.0.3": - version: 16.4.7 - resolution: "dotenv@npm:16.4.7" - checksum: 10c0/be9f597e36a8daf834452daa1f4cc30e5375a5968f98f46d89b16b983c567398a330580c88395069a77473943c06b877d1ca25b4afafcdd6d4adb549e8293462 + version: 16.5.0 + resolution: "dotenv@npm:16.5.0" + checksum: 10c0/5bc94c919fbd955bf0ba44d33922a1e93d1078e64a1db5c30faeded1d996e7a83c55332cb8ea4fae5a9ca4d0be44cbceb95c5811e70f9f095298df09d1997dd9 languageName: node linkType: hard From 5bf6b826253758778bbda886d3e327698b26809f Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Apr 2025 11:35:36 +0200 Subject: [PATCH 44/90] Fix editing and redrafting polls (#34430) --- app/javascript/mastodon/reducers/compose.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js index 73468c04fe..330dcd93d0 100644 --- a/app/javascript/mastodon/reducers/compose.js +++ b/app/javascript/mastodon/reducers/compose.js @@ -491,9 +491,9 @@ export const composeReducer = (state = initialState, action) => { if (action.status.get('poll')) { map.set('poll', ImmutableMap({ - options: action.status.getIn(['poll', 'options']).map(x => x.get('title')), - multiple: action.status.getIn(['poll', 'multiple']), - expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])), + options: ImmutableList(action.status.get('poll').options.map(x => x.title)), + multiple: action.status.get('poll').multiple, + expires_in: expiresInFromExpiresAt(action.status.get('poll').expires_at), })); } }); @@ -520,9 +520,9 @@ export const composeReducer = (state = initialState, action) => { if (action.status.get('poll')) { map.set('poll', ImmutableMap({ - options: action.status.getIn(['poll', 'options']).map(x => x.get('title')), - multiple: action.status.getIn(['poll', 'multiple']), - expires_in: expiresInFromExpiresAt(action.status.getIn(['poll', 'expires_at'])), + options: ImmutableList(action.status.get('poll').options.map(x => x.title)), + multiple: action.status.get('poll').multiple, + expires_in: expiresInFromExpiresAt(action.status.get('poll').expires_at), })); } }); From eb695e6b1770d467efed10cc73d5284b46ea9475 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 11:43:58 +0200 Subject: [PATCH 45/90] chore(deps): update dependency dotenv to v3.1.8 (#34417) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 86cfaa3132..1ed4b71318 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -201,7 +201,7 @@ GEM domain_name (0.6.20240107) doorkeeper (5.8.2) railties (>= 5) - dotenv (3.1.7) + dotenv (3.1.8) drb (2.2.1) elasticsearch (7.17.11) elasticsearch-api (= 7.17.11) From 00cd218741775af5bb068d4bf61da8ae8853c209 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Apr 2025 11:52:23 +0200 Subject: [PATCH 46/90] Add paragraph to tell admins that email announcements cannot be opted out (#34411) --- app/views/admin/announcements/previews/show.html.haml | 2 ++ config/locales/en.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/app/views/admin/announcements/previews/show.html.haml b/app/views/admin/announcements/previews/show.html.haml index fdfbf598b5..54d5d45ed6 100644 --- a/app/views/admin/announcements/previews/show.html.haml +++ b/app/views/admin/announcements/previews/show.html.haml @@ -7,6 +7,8 @@ = material_symbol 'chevron_left' = t('admin.announcements.back') +.flash-message.info= t('admin.announcements.preview.disclaimer') + %p.lead = t('admin.announcements.preview.explanation_html', count: @user_count, display_count: number_with_delimiter(@user_count)) diff --git a/config/locales/en.yml b/config/locales/en.yml index 4c5e1466f7..f0e1f86c4e 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -319,6 +319,7 @@ en: create: Create announcement title: New announcement preview: + disclaimer: As users cannot opt out of them, email notifications should be limited to important announcements such as personal data breach or server closure notifications. explanation_html: 'The email will be sent to %{display_count} users. The following text will be included in the e-mail:' title: Preview announcement notification publish: Publish From a296facdea884cc828999c9f9be0f4bc83afe68d Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 11 Apr 2025 12:47:05 +0200 Subject: [PATCH 47/90] Fix empty menu section in status dropdown (#34431) --- app/javascript/mastodon/components/status_action_bar.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/javascript/mastodon/components/status_action_bar.jsx b/app/javascript/mastodon/components/status_action_bar.jsx index 344524f8be..25116d19b0 100644 --- a/app/javascript/mastodon/components/status_action_bar.jsx +++ b/app/javascript/mastodon/components/status_action_bar.jsx @@ -274,10 +274,9 @@ class StatusActionBar extends ImmutablePureComponent { if (writtenByMe && pinnableStatus) { menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick }); + menu.push(null); } - menu.push(null); - if (writtenByMe || withDismiss) { menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick }); menu.push(null); From a9cfaa6eed31c3d73094f585f9ab7fac9f3a28a8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 11 Apr 2025 12:50:46 +0200 Subject: [PATCH 48/90] Add dropdown menu to hashtag links in web UI (#34393) --- .../mastodon/components/dropdown_menu.tsx | 51 ++++-- .../components/edited_timestamp/index.tsx | 4 +- .../mastodon/components/hashtag_bar.tsx | 17 +- .../mastodon/components/status_content.jsx | 1 + .../ui/components/hashtag_menu_controller.tsx | 157 ++++++++++++++++++ app/javascript/mastodon/features/ui/index.jsx | 2 + app/javascript/mastodon/locales/en.json | 3 + 7 files changed, 213 insertions(+), 22 deletions(-) create mode 100644 app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx diff --git a/app/javascript/mastodon/components/dropdown_menu.tsx b/app/javascript/mastodon/components/dropdown_menu.tsx index fc3e9e1321..886d517fa9 100644 --- a/app/javascript/mastodon/components/dropdown_menu.tsx +++ b/app/javascript/mastodon/components/dropdown_menu.tsx @@ -71,6 +71,8 @@ type RenderItemFn = ( }, ) => React.ReactNode; +type ItemClickFn = (item: Item, index: number) => void; + type RenderHeaderFn = (items: Item[]) => React.ReactNode; interface DropdownMenuProps { @@ -81,10 +83,10 @@ interface DropdownMenuProps { openedViaKeyboard: boolean; renderItem?: RenderItemFn; renderHeader?: RenderHeaderFn; - onItemClick: (e: React.MouseEvent | React.KeyboardEvent) => void; + onItemClick?: ItemClickFn; } -const DropdownMenu = ({ +export const DropdownMenu = ({ items, loading, scrollable, @@ -176,20 +178,35 @@ const DropdownMenu = ({ [], ); + const handleItemClick = useCallback( + (e: React.MouseEvent | React.KeyboardEvent) => { + const i = Number(e.currentTarget.getAttribute('data-index')); + const item = items?.[i]; + + onClose(); + + if (!item) { + return; + } + + if (typeof onItemClick === 'function') { + e.preventDefault(); + onItemClick(item, i); + } else if (isActionItem(item)) { + e.preventDefault(); + item.action(); + } + }, + [onClose, onItemClick, items], + ); + const handleItemKeyUp = useCallback( (e: React.KeyboardEvent) => { if (e.key === 'Enter' || e.key === ' ') { - onItemClick(e); + handleItemClick(e); } }, - [onItemClick], - ); - - const handleClick = useCallback( - (e: React.MouseEvent | React.KeyboardEvent) => { - onItemClick(e); - }, - [onItemClick], + [handleItemClick], ); const nativeRenderItem = (option: Item, i: number) => { @@ -209,7 +226,7 @@ const DropdownMenu = ({ element = (
    diff --git a/app/javascript/mastodon/components/edited_timestamp/index.tsx b/app/javascript/mastodon/components/edited_timestamp/index.tsx index 770cf33f8c..4a33210199 100644 --- a/app/javascript/mastodon/components/edited_timestamp/index.tsx +++ b/app/javascript/mastodon/components/edited_timestamp/index.tsx @@ -36,11 +36,11 @@ export const EditedTimestamp: React.FC<{ }, [dispatch, statusId]); const handleItemClick = useCallback( - (_item: HistoryItem, i: number) => { + (_item: HistoryItem, index: number) => { dispatch( openModal({ modalType: 'COMPARE_HISTORY', - modalProps: { index: i, statusId }, + modalProps: { index, statusId }, }), ); }, diff --git a/app/javascript/mastodon/components/hashtag_bar.tsx b/app/javascript/mastodon/components/hashtag_bar.tsx index 1642ba6504..4f88385bef 100644 --- a/app/javascript/mastodon/components/hashtag_bar.tsx +++ b/app/javascript/mastodon/components/hashtag_bar.tsx @@ -20,6 +20,7 @@ export type StatusLike = Record<{ contentHTML: string; media_attachments: List; spoiler_text?: string; + account: Record<{ id: string }>; }>; function normalizeHashtag(hashtag: string) { @@ -195,13 +196,19 @@ export function getHashtagBarForStatus(status: StatusLike) { return { statusContentProps, - hashtagBar: , + hashtagBar: ( + + ), }; } const HashtagBar: React.FC<{ hashtags: string[]; -}> = ({ hashtags }) => { + accountId: string; +}> = ({ hashtags, accountId }) => { const [expanded, setExpanded] = useState(false); const handleClick = useCallback(() => { setExpanded(true); @@ -218,7 +225,11 @@ const HashtagBar: React.FC<{ return (
    {revealedHashtags.map((hashtag) => ( - + #{hashtag} ))} diff --git a/app/javascript/mastodon/components/status_content.jsx b/app/javascript/mastodon/components/status_content.jsx index cc20888799..275fea5f0e 100644 --- a/app/javascript/mastodon/components/status_content.jsx +++ b/app/javascript/mastodon/components/status_content.jsx @@ -115,6 +115,7 @@ class StatusContent extends PureComponent { } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) { link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false); link.setAttribute('href', `/tags/${link.text.replace(/^#/, '')}`); + link.setAttribute('data-menu-hashtag', this.props.status.getIn(['account', 'id'])); } else { link.setAttribute('title', link.href); link.classList.add('unhandled-link'); diff --git a/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx b/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx new file mode 100644 index 0000000000..6707b24672 --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/hashtag_menu_controller.tsx @@ -0,0 +1,157 @@ +import { useEffect, useRef, useState, useCallback, useMemo } from 'react'; + +import { useIntl, defineMessages } from 'react-intl'; + +import { useLocation } from 'react-router-dom'; + +import Overlay from 'react-overlays/Overlay'; +import type { + OffsetValue, + UsePopperOptions, +} from 'react-overlays/esm/usePopper'; + +import { DropdownMenu } from 'mastodon/components/dropdown_menu'; +import { useAppSelector } from 'mastodon/store'; + +const messages = defineMessages({ + browseHashtag: { + id: 'hashtag.browse', + defaultMessage: 'Browse posts in #{hashtag}', + }, + browseHashtagFromAccount: { + id: 'hashtag.browse_from_account', + defaultMessage: 'Browse posts from @{name} in #{hashtag}', + }, + muteHashtag: { id: 'hashtag.mute', defaultMessage: 'Mute #{hashtag}' }, +}); + +const offset = [5, 5] as OffsetValue; +const popperConfig = { strategy: 'fixed' } as UsePopperOptions; + +const isHashtagLink = ( + element: HTMLAnchorElement | null, +): element is HTMLAnchorElement => { + if (!element) { + return false; + } + + return element.matches('[data-menu-hashtag]'); +}; + +interface TargetParams { + hashtag?: string; + accountId?: string; +} + +export const HashtagMenuController: React.FC = () => { + const intl = useIntl(); + const [open, setOpen] = useState(false); + const [{ accountId, hashtag }, setTargetParams] = useState({}); + const targetRef = useRef(null); + const location = useLocation(); + const account = useAppSelector((state) => + accountId ? state.accounts.get(accountId) : undefined, + ); + + useEffect(() => { + setOpen(false); + targetRef.current = null; + }, [setOpen, location]); + + useEffect(() => { + const handleClick = (e: MouseEvent) => { + const target = (e.target as HTMLElement).closest('a'); + + if (e.button !== 0 || e.ctrlKey || e.metaKey) { + return; + } + + if (!isHashtagLink(target)) { + return; + } + + const hashtag = target.text.replace(/^#/, ''); + const accountId = target.getAttribute('data-menu-hashtag'); + + if (!hashtag || !accountId) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + targetRef.current = target; + setOpen(true); + setTargetParams({ hashtag, accountId }); + }; + + document.addEventListener('click', handleClick, { capture: true }); + + return () => { + document.removeEventListener('click', handleClick); + }; + }, [setTargetParams, setOpen]); + + const handleClose = useCallback(() => { + setOpen(false); + targetRef.current = null; + }, [setOpen]); + + const menu = useMemo( + () => [ + { + text: intl.formatMessage(messages.browseHashtag, { + hashtag, + }), + to: `/tags/${hashtag}`, + }, + { + text: intl.formatMessage(messages.browseHashtagFromAccount, { + hashtag, + name: account?.username, + }), + to: `/@${account?.acct}/tagged/${hashtag}`, + }, + null, + { + text: intl.formatMessage(messages.muteHashtag, { + hashtag, + }), + href: '/filters', + dangerous: true, + }, + ], + [intl, hashtag, account], + ); + + if (!open) { + return null; + } + + return ( + + {({ props, arrowProps, placement }) => ( +
    +
    +
    + + +
    +
    + )} + + ); +}; diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index bb9720c17f..7c4f45721d 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -31,6 +31,7 @@ import initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding import BundleColumnError from './components/bundle_column_error'; import Header from './components/header'; import { UploadArea } from './components/upload_area'; +import { HashtagMenuController } from './components/hashtag_menu_controller'; import ColumnsAreaContainer from './containers/columns_area_container'; import LoadingBarContainer from './containers/loading_bar_container'; import ModalContainer from './containers/modal_container'; @@ -611,6 +612,7 @@ class UI extends PureComponent { {layout !== 'mobile' && } {!disableHoverCards && } + diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 0a0f043b4d..65a82feac6 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -381,6 +381,8 @@ "generic.saved": "Saved", "getting_started.heading": "Getting started", "hashtag.admin_moderation": "Open moderation interface for #{name}", + "hashtag.browse": "Browse posts in #{hashtag}", + "hashtag.browse_from_account": "Browse posts from @{name} in #{hashtag}", "hashtag.column_header.tag_mode.all": "and {additional}", "hashtag.column_header.tag_mode.any": "or {additional}", "hashtag.column_header.tag_mode.none": "without {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} post} other {{counter} posts}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} post} other {{counter} posts}} today", "hashtag.follow": "Follow hashtag", + "hashtag.mute": "Mute #{hashtag}", "hashtag.unfollow": "Unfollow hashtag", "hashtags.and_other": "…and {count, plural, other {# more}}", "hints.profiles.followers_may_be_missing": "Followers for this profile may be missing.", From ebc6c9d6fb34cb873cb4e571b652b1ced9d0e260 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 14 Apr 2025 13:40:53 +0900 Subject: [PATCH 49/90] Fix test --- app/lib/status_cache_hydrator.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/lib/status_cache_hydrator.rb b/app/lib/status_cache_hydrator.rb index 08219163c7..56ffd2a28c 100644 --- a/app/lib/status_cache_hydrator.rb +++ b/app/lib/status_cache_hydrator.rb @@ -26,9 +26,9 @@ class StatusCacheHydrator private - def hydrate_non_reblog_payload(empty_payload, account_id, _account) + def hydrate_non_reblog_payload(empty_payload, account_id, account) empty_payload.tap do |payload| - fill_status_payload(payload, @status, account_id) + fill_status_payload(payload, @status, account_id, account) if payload[:poll] payload[:poll][:voted] = @status.account_id == account_id @@ -37,7 +37,7 @@ class StatusCacheHydrator end end - def hydrate_reblog_payload(empty_payload, account_id, _account) + def hydrate_reblog_payload(empty_payload, account_id, account) empty_payload.tap do |payload| payload[:muted] = false payload[:bookmarked] = false @@ -47,7 +47,7 @@ class StatusCacheHydrator # used to create the status, we need to hydrate it here too payload[:reblog][:application] = payload_reblog_application if payload[:reblog][:application].nil? && @status.reblog.account_id == account_id - fill_status_payload(payload[:reblog], @status.reblog, account_id) + fill_status_payload(payload[:reblog], @status.reblog, account_id, account) if payload[:reblog][:poll] if @status.reblog.account_id == account_id @@ -66,7 +66,7 @@ class StatusCacheHydrator end end - def fill_status_payload(payload, status, account_id) + def fill_status_payload(payload, status, account_id, account) payload[:favourited] = Favourite.exists?(account_id: account_id, status_id: status.id) payload[:reblogged] = Status.exists?(account_id: account_id, reblog_of_id: status.id) payload[:muted] = ConversationMute.exists?(account_id: account_id, conversation_id: status.conversation_id) From e991a3c757f7e27d1d03ec1159c3f5eed5eb39ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:52:39 +0200 Subject: [PATCH 50/90] fix(deps): update dependency jsdom to v26.1.0 (#34446) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5ad52872a3..7a505f8f1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7274,10 +7274,10 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3": - version: 10.4.3 - resolution: "decimal.js@npm:10.4.3" - checksum: 10c0/6d60206689ff0911f0ce968d40f163304a6c1bc739927758e6efc7921cfa630130388966f16bf6ef6b838cb33679fbe8e7a78a2f3c478afce841fd55ac8fb8ee +"decimal.js@npm:^10.4.2, decimal.js@npm:^10.4.3, decimal.js@npm:^10.5.0": + version: 10.5.0 + resolution: "decimal.js@npm:10.5.0" + checksum: 10c0/785c35279df32762143914668df35948920b6c1c259b933e0519a69b7003fc0a5ed2a766b1e1dda02574450c566b21738a45f15e274b47c2ac02072c0d1f3ac3 languageName: node linkType: hard @@ -8996,7 +8996,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0, form-data@npm:^4.0.1": +"form-data@npm:^4.0.0": version: 4.0.1 resolution: "form-data@npm:4.0.1" dependencies: @@ -11373,13 +11373,12 @@ __metadata: linkType: hard "jsdom@npm:^26.0.0": - version: 26.0.0 - resolution: "jsdom@npm:26.0.0" + version: 26.1.0 + resolution: "jsdom@npm:26.1.0" dependencies: cssstyle: "npm:^4.2.1" data-urls: "npm:^5.0.0" - decimal.js: "npm:^10.4.3" - form-data: "npm:^4.0.1" + decimal.js: "npm:^10.5.0" html-encoding-sniffer: "npm:^4.0.0" http-proxy-agent: "npm:^7.0.2" https-proxy-agent: "npm:^7.0.6" @@ -11389,12 +11388,12 @@ __metadata: rrweb-cssom: "npm:^0.8.0" saxes: "npm:^6.0.0" symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^5.0.0" + tough-cookie: "npm:^5.1.1" w3c-xmlserializer: "npm:^5.0.0" webidl-conversions: "npm:^7.0.0" whatwg-encoding: "npm:^3.1.1" whatwg-mimetype: "npm:^4.0.0" - whatwg-url: "npm:^14.1.0" + whatwg-url: "npm:^14.1.1" ws: "npm:^8.18.0" xml-name-validator: "npm:^5.0.0" peerDependencies: @@ -11402,7 +11401,7 @@ __metadata: peerDependenciesMeta: canvas: optional: true - checksum: 10c0/e48725ba4027edcfc9bca5799eaec72c6561ecffe3675a8ff87fe9c3541ca4ff9f82b4eff5b3d9c527302da0d859b2f60e9364347a5d42b77f5c76c436c569dc + checksum: 10c0/5b14a5bc32ce077a06fb42d1ab95b1191afa5cbbce8859e3b96831c5143becbbcbf0511d4d4934e922d2901443ced2cdc3b734c1cf30b5f73b3e067ce457d0f4 languageName: node linkType: hard @@ -17446,12 +17445,12 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^5.0.0": - version: 5.0.0 - resolution: "tough-cookie@npm:5.0.0" +"tough-cookie@npm:^5.1.1": + version: 5.1.2 + resolution: "tough-cookie@npm:5.1.2" dependencies: tldts: "npm:^6.1.32" - checksum: 10c0/4a69c885bf6f45c5a64e60262af99e8c0d58a33bd3d0ce5da62121eeb9c00996d0128a72df8fc4614cbde59cc8b70aa3e21e4c3c98c2bbde137d7aba7fa00124 + checksum: 10c0/5f95023a47de0f30a902bba951664b359725597d8adeabc66a0b93a931c3af801e1e697dae4b8c21a012056c0ea88bd2bf4dfe66b2adcf8e2f42cd9796fe0626 languageName: node linkType: hard @@ -17480,12 +17479,12 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^5.0.0": - version: 5.0.0 - resolution: "tr46@npm:5.0.0" +"tr46@npm:^5.1.0": + version: 5.1.0 + resolution: "tr46@npm:5.1.0" dependencies: punycode: "npm:^2.3.1" - checksum: 10c0/1521b6e7bbc8adc825c4561480f9fe48eb2276c81335eed9fa610aa4c44a48a3221f78b10e5f18b875769eb3413e30efbf209ed556a17a42aa8d690df44b7bee + checksum: 10c0/d761f7144e0cb296187674ef245c74f761e334d7cf25ca73ef60e4c72c097c75051031c093fa1a2fee04b904977b316716a7915854bcae8fb1a371746513cbe8 languageName: node linkType: hard @@ -18520,13 +18519,13 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.0": - version: 14.1.0 - resolution: "whatwg-url@npm:14.1.0" +"whatwg-url@npm:^14.0.0, whatwg-url@npm:^14.1.1": + version: 14.2.0 + resolution: "whatwg-url@npm:14.2.0" dependencies: - tr46: "npm:^5.0.0" + tr46: "npm:^5.1.0" webidl-conversions: "npm:^7.0.0" - checksum: 10c0/f00104f1c67ce086ba8ffedab529cbbd9aefd8c0a6555320026de7aeff31f91c38680f95818b140a7c9cc657cde3781e567835dda552ddb1e2b8faaba0ac3cb6 + checksum: 10c0/f746fc2f4c906607d09537de1227b13f9494c171141e5427ed7d2c0dd0b6a48b43d8e71abaae57d368d0c06b673fd8ec63550b32ad5ed64990c7b0266c2b4272 languageName: node linkType: hard From 0f26ab9eee28dd034f10031a2400419cf2f61a29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:52:43 +0200 Subject: [PATCH 51/90] chore(deps): update dependency csv to v3.3.4 (#34445) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 1ed4b71318..f12647a403 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -170,7 +170,7 @@ GEM crass (1.0.6) css_parser (1.21.1) addressable - csv (3.3.3) + csv (3.3.4) database_cleaner-active_record (2.2.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) From 20f4b7638949c9d953cb99f7807cce348cad3dbb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:07:34 +0200 Subject: [PATCH 52/90] fix(deps): update dependency ioredis to v5.6.1 (#34442) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7a505f8f1f..a0cb7eb717 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10092,8 +10092,8 @@ __metadata: linkType: hard "ioredis@npm:^5.3.2": - version: 5.6.0 - resolution: "ioredis@npm:5.6.0" + version: 5.6.1 + resolution: "ioredis@npm:5.6.1" dependencies: "@ioredis/commands": "npm:^1.1.1" cluster-key-slot: "npm:^1.1.0" @@ -10104,7 +10104,7 @@ __metadata: redis-errors: "npm:^1.2.0" redis-parser: "npm:^3.0.0" standard-as-callback: "npm:^2.1.0" - checksum: 10c0/a885e5146640fc448706871290ef424ffa39af561f7ee3cf1590085209a509f85e99082bdaaf3cd32fa66758aea3fc2055d1109648ddca96fac4944bf2092c30 + checksum: 10c0/26ae49cf448e807e454a9bdea5a9dfdcf669e2fdbf2df341900a0fb693c5662fea7e39db3227ce8972d1bda0ba7da9b7410e5163b12d8878a579548d847220ac languageName: node linkType: hard From 3d2f47498e9a09140f9e73b5196aac1ab1d7b905 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:10:20 +0200 Subject: [PATCH 53/90] fix(deps): update dependency marky to v1.3.0 (#34449) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a0cb7eb717..79ffcc5b9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12000,9 +12000,9 @@ __metadata: linkType: hard "marky@npm:^1.2.5": - version: 1.2.5 - resolution: "marky@npm:1.2.5" - checksum: 10c0/ca8a011f287dab1ac3291df720fc32b366c4cd767347b63722966650405ce71ec6566f71d1e22e1768bf6461a7fd689b9038e7df0fcfb62eacf3a5a6dcac249e + version: 1.3.0 + resolution: "marky@npm:1.3.0" + checksum: 10c0/6619cdb132fdc4f7cd3e2bed6eebf81a38e50ff4b426bbfb354db68731e4adfebf35ebfd7c8e5a6e846cbf9b872588c4f76db25782caee8c1529ec9d483bf98b languageName: node linkType: hard From 6d94c9f4e70008fcff09072985a3c058f362251f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:17:58 +0200 Subject: [PATCH 54/90] New Crowdin Translations (automated) (#34437) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/bg.json | 7 ++ app/javascript/mastodon/locales/ca.json | 5 + app/javascript/mastodon/locales/cs.json | 7 ++ app/javascript/mastodon/locales/da.json | 3 + app/javascript/mastodon/locales/de.json | 3 + app/javascript/mastodon/locales/es-AR.json | 3 + app/javascript/mastodon/locales/es-MX.json | 3 + app/javascript/mastodon/locales/es.json | 3 + app/javascript/mastodon/locales/fi.json | 3 + app/javascript/mastodon/locales/fo.json | 3 + app/javascript/mastodon/locales/fr-CA.json | 11 ++- app/javascript/mastodon/locales/fr.json | 11 ++- app/javascript/mastodon/locales/gl.json | 3 + app/javascript/mastodon/locales/he.json | 7 ++ app/javascript/mastodon/locales/hu.json | 3 + app/javascript/mastodon/locales/is.json | 3 + app/javascript/mastodon/locales/kab.json | 8 +- app/javascript/mastodon/locales/ko.json | 8 ++ app/javascript/mastodon/locales/ms.json | 102 ++++++++++++++------- app/javascript/mastodon/locales/nan.json | 69 ++++++++++++++ app/javascript/mastodon/locales/nl.json | 3 + app/javascript/mastodon/locales/ru.json | 2 + app/javascript/mastodon/locales/sk.json | 4 + app/javascript/mastodon/locales/sq.json | 3 + app/javascript/mastodon/locales/tr.json | 3 + app/javascript/mastodon/locales/uk.json | 1 + app/javascript/mastodon/locales/vi.json | 3 + app/javascript/mastodon/locales/zh-CN.json | 14 ++- app/javascript/mastodon/locales/zh-TW.json | 3 + config/locales/cs.yml | 1 + config/locales/da.yml | 1 + config/locales/de.yml | 2 + config/locales/doorkeeper.ms.yml | 10 +- config/locales/es-AR.yml | 1 + config/locales/es-MX.yml | 1 + config/locales/es.yml | 3 +- config/locales/fi.yml | 1 + config/locales/fo.yml | 1 + config/locales/fr-CA.yml | 9 ++ config/locales/fr.yml | 9 ++ config/locales/gl.yml | 1 + config/locales/he.yml | 1 + config/locales/hu.yml | 1 + config/locales/is.yml | 1 + config/locales/ms.yml | 14 ++- config/locales/nl.yml | 1 + config/locales/sq.yml | 1 + config/locales/tr.yml | 1 + config/locales/uk.yml | 1 + config/locales/vi.yml | 1 + config/locales/zh-CN.yml | 25 +++++ config/locales/zh-TW.yml | 1 + 52 files changed, 341 insertions(+), 48 deletions(-) diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 5c032755ff..2e4c8593d4 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -27,6 +27,9 @@ "account.edit_profile": "Редактиране на профила", "account.enable_notifications": "Известяване при публикуване от @{name}", "account.endorse": "Представи в профила", + "account.featured": "Препоръчано", + "account.featured.hashtags": "Хаштагове", + "account.featured.posts": "Публикации", "account.featured_tags.last_status_at": "Последна публикация на {date}", "account.featured_tags.last_status_never": "Няма публикации", "account.follow": "Последване", @@ -293,6 +296,7 @@ "emoji_button.search_results": "Резултати от търсене", "emoji_button.symbols": "Символи", "emoji_button.travel": "Пътуване и места", + "empty_column.account_featured": "Списъкът е празен", "empty_column.account_hides_collections": "Този потребител е избрал да не дава тази информация", "empty_column.account_suspended": "Спрян акаунт", "empty_column.account_timeline": "Тук няма публикации!", @@ -377,6 +381,8 @@ "generic.saved": "Запазено", "getting_started.heading": "Първи стъпки", "hashtag.admin_moderation": "Отваряне на модериращия интерфейс за #{name}", + "hashtag.browse": "Разглеждане на публикации в #{hashtag}", + "hashtag.browse_from_account": "Разглеждане на публикации от @{name} из #{hashtag}", "hashtag.column_header.tag_mode.all": "и {additional}", "hashtag.column_header.tag_mode.any": "или {additional}", "hashtag.column_header.tag_mode.none": "без {additional}", @@ -390,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} публикация} other {{counter} публикации}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} публикация} other {{counter} публикации}} днес", "hashtag.follow": "Следване на хаштаг", + "hashtag.mute": "Заглушаване на #{hashtag}", "hashtag.unfollow": "Спиране на следване на хаштаг", "hashtags.and_other": "…и {count, plural, other {# още}}", "hints.profiles.followers_may_be_missing": "Последователи за този профил може да липсват.", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index d6ebbbc1d8..60e3066d0e 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -27,6 +27,9 @@ "account.edit_profile": "Edita el perfil", "account.enable_notifications": "Notifica'm els tuts de @{name}", "account.endorse": "Recomana en el perfil", + "account.featured": "Destacat", + "account.featured.hashtags": "Etiquetes", + "account.featured.posts": "Publicacions", "account.featured_tags.last_status_at": "Darrer tut el {date}", "account.featured_tags.last_status_never": "No hi ha tuts", "account.follow": "Segueix", @@ -293,6 +296,7 @@ "emoji_button.search_results": "Resultats de la cerca", "emoji_button.symbols": "Símbols", "emoji_button.travel": "Viatges i llocs", + "empty_column.account_featured": "Aquesta llista està buida", "empty_column.account_hides_collections": "Aquest usuari ha decidit no mostrar aquesta informació", "empty_column.account_suspended": "Compte suspès", "empty_column.account_timeline": "No hi ha tuts aquí!", @@ -390,6 +394,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} tut} other {{counter} tuts}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} tut} other {{counter} tuts}} avui", "hashtag.follow": "Segueix l'etiqueta", + "hashtag.mute": "Silencia #{hashtag}", "hashtag.unfollow": "Deixa de seguir l'etiqueta", "hashtags.and_other": "…i {count, plural, other {# més}}", "hints.profiles.followers_may_be_missing": "Es poden haver perdut seguidors d'aquest perfil.", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 25657f9cbf..0d8653d412 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -27,6 +27,9 @@ "account.edit_profile": "Upravit profil", "account.enable_notifications": "Oznamovat mi příspěvky @{name}", "account.endorse": "Zvýraznit na profilu", + "account.featured": "Doporučené", + "account.featured.hashtags": "Hashtagy", + "account.featured.posts": "Příspěvky", "account.featured_tags.last_status_at": "Poslední příspěvek {date}", "account.featured_tags.last_status_never": "Žádné příspěvky", "account.follow": "Sledovat", @@ -293,6 +296,7 @@ "emoji_button.search_results": "Výsledky hledání", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestování a místa", + "empty_column.account_featured": "Tento seznam je prázdný", "empty_column.account_hides_collections": "Tento uživatel se rozhodl tuto informaci nezveřejňovat", "empty_column.account_suspended": "Účet je pozastaven", "empty_column.account_timeline": "Nejsou tu žádné příspěvky!", @@ -377,6 +381,8 @@ "generic.saved": "Uloženo", "getting_started.heading": "Začínáme", "hashtag.admin_moderation": "Otevřít moderátorské rozhraní pro #{name}", + "hashtag.browse": "Procházet příspěvky na #{hashtag}", + "hashtag.browse_from_account": "Procházet příspěvky od @{name} v #{hashtag}", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "nebo {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -390,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}", "hashtag.counter_by_uses_today": "Dnes {count, plural, one {{counter} příspěvek} few {{counter} příspěvky} other {{counter} příspěvků}}", "hashtag.follow": "Sledovat hashtag", + "hashtag.mute": "Skrýt #{hashtag}", "hashtag.unfollow": "Přestat sledovat hashtag", "hashtags.and_other": "…a {count, plural, one {# další} few {# další} other {# dalších}}", "hints.profiles.followers_may_be_missing": "Sledující mohou pro tento profil chybět.", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index b72e40eaf7..e1d8e7aec2 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -381,6 +381,8 @@ "generic.saved": "Gemt", "getting_started.heading": "Startmenu", "hashtag.admin_moderation": "Åbn modereringsbrugerflade for #{name}", + "hashtag.browse": "Gennemse indlæg i #{hashtag}", + "hashtag.browse_from_account": "Gennemse indlæg fra @{name} i #{hashtag}", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag", "hashtag.follow": "Følg etiket", + "hashtag.mute": "Tavsgør #{hashtag}", "hashtag.unfollow": "Stop med at følge etiket", "hashtags.and_other": "…og {count, plural, one {}other {# flere}}", "hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 943c5ae8b2..0d5f2f2104 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -381,6 +381,8 @@ "generic.saved": "Gespeichert", "getting_started.heading": "Auf gehts!", "hashtag.admin_moderation": "#{name} moderieren", + "hashtag.browse": "Beiträge mit #{hashtag} suchen", + "hashtag.browse_from_account": "Beiträge von @{name} mit #{hashtag} suchen", "hashtag.column_header.tag_mode.all": "und {additional}", "hashtag.column_header.tag_mode.any": "oder {additional}", "hashtag.column_header.tag_mode.none": "ohne {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} Beitrag} other {{counter} Beiträge}} heute", "hashtag.follow": "Hashtag folgen", + "hashtag.mute": "#{hashtag} stummschalten", "hashtag.unfollow": "Hashtag entfolgen", "hashtags.and_other": "… und {count, plural, one{# weiterer} other {# weitere}}", "hints.profiles.followers_may_be_missing": "Möglicherweise werden für dieses Profil nicht alle Follower angezeigt.", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index cc694ebfe7..bf6d620474 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -381,6 +381,8 @@ "generic.saved": "Guardado", "getting_started.heading": "Inicio de Mastodon", "hashtag.admin_moderation": "Abrir interface de moderación para #{name}", + "hashtag.browse": "Ver publicaciones con #{hashtag}", + "hashtag.browse_from_account": "Ver publicaciones de @{name} con #{hashtag}", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} mensaje} other {{counter} mensajes}} hoy", "hashtag.follow": "Seguir etiqueta", + "hashtag.mute": "Silenciar #{hashtag}", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", "hints.profiles.followers_may_be_missing": "Es posible que falten seguidores de este perfil.", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 45b002ce0f..69e20fc016 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -381,6 +381,8 @@ "generic.saved": "Guardado", "getting_started.heading": "Primeros pasos", "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}", + "hashtag.browse": "Explorar publicaciones en #{hashtag}", + "hashtag.browse_from_account": "Explorar publicaciones desde @{name} en #{hashtag}", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy", "hashtag.follow": "Seguir etiqueta", + "hashtag.mute": "Silenciar #{hashtag}", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", "hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index 2575d901f5..4f9d91ce11 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -381,6 +381,8 @@ "generic.saved": "Guardado", "getting_started.heading": "Primeros pasos", "hashtag.admin_moderation": "Abrir interfaz de moderación para #{name}", + "hashtag.browse": "Explorar publicaciones en #{hashtag}", + "hashtag.browse_from_account": "Explorar publicaciones desde @{name} en #{hashtag}", "hashtag.column_header.tag_mode.all": "y {additional}", "hashtag.column_header.tag_mode.any": "o {additional}", "hashtag.column_header.tag_mode.none": "sin {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicaciones}} hoy", "hashtag.follow": "Seguir etiqueta", + "hashtag.mute": "Silenciar #{hashtag}", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", "hints.profiles.followers_may_be_missing": "Puede que no se muestren todos los seguidores de este perfil.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index b33e9f6163..cc42780f94 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -380,6 +380,8 @@ "generic.saved": "Tallennettu", "getting_started.heading": "Näin pääset alkuun", "hashtag.admin_moderation": "Avaa tunnisteen #{name} moderointinäkymä", + "hashtag.browse": "Selaa julkaisuja tunnisteella #{hashtag}", + "hashtag.browse_from_account": "Selaa julkaisuja käyttäjältä @{name} tunnisteella #{hashtag}", "hashtag.column_header.tag_mode.all": "ja {additional}", "hashtag.column_header.tag_mode.any": "tai {additional}", "hashtag.column_header.tag_mode.none": "ilman {additional}", @@ -393,6 +395,7 @@ "hashtag.counter_by_uses": "{count, plural, one{{counter} julkaisu} other {{counter} julkaisua}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} julkaisu} other {{counter} julkaisua}} tänään", "hashtag.follow": "Seuraa aihetunnistetta", + "hashtag.mute": "Mykistä #{hashtag}", "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", "hashtags.and_other": "…ja {count, plural, other {# lisää}}", "hints.profiles.followers_may_be_missing": "Tämän profiilin seuraajia saattaa puuttua.", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 82939adcce..b472fd8bd2 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -381,6 +381,8 @@ "generic.saved": "Goymt", "getting_started.heading": "At byrja", "hashtag.admin_moderation": "Lat umsjónarmarkamót upp fyri #{name}", + "hashtag.browse": "Blaða gjøgnum postar í #{hashtag}", + "hashtag.browse_from_account": "Blaða gjøgnum postar frá @{name} í #{hashtag}", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "ella {additional}", "hashtag.column_header.tag_mode.none": "uttan {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} postur} other {{counter} postar}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postur} other {{counter} postar}} í dag", "hashtag.follow": "Fylg frámerki", + "hashtag.mute": "Doyv @#{hashtag}", "hashtag.unfollow": "Gevst at fylgja frámerki", "hashtags.and_other": "…og {count, plural, other {# afturat}}", "hints.profiles.followers_may_be_missing": "Fylgjarar hjá hesum vanganum kunnu mangla.", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index ad71d98ff8..f63a1d2cba 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -27,6 +27,9 @@ "account.edit_profile": "Modifier le profil", "account.enable_notifications": "Me notifier quand @{name} publie", "account.endorse": "Inclure sur profil", + "account.featured": "En vedette", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Messages", "account.featured_tags.last_status_at": "Dernière publication {date}", "account.featured_tags.last_status_never": "Aucune publication", "account.follow": "Suivre", @@ -64,6 +67,7 @@ "account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}", "account.unblock": "Débloquer @{name}", "account.unblock_domain": "Débloquer le domaine {domain}", + "account.unblock_domain_short": "Débloquer", "account.unblock_short": "Débloquer", "account.unendorse": "Ne pas inclure sur profil", "account.unfollow": "Ne plus suivre", @@ -292,6 +296,7 @@ "emoji_button.search_results": "Résultats", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Voyage et lieux", + "empty_column.account_featured": "Cette liste est vide", "empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations", "empty_column.account_suspended": "Compte suspendu", "empty_column.account_timeline": "Aucune publication ici!", @@ -904,6 +909,10 @@ "video.expand": "Agrandir la vidéo", "video.fullscreen": "Plein écran", "video.hide": "Masquer la vidéo", + "video.mute": "Couper le son", "video.pause": "Pause", - "video.play": "Lecture" + "video.play": "Lecture", + "video.unmute": "Rétablir le son", + "video.volume_down": "Baisser le volume", + "video.volume_up": "Augmenter le volume" } diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index de653eec8f..f9c616627f 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -27,6 +27,9 @@ "account.edit_profile": "Modifier le profil", "account.enable_notifications": "Me notifier quand @{name} publie quelque chose", "account.endorse": "Recommander sur votre profil", + "account.featured": "En vedette", + "account.featured.hashtags": "Hashtags", + "account.featured.posts": "Messages", "account.featured_tags.last_status_at": "Dernier message le {date}", "account.featured_tags.last_status_never": "Aucun message", "account.follow": "Suivre", @@ -64,6 +67,7 @@ "account.statuses_counter": "{count, plural, one {{counter} message} other {{counter} messages}}", "account.unblock": "Débloquer @{name}", "account.unblock_domain": "Débloquer le domaine {domain}", + "account.unblock_domain_short": "Débloquer", "account.unblock_short": "Débloquer", "account.unendorse": "Ne plus recommander sur le profil", "account.unfollow": "Ne plus suivre", @@ -292,6 +296,7 @@ "emoji_button.search_results": "Résultats de la recherche", "emoji_button.symbols": "Symboles", "emoji_button.travel": "Voyage et lieux", + "empty_column.account_featured": "Cette liste est vide", "empty_column.account_hides_collections": "Cet utilisateur·ice préfère ne pas rendre publiques ces informations", "empty_column.account_suspended": "Compte suspendu", "empty_column.account_timeline": "Aucun message ici !", @@ -904,6 +909,10 @@ "video.expand": "Agrandir la vidéo", "video.fullscreen": "Plein écran", "video.hide": "Masquer la vidéo", + "video.mute": "Couper le son", "video.pause": "Pause", - "video.play": "Lecture" + "video.play": "Lecture", + "video.unmute": "Rétablir le son", + "video.volume_down": "Baisser le volume", + "video.volume_up": "Augmenter le volume" } diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 57e7b5ee5a..50dc2437c6 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -381,6 +381,8 @@ "generic.saved": "Gardado", "getting_started.heading": "Primeiros pasos", "hashtag.admin_moderation": "Abrir interface de moderación para ##{name}", + "hashtag.browse": "Ver publicacións con #{hashtag}", + "hashtag.browse_from_account": "Ver as publicacións de @{name} con #{hashtag}", "hashtag.column_header.tag_mode.all": "e {additional}", "hashtag.column_header.tag_mode.any": "ou {additional}", "hashtag.column_header.tag_mode.none": "sen {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} publicación} other {{counter} publicacións}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} publicación} other {{counter} publicacións}} hoxe", "hashtag.follow": "Seguir cancelo", + "hashtag.mute": "Acalar a #{hashtag}", "hashtag.unfollow": "Deixar de seguir cancelo", "hashtags.and_other": "…e {count, plural, one {}other {# máis}}", "hints.profiles.followers_may_be_missing": "Poderían faltar seguidoras deste perfil.", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 89d36dc962..d1a2c014a5 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -27,6 +27,9 @@ "account.edit_profile": "עריכת פרופיל", "account.enable_notifications": "שלח לי התראות כש@{name} מפרסם", "account.endorse": "קדם את החשבון בפרופיל", + "account.featured": "מומלץ", + "account.featured.hashtags": "תגיות", + "account.featured.posts": "הודעות", "account.featured_tags.last_status_at": "חצרוץ אחרון בתאריך {date}", "account.featured_tags.last_status_never": "אין חצרוצים", "account.follow": "לעקוב", @@ -293,6 +296,7 @@ "emoji_button.search_results": "תוצאות חיפוש", "emoji_button.symbols": "סמלים", "emoji_button.travel": "טיולים ואתרים", + "empty_column.account_featured": "הרשימה ריקה", "empty_column.account_hides_collections": "המשתמש.ת בחר.ה להסתיר מידע זה", "empty_column.account_suspended": "חשבון מושעה", "empty_column.account_timeline": "אין עדיין אף הודעה!", @@ -377,6 +381,8 @@ "generic.saved": "נשמר", "getting_started.heading": "בואו נתחיל", "hashtag.admin_moderation": "פתיחת ממשק פיקוח דיון עבור #{name}", + "hashtag.browse": "קריאת הודעות תחת #{hashtag}", + "hashtag.browse_from_account": "קריאת הודעות מאת @{name} תחת #{hashtag}", "hashtag.column_header.tag_mode.all": "ו- {additional}", "hashtag.column_header.tag_mode.any": "או {additional}", "hashtag.column_header.tag_mode.none": "ללא {additional}", @@ -390,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}}", "hashtag.counter_by_uses_today": "{count, plural, one {הודעה אחת} two {הודעותיים} many {{counter} הודעות} other {{counter} הודעות}} היום", "hashtag.follow": "לעקוב אחרי תגית", + "hashtag.mute": "להשתיק את #{hashtag}", "hashtag.unfollow": "להפסיק לעקוב אחרי תגית", "hashtags.and_other": "…{count, plural,other {ועוד #}}", "hints.profiles.followers_may_be_missing": "יתכן כי עוקבים של פרופיל זה חסרים.", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 826dca6137..b311dffa72 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -381,6 +381,8 @@ "generic.saved": "Elmentve", "getting_started.heading": "Első lépések", "hashtag.admin_moderation": "Moderációs felület megnyitása a következőhöz: #{name}", + "hashtag.browse": "Bejegyzések ebben: #{hashtag}", + "hashtag.browse_from_account": "@{name} bejegyzéseinek tallózása ebben: #{hashtag}", "hashtag.column_header.tag_mode.all": "és {additional}", "hashtag.column_header.tag_mode.any": "vagy {additional}", "hashtag.column_header.tag_mode.none": "{additional} nélkül", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bejegyzés} other {{counter} bejegyzés}} ma", "hashtag.follow": "Hashtag követése", + "hashtag.mute": "#{hashtag} némítása", "hashtag.unfollow": "Hashtag követésének megszüntetése", "hashtags.and_other": "…és {count, plural, other {# további}}", "hints.profiles.followers_may_be_missing": "A profil követői lehet, hogy hiányoznak.", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 5f956c71f6..50f31dd623 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -381,6 +381,8 @@ "generic.saved": "Vistað", "getting_started.heading": "Komast í gang", "hashtag.admin_moderation": "Opna umsjónarviðmót fyrir #{name}", + "hashtag.browse": "Skoða færslur með #{hashtag}", + "hashtag.browse_from_account": "Skoða færslur frá @{name} í #{hashtag}", "hashtag.column_header.tag_mode.all": "og {additional}", "hashtag.column_header.tag_mode.any": "eða {additional}", "hashtag.column_header.tag_mode.none": "án {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} færsla} other {{counter} færslur}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} færsla} other {{counter} færslur}} í dag", "hashtag.follow": "Fylgjast með myllumerki", + "hashtag.mute": "Þagga #{hashtag}", "hashtag.unfollow": "Hætta að fylgjast með myllumerki", "hashtags.and_other": "…og {count, plural, other {# til viðbótar}}", "hints.profiles.followers_may_be_missing": "Fylgjendur frá þessum notanda gæti vantað.", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index a29bd33468..bb97a18bd2 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -74,7 +74,7 @@ "alert.rate_limited.title": "Aktum s talast", "alert.unexpected.message": "Yeḍra-d unezri ur netturaǧu ara.", "alert.unexpected.title": "Ayhuh!", - "alt_text_badge.title": "Aḍris asegzan", + "alt_text_badge.title": "Aḍris amlellay", "alt_text_modal.add_alt_text": "Rnu aḍris amlellay", "alt_text_modal.add_text_from_image": "Rnu aḍris amlellay seg tugna", "alt_text_modal.cancel": "Semmet", @@ -172,6 +172,7 @@ "confirmations.logout.title": "Tebɣiḍ ad teffɣeḍ ssya?", "confirmations.missing_alt_text.confirm": "Rnu aḍris amlellay", "confirmations.missing_alt_text.secondary": "Suffeɣ akken yebɣu yili", + "confirmations.missing_alt_text.title": "Rnu aḍris amlellay?", "confirmations.mute.confirm": "Sgugem", "confirmations.redraft.confirm": "Kkes sakin ɛiwed tira", "confirmations.reply.confirm": "Err", @@ -259,8 +260,11 @@ "follow_request.reject": "Agi", "follow_suggestions.dismiss": "Dayen ur t-id-skan ara", "follow_suggestions.featured_longer": "Yettwafraned s ufus sɣur agraw n {domain}", + "follow_suggestions.friends_of_friends_longer": "D aɣeṛfan ar wid i teṭṭafareḍ", "follow_suggestions.hints.featured": "Amaɣnu-a ifren-it-id wegraw n {domain} s ufus.", - "follow_suggestions.popular_suggestion_longer": "Yettwassen deg {domain}", + "follow_suggestions.hints.friends_of_friends": "Amaɣnu-a d aɣeṛfan ɣer wid i teṭṭafaṛeḍ.", + "follow_suggestions.popular_suggestion": "Asumer aɣeṛfan", + "follow_suggestions.popular_suggestion_longer": "D aɣeṛfan deg {domain}", "follow_suggestions.view_all": "Wali-ten akk", "follow_suggestions.who_to_follow": "Ad tḍefreḍ?", "followed_tags": "Ihacṭagen yettwaḍfaren", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index be6e4be7e1..544278e519 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -27,6 +27,9 @@ "account.edit_profile": "프로필 편집", "account.enable_notifications": "@{name} 의 게시물 알림 켜기", "account.endorse": "프로필에 추천하기", + "account.featured": "추천", + "account.featured.hashtags": "해시태그", + "account.featured.posts": "게시물", "account.featured_tags.last_status_at": "{date}에 마지막으로 게시", "account.featured_tags.last_status_never": "게시물 없음", "account.follow": "팔로우", @@ -64,6 +67,7 @@ "account.statuses_counter": "{count, plural, other {게시물 {counter}개}}", "account.unblock": "차단 해제", "account.unblock_domain": "도메인 {domain} 차단 해제", + "account.unblock_domain_short": "차단 해제", "account.unblock_short": "차단 해제", "account.unendorse": "프로필에 추천하지 않기", "account.unfollow": "언팔로우", @@ -292,6 +296,7 @@ "emoji_button.search_results": "검색 결과", "emoji_button.symbols": "기호", "emoji_button.travel": "여행과 장소", + "empty_column.account_featured": "목록이 비어있습니다", "empty_column.account_hides_collections": "이 사용자는 이 정보를 사용할 수 없도록 설정했습니다", "empty_column.account_suspended": "계정 정지됨", "empty_column.account_timeline": "이곳에는 게시물이 없습니다!", @@ -376,6 +381,8 @@ "generic.saved": "저장됨", "getting_started.heading": "시작하기", "hashtag.admin_moderation": "#{name}에 대한 중재화면 열기", + "hashtag.browse": "#{hashtag}의 게시물 둘러보기", + "hashtag.browse_from_account": "@{name}의 #{hashtag} 게시물 둘러보기", "hashtag.column_header.tag_mode.all": "및 {additional}", "hashtag.column_header.tag_mode.any": "또는 {additional}", "hashtag.column_header.tag_mode.none": "{additional}를 제외하고", @@ -389,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, other {게시물 {counter}개}}", "hashtag.counter_by_uses_today": "오늘 {count, plural, other {{counter} 개의 게시물}}", "hashtag.follow": "해시태그 팔로우", + "hashtag.mute": "#{hashtag} 뮤트", "hashtag.unfollow": "해시태그 팔로우 해제", "hashtags.and_other": "…및 {count, plural,other {#개}}", "hints.profiles.followers_may_be_missing": "이 프로필의 팔로워 목록은 일부 누락되었을 수 있습니다.", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index f6a34116e8..483261da6b 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -1,5 +1,5 @@ { - "about.blocks": "Pelayan yang disederhanakan", + "about.blocks": "Pelayan yang diselaraskan", "about.contact": "Hubungi:", "about.disclaimer": "Mastodon ialah perisian sumber terbuka percuma, dan merupakan tanda dagangan Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Sebab tidak tersedia", @@ -11,13 +11,13 @@ "about.not_available": "Maklumat ini belum tersedia pada pelayan ini.", "about.powered_by": "Media sosial terpencar yang dikuasakan oleh {mastodon}", "about.rules": "Peraturan pelayan", - "account.account_note_header": "Personal note", + "account.account_note_header": "Catatan peribadi", "account.add_or_remove_from_list": "Tambah atau Buang dari senarai", - "account.badges.bot": "Bot", + "account.badges.bot": "Automatik", "account.badges.group": "Kumpulan", "account.block": "Sekat @{name}", "account.block_domain": "Sekat domain {domain}", - "account.block_short": "Malay", + "account.block_short": "Sekat", "account.blocked": "Disekat", "account.cancel_follow_request": "Batalkan permintaan ikut", "account.copy": "Salin pautan ke profil", @@ -33,24 +33,24 @@ "account.follow_back": "Ikut balik", "account.followers": "Pengikut", "account.followers.empty": "Belum ada yang mengikuti pengguna ini.", - "account.followers_counter": "{count, plural, one {{counter} Diikuti} other {{counter} Diikuti}}", - "account.following": "Mengikuti", - "account.following_counter": "{count, plural, other {{counter} following}}", + "account.followers_counter": "{count, plural, one {{counter} pengikut} other {{counter} pengikut}}", + "account.following": "Ikutan", + "account.following_counter": "{count, plural, other {{counter} ikutan}}", "account.follows.empty": "Pengguna ini belum mengikuti sesiapa.", "account.go_to_profile": "Pergi ke profil", "account.hide_reblogs": "Sembunyikan galakan daripada @{name}", - "account.in_memoriam": "Dalam Memoriam.", - "account.joined_short": "Menyertai", - "account.languages": "Tukar bahasa yang dilanggan", + "account.in_memoriam": "Dalam kenangan.", + "account.joined_short": "Tarikh penyertaan", + "account.languages": "Tukar bahasa langganan", "account.link_verified_on": "Pemilikan pautan ini telah disemak pada {date}", - "account.locked_info": "Status privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.", + "account.locked_info": "Taraf privasi akaun ini dikunci. Pemiliknya menyaring sendiri siapa yang boleh mengikutinya.", "account.media": "Media", "account.mention": "Sebut @{name}", "account.moved_to": "{name} telah menandakan bahawa akaun baru mereka sekarang ialah:", - "account.mute": "Bisukan @{name}", - "account.mute_notifications_short": "Redam pemberitahuan", + "account.mute": "Redamkan @{name}", + "account.mute_notifications_short": "Redamkan pemberitahuan", "account.mute_short": "Redam", - "account.muted": "Dibisukan", + "account.muted": "Diredamkan", "account.mutual": "Rakan kongsi", "account.no_bio": "Tiada penerangan diberikan.", "account.open_original_page": "Buka halaman asal", @@ -64,12 +64,13 @@ "account.statuses_counter": "{count, plural, other {{counter} siaran}}", "account.unblock": "Nyahsekat @{name}", "account.unblock_domain": "Nyahsekat domain {domain}", + "account.unblock_domain_short": "Nyahsekat", "account.unblock_short": "Nyahsekat", "account.unendorse": "Jangan tampilkan di profil", "account.unfollow": "Nyahikut", "account.unmute": "Nyahbisukan @{name}", - "account.unmute_notifications_short": "Nyahredam notifikasi", - "account.unmute_short": "Nyahbisu", + "account.unmute_notifications_short": "Nyahredamkan pemberitahuan", + "account.unmute_short": "Nyahredam", "account_note.placeholder": "Klik untuk menambah catatan", "admin.dashboard.daily_retention": "Kadar pengekalan pengguna mengikut hari selepas mendaftar", "admin.dashboard.monthly_retention": "Kadar pengekalan pengguna mengikut bulan selepas mendaftar", @@ -115,6 +116,8 @@ "attachments_list.unprocessed": "(belum diproses)", "audio.hide": "Sembunyikan audio", "block_modal.remote_users_caveat": "Kami akan meminta pelayan {domain} untuk menghormati keputusan anda. Bagaimanapun, pematuhan tidak dijamin kerana ada pelayan yang mungkin menangani sekatan dengan cara berbeza. Hantaran awam mungkin masih tampak kepada pengguna yang tidak log masuk.", + "block_modal.show_less": "Tunjuk kurang", + "block_modal.show_more": "Tunjuk lebih", "block_modal.they_cant_mention": "Dia tidak boleh menyebut tentang anda atau mengikut anda.", "block_modal.they_cant_see_posts": "Dia tidak boleh melihat hantaran anda dan sebaliknya.", "block_modal.they_will_know": "Dia boleh lihat bahawa dia disekat.", @@ -141,13 +144,13 @@ "closed_registrations_modal.preamble": "Mastodon adalah terpencar, oleh itu di mana-mana anda mencipta akaun anda, anda boleh mengikut dan berinteraksi dengan sesiapa pada pelayan ini. Anda juga boleh hos sendiri!", "closed_registrations_modal.title": "Mendaftar pada Mastodon", "column.about": "Perihal", - "column.blocks": "Pengguna yang disekat", + "column.blocks": "Pengguna tersekat", "column.bookmarks": "Tanda buku", "column.community": "Garis masa tempatan", "column.create_list": "Cipta senarai", "column.direct": "Sebutan peribadi", "column.directory": "Layari profil", - "column.domain_blocks": "Domain disekat", + "column.domain_blocks": "Domain tersekat", "column.edit_list": "Sunting senarai", "column.favourites": "Sukaan", "column.firehose": "Suapan langsung", @@ -155,7 +158,7 @@ "column.home": "Laman Utama", "column.list_members": "Urus ahli senarai", "column.lists": "Senarai", - "column.mutes": "Pengguna yang dibisukan", + "column.mutes": "Pengguna teredam", "column.notifications": "Pemberitahuan", "column.pins": "Hantaran disemat", "column.public": "Garis masa bersekutu", @@ -217,13 +220,21 @@ "confirmations.logout.title": "Log keluar?", "confirmations.missing_alt_text.confirm": "Tambah teks alternatif", "confirmations.missing_alt_text.message": "Hantaran anda mempunyai media tanpa teks alternatif. Kandungan anda akan lebih mudah tercapai jika anda menambah keterangan.", - "confirmations.mute.confirm": "Bisukan", + "confirmations.missing_alt_text.secondary": "Hantar saja", + "confirmations.missing_alt_text.title": "Tambah teks alternatif?", + "confirmations.mute.confirm": "Redamkan", "confirmations.redraft.confirm": "Padam & rangka semula", "confirmations.redraft.message": "Adakah anda pasti anda ingin memadam hantaran ini dan gubal semula? Sukaan dan galakan akan hilang, dan balasan ke hantaran asal akan menjadi yatim.", + "confirmations.redraft.title": "Padam & gubah semula hantaran?", "confirmations.reply.confirm": "Balas", "confirmations.reply.message": "Membalas sekarang akan menulis ganti mesej yang anda sedang karang. Adakah anda pasti anda ingin teruskan?", + "confirmations.reply.title": "Tulis ganti hantaran?", "confirmations.unfollow.confirm": "Nyahikut", "confirmations.unfollow.message": "Adakah anda pasti anda ingin nyahikuti {name}?", + "confirmations.unfollow.title": "Berhenti mengikut pengguna?", + "content_warning.hide": "Sorok hantaran", + "content_warning.show": "Tunjuk saja", + "content_warning.show_more": "Tunjuk lebih", "conversation.delete": "Padam perbualan", "conversation.mark_as_read": "Tanda sudah dibaca", "conversation.open": "Lihat perbualan", @@ -240,6 +251,22 @@ "dismissable_banner.community_timeline": "Inilah hantaran awam terkini daripada orang yang akaun dihos oleh {domain}.", "dismissable_banner.dismiss": "Ketepikan", "dismissable_banner.explore_statuses": "Hantaran-hantaran dari seluruh alam bersekutu ini sedang sohor. Hantaran terbaharu dengan lebih banyak galakan dan sukaan diberi kedudukan lebih tinggi.", + "dismissable_banner.public_timeline": "Hantaran-hantaran awam terkini ini dari pengguna alam bersekutu yang diikuti oleh pengguna dari {domain}.", + "domain_block_modal.block": "Sekat pelayan", + "domain_block_modal.block_account_instead": "Sekat @{name} sahaja", + "domain_block_modal.they_can_interact_with_old_posts": "Pengguna dari pelayan ini boleh berinteraksi dengan hantaran lama anda.", + "domain_block_modal.they_cant_follow": "Pengguna dari pelayan ini tidak boleh mengikuti anda.", + "domain_block_modal.they_wont_know": "Dia tidak akan tahu bahawa dia telah disekat.", + "domain_block_modal.title": "Sekat domain?", + "domain_block_modal.you_will_lose_num_followers": "Anda akan kehilangan {followersCount, plural, other {{followersCountDisplay} pengikut}} dan {followingCount, plural, other {{followingCountDisplay} ikutan}}.", + "domain_block_modal.you_will_lose_relationships": "Anda akan kehilangan semua pengikut dan ikutan anda dari pelayan ini.", + "domain_block_modal.you_wont_see_posts": "Anda tidak akan melihat hantaran atau pemberitahuan dari pengguna pada pelayan ini.", + "domain_pill.activitypub_lets_connect": "Hal ini membolehkan anda berhubung dan berinteraksi bukan sahaja dengan pengguna Mastodon tetapi melintasi pelbagai aplikasi sosial juga.", + "domain_pill.activitypub_like_language": "ActivityPub adalah seperti bahasa yang digunakan oleh Mastodon untuk berhubung dengan jaringan sosial lain.", + "domain_pill.server": "Pelayan", + "domain_pill.your_handle": "Pemegang anda:", + "domain_pill.your_server": "Rumah maya anda, tempatnya hantaran anda disimpan. Tidak berkenan dengan yang ini? Pindah antara pelayan pada bila-bila masa dan bawa pengikut anda sekali.", + "domain_pill.your_username": "Pengenal unik anda pada pelayan ini. Anda mungkin akan berkongsi nama pengguna dengan pengguna daripada pelayan lain.", "embed.instructions": "Benam hantaran ini di laman sesawang anda dengan menyalin kod berikut.", "embed.preview": "Begini rupanya nanti:", "emoji_button.activity": "Aktiviti", @@ -257,6 +284,7 @@ "emoji_button.search_results": "Hasil carian", "emoji_button.symbols": "Simbol", "emoji_button.travel": "Kembara & Tempat", + "empty_column.account_featured": "Senarai ini kosong", "empty_column.account_hides_collections": "Pengguna ini telah memilih untuk tidak menyediakan informasi tersebut", "empty_column.account_suspended": "Akaun digantung", "empty_column.account_timeline": "Tiada hantaran di sini!", @@ -274,7 +302,7 @@ "empty_column.hashtag": "Belum ada apa-apa dengan tanda pagar ini.", "empty_column.home": "Garis masa laman utama anda kosong! Ikuti lebih ramai orang untuk mengisinya. {suggestions}", "empty_column.list": "Tiada apa-apa di senarai ini lagi. Apabila ahli senarai ini menerbitkan hantaran baharu, ia akan dipaparkan di sini.", - "empty_column.mutes": "Anda belum membisukan sesiapa.", + "empty_column.mutes": "Anda belum meredamkan sesiapa.", "empty_column.notifications": "Anda belum ada sebarang pemberitahuan. Apabila orang lain berinteraksi dengan anda, ia akan muncul di sini.", "empty_column.public": "Tiada apa-apa di sini! Tulis sesuatu secara awam, atau ikuti pengguna daripada pelayan lain secara manual untuk mengisinya", "error.unexpected_crash.explanation": "Disebabkan pepijat dalam kod kami atau masalah keserasian pelayar, halaman ini tidak dapat dipaparkan dengan betulnya.", @@ -341,6 +369,7 @@ "hashtag.counter_by_uses": "{count, plural, other {{counter} siaran}}", "hashtag.counter_by_uses_today": "{count, plural, other {{counter} siaran}} hari ini", "hashtag.follow": "Ikuti hashtag", + "hashtag.mute": "Redamkan #{hashtag}", "hashtag.unfollow": "Nyahikut tanda pagar", "hashtags.and_other": "…dan {count, plural, other {# more}}", "home.column_settings.show_reblogs": "Tunjukkan galakan", @@ -361,7 +390,7 @@ "intervals.full.hours": "{number, plural, other {# jam}}", "intervals.full.minutes": "{number, plural, other {# minit}}", "keyboard_shortcuts.back": "to navigate back", - "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.blocked": "Buka senarai pengguna tersekat", "keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.column": "Tumpu pada lajur", "keyboard_shortcuts.compose": "to focus the compose textarea", @@ -378,7 +407,7 @@ "keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.mention": "to mention author", - "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.muted": "Buka senarai pengguna teredam", "keyboard_shortcuts.my_profile": "to open your profile", "keyboard_shortcuts.notifications": "to open notifications column", "keyboard_shortcuts.open_media": "to open media", @@ -408,24 +437,27 @@ "load_pending": "{count, plural, one {# item baharu} other {# item baharu}}", "loading_indicator.label": "Memuatkan…", "moved_to_account_banner.text": "Akaun anda {disabledAccount} kini dinyahdayakan kerana anda berpindah ke {movedToAccount}.", + "mute_modal.indefinite": "Sehingga dinyahredamkan", + "mute_modal.they_wont_know": "Dia tidak akan tahu bahawa dia telah diredam.", + "mute_modal.title": "Redamkan pengguna?", "navigation_bar.about": "Perihal", "navigation_bar.advanced_interface": "Buka dalam antara muka web lanjutan", - "navigation_bar.blocks": "Pengguna yang disekat", + "navigation_bar.blocks": "Pengguna tersekat", "navigation_bar.bookmarks": "Tanda buku", "navigation_bar.community_timeline": "Garis masa tempatan", "navigation_bar.compose": "Karang hantaran baharu", "navigation_bar.direct": "Sebutan peribadi", "navigation_bar.discover": "Teroka", - "navigation_bar.domain_blocks": "Domain disekat", + "navigation_bar.domain_blocks": "Domain tersekat", "navigation_bar.explore": "Teroka", "navigation_bar.favourites": "Sukaan", - "navigation_bar.filters": "Perkataan yang dibisukan", + "navigation_bar.filters": "Perkataan teredam", "navigation_bar.follow_requests": "Permintaan ikutan", "navigation_bar.followed_tags": "Ikuti hashtag", "navigation_bar.follows_and_followers": "Ikutan dan pengikut", "navigation_bar.lists": "Senarai", "navigation_bar.logout": "Log keluar", - "navigation_bar.mutes": "Pengguna yang dibisukan", + "navigation_bar.mutes": "Pengguna teredam", "navigation_bar.opened_in_classic_interface": "Kiriman, akaun dan halaman tertentu yang lain dibuka secara lalai di antara muka web klasik.", "navigation_bar.personal": "Peribadi", "navigation_bar.pins": "Hantaran disemat", @@ -445,6 +477,8 @@ "notification.own_poll": "Undian anda telah tamat", "notification.reblog": "{name} menggalak hantaran anda", "notification.reblog.name_and_others_with_link": "{name} dan {count, plural, other {# orang lain}} telah galakkan hantaran anda", + "notification.relationships_severance_event.domain_block": "Pentadbir dari {from} telah menyekat {target} termasuk {followersCount} pengikut anda dan {followingCount, plural, other {# akaun}} ikutan anda.", + "notification.relationships_severance_event.user_domain_block": "Anda telah menyekat {target} termasuk {followersCount} pengikut anda dan {followingCount, plural, other {# akaun}} ikutan anda.", "notification.status": "{name} baru sahaja mengirim hantaran", "notification.update": "{name} menyunting hantaran", "notifications.clear": "Buang pemberitahuan", @@ -524,7 +558,7 @@ "reply_indicator.cancel": "Batal", "reply_indicator.poll": "Undian", "report.block": "Sekat", - "report.block_explanation": "Anda tidak akan melihat hantaran mereka. Mereka tidak dapat melihat hantaran anda atau mengikuti anda. Mereka akan sedar bahawa mereka disekat.", + "report.block_explanation": "Anda tidak akan melihat hantarannya. Dia tidak akan dapat melihat hantaran anda atau mengikuti anda. Dia akan sedar bahawa dia disekat.", "report.categories.legal": "Sah", "report.categories.other": "Lain-lain", "report.categories.spam": "Spam", @@ -537,7 +571,7 @@ "report.comment.title": "Adakah ada hal-hal lain yang perlu kita ketahui?", "report.forward": "Panjangkan ke {target}", "report.forward_hint": "Akaun ini daripada pelayan lain. Hantar salinan laporan yang ditanpanamakan ke sana juga?", - "report.mute": "Bisukan", + "report.mute": "Redam", "report.mute_explanation": "Anda tidak akan melihat siaran mereka. Mereka masih boleh mengikuti dan melihat siaran anda dan tidak akan mengetahui bahawa mereka telah dibisukan.", "report.next": "Seterusnya", "report.placeholder": "Ulasan tambahan", @@ -621,8 +655,8 @@ "status.media_hidden": "Media disembunyikan", "status.mention": "Sebut @{name}", "status.more": "Lagi", - "status.mute": "Bisukan @{name}", - "status.mute_conversation": "Bisukan perbualan", + "status.mute": "Redamkan @{name}", + "status.mute_conversation": "Redamkan perbualan", "status.open": "Kembangkan hantaran ini", "status.pin": "Semat di profil", "status.pinned": "Hantaran disemat", @@ -648,7 +682,7 @@ "status.translate": "Menterjemah", "status.translated_from_with": "Diterjemah daripada {lang} dengan {provider}", "status.uncached_media_warning": "Pratonton tidak tersedia", - "status.unmute_conversation": "Nyahbisukan perbualan", + "status.unmute_conversation": "Nyahredamkan perbualan", "status.unpin": "Nyahsemat daripada profil", "subscribed_languages.lead": "Hanya hantaran dalam bahasa-bahasa terpilih akan dipaparkan pada garis masa rumah dan senarai selepas perubahan. Pilih tiada untuk menerima hantaran dalam semua bahasa.", "subscribed_languages.save": "Simpan perubahan", @@ -682,6 +716,8 @@ "video.expand": "Besarkan video", "video.fullscreen": "Skrin penuh", "video.hide": "Sembunyikan video", + "video.mute": "Redam", "video.pause": "Jeda", - "video.play": "Main" + "video.play": "Main", + "video.unmute": "Nyahredam" } diff --git a/app/javascript/mastodon/locales/nan.json b/app/javascript/mastodon/locales/nan.json index 1ae348871f..2c5af1d406 100644 --- a/app/javascript/mastodon/locales/nan.json +++ b/app/javascript/mastodon/locales/nan.json @@ -27,6 +27,9 @@ "account.edit_profile": "編輯個人資料", "account.enable_notifications": "佇 {name} PO文ê時通知我", "account.endorse": "用個人資料推薦對方", + "account.featured": "精選ê", + "account.featured.hashtags": "Hashtag", + "account.featured.posts": "PO文", "account.featured_tags.last_status_at": "頂kái tī {date} Po文", "account.featured_tags.last_status_never": "無PO文", "account.follow": "跟tuè", @@ -293,6 +296,7 @@ "emoji_button.search_results": "Tshiau-tshuē ê結果", "emoji_button.symbols": "符號", "emoji_button.travel": "旅行kap地點", + "empty_column.account_featured": "Tsit ê列單是空ê", "empty_column.account_hides_collections": "Tsit位用者選擇無愛公開tsit ê資訊", "empty_column.account_suspended": "口座已經受停止", "empty_column.account_timeline": "Tsia無PO文!", @@ -377,6 +381,8 @@ "generic.saved": "儲存ah", "getting_started.heading": "開始用", "hashtag.admin_moderation": "Phah開 #{name} ê管理界面", + "hashtag.browse": "瀏覽佇 #{hashtag} ê PO文", + "hashtag.browse_from_account": "瀏覽 @{name} 佇 #{hashtag} 所寫ê PO文", "hashtag.column_header.tag_mode.all": "kap {additional}", "hashtag.column_header.tag_mode.any": "á是 {additional}", "hashtag.column_header.tag_mode.none": "無需要 {additional}", @@ -390,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", "hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} 篇} other {{counter} 篇}} PO文", "hashtag.follow": "跟tuè hashtag", + "hashtag.mute": "消音 #{hashtag}", "hashtag.unfollow": "取消跟tuè hashtag", "hashtags.and_other": "……kap 其他 {count, plural, other {# ê}}", "hints.profiles.followers_may_be_missing": "Tsit ê個人資料ê跟tuè者資訊可能有落勾ê。", @@ -517,8 +524,70 @@ "mute_modal.hide_options": "Khàm掉選項", "mute_modal.indefinite": "直到我取消消音", "mute_modal.show_options": "顯示選項", + "mute_modal.they_can_mention_and_follow": "In iáu ē當提起á是跟tuè lí,毋過lí看buē著in。", + "mute_modal.they_wont_know": "In buē知影in受消音。", + "mute_modal.title": "Kā用者消音?", + "mute_modal.you_wont_see_mentions": "Lí buē看見提起in ê PO文。", + "mute_modal.you_wont_see_posts": "In iáu ē當看著lí ê PO文,毋過lí看bē tio̍h in ê。", + "navigation_bar.about": "概要", + "navigation_bar.administration": "管理", + "navigation_bar.advanced_interface": "用進階ê網頁界面開", + "navigation_bar.blocks": "封鎖ê用者", + "navigation_bar.bookmarks": "冊籤", + "navigation_bar.community_timeline": "本地ê時間線", + "navigation_bar.compose": "寫新ê PO文", + "navigation_bar.direct": "私人ê提起", + "navigation_bar.discover": "發現", + "navigation_bar.domain_blocks": "封鎖ê域名", + "navigation_bar.explore": "探查", + "navigation_bar.favourites": "Siōng kah意", + "navigation_bar.filters": "消音ê詞", + "navigation_bar.follow_requests": "跟tuè請求", + "navigation_bar.followed_tags": "跟tuè ê hashtag", + "navigation_bar.follows_and_followers": "Leh跟tuè ê kap跟tuè lí ê", + "navigation_bar.lists": "列單", + "navigation_bar.logout": "登出", + "navigation_bar.moderation": "審核", + "navigation_bar.mutes": "消音ê用者", + "navigation_bar.opened_in_classic_interface": "PO文、口座kap其他指定ê頁面,預設ē佇經典ê網頁界面內phah開。", + "navigation_bar.personal": "個人", + "navigation_bar.pins": "釘起來ê PO文", + "navigation_bar.preferences": "偏愛ê設定", + "navigation_bar.public_timeline": "聯邦ê時間線", + "navigation_bar.search": "Tshiau-tshuē", + "navigation_bar.security": "安全", + "not_signed_in_indicator.not_signed_in": "Lí著登入來接近使用tsit ê資源。", + "notification.admin.report": "{name} kā {target} 檢舉ah", + "notification.admin.report_account": "{name} kā {target} 所寫ê {count, plural, other {# 篇PO文}}檢舉ah,原因是:{category}", + "notification.admin.report_account_other": "{name} kā {target} 所寫ê {count, plural, other {# 篇PO文}}檢舉ah", + "notification.admin.report_statuses": "{name} kā {target} 檢舉ah,原因是:{category}", + "notification.admin.report_statuses_other": "{name} kā {target} 檢舉ah", + "notification.admin.sign_up": "口座 {name} 有開ah。", + "notification.admin.sign_up.name_and_others": "{name} kap {count, plural, other {其他 # ê lâng}} ê口座有開ah", + "notification.annual_report.message": "Lí ê {year} #Wrapstodon teh等lí!緊來看tsit年lí佇Mastodon頂ê上精彩ê內容,kap難忘ê時刻!", + "notification.annual_report.view": "Kā #Wrapstodon 看māi。", + "notification.favourite": "{name} kah意lí ê PO文", + "notification.favourite.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê PO文", "notification.favourite_pm": "{name} kah意lí ê私人提起", "notification.favourite_pm.name_and_others_with_link": "{name} kap{count, plural, other {另外 # ê lâng}}kah意lí ê私人提起", + "notification.follow": "{name}跟tuè lí", + "notification.follow.name_and_others": "{name} kap{count, plural, other {另外 # ê lâng}}跟tuè lí", + "notification.follow_request": "{name} 請求跟tuè lí", + "notification.follow_request.name_and_others": "{name} kap{count, plural, other {另外 # ê lâng}}請求跟tuè lí", + "notification.label.mention": "提起", + "notification.label.private_mention": "私人ê提起", + "notification.label.private_reply": "私人ê回應", + "notification.label.reply": "回應", + "notification.mention": "提起", + "notification.mentioned_you": "{name}kā lí提起", + "notification.moderation-warning.learn_more": "看詳細", + "notification.moderation_warning": "Lí有收著審核ê警告", + "notification.moderation_warning.action_delete_statuses": "Lí ê一寡PO文hōo lâng thâi掉ah。", + "notification.moderation_warning.action_disable": "Lí ê口座hōo lâng停止使用ah。", + "notification.moderation_warning.action_mark_statuses_as_sensitive": "Lí ê一寡PO文,hōo lâng標做敏感ê內容。", + "notification.moderation_warning.action_none": "Lí ê口座有收著審核ê警告。", + "notification_requests.edit_selection": "編輯", + "notification_requests.exit_selection": "做好ah", "search_popout.language_code": "ISO語言代碼", "status.translated_from_with": "用 {provider} 翻譯 {lang}" } diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index e22b7b3774..30f4777f61 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -381,6 +381,8 @@ "generic.saved": "Opgeslagen", "getting_started.heading": "Aan de slag", "hashtag.admin_moderation": "Moderatie-omgeving van #{name} openen", + "hashtag.browse": "Berichten met #{hashtag} bekijken", + "hashtag.browse_from_account": "Berichten van @{name} met #{hashtag} bekijken", "hashtag.column_header.tag_mode.all": "en {additional}", "hashtag.column_header.tag_mode.any": "of {additional}", "hashtag.column_header.tag_mode.none": "zonder {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} bericht} other {{counter} berichten}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} bericht} other {{counter} berichten}} vandaag", "hashtag.follow": "Hashtag volgen", + "hashtag.mute": "#{hashtag} negeren", "hashtag.unfollow": "Hashtag ontvolgen", "hashtags.and_other": "…en {count, plural, one {}other {# meer}}", "hints.profiles.followers_may_be_missing": "Volgers voor dit profiel kunnen ontbreken.", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 6763a354f3..aaa73f51be 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -28,6 +28,8 @@ "account.enable_notifications": "Уведомлять о постах от @{name}", "account.endorse": "Рекомендовать в профиле", "account.featured": "Избранное", + "account.featured.hashtags": "Хэштеги", + "account.featured.posts": "Посты", "account.featured_tags.last_status_at": "Последний пост {date}", "account.featured_tags.last_status_never": "Нет постов", "account.follow": "Подписаться", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 57fc3be484..6cbf799328 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -27,6 +27,7 @@ "account.edit_profile": "Upraviť profil", "account.enable_notifications": "Zapnúť upozornenia na príspevky od @{name}", "account.endorse": "Zobraziť na vlastnom profile", + "account.featured.posts": "Príspevky", "account.featured_tags.last_status_at": "Posledný príspevok dňa {date}", "account.featured_tags.last_status_never": "Žiadne príspevky", "account.follow": "Sledovať", @@ -263,6 +264,7 @@ "emoji_button.search_results": "Výsledky hľadania", "emoji_button.symbols": "Symboly", "emoji_button.travel": "Cestovanie a miesta", + "empty_column.account_featured": "Tento zoznam je prázdny", "empty_column.account_hides_collections": "Tento účet sa rozhodol túto informáciu nesprístupniť", "empty_column.account_suspended": "Účet bol pozastavený", "empty_column.account_timeline": "Nie sú tu žiadne príspevky.", @@ -345,6 +347,7 @@ "generic.saved": "Uložené", "getting_started.heading": "Začíname", "hashtag.admin_moderation": "Otvor moderovacie rozhranie pre #{name}", + "hashtag.browse": "Prehľadávať príspevky pod #{hashtag}", "hashtag.column_header.tag_mode.all": "a {additional}", "hashtag.column_header.tag_mode.any": "alebo {additional}", "hashtag.column_header.tag_mode.none": "bez {additional}", @@ -358,6 +361,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} príspevok} few {{counter} príspevky} many {{counter} príspevkov} other {{counter} príspevkov}} dnes", "hashtag.follow": "Sledovať hashtag", + "hashtag.mute": "Utlmiť #{hashtag}", "hashtag.unfollow": "Prestať sledovať hashtag", "hashtags.and_other": "…a {count, plural, other {# ďalších}}", "hints.profiles.followers_may_be_missing": "Nasledovatelia tohto profilu môžu chýbať.", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index bb1668b2ef..a42a25b374 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -376,6 +376,8 @@ "generic.saved": "U ruajt", "getting_started.heading": "Si t’ia fillohet", "hashtag.admin_moderation": "Hap ndërfaqe moderimi për #{name}", + "hashtag.browse": "Shfletoni postime me #{hashtag}", + "hashtag.browse_from_account": "Shfletoni postime nga @{name} me #{hashtag}", "hashtag.column_header.tag_mode.all": "dhe {additional}", "hashtag.column_header.tag_mode.any": "ose {additional}", "hashtag.column_header.tag_mode.none": "pa {additional}", @@ -389,6 +391,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} postim} other {{counter} postime}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} postim} other {{counter} postime}} sot", "hashtag.follow": "Ndiqe hashtag-un", + "hashtag.mute": "Heshtoje #{hashtag}", "hashtag.unfollow": "Hiqe ndjekjen e hashtag-ut", "hashtags.and_other": "…dhe {count, plural, one {}other {# më tepër}}", "hints.profiles.followers_may_be_missing": "Mund të mungojnë ndjekës për këtë profil.", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index fa5a84dd68..1f703e0748 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -381,6 +381,8 @@ "generic.saved": "Kaydet", "getting_started.heading": "Başlarken", "hashtag.admin_moderation": "#{name} için denetim arayüzünü açın", + "hashtag.browse": "#{hashtag} gönderilerine gözat", + "hashtag.browse_from_account": "@{name} kişisinin #{hashtag} gönderilerine gözat", "hashtag.column_header.tag_mode.all": "ve {additional}", "hashtag.column_header.tag_mode.any": "ya da {additional}", "hashtag.column_header.tag_mode.none": "{additional} olmadan", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} gönderi} other {{counter} gönderi}}", "hashtag.counter_by_uses_today": "bugün {count, plural, one {{counter} gönderi} other {{counter} gönderi}}", "hashtag.follow": "Etiketi takip et", + "hashtag.mute": "#{hashtag} gönderilerini sessize al", "hashtag.unfollow": "Etiketi takibi bırak", "hashtags.and_other": "…ve {count, plural, one {}other {# fazlası}}", "hints.profiles.followers_may_be_missing": "Bu profilin takipçileri eksik olabilir.", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index b995713c52..6d37e0e1db 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -394,6 +394,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} допис} few {{counter} дописи} many {{counter} дописів} other {{counter} допис}} сьогодні", "hashtag.follow": "Стежити за хештегом", + "hashtag.mute": "Ігнорувати #{hashtag}", "hashtag.unfollow": "Не стежити за хештегом", "hashtags.and_other": "…і {count, plural, other {ще #}}", "hints.profiles.followers_may_be_missing": "Підписники цього профілю можуть бути не показані.", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index a608b3ed85..cabf3a5a82 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -381,6 +381,8 @@ "generic.saved": "Đã lưu", "getting_started.heading": "Quản lý", "hashtag.admin_moderation": "Mở giao diện quản trị #{name}", + "hashtag.browse": "Tìm tút #{hashtag}", + "hashtag.browse_from_account": "Tìm tút của @{name} có chứa #{hashtag}", "hashtag.column_header.tag_mode.all": "và {additional}", "hashtag.column_header.tag_mode.any": "hoặc {additional}", "hashtag.column_header.tag_mode.none": "mà không {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, other {{counter} tút}}", "hashtag.counter_by_uses_today": "{count, plural, other {{counter} tút}} hôm nay", "hashtag.follow": "Theo dõi hashtag", + "hashtag.mute": "Ẩn #{hashtag}", "hashtag.unfollow": "Bỏ theo dõi hashtag", "hashtags.and_other": "…và {count, plural, other {# nữa}}", "hints.profiles.followers_may_be_missing": "Số người theo dõi có thể không đầy đủ.", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 48f12d241a..fc3f914e6a 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -27,6 +27,9 @@ "account.edit_profile": "修改个人资料", "account.enable_notifications": "当 @{name} 发布嘟文时通知我", "account.endorse": "在个人资料中推荐此用户", + "account.featured": "精选", + "account.featured.hashtags": "话题", + "account.featured.posts": "嘟文", "account.featured_tags.last_status_at": "上次发言于 {date}", "account.featured_tags.last_status_never": "暂无嘟文", "account.follow": "关注", @@ -64,6 +67,7 @@ "account.statuses_counter": "{count, plural, other {{counter} 条嘟文}}", "account.unblock": "取消屏蔽 @{name}", "account.unblock_domain": "取消屏蔽 {domain} 域名", + "account.unblock_domain_short": "取消屏蔽", "account.unblock_short": "取消屏蔽", "account.unendorse": "不在个人资料中推荐此用户", "account.unfollow": "取消关注", @@ -292,6 +296,7 @@ "emoji_button.search_results": "搜索结果", "emoji_button.symbols": "符号", "emoji_button.travel": "旅行与地点", + "empty_column.account_featured": "这个列表为空", "empty_column.account_hides_collections": "该用户选择不公开此信息", "empty_column.account_suspended": "账号已被停用", "empty_column.account_timeline": "这里没有嘟文!", @@ -389,6 +394,7 @@ "hashtag.counter_by_uses": "{count, plural, other {{counter} 条嘟文}}", "hashtag.counter_by_uses_today": "今日 {count, plural, other {{counter} 条嘟文}}", "hashtag.follow": "关注话题", + "hashtag.mute": "停止提醒 #{hashtag}", "hashtag.unfollow": "取消关注话题", "hashtags.and_other": "… 和另外 {count, plural, other {# 个话题}}", "hints.profiles.followers_may_be_missing": "该账号的关注者列表可能没有完全显示。", @@ -904,6 +910,12 @@ "video.expand": "展开视频", "video.fullscreen": "全屏", "video.hide": "隐藏视频", + "video.mute": "停止提醒", "video.pause": "暂停", - "video.play": "播放" + "video.play": "播放", + "video.skip_backward": "后退", + "video.skip_forward": "前进", + "video.unmute": "恢复提醒", + "video.volume_down": "音量减小", + "video.volume_up": "提高音量" } diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 3bb8ed4cbc..0d37e7f6c5 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -381,6 +381,8 @@ "generic.saved": "已儲存", "getting_started.heading": "開始使用", "hashtag.admin_moderation": "開啟 #{name} 的管理介面", + "hashtag.browse": "瀏覽於 #{hashtag} 之嘟文", + "hashtag.browse_from_account": "瀏覽來自 @{name} 於 #{hashtag} 之嘟文", "hashtag.column_header.tag_mode.all": "以及 {additional}", "hashtag.column_header.tag_mode.any": "或是 {additional}", "hashtag.column_header.tag_mode.none": "而無需 {additional}", @@ -394,6 +396,7 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} 則} other {{counter} 則}}嘟文", "hashtag.counter_by_uses_today": "本日有 {count, plural, one {{counter} 則} other {{counter} 則}}嘟文", "hashtag.follow": "跟隨主題標籤", + "hashtag.mute": "靜音 #{hashtag}", "hashtag.unfollow": "取消跟隨主題標籤", "hashtags.and_other": "…及其他 {count, plural, other {# 個}}", "hints.profiles.followers_may_be_missing": "此個人檔案之跟隨者或有缺失。", diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 1bdf202fca..37cd0b3bf6 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -325,6 +325,7 @@ cs: create: Vytvořit oznámení title: Nové oznámení preview: + disclaimer: Vzhledem k tomu, že se od nich uživatelé nemohou odhlásit, měla by být e-mailová upozornění omezena na důležitá oznámení, jako je narušení osobních údajů nebo oznámení o uzavření serveru. explanation_html: 'E-mail bude odeslán %{display_count} uživatelům. Následující text bude zahrnut do onoho e-mailu:' title: Náhled oznámení publish: Zveřejnit diff --git a/config/locales/da.yml b/config/locales/da.yml index b0314e0f74..63a414811e 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -319,6 +319,7 @@ da: create: Opret bekendtgørelse title: Ny bekendtgørelse preview: + disclaimer: Da brugere ikke kan fravælge e-mailnotifikationer, bør disse begrænses til vigtige emner som f.eks. personlige databrud eller serverlukninger. explanation_html: 'E-mailen sendes til %{display_count} brugere. Flg. tekst medtages i e-mailen:' title: Forhåndsvis annonceringsnotifikation publish: Publicér diff --git a/config/locales/de.yml b/config/locales/de.yml index ab0bc53fcc..0842ab73d7 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -319,6 +319,7 @@ de: create: Ankündigung erstellen title: Neue Ankündigung preview: + disclaimer: Da sich Profile nicht davon abmelden können, sollten Benachrichtigungen per E-Mail auf wichtige Ankündigungen wie z. B. zu Datenpannen oder Serverabschaltung beschränkt sein. explanation_html: 'Die E-Mail wird an %{display_count} Nutzer*innen gesendet. Folgendes wird in der E-Mail enthalten sein:' title: Vorschau der Ankündigung publish: Veröffentlichen @@ -497,6 +498,7 @@ de: registration_requested: Registrierung angefordert registrations: confirm: Bestätigen + description: Sie haben eine Registrierung von einer FASP erhalten. Lehnen Sie ab, wenn Sie dies nicht initiiert haben. Wenn Sie dies initiiert haben, vergleichen Sie Namen und Fingerabdruck vor der Bestätigung der Registrierung. reject: Ablehnen title: FASP-Registrierung bestätigen save: Speichern diff --git a/config/locales/doorkeeper.ms.yml b/config/locales/doorkeeper.ms.yml index f89def7b85..aadce76efd 100644 --- a/config/locales/doorkeeper.ms.yml +++ b/config/locales/doorkeeper.ms.yml @@ -128,11 +128,11 @@ ms: crypto: Penyulitan hujung ke hujung favourites: Sukaan filters: Penapis - follow: Ikut, Senyap dan Blok + follow: Ikutan, Redaman dan Sekatan follows: Ikutan lists: Senarai media: Lampiran media - mutes: Senyapkan + mutes: Redaman notifications: Pemberitahuan push: Pemberitahuan segera reports: Laporan @@ -173,7 +173,7 @@ ms: read:filters: lihat penapis anda read:follows: lihat senarai yang anda ikuti read:lists: lihat senarai anda - read:mutes: lihat senarai yang anda senyapkan + read:mutes: lihat redamanku read:notifications: lihat notifikasi anda read:reports: lihat laporan anda read:search: cari bagi pihak anda @@ -182,13 +182,13 @@ ms: write:accounts: ubaisuai profail anda write:blocks: domain dan akaun blok write:bookmarks: menandabuku hantaran - write:conversations: senyapkan dan padamkan perbualan + write:conversations: redamkan dan padamkan perbualan write:favourites: hantaran disukai write:filters: cipta penapis write:follows: ikut orang write:lists: cipta senarai write:media: memuat naik fail media - write:mutes: membisukan orang dan perbualan + write:mutes: redamkan orang dan perbualan write:notifications: kosongkan pemberitahuan anda write:reports: melaporkan orang lain write:statuses: terbitkan hantaran diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index dd92aed5f6..ab3d307fd8 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -319,6 +319,7 @@ es-AR: create: Crear anuncio title: Nuevo anuncio preview: + disclaimer: Como los usuarios no pueden excluirse de ellas, las notificaciones por correo electrónico deberían limitarse a anuncios importantes como la violación de datos personales o las notificaciones de cierre del servidor. explanation_html: 'El correo electrónico se enviará a %{display_count} usuarios. En el correo electrónico se incluirá el siguiente texto:' title: Previsualizar la notificación del anuncio publish: Publicar diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index a9192740fe..3032b663a1 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -319,6 +319,7 @@ es-MX: create: Crear anuncio title: Nuevo anuncio preview: + disclaimer: Como los usuarios no pueden optar por no recibirlas, las notificaciones por correo electrónico deben limitarse a anuncios importantes, como la violación de datos personales o las notificaciones de cierre de servidores. explanation_html: 'El correo electrónico se enviará a %{display_count} usuarios. En el correo electrónico se incluirá el siguiente texto:' title: Vista previa de la notificación del anuncio publish: Publicar diff --git a/config/locales/es.yml b/config/locales/es.yml index ed09dfb76b..9e0feb9d18 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -3,7 +3,7 @@ es: about: about_mastodon_html: 'La red social del futuro: ¡Sin anuncios, sin vigilancia corporativa, diseño ético, y descentralización! ¡Sé dueño de tu información con Mastodon!' contact_missing: No establecido - contact_unavailable: No disponible + contact_unavailable: N/D hosted_on: Mastodon alojado en %{domain} title: Acerca de accounts: @@ -319,6 +319,7 @@ es: create: Crear anuncio title: Nuevo anuncio preview: + disclaimer: Como los usuarios no pueden optar por no recibirlas, las notificaciones por correo electrónico deben limitarse a anuncios importantes, como la violación de datos personales o las notificaciones de cierre de servidores. explanation_html: 'El correo electrónico se enviará a %{display_count} usuarios. En el correo electrónico se incluirá el siguiente texto:' title: Vista previa de la notificación del anuncio publish: Publicar diff --git a/config/locales/fi.yml b/config/locales/fi.yml index fcb180518f..9a5bf97afe 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -319,6 +319,7 @@ fi: create: Luo tiedote title: Uusi tiedote preview: + disclaimer: Koska käyttäjät eivät voi kieltäytyä niistä, sähköposti-ilmoitukset tulee rajata tärkeisiin tiedotteisiin, kuten ilmoituksiin henkilötietojen tietoturvaloukkauksista tai palvelimen sulkeutumisesta. explanation_html: "%{display_count} käyttäjälle lähetetään sähköpostia. Sähköpostiviestiin sisällytetään seuraava teksti:" title: Esikatsele tiedoteilmoitus publish: Julkaise diff --git a/config/locales/fo.yml b/config/locales/fo.yml index ec38374070..8e611c346d 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -319,6 +319,7 @@ fo: create: Stovna kunngerð title: Nýggj kunngerð preview: + disclaimer: Av tí at brúkarar ikki kunnu velja tær frá, eiga teldupostfráboðanir at vera avmarkaðar til týdningarmiklar kunngerðir, sosum trygdarbrot og boð um at ambætarin verður tikin niður. explanation_html: 'Teldubrævið verður sent til %{display_count} brúkarar. Fylgjandi tekstur kemur við í teldubrævið:' title: Undanvís fráboðan um kunngerð publish: Legg út diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index dd751c0678..e85952f91c 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -482,6 +482,15 @@ fr-CA: new: title: Importer des blocages de domaine no_file: Aucun fichier sélectionné + fasp: + providers: + registrations: + confirm: Confirmer + reject: Rejeter + save: Enregistrer + select_capabilities: Sélectionnez les Capacités + sign_in: Se connecter + status: État follow_recommendations: description_html: "Les recommandations d'abonnement aident les nouvelles personnes à trouver rapidement du contenu intéressant. Si un·e utilisateur·rice n'a pas assez interagi avec les autres pour avoir des recommandations personnalisées, ces comptes sont alors recommandés. La sélection est mise à jour quotidiennement depuis un mélange de comptes ayant le plus d'interactions récentes et le plus grand nombre d'abonné·e·s locaux pour une langue donnée." language: Pour la langue diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 6ad2733f3e..25218bd019 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -482,6 +482,15 @@ fr: new: title: Importer des blocages de domaine no_file: Aucun fichier sélectionné + fasp: + providers: + registrations: + confirm: Confirmer + reject: Rejeter + save: Enregistrer + select_capabilities: Sélectionnez les Capacités + sign_in: Se connecter + status: État follow_recommendations: description_html: "Les recommandations d'abonnement aident les nouvelles personnes à trouver rapidement du contenu intéressant. Si un·e utilisateur·rice n'a pas assez interagi avec les autres pour avoir des recommandations personnalisées, ces comptes sont alors recommandés. La sélection est mise à jour quotidiennement depuis un mélange de comptes ayant le plus d'interactions récentes et le plus grand nombre d'abonné·e·s locaux pour une langue donnée." language: Pour la langue diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 1da5c146c7..ed51799e8a 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -319,6 +319,7 @@ gl: create: Crear anuncio title: Novo anuncio preview: + disclaimer: As usuarias non poden omitilas, as notificiacións por correo deberían limitarse a anuncios importantes como fugas de datos personais ou notificación do cese do servizo. explanation_html: 'Vaise enviar o correo a %{display_count} usuarias. Incluirase o seguinte texto no correo:' title: Previsualización da notificación do anuncio publish: Publicar diff --git a/config/locales/he.yml b/config/locales/he.yml index 6d575bc564..457569d05a 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -325,6 +325,7 @@ he: create: יצירת הכרזה title: הכרזה חדשה preview: + disclaimer: כיוון שהמשתמשים לא יכולים לבטל אותם, הודעות דוא"ל צריכות להיות מוגבלות בשימוש להודעות חשובות כגון הודעות על גניבת מידע אישי או הודעות על סגירת השרת. explanation_html: 'הדואל ישלח אל %{display_count} משתמשיםות. להלן המלל שישלח בדואל:' title: צפיה מקדימה בהודעה publish: פרסום diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 272dc0eb21..ef5d8d97e6 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -319,6 +319,7 @@ hu: create: Közlemény létrehozása title: Új közlemény preview: + disclaimer: Mivel a felhasználók nem iratkozhatnak le róluk, az e-mailes értesítéseket érdemes a fontos bejelentésekre korlátozni, mint a személyes adatokat érintő adatvédelmi incidensek vagy a kiszolgáló bezárására vonatkozó értesítések. explanation_html: 'Az e-mail %{display_count} felhasználónak lesz elküldve. A következő szöveg fog szerepelni a levélben:' title: Közleményértesítés előnézete publish: Közzététel diff --git a/config/locales/is.yml b/config/locales/is.yml index ef407a6a0e..0516fa4eb8 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -319,6 +319,7 @@ is: create: Búa til auglýsingu title: Ný auglýsing preview: + disclaimer: Þar sem notendur geta ekki afþakkað þær ætti aðeins að nota tilkynningar í tölvupósti fyrir mikilvægar upplýsingar á borð við persónuleg gagnabrot eða lokanir á netþjónum. explanation_html: 'Tölvupósturinn verður sendur til %{display_count} notenda. Eftirfarandi texti verður í meginmáli póstsins:' title: Forskoða tilkynninguna publish: Birta diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 7fc8adcf41..68f4e872b6 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -28,6 +28,7 @@ ms: created_msg: Catatan penyederhanaan telah berjaya dicipta! destroyed_msg: Catatan penyederhanaan telah berjaya dipadam! accounts: + add_email_domain_block: Sekat domain e-mel approve: Luluskan approved_msg: Berjaya meluluskan permohonan pendaftaran %{username} are_you_sure: Adakah anda pasti? @@ -146,7 +147,7 @@ ms: suspension_irreversible: Data akaun ini telah dipadam secara kekal. Anda boleh nyahgantungkannya untuk membuatkan akaun ini boleh digunakan semula tetapi data lama tidak akan diperolehi. suspension_reversible_hint_html: Akaun ini telah digantung, dan datanya akan dibuang pada %{date}. Sebelum tarikh itu, akaun ini boleh diperoleh semula tanpa kesan buruk. Jika anda mahu memadamkan kesemua data akaun ini serta-merta, anda boleh melakukannya di bawah. title: Akaun - unblock_email: Menyahsekat alamat e-mel + unblock_email: Nyahsekat alamat e-mel unblocked_email_msg: Alamat e-mel %{username} berjaya dinyahsekat unconfirmed_email: E-mel belum disahkan undo_sensitized: Nyahtanda sensitif @@ -169,17 +170,21 @@ ms: confirm_user: Sahkan Pengguna create_account_warning: Cipta Amaran create_announcement: Cipta Pengumuman + create_canonical_email_block: Cipta Penyekatan E-mel create_custom_emoji: Cipta Emoji Tersendiri create_domain_allow: Cipta Pelepasan Domain create_domain_block: Cipta Penyekatan Domain + create_email_domain_block: Cipta Penyekatan Domain E-mel create_ip_block: Cipta peraturan alamat IP create_unavailable_domain: Cipta Domain Tidak Tersedia create_user_role: Cipta Peranan demote_user: Turunkan Taraf Pengguna destroy_announcement: Padam Pengumuman + destroy_canonical_email_block: Padam Penyekatan E-mel destroy_custom_emoji: Padam Emoji Tersendiri destroy_domain_allow: Padam Pelepasan Domain destroy_domain_block: Padam Penyekatan Domain + destroy_email_domain_block: Padam Penyekatan Domain E-mel destroy_instance: Padamkan Domain destroy_ip_block: Padam peraturan alamat IP destroy_status: Padam Hantaran @@ -203,7 +208,7 @@ ms: silence_account: Diamkan Akaun suspend_account: Gantungkan Akaun unassigned_report: Menyahtugaskan Laporan - unblock_email_account: Menyahsekat alamat e-mel + unblock_email_account: Nyahsekat alamat e-mel unsensitive_account: Nyahtanda media di akaun anda sebagai sensitif unsilence_account: Nyahdiamkan Akaun unsuspend_account: Nyahgantungkan Akaun @@ -1144,7 +1149,7 @@ ms: csv: CSV domain_blocks: Domain disekat lists: Senarai - mutes: Awak bisu + mutes: Redaman anda storage: Storan Media featured_tags: add_new: Tambah baharu @@ -1235,10 +1240,11 @@ ms: domain_blocking: Mengimport domain yang disekat following: Mengimport akaun diikuti lists: Mengimport senarai - muting: Mengimport akaun diredam + muting: Mengimport akaun teredam type: Jenis import type_groups: constructive: Ikutan & Penanda Halaman + destructive: Sekatan dan redaman types: blocking: Senarai menyekat bookmarks: Penanda buku diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 84608307d4..5acd93ca13 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -319,6 +319,7 @@ nl: create: Mededeling aanmaken title: Nieuwe mededeling preview: + disclaimer: Omdat gebruikers zich niet voor deze e-mails kunnen afmelden, moeten e-mailmeldingen worden beperkt tot belangrijke aankondigingen, zoals het lekken van gebruikersgegevens of meldingen over het sluiten van deze server. explanation_html: 'De e-mail wordt verzonden naar %{display_count} gebruikers. De volgende tekst wordt in het bericht opgenomen:' title: Voorbeeld van mededeling publish: Inschakelen diff --git a/config/locales/sq.yml b/config/locales/sq.yml index dd96ddb88d..01884c10e9 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -319,6 +319,7 @@ sq: create: Krijoni lajmërim title: Lajmërim i ri preview: + disclaimer: Ngaqë përdoruesit s’mund të zgjedhin lënien jashtë tyre, njoftimet me email do të kufizohen te njoftime të rëndësishme, të tilla si cenim të dhënash personale, ose njoftime mbylljesh shërbyesish. explanation_html: 'Email-i do të dërgohet te %{display_count} përdorues. Te email-i do të përfshihet teksti vijues:' title: Bëni paraparje të shënimit për njoftimin publish: Publikoje diff --git a/config/locales/tr.yml b/config/locales/tr.yml index d943462d0c..751e6ae22f 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -319,6 +319,7 @@ tr: create: Duyuru oluştur title: Yeni duyuru preview: + disclaimer: Kullanıcılar bu bildirimleri almayı iptal edemediği için, e-posta bildirimleri kişisel veri ihlali veya sunucu kapatma bildirimleri gibi önemli duyurularla sınırlandırılmalıdır. explanation_html: 'E-posta, %{display_count} kullanıcıya gönderilecektir. E-posta içerisinde aşağıdaki metin yer alacaktır:' title: Duyuru bildiriminin önizlemesine bak publish: Yayınla diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 788c84fb27..0256773d32 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -325,6 +325,7 @@ uk: create: Створити оголошення title: Нове оголошення preview: + disclaimer: Оскільки користувачі не можуть відмовитися від них, сповіщення по електронній пошті повинні обмежуватися важливими оголошеннями, такими як порушення особистих даних або повідомлення про закриття серверу. explanation_html: 'Електронний лист буде надіслано %{display_count} користувачам. До електронного листа буде включено такий текст:' title: Попередній перегляд сповіщення publish: Опублікувати diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 25f423d37a..a255973a10 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -316,6 +316,7 @@ vi: create: Tạo thông báo title: Tạo thông báo mới preview: + disclaimer: Vì người dùng không thể chọn không nhận thông báo qua email nên thông báo qua email chỉ nên giới hạn ở những thông báo quan trọng như thông báo vi phạm dữ liệu cá nhân hoặc thông báo đóng máy chủ. explanation_html: 'Gửi email tới %{display_count} thành viên. Nội dung sau đây sẽ được đưa vào email:' title: Xem trước thông báo sẽ gửi publish: Đăng diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 5542975143..3b87654041 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -316,6 +316,7 @@ zh-CN: create: 创建公告 title: 新公告 preview: + disclaimer: 由于用户无法选择退出,电子邮件通知应仅限于重要公告,例如个人数据泄露或服务器关闭通知。 explanation_html: 此电子邮件将发送给 %{display_count} 用户。电子邮件将包含以下文本: title: 预览公告通知 publish: 发布 @@ -471,6 +472,30 @@ zh-CN: new: title: 导入域名列表 no_file: 没有选择文件 + fasp: + debug: + callbacks: + created_at: 创建于 + delete: 刪除 + ip: IP 地址 + request_body: 请求正文 + title: 调试回调 + providers: + active: 有效 + base_url: 基础 URL + callback: 回调 + delete: 刪除 + edit: 编辑提供商 + finish_registration: 完成注册 + name: 名称 + providers: 提供商 + public_key_fingerprint: 公钥指纹 + registrations: + confirm: 确认 + reject: 拒绝 + save: 保存 + sign_in: 登录 + status: 状态 follow_recommendations: description_html: "“关注推荐”可帮助新用户快速找到有趣的内容。 当用户与他人的互动不足以形成个性化的建议时,就会推荐关注这些账号。推荐会每日更新,基于选定语言的近期最高互动数和最多本站关注者数综合评估得出。" language: 选择语言 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 029aa33214..fae08b3216 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -316,6 +316,7 @@ zh-TW: create: 新增公告 title: 新增公告 preview: + disclaimer: 由於使用者無法選擇退出,電子郵件通知應僅限於重要公告,例如個人資料洩露或伺服器關閉通知。 explanation_html: 此 email 將寄至 %{display_count} 名使用者。以下文字將被包含於 e-mail 中: title: 預覽公告通知 publish: 發布 From aadff24099aced99c880a1dd65ea6fced9f7dff6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 14 Apr 2025 03:28:11 -0400 Subject: [PATCH 55/90] Enable `validate: true` on `CustomFilter#action` (#34434) --- app/models/custom_filter.rb | 2 +- spec/requests/api/v2/filters_spec.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index d653c55310..07bbfd4373 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -33,7 +33,7 @@ class CustomFilter < ApplicationRecord include Expireable include Redisable - enum :action, { warn: 0, hide: 1, blur: 2 }, suffix: :action + enum :action, { warn: 0, hide: 1, blur: 2 }, suffix: :action, validate: true belongs_to :account has_many :keywords, class_name: 'CustomFilterKeyword', inverse_of: :custom_filter, dependent: :destroy diff --git a/spec/requests/api/v2/filters_spec.rb b/spec/requests/api/v2/filters_spec.rb index 3b5c44cefa..304afc7bd8 100644 --- a/spec/requests/api/v2/filters_spec.rb +++ b/spec/requests/api/v2/filters_spec.rb @@ -115,6 +115,21 @@ RSpec.describe 'Filters' do .to start_with('application/json') end end + + context 'when the given filter_action value is invalid' do + let(:params) { { title: 'magic', filter_action: 'imaginary_value', keywords_attributes: [keyword: 'magic'] } } + + it 'returns http unprocessable entity' do + subject + + expect(response) + .to have_http_status(422) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to include(error: /Action is not included/) + end + end end describe 'GET /api/v2/filters/:id' do From f47ad7814a63e2d26325ca7e7eb067b99017e80b Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 14 Apr 2025 09:29:44 +0200 Subject: [PATCH 56/90] Fix "Feature on profile" option on profile dropdown menu in web UI (#34422) --- .../features/account_timeline/components/account_header.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx index c8fb3d2ae7..457cbcdcc4 100644 --- a/app/javascript/mastodon/features/account_timeline/components/account_header.tsx +++ b/app/javascript/mastodon/features/account_timeline/components/account_header.tsx @@ -495,9 +495,7 @@ export const AccountHeader: React.FC<{ arr.push({ text: intl.formatMessage( - account.getIn(['relationship', 'endorsed']) - ? messages.unendorse - : messages.endorse, + relationship.endorsed ? messages.unendorse : messages.endorse, ), action: handleEndorseToggle, }); @@ -746,7 +744,7 @@ export const AccountHeader: React.FC<{ badges.push(); } - account.get('roles', []).forEach((role) => { + account.roles.forEach((role) => { badges.push( Date: Mon, 14 Apr 2025 09:31:44 +0200 Subject: [PATCH 57/90] chore(deps): update yarn to v4.9.0 (#34410) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index cd4eb712d7..9835639f19 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.8.1", + "packageManager": "yarn@4.9.0", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index f376b89c3a..4b3aa72579 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.8.1", + "packageManager": "yarn@4.9.0", "engines": { "node": ">=18" }, From 6530844c9418282d1cc34d520f006c9437c9f928 Mon Sep 17 00:00:00 2001 From: KMY Date: Mon, 14 Apr 2025 10:52:33 +0900 Subject: [PATCH 58/90] =?UTF-8?q?Fix:=20=E3=83=95=E3=83=AB=E3=83=80?= =?UTF-8?q?=E3=83=BC=E3=82=AF=E3=81=A7=E6=96=87=E5=AD=97=E3=81=8C=E8=96=84?= =?UTF-8?q?=E3=81=8F=E8=A1=A8=E7=A4=BA=E3=81=95=E3=82=8C=E3=82=8B=E5=95=8F?= =?UTF-8?q?=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/styles/full-dark/variables.scss | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/javascript/styles/full-dark/variables.scss b/app/javascript/styles/full-dark/variables.scss index 6cedec7df9..1720d716fe 100644 --- a/app/javascript/styles/full-dark/variables.scss +++ b/app/javascript/styles/full-dark/variables.scss @@ -1,11 +1,14 @@ $classic-base-color: #282c37; // Midnight Express $classic-secondary-color: #d9e1e8; // Pattens Blue -// Variables for defaults in UI -$simple-background-color: $classic-base-color !default; +@use '../mastodon/variables' with ( + // Variables for defaults in UI + $simple-background-color: $classic-base-color, -// Tell UI to use selected colors -$ui-base-lighter-color: #969fbc !default; // Lighter darkest + // Tell UI to use selected colors + $ui-base-lighter-color: #969fbc, -// For texts on inverted backgrounds -$inverted-text-color: $classic-secondary-color !default; + // Lighter darkest + // For texts on inverted backgrounds + $inverted-text-color: $classic-secondary-color +); From 5991caae87f741f389ae4992b1d2be182d779d47 Mon Sep 17 00:00:00 2001 From: SASAGAWA Hiroto Date: Mon, 14 Apr 2025 19:57:21 +0900 Subject: [PATCH 59/90] Disable kerning for Japanese text to preserve monospaced alignment for readability (#34448) --- app/javascript/styles/mastodon/basics.scss | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index 8d3e641eda..dc3466b7f3 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -17,7 +17,12 @@ body { font-weight: 400; color: $primary-text-color; text-rendering: optimizelegibility; - font-feature-settings: 'kern'; + + // Disable kerning for Japanese text to preserve monospaced alignment for readability + &:not(:lang(ja)) { + font-feature-settings: 'kern'; + } + text-size-adjust: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0%); -webkit-tap-highlight-color: transparent; From 2eaef09166396af3d8367a7d9b7b3b9d4d51103f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 14 Apr 2025 17:11:10 -0400 Subject: [PATCH 60/90] Use enum validation instead of `ArgumentError` rescue for `List` replies policy check (#34452) --- app/controllers/api/v1/lists_controller.rb | 4 ---- app/models/list.rb | 2 +- spec/requests/api/v1/lists_spec.rb | 5 ++++- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/controllers/api/v1/lists_controller.rb b/app/controllers/api/v1/lists_controller.rb index 4bbbed2673..6bb884faa0 100644 --- a/app/controllers/api/v1/lists_controller.rb +++ b/app/controllers/api/v1/lists_controller.rb @@ -7,10 +7,6 @@ class Api::V1::ListsController < Api::BaseController before_action :require_user! before_action :set_list, except: [:index, :create] - rescue_from ArgumentError do |e| - render json: { error: e.to_s }, status: 422 - end - def index @lists = List.where(account: current_account).all render json: @lists, each_serializer: REST::ListSerializer diff --git a/app/models/list.rb b/app/models/list.rb index cd01774539..76c116ce24 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -18,7 +18,7 @@ class List < ApplicationRecord PER_ACCOUNT_LIMIT = 50 - enum :replies_policy, { list: 0, followed: 1, none: 2 }, prefix: :show + enum :replies_policy, { list: 0, followed: 1, none: 2 }, prefix: :show, validate: true belongs_to :account diff --git a/spec/requests/api/v1/lists_spec.rb b/spec/requests/api/v1/lists_spec.rb index 20f27a7431..226632c5ac 100644 --- a/spec/requests/api/v1/lists_spec.rb +++ b/spec/requests/api/v1/lists_spec.rb @@ -132,9 +132,12 @@ RSpec.describe 'Lists' do it 'returns http unprocessable entity' do subject - expect(response).to have_http_status(422) + expect(response) + .to have_http_status(422) expect(response.content_type) .to start_with('application/json') + expect(response.parsed_body) + .to include(error: /Replies policy is not included/) end end end From f115c7b3a20f4aa7afd47ae187360af9ce5766ae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:02:21 +0200 Subject: [PATCH 61/90] chore(deps): update yarn to v4.9.1 (#34451) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9835639f19..b0a5382aee 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.9.0", + "packageManager": "yarn@4.9.1", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index 4b3aa72579..fa33b575db 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.9.0", + "packageManager": "yarn@4.9.1", "engines": { "node": ">=18" }, From ba0bd3da4a9d55150f0165eef1cf33f69a2bde62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:19:49 +0200 Subject: [PATCH 62/90] New Crowdin Translations (automated) (#34456) Co-authored-by: GitHub Actions --- config/locales/ko.yml | 1 + config/locales/simple_form.ko.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c4ba1fa9e7..1ce5ef2da9 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -316,6 +316,7 @@ ko: create: 공지사항 생성 title: 새 공지사항 preview: + disclaimer: 사용자들은 수신설정을 끌 수 없기 때문에 이메일 알림은 개인정보 유출이나 서버 종료와 같은 중요한 공지사항에만 사용해야 합니다. explanation_html: "%{display_count} 명의 사용자에게 이메일이 발송됩니다. 다음 내용이 이메일에 포함됩니다:" title: 공지사항 알림 미리보기 publish: 게시 diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index a823604584..661028fff0 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -146,6 +146,7 @@ ko: min_age: 관할지역의 법률에서 요구하는 최저 연령보다 작으면 안 됩니다. user: chosen_languages: 체크하면, 선택 된 언어로 작성된 게시물들만 공개 타임라인에 보여집니다 + date_of_birth: 마스토돈을 사용하려면 %{age}세 이상임을 확인해야 합니다. 이 정보는 저장되지 않습니다. role: 역할은 사용자가 어떤 권한을 가지게 될 지 결정합니다. user_role: color: 색상은 사용자 인터페이스에서 역할을 나타내기 위해 사용되며, RGB 16진수 형식입니다 From ff0990ec9f9dfb6da8706157dab636ad5f955933 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 16 Apr 2025 07:39:20 +0200 Subject: [PATCH 63/90] Add REST API for fetching an account's endorsed accounts (#34421) --- .../v1/accounts/endorsements_controller.rb | 66 +++++++++++++++++++ .../v1/accounts/featured_tags_controller.rb | 2 +- .../api/v1/accounts/pins_controller.rb | 30 --------- config/routes/api.rb | 7 +- .../{pins_spec.rb => endorsements_spec.rb} | 30 +++++++-- 5 files changed, 98 insertions(+), 37 deletions(-) create mode 100644 app/controllers/api/v1/accounts/endorsements_controller.rb delete mode 100644 app/controllers/api/v1/accounts/pins_controller.rb rename spec/requests/api/v1/accounts/{pins_spec.rb => endorsements_spec.rb} (57%) diff --git a/app/controllers/api/v1/accounts/endorsements_controller.rb b/app/controllers/api/v1/accounts/endorsements_controller.rb new file mode 100644 index 0000000000..1e21994a90 --- /dev/null +++ b/app/controllers/api/v1/accounts/endorsements_controller.rb @@ -0,0 +1,66 @@ +# frozen_string_literal: true + +class Api::V1::Accounts::EndorsementsController < Api::BaseController + include Authorization + + before_action -> { authorize_if_got_token! :read, :'read:accounts' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:accounts' }, except: :index + before_action :require_user!, except: :index + before_action :set_account + before_action :set_endorsed_accounts, only: :index + after_action :insert_pagination_headers, only: :index + + def index + cache_if_unauthenticated! + render json: @endorsed_accounts, each_serializer: REST::AccountSerializer + end + + def create + AccountPin.find_or_create_by!(account: current_account, target_account: @account) + render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter + end + + def destroy + pin = AccountPin.find_by(account: current_account, target_account: @account) + pin&.destroy! + render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter + end + + private + + def set_account + @account = Account.find(params[:account_id]) + end + + def set_endorsed_accounts + @endorsed_accounts = @account.unavailable? ? [] : paginated_endorsed_accounts + end + + def paginated_endorsed_accounts + @account.endorsed_accounts.without_suspended.includes(:account_stat, :user).paginate_by_max_id( + limit_param(DEFAULT_ACCOUNTS_LIMIT), + params[:max_id], + params[:since_id] + ) + end + + def relationships_presenter + AccountRelationshipsPresenter.new([@account], current_user.account_id) + end + + def next_path + api_v1_account_endorsements_url pagination_params(max_id: pagination_max_id) if records_continue? + end + + def prev_path + api_v1_account_endorsements_url pagination_params(since_id: pagination_since_id) unless @endorsed_accounts.empty? + end + + def pagination_collection + @endorsed_accounts + end + + def records_continue? + @endorsed_accounts.size == limit_param(DEFAULT_ACCOUNTS_LIMIT) + end +end diff --git a/app/controllers/api/v1/accounts/featured_tags_controller.rb b/app/controllers/api/v1/accounts/featured_tags_controller.rb index 0101fb469b..f95846366c 100644 --- a/app/controllers/api/v1/accounts/featured_tags_controller.rb +++ b/app/controllers/api/v1/accounts/featured_tags_controller.rb @@ -17,6 +17,6 @@ class Api::V1::Accounts::FeaturedTagsController < Api::BaseController end def set_featured_tags - @featured_tags = @account.suspended? ? [] : @account.featured_tags + @featured_tags = @account.unavailable? ? [] : @account.featured_tags end end diff --git a/app/controllers/api/v1/accounts/pins_controller.rb b/app/controllers/api/v1/accounts/pins_controller.rb deleted file mode 100644 index 0eb13c048c..0000000000 --- a/app/controllers/api/v1/accounts/pins_controller.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -class Api::V1::Accounts::PinsController < Api::BaseController - include Authorization - - before_action -> { doorkeeper_authorize! :write, :'write:accounts' } - before_action :require_user! - before_action :set_account - - def create - AccountPin.find_or_create_by!(account: current_account, target_account: @account) - render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter - end - - def destroy - pin = AccountPin.find_by(account: current_account, target_account: @account) - pin&.destroy! - render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter - end - - private - - def set_account - @account = Account.find(params[:account_id]) - end - - def relationships_presenter - AccountRelationshipsPresenter.new([@account], current_user.account_id) - end -end diff --git a/config/routes/api.rb b/config/routes/api.rb index c7be8c8e45..8fb8f5d0af 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -190,6 +190,7 @@ namespace :api, format: false do resources :lists, only: :index resources :identity_proofs, only: :index resources :featured_tags, only: :index + resources :endorsements, only: :index end member do @@ -203,8 +204,10 @@ namespace :api, format: false do end scope module: :accounts do - resource :pin, only: :create - post :unpin, to: 'pins#destroy' + post :pin, to: 'endorsements#create' + post :endorse, to: 'endorsements#create' + post :unpin, to: 'endorsements#destroy' + post :unendorse, to: 'endorsements#destroy' resource :note, only: :create end end diff --git a/spec/requests/api/v1/accounts/pins_spec.rb b/spec/requests/api/v1/accounts/endorsements_spec.rb similarity index 57% rename from spec/requests/api/v1/accounts/pins_spec.rb rename to spec/requests/api/v1/accounts/endorsements_spec.rb index 8ebcb27d28..6e0996a1f1 100644 --- a/spec/requests/api/v1/accounts/pins_spec.rb +++ b/spec/requests/api/v1/accounts/endorsements_spec.rb @@ -13,8 +13,30 @@ RSpec.describe 'Accounts Pins API' do kevin.account.followers << user.account end - describe 'POST /api/v1/accounts/:account_id/pin' do - subject { post "/api/v1/accounts/#{kevin.account.id}/pin", headers: headers } + describe 'GET /api/v1/accounts/:account_id/endorsements' do + subject { get "/api/v1/accounts/#{user.account.id}/endorsements", headers: headers } + + let(:scopes) { 'read:accounts' } + + before do + user.account.endorsed_accounts << kevin.account + end + + it 'returns the expected accounts', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + expect(response.content_type) + .to start_with('application/json') + expect(response.parsed_body) + .to contain_exactly( + hash_including(id: kevin.account_id.to_s) + ) + end + end + + describe 'POST /api/v1/accounts/:account_id/endorse' do + subject { post "/api/v1/accounts/#{kevin.account.id}/endorse", headers: headers } it 'creates account_pin', :aggregate_failures do expect do @@ -26,8 +48,8 @@ RSpec.describe 'Accounts Pins API' do end end - describe 'POST /api/v1/accounts/:account_id/unpin' do - subject { post "/api/v1/accounts/#{kevin.account.id}/unpin", headers: headers } + describe 'POST /api/v1/accounts/:account_id/unendorse' do + subject { post "/api/v1/accounts/#{kevin.account.id}/unendorse", headers: headers } before do Fabricate(:account_pin, account: user.account, target_account: kevin.account) From 2fc38f524ed700609469842458f43cf42503ea8a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 16 Apr 2025 02:40:25 -0400 Subject: [PATCH 64/90] Use bundler version 2.6.8 (#34453) --- Gemfile.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index f12647a403..f13df0c43f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -94,7 +94,7 @@ GEM ast (2.4.3) attr_required (1.0.2) aws-eventstream (1.3.2) - aws-partitions (1.1080.0) + aws-partitions (1.1087.0) aws-sdk-core (3.215.1) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) @@ -120,7 +120,7 @@ GEM rack (>= 0.9.0) rouge (>= 1.0.0) bigdecimal (3.1.9) - bindata (2.5.0) + bindata (2.5.1) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) blurhash (0.1.8) @@ -227,7 +227,7 @@ GEM fabrication (2.31.0) faker (3.5.1) i18n (>= 1.8.11, < 2) - faraday (2.12.2) + faraday (2.13.0) faraday-net_http (>= 2.0, < 3.5) json logger @@ -239,7 +239,7 @@ GEM net-http (>= 0.5.0) fast_blank (1.0.1) fastimage (2.4.0) - ffi (1.17.1) + ffi (1.17.2) ffi-compiler (1.3.2) ffi (>= 1.15.5) rake @@ -426,7 +426,7 @@ GEM mime-types (3.6.2) logger mime-types-data (~> 3.2015) - mime-types-data (3.2025.0402) + mime-types-data (3.2025.0408) mini_mime (1.1.5) mini_portile2 (2.8.8) minitest (5.25.5) @@ -585,8 +585,8 @@ GEM ostruct (0.6.1) ox (2.14.22) bigdecimal (>= 3.0) - parallel (1.26.3) - parser (3.3.7.4) + parallel (1.27.0) + parser (3.3.8.0) ast (~> 2.4.1) racc parslet (2.0.0) @@ -751,7 +751,7 @@ GEM rubocop-ast (>= 1.44.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.44.0) + rubocop-ast (1.44.1) parser (>= 3.3.7.2) prism (~> 1.4) rubocop-capybara (2.22.1) @@ -1085,4 +1085,4 @@ RUBY VERSION ruby 3.4.1p0 BUNDLED WITH - 2.6.7 + 2.6.8 From a324edabdfc19b6978ed31800b92e36022006cd5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 08:53:05 +0200 Subject: [PATCH 65/90] chore(deps): update dependency ruby to v3.4.3 (#34459) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 4d9d11cf50..6cb9d3dd0d 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.4.2 +3.4.3 From 41a7f3427ca0c255596c6e8d93da4b30277cb658 Mon Sep 17 00:00:00 2001 From: gitea Date: Fri, 13 Jun 2025 00:59:08 +0200 Subject: [PATCH 66/90] Update README.md --- README.md | 124 ++++++------------------------------------------------ 1 file changed, 14 insertions(+), 110 deletions(-) diff --git a/README.md b/README.md index 200d58d8c4..854e8ac3d9 100644 --- a/README.md +++ b/README.md @@ -1,123 +1,27 @@ -# ![kmyblue icon](https://raw.githubusercontent.com/kmycode/mastodon/kb_development/app/javascript/icons/favicon-32x32.png) kmyblue +NAS is an KMY & Mastodon Fork -[![Ruby Testing](https://github.com/kmycode/mastodon/actions/workflows/test-ruby.yml/badge.svg)](https://github.com/kmycode/mastodon/actions/workflows/test-ruby.yml) +The following are just a few of the most common features. There are many other minor changes to the specifications. -! FOR ENGLISH USER ! We do not provide English documentation for kmyblue; we assume that you will use automatic translation software, such as Google, to translate the site. +Emoji reactions -kmyblueは、ActivityPubに接続するSNSの1つである[Mastodon](https://github.com/mastodon/mastodon)のフォークです。創作作家のためのMastodonを目指して開発しました。 +Local Public (Does not appear on the federated timeline of remote servers, but does appear on followers' home timelines. This is different from local only) -kmyblueはフォーク名であり、同時に[サーバー名](https://kmy.blue)でもあります。以下は特に記述がない限り、フォークとしてのkmyblueをさします。 +Bookmark classification -kmyblueは AGPL ライセンスで公開されているため、どなたでも自由にフォークし、このソースコードを元に自分でサーバーを立てて公開することができます。確かにサーバーkmyblueは創作作家向けの利用規約が設定されていますが、フォークとしてのkmyblueのルールは全くの別物です。いかなるコミュニティにも平等にお使いいただけます。 -kmyblueは、閉鎖的なコミュニティ、あまり目立ちたくないコミュニティには特に強力な機能を提供します。kmyblueはプライバシーを考慮したうえで強力な独自機能を提供するため、汎用サーバーとして利用するにもある程度十分な機能が揃っています。 +Set who can search your posts for each post (Searchability) -テストコード、Lint どちらも動いています。 +Quote posts, modest quotes (references) -### アジェンダ +Record posts that meet certain conditions such as domains, accounts, and keywords (Subscriptions/Antennas) -- 利用方法 -- kmyblueの開発方針 -- kmyblueは何でないか -- kmyblueの独自機能 -- 英語のサポートについて +Send posts to a designated set of followers (Circles) (different from direct messages) -## 利用方法 +Notification of new posts on lists -### インストール方法 +Exclude posts from people you follow when filtering posts -[Wiki](https://github.com/kmycode/mastodon/wiki/Installation)を参照してください。 +Hide number of followers and followings -### 開発への参加方法 +Automatically delete posts after a specified time has passed -CONTRIBUTING.mdを参照してください。 - -### テスト - -``` -# デバッグ実行(以下のいずれか) -foreman start -DB_USER=postgres DB_PASS=password foreman start - -# 一部を除く全てのテストを行う -RAILS_ENV=test bundle exec rspec spec - -# ElasticSearch連携テストを行う -新 -RAILS_ENV=test ES_ENABLED=true bundle exec rspec --tag search -旧 -RAILS_ENV=test ES_ENABLED=true RUN_SEARCH_SPECS=true bundle exec rspec spec/search -``` - -## kmyblueの開発方針 - -### 本家Mastodonへの積極的追従 - -kmyblueは、追加機能を控えめにする代わりに本家Mastodonに積極的に追従を行います。kmyblueの追加機能そのままに、Mastodonの新機能も利用できるよう調整を行います。 - -### ゆるやかな内輪での運用 - -kmyblueは同人向けサーバーとして出発したため、同人作家に需要のある「内輪ノリを外部にできるだけもらさない」という部分に特化しています。 - -「ローカル公開」は、投稿を見せたくない人に見つかりにくくする効果があります。「サークル」は、フォロワーの中でも特に見せたい人だけに見せる効果があります。 -「検索許可」という独自の検索オプションを利用することで、公開投稿の一部だけを検索されにくくするだけでなく、非収載投稿が誰でも自由に検索できるようになります。 - -内輪とは自分のサーバーに限ったものではありません。内輪同士で複数のサーバーを運営するとき、お互いが深く繋がれる「フレンドサーバー」というシステムも用意しています。 - -### 少人数サーバーでの運用 - -kmyblueは、人の少ないサーバーでの運用を考慮して設計しています。そのため、Fedibirdにあるような、人の多いサーバー向けの機能はあまり作っていません。 - -サーバーの負荷については一部度外視している部分があります。たとえば絵文字リアクション機能はサーバーへ著しい負荷をかける場合があります。ただしkmyblueでは、絵文字リアクション機能そのものを無効にしたり、負荷の高いストリーミング処理を無効にする管理者オプションも存在します。 - -もちろん人の多いサーバーでの運用が不便になるような修正は行っていません。人数にかかわらず、そのままお使いいただけます。 - -### 比較的高い防御力 - -kmyblueでは、「Fediverseは将来的に荒むのではないか」「Fediverseは将来的にスパムに溢れるのではないか」を念頭に設計している部分があります。投稿だけでなく絵文字リアクションも対象にした防衛策があります。 - -管理者は「NGワード」「NGルール」機能の利用が可能です。設定を変更することで、一部のモデレーターもこの機能を利用できます。 -利用者は、独自拡張されたフィルター機能、絵文字リアクションのブロックなどを利用できます。 - -ただし防御力の高さは自由を犠牲にします。例えばNGワードが多すぎると、他のサーバーからの投稿が制限され、かつそれに気づきにくくなります。 - -## kmyblueは何でないか - -kmyblueは、企業・政府機関向けに開発されたものではありません。開発者はセキュリティに関する専門知識を有しておらず、高度なセキュリティを求められる機関向けのソフトウェアを制作する能力はありません。また、kmyblueのメンテナは現在1人のみであり、そのメンテナが飽きたら開発がストップするリスクも高いです。Mastodonのような高い信頼性・安全性を保証することはできないので、導入の際はご自身で安全を十分に確認してからお使いになることを強くおすすめします。 -個人サーバーであっても、安定性を強く求める方にはおすすめできません。glitch-socがよりよい選択肢になるでしょう。 - -kmyblueは、Misskeyではありません。Misskeyは「楽しむ」をコンセプトにしていますが、kmyblueはMastodonの思想を受け継ぎ、炎上や喧騒を避けることのできる落ち着いた場所を目指しています。そのため、思想に合わない機能は実装しないか、大幅に弱体化しています。 - -kmyblueは、Fedibirdではありません。Fedibirdは大規模サーバー向けに設定していると思われる機能があり、例えば購読機能がその代表例です。Fedibirdの購読は擬似的なフォロー体験を与えるものですが、本物のフォローではないため、購読対象の投稿が配送されることを確約したものではありません。小規模サーバーだとかえって不便になる機能を、kmyblueは避けています。 - -## kmyblueの独自機能 - -以下に列挙したものはあくまで代表的なものです。これ以外にも、細かい仕様変更などが多数含まれます。 - -- 絵文字リアクション -- ローカル公開(Local Public)(リモートサーバーの連合タイムラインには流れませんが、フォロワーのホームタイムラインには流れます。**ローカル限定とは異なります**) -- ブックマークの分類 -- 自分の投稿を検索できる人を投稿ごとに設定(検索許可・Searchability) -- 投稿の引用、ひかえめな引用(参照) -- ドメイン・アカウント・キーワードなど特定条件を満たした投稿を記録する機能(購読・アンテナ) -- フォロワーの一部を指名して投稿を送る機能(サークル)(ダイレクトメッセージとは異なります) -- リスト新着投稿の通知 -- 投稿のフィルタリングにおいて、自分がフォローしている相手の投稿を除外 -- フォロー・フォロワー数を隠す機能 -- 指定した時間が経過したあとに投稿を自動削除する機能 -- モデレーション機能の拡張 - -## 英語のサポートについて - -kmyblueのメイン開発者である[雪あすか](https://kmy.blue/@askyq)は、英語の読み書きがほとんどできません。そのため、ドキュメントの英語化、海外向け公式アカウントの新設などを行う予定はありません。 - -要望やバグ報告はIssueに書いて構いませんが、Issue画面内の説明やテンプレートはすべて日本語になっています。投稿が難しければ、Discussionに投稿してください。こちらで必要と判断したものは、改めてIssueとして起票します。 - -そのほか開発者へ質問があれば、[@askyq@kmy.blue](https://kmy.blue/@askyq)へ英語のまま送ってください。 - -ただしkmyblueのドキュメント、[@askyq@kmy.blue](https://kmy.blue/@askyq)内のkmyblueフォークに関係する投稿を、許可なく翻訳して公開することは問題ありません。 - -## 開発者のアカウントについて - -kmyblueのメイン開発者である[雪あすか](https://kmy.blue/@askyq)は、用途別にアカウントを分けるようなことはせず、すべての発言を1つのアカウントで行っています。そのため、kmyblueの開発だけでなく、成人向け同人作品の話も混ざっています。 - -このうち、公開範囲「公開」「ローカル公開」「非収載」であるkmyblueフォークの開発に関係する投稿に限り抽出し、翻訳の有無に関係なく公開することを許可します。これはkmyblueフォークの利用者にとって公共性の高いコンテンツであると思われます。これは、日本と欧米では一般的に考えられている児童ポルノの基準が異なり、欧米のサーバーの中にはこのアカウントをフォローしづらいものもあるという懸念を考慮したものです。 +Expanding moderation functions From 725811a2e3295d4c0a82fc46c89b9402b7a4b043 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 12 Jun 2025 19:17:16 -0400 Subject: [PATCH 67/90] Set new icons --- .../icons/android-chrome-144x144.png | Bin 8852 -> 5810 bytes .../icons/android-chrome-192x192.png | Bin 11510 -> 8741 bytes .../icons/android-chrome-256x256.png | Bin 14862 -> 11993 bytes app/javascript/icons/android-chrome-36x36.png | Bin 1835 -> 950 bytes .../icons/android-chrome-384x384.png | Bin 24227 -> 21112 bytes app/javascript/icons/android-chrome-48x48.png | Bin 3216 -> 1384 bytes .../icons/android-chrome-512x512.png | Bin 38207 -> 31858 bytes app/javascript/icons/android-chrome-72x72.png | Bin 4724 -> 2262 bytes app/javascript/icons/android-chrome-96x96.png | Bin 6150 -> 3306 bytes .../icons/apple-touch-icon-1024x1024.png | Bin 114584 -> 77950 bytes .../icons/apple-touch-icon-114x114.png | Bin 7114 -> 4123 bytes .../icons/apple-touch-icon-120x120.png | Bin 7494 -> 4366 bytes .../icons/apple-touch-icon-144x144.png | Bin 8852 -> 5810 bytes .../icons/apple-touch-icon-152x152.png | Bin 9125 -> 6177 bytes .../icons/apple-touch-icon-167x167.png | Bin 10012 -> 7041 bytes .../icons/apple-touch-icon-180x180.png | Bin 10755 -> 7709 bytes .../icons/apple-touch-icon-192x192.png | Bin 0 -> 8741 bytes .../icons/apple-touch-icon-256x256.png | Bin 0 -> 11993 bytes .../icons/apple-touch-icon-36x36.png | Bin 0 -> 950 bytes .../icons/apple-touch-icon-384x384.png | Bin 0 -> 21112 bytes .../icons/apple-touch-icon-48x48.png | Bin 0 -> 1384 bytes .../icons/apple-touch-icon-512x512.png | Bin 0 -> 31858 bytes .../icons/apple-touch-icon-57x57.png | Bin 3787 -> 1673 bytes .../icons/apple-touch-icon-60x60.png | Bin 3950 -> 1761 bytes .../icons/apple-touch-icon-72x72.png | Bin 4724 -> 2262 bytes .../icons/apple-touch-icon-76x76.png | Bin 4918 -> 2360 bytes .../icons/apple-touch-icon-96x96.png | Bin 0 -> 3306 bytes app/javascript/icons/favicon-16x16.png | Bin 986 -> 6182 bytes app/javascript/icons/favicon-32x32.png | Bin 1715 -> 6182 bytes app/javascript/icons/favicon-48x48.png | Bin 3216 -> 6182 bytes public/avatars/original/missing.png | Bin 2897 -> 2433 bytes public/favicon.ico | Bin 9662 -> 6182 bytes 32 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 app/javascript/icons/android-chrome-144x144.png mode change 100755 => 100644 app/javascript/icons/android-chrome-192x192.png mode change 100755 => 100644 app/javascript/icons/android-chrome-256x256.png mode change 100755 => 100644 app/javascript/icons/android-chrome-36x36.png mode change 100755 => 100644 app/javascript/icons/android-chrome-384x384.png mode change 100755 => 100644 app/javascript/icons/android-chrome-48x48.png mode change 100755 => 100644 app/javascript/icons/android-chrome-512x512.png mode change 100755 => 100644 app/javascript/icons/android-chrome-72x72.png mode change 100755 => 100644 app/javascript/icons/android-chrome-96x96.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-1024x1024.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-114x114.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-120x120.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-144x144.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-152x152.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-167x167.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-180x180.png create mode 100644 app/javascript/icons/apple-touch-icon-192x192.png create mode 100644 app/javascript/icons/apple-touch-icon-256x256.png create mode 100644 app/javascript/icons/apple-touch-icon-36x36.png create mode 100644 app/javascript/icons/apple-touch-icon-384x384.png create mode 100644 app/javascript/icons/apple-touch-icon-48x48.png create mode 100644 app/javascript/icons/apple-touch-icon-512x512.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-57x57.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-60x60.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-72x72.png mode change 100755 => 100644 app/javascript/icons/apple-touch-icon-76x76.png create mode 100644 app/javascript/icons/apple-touch-icon-96x96.png mode change 100755 => 100644 app/javascript/icons/favicon-16x16.png mode change 100755 => 100644 app/javascript/icons/favicon-32x32.png mode change 100755 => 100644 app/javascript/icons/favicon-48x48.png mode change 100755 => 100644 public/favicon.ico diff --git a/app/javascript/icons/android-chrome-144x144.png b/app/javascript/icons/android-chrome-144x144.png old mode 100755 new mode 100644 index d636e94c43bf42f5e77fce4f0301d7251fc2b856..698fb4a260b13621d40468ad5f3fb3438568748d GIT binary patch literal 5810 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 literal 8852 zcmZ8{2UHVX)GY!cMSAaqrjg#8w9rBqkQO@9i*%6Qs~`}15fDQY0!SBuD7`5dF!U-& zhmYRjAJ_lZduzRwHJN0RGk5Nsd(PQ=pGkb7qee`~K!}BfMXU~0)(7@!|2BL);C(}N zwGG(eIx1=_VqtwwCAzVB2z+OI1=ZKa!V2QX!itE&!ny(uMQmbW`3YiSZChhuN#|l= z(RvoP>pcg4z_Zm0F!AHL8+A5DW2#ByA zXJylm$eEDW}?|q=B`IO(^@bj+MqGzE?ie$YyFA%*d^G&l!cBTy-y)7Lt zxqnW+5!U$xucFs|{`Qsb^Q`<&lW*Ya4t68&>}Qf*^}%^vKRbDm)9TGDP~bkG!2L{) z_4&Xo02REEIu*g?r6^FxNX%fBbyqSSa?o|&6}4DY5xV|Kqx0PUy{GBVaIlE!nCcz2hGB1<0e!T z*B1~QNF^R(Y^^bDW5)AFL5UwG_lEsfb)~;tl?gd|T|7&hF_N!r)dft(&YqxDEdz1T zp6oHo_=k~8&+M@U#b$Nq5+%NzEY{`H?W*onhL0L1Rz68H;@)~ly?ZlRoUZpm5#k~~ zs|KHw%S~gm_TFTO54&Oxf-PFy6l8@VWC&IDy=NtigUDK=0He#Dz~zx8M7=kUjxiIA zC;VQ_N!tw~9GhjPS04ZUC(X`%UHYK7GGFAPZc$-FN|@<;GZ432`ps#<;pmv)q@PzA z>)t!a%b*;8_&|G6_g0eQ$VV$sW4-r~E=*}NK^l8TyQpl(MI}UE`fJ#|d|I{{%{TqF zxH-@#d_)!@QDAm$o!BLH0eG&B7Ky>PdsG^y00ZkcybWB|Tmg-tLz_wwVG>@6&h;(L zr1W}9Y(4Z!3q`u=U-?7U9=xsmvQA88xxgHr^sd>1g>3BUsxPd?)@&tB-FN= zQQvanivN&DhYcwvW$)(}db6~gkeD)QF~vS1ZqrAAn;-WGrQomrWA>*LwXF&PB8xr1 z0_V$)c@e`+cI1-?)M9_7sC-*mS)24-AQCnut1iKoT~alZ9=go0f>IbqvHHXz4yA2eu|8W z{ohp`f=#ImJ=6vVkBy<~!GFTad2^X}Pao>TF)8OqEHYt)zk0DU*_~0)X z@8{^$&;j;RTr`ZbI8(>Si&{D8j40C4Cc8)e+VyJoXAPf~IH(ktLSg+~YKGNkuA_<- zn9tTl-R74!A?{lZ&(PdIEnCder@*UttL5;c>oS>7q|WMqF7_!Yc0Ig6&o zQ|3&n$WjmMqd^}}sfk8ZWaS)RTP^Q)v2v_21a?Ozn6Opw6ahD{mpTWE@b*NAZlb)i zGwNic2V}=!VBI%l{zQl@b=4I-!e_l0zKi zw>5)XFDTQephn5OL4uw+At7osSfSUXV%w#8`n4&$w`o4XZ6P*oRQsLh;h<(NOY7b* zhdrLG#hYL9CEnKq+1n@bg)9YW44RkO@!*-Z`1B&plcplzmTZ{h7GRg{KV^?iQGoHl z(Z|zQ7sf(NLMu(xCVAW6Sa|#67z0B7Xq@+K zuSDISgQx2sPV5}YfUUrkAWl;iL&QeTE6GC9u2YV`j@o~}2)fBqIzfp{G-K9ix5hwog!^+Dihnl(IU7rvd~$Pt5M14_#}&QP~G zZAoCtcPVq0x*}|(RI)K;Xu{Z08IcvFQNX0qbb|yuZn;@5&=N!ZRTih5gi|az7l@Mt zssjR08^*ivOyruaFf6vkgS1L3Be`3H<>JT+ZUOuHiHNXU$O3Sz-5h1Ombop=gyJyWD9*Q$APu$fnYI7ajtzsg2kV2vm9u)f0@mxvn3x1aU3= z7}!Li>Eg6h6?>v}ea>Iq2dO-J35o5*Md!E0ymaxGjU_*m4$z*fvJ#O+v!0b{;`4y^ zZtiFWWr?O;O~v#XCim|+0moG9$o??G2HV4}0s~A=L%&JaZUX+>e>;#yp5Ls`;48se zR#0emMWmD6tXw}L={#1wd5b|5S@ z*~q@34uR4*RBXD+^mXrY5;)KFawDdF+}Xggsa-7-TB(*+)HVcWs0d%lZkR{eFLTM8 z)ubsu0&pG+~a3t9E!jtkoToCKq!ELIND=>LSzJFCQoOia{f;}!?;I#)yRgdC+* zj-*)Cw922(ij3-}%rx+1#wlL@jpwMOr|&k|YfB)5kCuL_=d&6Xl{&pT&t=+Ak=|)c zzyw&Wqk~ab);Jw(ADYV%VYKuQcRq&E6J5GGA)&*AA6*9i*j%r&1)Hk0b$cKl5MdVTk%yX7zx0E zaHo+)B}bi}4e-TS+xRD8UZGBytyLvr$WEG=99Kw&{LW}Wp?*l}DycG?U)SjnVYz9Q zxgiOq>MAtDx*6=fkXNhkiFVziiAL*F8)6p`HqS9_Apmxmd$;p_)k8M_7L`oed*S4u zsPUkf;}c_O?l z{qtS*V}A?fyrPIzX$ZapcidK|FT4=lo;EhojNvTXpa7EPZ)&Cwrfh8DLc}1h*``#5 z?hRdEab^-W$`@uvFYs3>CIHTwb|y)kK5$ewH8Md*y{m-4&d|BsBy`T5gvF(7 z)5G(A<9Kh%3g79z39}YPo$E78Oymn@}0m$PPwnqB2vLilp?Cwdq>Q&BZ zN=&8}$tiluKW^AP^+Wh0stcuhg(Udw`!))Fx0GxbB#=lV@)Ex@Dt~Cglu#2?Ndbx7 zp!tti(x+C+g0v`K$rlY59Fue53}U2b74v*`|&vAQQ&$5;4)|Cl51)rGV(6 zk;(@B8oemd&d?z9iw|dojN^Lu_QG?sU+t_^rNI|9pUBsnJ0XRbbdE4feG92!vEAEy zG|pK`<5KCW3?$;=Ya=C8Pps}2_YSJX-fOE(Uo1~Z7S=8=0o7IK-EvVul8abs2|l8k z9mMrEYB<=2x>y3xp@q6ktOi;%FdyomfdllTje4cUqs1 z4s@NhzI4B*6FOAqfnnD)vx^I5?djeQx%0e^%}hQG5FDSe8#~m=JXnh=Z{d-n@3FBu zY8CE0v6PD)kWE!>3>#6KIi9J@NJlMhJg>VcnAAwO&{vu%zh23d(cUFn2D-0uw{4ae&o+77^#V^($?Wx~*OxerjI1itM@!(1G-{^>< zi3$~9e|-DW4PPc&oEfswZFYQ{gtEr|p35GjOo_rVx_T{kxpUCY^`#m8*v}$a`Y0af z0VUK~#mEc5oOvxKY#^?lPWQsVKc*D=4PSOv1jvgE$+Ol>V|*o_)-D8&aGB%($2+=O zRM7P&=W_%BXPKg9pF=h76bUvcm!8$m8<9H9oN8d+DzfcZs{p`y|B-H05OG|cg+tp0 zg>Ve>&v}2A!SSPOD3i z=f?Um36*C#FU%@s?0;{qfJ*_PD9CjfNqHDmopQ~WQp{e8(W8R!+N%&c3(AUrtC~U$ z{MS6vO4~|-eLgQ*6l+>oiwhannPkXh7n03Mjw0094zQuqIpS#{D|kb>WrN)Ekk?#V zpJ*zc89157ib;e%ARi?EQ(Chkw`6MQWadt6)ErAjW#r!DDfzLQ#vFeNc-qv33+AHp3s*I*SN@oJ2+28*bgl_-zFTnlvX8u9sKX3(^#SIjtQDt9O1VX zMh`3!5GQ~7jiyS>EpU<%wtS^R@T_;*A zafQsm;7^M>radgcR3ijZ?7whO5Npn)<*6`E8(wT=y3db9ZlL;lty7U)n~{y*@i;&+ zYuhuokI$RnjjuWKRI<+2&o1O@Bg#Gzj&(D^0uO`cfs~(-o9#2f?PWQJjbl6}0^IPj zbIVutjr8_G^t&#W&&~-#=<&m5JbQZ^{#41UXwaWT9@&~8N?dr(!w*qj%L7XdnaXak zpGK;EPM?z|P8v4JX8kMxN5R1JJ_aYv@B2@JHrqWj^9~(%@AnA1Af6)$GS(%;p z%r_W_YYL_-C?aRqX+qABm^n4_Tg2m4&_}^*-RjC@q<~R7U}{`Bd-nz^vy8RdVYq0k z#smdV=)Wg3;!>?d=9dbEL!s*4MmCd4>_7=B^MMV|DgDxv3HIRW@5g2EZ1)s2N#9q@8+}i;g1-7#2*#+H8-zuC|h~hYZ zlZ0&$4ItoHUNvHpirx;)oQ%@~>+Yc(!xr1uw)~>M0ZI%x3xZ5SMn8S&-T*)@EGR0y zOFT&6J+RDifO@E}-}*M+qL}S#6HSlj#d@_1GC^~g4YkT&8&F7kv7`Dt?J04EAw}bb zqqE@r#BehvBh$TIVA+%{2B4*X%;he*4SGUtG8jm3hb#5~h~oY=oE!07VIYv?e!@yb zZrnamSDgSK_O4TF;7j!6!L6tn%Pj}fPda&t=lMr`tSji?Iw1)uhVfdVRSz?$`e-~X z^6Q49lgy>V3+_qy49|zxV-;S#Z3)?Bqn^Ffi+*bOLjZ@qF23fTlF0`EGwKqr8Xo$@nqQU`J(&5Kh@aprFk`a6aoDu zLLGHGT+eSFl&!o#lc(wyx03Ex0Z=45~xK@ z_bw($3o&F`DQ6RH2U3442BMP00Fr2GGE^RqqWWz4i8W4TO<1$)H}@kLzT&_PPV!j* z?ujKpj83h}w!X=KxJj5K0)tUI-y`xnaFy96cFGUXRrO_0p*@NL$3poecRu5vflTn} zAQT=&98d>M$y5E4ka#-uYuex{6nV;N{BxJcMIYaJe8xA|HAm+{F9`vznp1ID!9xwP z{zvimlsATd1Ep1@bu1%a(RsMHTv{#1TcHHkJ>2|CW(LjLc?)^|4 z77rB0=p!x~#%0+n50vIVE$>G3`By~0_#Wq2H*fU&AD~VT0A~dAd!3HX@wRe^FbQRf z%^w700D*fhJfoW}KZ zc}~7oQAqY+Ysd^2KsF~nPSJ06kR5RfY6}?abjD7}qINwf^&3O7SV!cQmXG*{M@BEK z@l#80VI#4bqshd-Le{KmnAX`!GSzK^NDO74+E$UbH*K?>rxyA37CmEL$}E((@(G5`o4s(bIKvF&d<6JRr|;v(AT zCj-bSz2c|h`MN0=!S`BJ~}>FA_Q%9d1gkBg%@o7iex*s ztZ7*8)D4eLAr0Yo%a_rI!bOhU-zw%=N_-66n^sf>Nd3?jK;1c{v*(C> zJWl3Q*dz=L*QybC^EmOwNW&p-gXCz7uFD_bVf!UFY$@FQ;P-_MR}p_iAkZuR;+1d5 zOMeID?{xv@>ybC>d7M)P2p&qm-#u~j(QY4#)-S@D>=xvkDiPK3pqa zPSQQ}Ks#xhLp}*8ot&XaXR&|irU1IDo#!C|AZuuHN;R@Qbu?nYI~JiVT)H<{ya~TA z%6=ta_T%*}CtS60YefK#vU$tLYR;pgcj^xpK5}n#u{?hc=vol}vohZots4_-HOJu% z&ya(4)3#e8pXQe2FT!lT^^S|7f}9p^u%!{3|E->#1zk(wea#;NhbHD*=<4aC3Z^gY z5IxRP!xGn6T`!`jiKjl8vRiHR!><-Tn6F2VaTCW$=Wn`6GkJe8xVuW3T)HZ?o|Vi7CtV;s1}LHwBIlNW%dMk8eNWiYygDeslD*LPvT0ErYP$jEpRryb}s?I z9{fnbi!8=B)O?Hr5GjEk;8!vLL0SA9XJLDS{e@Z;G5(azU+G6jbN1Nc9% zFa2Ll&5fm-b%7Idn%{hQp}Mjpx!0A5$p;*~R!gL>a4Zgp%8iJ1!!N*RlmYe-cfFnP2~SL8?{-u$JT?JJ`H1C zTp}dZ*5x|Trm1eJ9&tee;tr=+Yi8-TdlOS|Y*&kjrhWiWLNYN2+(LX)Ic^_OmaE=2ph1*SC{N{d*k1{^kmchCPmzQ`=c`ZFvG|@+2*0xZ{EyMF8=by# z6UM17er*)eB6nxV^D@f5zAO_1uR4XVH;S146qN-s^P%%Af%{;y?d~T1e}h-8SfT<9 zv2$5ES@hKkvLcMQ0r9D7{>)_hl$18nMzRp-{`IUh`4^N+@G@5eNm}QznUqqPj*A&S zz&P8!W&vG}KLMKyF7Z^cr7v1pMTNZ7-GVlWG!+MB2p|kV5x3`!C=8f;W)MpTxO33j z__*Q8It1E}*S_g2#X@b1e+O|@@!IQLLoRh(4IYdggEKx9VIs2aue*xsn@CepH?7(F z+wR!D-GZCX1IG2WQ&)>NS>rH9Q-Ax6Z~_>b^vylwX~);$W*Se@+Qg@(#M+f($)+FfX4(g51=uu#tS`h*s3!mbCzSd+dS7hj?% z6Cm<#EbHFMbRwS^r_{X1Bq5SR_V2sH0a@;tdBX4zhb-#DJ`K>Y!hunD>nrdh6am`Y zaTb1;*$~$`xqE|)rti6#q}w3vP%xeVbo*<3P}Rb%dXj5^a%_l}WJ#9##-&m&OMt>m zk&OWx8Kgl_L~-O-&erpL5{L%SrO0+i)A)@u7(;})PJ{Q`fQDX-C>?51F`O)ZWF@Pf z3>)+qz)(4NOzx#~BZ|%{Ky+G-|M!z)+;;D#N}`MP1(OGPy3oVwG)c{WXCc&)N6Q#< z#H5KbU(n|)66?&n_O+kZ@Z)Fyq}XlCC&QE(d8$)E*kTZ!hwk~LD7q6|D~@qtvTpQ1 z(R(_QFF$%#Pk~rVNYwtem1IVa(tt)^ZULa{Ci!oVfUt-hRg;wqCs#$N$f|CA5?jcR zL%0Yb1R(3f4|`mNt5; z@4vm6>RS?@B6{G8dxZ10Vlw(Y?T|(5Vau$l#Qix%YVf;84_USAyim=^_V2Yce=GW- zKcBJj3-R$X5`&1f&Y6tI_BR%+LUJ?@I^%+0_qVXH04Jg}YRr28}0)r<6A+E6;+}Yj3NC4ZZh4neC!qKmNy%F974X) zjuKn7d88;7; z=k8j9p(dWqlb>jjTJopuHhd|p=H0!v)|6PEGd)oh3*=MSiF)ryb2t~0ICy@;e5je< z)`1v4tConx#E4-dL7X+@PQ)Oa6a}CUe$Se!G83X5@&p7tM#1H)V&ZFO<7+Sd%G(~; zVF?Qgi|`3b@d*jN6cm&el#&(_<@xtP5HAns-*X%P&%oWo&eeg zMWz1NVC9=U0x)>`e@F0jcDMKOwQ=|S{{|5fmKGHMUmHkL9X(*f_|L|`!@)Pe#@ilC m$==N;(1*>y*U!$`gYBhSn4V|%C!*dsQ&>u+a|;S diff --git a/app/javascript/icons/android-chrome-192x192.png b/app/javascript/icons/android-chrome-192x192.png old mode 100755 new mode 100644 index 4a2681ffb93418778457313717257e0e36781abc..2b6b632648f6b18918881287c8a8b295cbc81eb7 GIT binary patch literal 8741 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 P00000NkvXXu0mjfxX8FH literal 11510 zcmZ{K2Q*w!+wSN!7ddx;X! zJNNj$yY5}z^ULZ5a=}@2()bh0*R-BKs0Wd z&Dzg^CvdG)73Dy8_dhwUMIV7P1a3-(o*)nr`TZ}(@ABCCd0sI#YcGt!}-wK2JTOHf3XJl)MdkC7m|-4+b-H~xv=pmp>nBK zmSn;B2||RNV!g$4w_|laqm}=#e0unxGe<{bQSh3$Xi=9`{_aWZm*I# z{dU}6neKxIJ_$+e=38_W^Jj29HZyc7N)wG%Y>!UdW$7u{K-A2*G%mY_8+H+&)vhdg zE_RPMuf}r==NCaj2;(!|qlf4u@atq)$rw|RU$XCBK@^LNVFU;90ICWyJk9f(x3BVDH$`V& zdomlm@=ny9kDU69ib@gfAxpq!Chs?|2djz%O;A!ppf;arbUV^Ask9?xiE|Y}EK1b$ z$%`j~6R0hNnI=I~P z-M@`kF+gSQI8It9H5(*XHEmsWn_CIv^sMInAQ6f`7V?K6$Jag+0QmBBZ<>MvN;zGk>tAilgU;}{PSm?e?l6>c)%%ED0w4Mp`5vR_pC)=RDqNu6l7u4X_UYXvSt?G zYOA5?^SNU(dG;?)^DsI}Di>F00c28RbpyM5@bbbof~|Ru5XDs&lCH6TqAgf+Aqy^q zfe2{dsERN<4XEh2-d2Zb?A{If0DD7FUyLVoIP4ETGZK}UX(jiRLY?a>ESSrlH0RDy z_A}p$sBT?x5Ezo!vr zLci59AQFVx;KagmiNsKo1?B+8g99gciObQn2tm24y(e7;Mt2E`(SZZIus1GZSgW?` zzw{gEzKoGOiwm{%v%-(ex|2-T*c0;O12(-UfEXjcSaqEP8SIFCR}+v&S6PaqC9Pmr z*VIl*^N&$lH7+#d0)%QDR|4o^?I29`q6LgqaGKPd1qm0KwbFMZ;&+2C6)L1CnbSu1 zmG{{epDQ1j)X<4%W*DL?Tz4otuPsF}kntaq+bJ)82&ZvRrpWk8h#oCe4hPkd%vHHL zhmv7ZJ5lme^WvpQrcw5E@co{QJ?N~!2VWzXvE#X4B)$p&#hz2@ym?EzDSEeXBziJ2 zL|K-I!LAAQ2k)tMz4DO^Z(QT%Zhlo(IW*nZ_kDQO<6#)1dSk#w;IWA$UV{^1rYiW; zIyGM=C{wlHq=kX_r{FfPHN$F{se||liOn=th38}T4U=DKvR%IUJPmeRLpM~A;0@A69hW*K2p%Zx1_XSwP@(UZ$8qV?aTGkwXR<}Hq})PdBJ+5o?8V>Fl#36jGEwip1S zsT;?e2{`ISXI44+BV-?on3qQ*Jp>0rvR<(^URUs1%<3#g2#7sJU_#_UP?+Zc;pera zv=ta18ZP!bvUz)+tc%$k8=RMCEyTtImO1r{*QqC&&3>x@4T(mPDs<$~2M4f3h-n0Y z9K?<=aK(SdFXi2&$H#v#242>Fz8kvlS$;Li&hnYJRC@iCLtT3JnC5NS|ILB>M`qfUMbZt<{Lp%8(fbGEtBRU)3wa3pH(@WCU) zh98u9#bCaTHv6C08B9x=*8dz~a}~-RZX=2z3oNPetp@e$+T4b=UJdHjIXjLY<3D7Y zBIjyeGv_C&GeNAk97Mx!+AoaNG>PfoUJCH!9;`i82^TZ%L%8)6SsZQN{s#oM=pY!T z1RW5?k!^pn6vvjIoHo1~f3>?Z-|GiZAx>*EyCe6nrRJXquwq-SJg@qjdl%zipU3GX z(3&%w!okv0w9Xk~iW>%xjb4^iiz5w#A0cs-5~%i4V)M$X6@1K*Wc(}7J+zvaLvU=V ze#e0j=oLL57O2F~aFsn8V)79t`tRGmRb$b($#NIU($0ezD6HX5R&r+<(W>Mzle=<` zW+lrawJx3$N4CVo5h-Lg#QHlLIb|hix2C&@?o|e0!dHfm7WGRtx0JNVF*%#qrvCjC zQJasGQQxX*mcy)8rhR1M9$B4?i(bk~?8a=zqNBuWz@=%s*J$cR#;q@2k~h_`NF3 z426j~!DA-=3hKp1y!a2vaJ(T$LnhvCv@^p!KUh|Cpy0>muR0DU?{Fw!frXSoE`l4m zf2nKDpJ766L^B7XJbGky+z8N+Ol4XJiJ(Wjj7aflX`4pd5M)O<7H>|`dVoWq77MYr z;L5*uQXSu0aDiX0!3l1N{^M{YF4IK~zc?@1Ihu`6w&;;V?-cEjSMtZ3{W9=3^n~FX=5h2;BXtC&GF zq;1Gw5u?op;on_@3}||1A33yzQfJIpz3+p#c`v$Z>$lDx+YMa|MO!u&QC+<~A-xiP@T((PgH7$i zRgz-(^pHZv66E{|o+?!~85|n+Zr#mVDonWk*$^*w* z#d`xB#Mw$bbHFen^P$TmD_v}R_`t~RaLrW)G2+x}rrHU_dfM73Iwpe%-?kp zlonPdT^E5v%fCNNzUF;Zyz`89a@`||wak?fCem@;nVJWphjX!@P8($V*|&vqZdu*e z=P-N=Io>~1Qj!(GbQ=gob*ad5O9Pug9$+I~=)P49s3s@q1cA;yYXA>iYtD5hQbXj0o#iFcf4th!scM5V4di{jQ!%R6ShTV zUb5`u$f+K|MBP1vhX%M@n}pT&NmD`iz+SrCdOZgQ8J$MU`-!7SKH=d%->5=owd9Zh zhiNS8vyAp|pl%vqBT9btmU4bj$Ws5A8U<|#vOH*k7t5w{*8Y?@;D`c@+|~OYGt1a- zQiIuKyA$8!E0*9H)7g}e%Fl&4@A$*e+1rNl1t#b>wO)>McbLPo3lh56{R5m$91wr2*_ZPQx}#Ofcpg0}9I4pqp*+Wk;r?V?3fm7z2#|`IswKRUx_3 z&2=Q5vFhmxa2JvBw(`U*m={MREcnf*S7X;6toAgy0i$7}mox1-CvzCV2OWV_a*{ir z(JRqp_=*C>xZe_UefKmBoJT}n?Ub+sn{(QiF4FuG+LD#_#_@5njUXb%cHkH1cpzg&=t)5HgpT#>o_K0Sz!?gYynv=dW=GH0}?$Dd# zh*Cfc#b>t4eWg3g#znKC9(Y@N)ZQh>RvM0kyA!x`8a^tX3k3)vCC?(syC;sZjYfSu z1W*{eB-M|4$%wQPxNiI55QgEGC~RDDx+F1WFy=YYYXWKh--O95oMl=fw$bp2+f&uX zs=ILGtYAccRIIuj!cVeBbt32Uwj`@9b!f2I$3nA)aehXYIjR$)54t^_n;Dg&yO+bD2dYl$!Q)nwEX0^%yuev1RFD zx3k#M2@1PuXRG}rwI)J<|Qu1!WnB9cs+NWsk-I#4Vf$;^6Ny;`HVlICfQJh#KTJVF+S#t=FNlO zGk?>*xrg*X_btPHl@j%F~L+I{_b@xl(qXaFLulUf&PpJjl547r+ zG31_p^cn$#%kp95KIh92$@LUKQ6z?ZYd;KhzUpdNR{O4d8-(wCYlsiEo=#S*cK(rn z)b<6EGVFH!1V!ro(vDC_4{S-5yHbu{t(?}(*71=Ub?Vb0AW-0y3Ffz=5UAQC8p?4P zB$4Z5M>^9ntpde%p^TMcusi=3r2E{B_nC`+4`hu)7Y6Dq^4ey;0eI3(5Y>aeMa)fd zrG9{KSzV0|F;@n(@^}Y4$<=+yBQLYQ@y68wox0LOH2;zwQx9Jns2v&v9x4;tEG}gD zugAZ^;dA+^;E(*(dw=ZXjoYBCHa8c+p0W2ts8)dBXnOo1fU}w{5|xVzZV$G}I%qJz z7}H8%;#N!mD*z14!JeknyOzTTP_~^#LPWpPFHZDIlFu(yns^D9UYPT7hb(a^Sun8V z2Mn8uQ={BUE`^Rwnm}kVj~|n;qVmVi8n-*0O-N+zGlTL|*py{-6!k6Bz8&fWb*?|En)Q}OSa zTAKG9Z%LO=ay+g!fonM2t&qv;>pXZSu$>&bmOzy>n~k)2$M5G?3j6$M-pn6>Py6@= zFDwt$GQ`A40h`ef6LMCl#PJ^;7OL#vGhBBB<9I5{ERLuy(hP$D!~S_;C8d(@_kv03 zCDc`2+GY=BT?)I}q_`+18T30ivIiwE?yP{zLOb$Hj(h%a8mHPyD}!!alLHKj76NX^tt~ts;)`Bee{}=dB2<`A#|~ZKK}Xi z3`5~ej(!qy_*l>m)hPrIy|nh{6A+3>J=aCvZRjJQzuNAe3TF9Dwhs=ax=f@`*YG9u zil6=J<=U5Xwz@3BJ%Im$PfeqKp>@759IV^ZhcDrGKvtgD2tB^>*<<_&yV)w1!a%dh zFQ#%~kw?f`s2CS5aM5V#x6)^&aY{Wl5%8VoQ6oO-ct}z7Y3lFj6@Vih;1pEMD^1`) z%!2Un2Inzo1Y9;Or!wqy8wBCaIF^kBIPymL8{bU49z$qhTcE7}Yz%eLtq+eq9AZ^= z#|J}Qrxm8GDY_7N7WV=bI=yR=*}a+`x|=35KQb@cw7IzSdgxql;S)R}df9A@DTtzB z^F}Ocj7l}hGqN)+F}g;bG}m`fqldjP%$U24KA0KV*lQNQ?8XiS(3&f=-aSoPu_9Ck+?;B^ z$?P1Pd7iP|8yrW{_ChCFijPh&i2wc}0N5f9aQM8I{76VqT{kIbrN?K| zL8i7y^v8C^{UoAB-PYMNuI5u?3btGd0$|ZE{k=Or>*p~fGWJ3_vStY7_7!YAmVc{E z@OqM{kR6o5T08krUf=TpWD`&+TjU-G?tDChv{2jWvVZ_wV8#F<%o3=*uKpzvKeMevQy^V=6_uXz8oB+R4;uj!ET6o`k?Z`*{IVmk``!#CDUyGPc=NT z!5c0c8HB<}={NX{4^^Mp9gR9YV|pq`H|?T7)Q5YJlXvFdod7bdPjn^Jouewp|)r0hKi0(fOX{;k4R@k6t7 zZqB48I@VBzvkEV7&0l8ZhuDC94Ak+6q_Y5me;2{E(jDgMNNE)fIIw~QKMvBSbX4e2 z){zH6tVK^whuoSrZie@{)M5l4Ggws5R9!Aep-cVS%C|J>;+gTmQHi^-_mof3kQv?= z-9m88CqL%-evK@e#c^$tI2=ddW8#2Aj9(di-O&Vr>=&-;wv&rHTtVbYKMjz8E2F-9 zNK6bs9{?n=hFl<>TC3NK-K@ku4HmU`js}T$`P2DbnLObjb~%d#oU;9^A;8rfc!sTo zW*2;|!g+c=eP{8{&*Wd@SloO2&f_h9+FkfT41{LpafhM|_JE`8#U5!lH6xJ_2aOj3 zWkxjEgj|>~s?D5dG9qF91k~Wws=gjr3nV8>)=>2Y3s4+OOQk!oE#^W`o2|E6JZq$`c7qMe4NxT|U^;$?5B+^|CYvyJ zFpB+&EWdZd9%bq1OqP$u$RsvsM`e9>ESi`1X_B(dLi%1AM@4J)j!juOEb`#`h0t1q zRsm~A*5`3%{>80k8{A;xKV^}rV;hY6JMe)DF6L8e>i*7@U)`0tpq zSv$emp~%`6O;&>+W+Lett?x!cNT?+0iK%9@kb_|Qn!I7>hJlMQupR|qUGD66;I-cx zn>;%v1eOxltI~>hezvGEB&wb$vg)p3QGTZhD`XRc0{VSfZs5|i)CM;_0rZukbtH1l z1QFyf5z)+3maL{O2QY9Xl~0iJA2*5wR%ZNMSL^s`1vaMZOG7WAtO%Rxg=4vm1S%bC ztf{-%{gv<2HyA-uP@A>H7f^QSUNY4q7n~#VC2EInzSuQB3I#>r#@-0Mr)?;zvj9WJ zd4#=zGYO@x^Tgm?FQl(WiTCtoo7PJ(GyTlY4rT3F%Y^s#Oe(CIfb|^};AY}T#F4Rq zmVs+P8fS{LAadB~C-+w2!OJ($N#|~>udr`6?_I=+SMQxOV7Ya=3W%=$uFF`OyA5v3 zWi`|WjKECJX_6l zb)d+3e5To4xMO_w_htJRSAcd6JdyW4aE!-)_KZadb4wrjhXUX%#Zql}b$I44UK7h< zim^FWId1BQCi9+PT}(*Fjb?WW2)y6czoP|&Ey1?3Nlo6>p>$$m1}jLy^+%6bWu}cwoH7iS z(C##p(6`$j{qUJN5e#r=S|*N@ZtccCdDpv%BRqh)KVKhCd+j&z(64uYUr|nJ&^$)| zM*|KwAzmO>s*Is?n?0Lap zZsDig6CKTy*l83$;d8SQ5v%^S1lo4aX74&7edp2~lIJI10WMVHSZ9f5bG}QgXJ6~qDdSHRp%UrT-;Hy{)-`r?u1chsu>d|5{;xuom{z?C%a^kJv z=LO1HlY7qtWumZECWCO{2PH?%3y>5($>H$8_P4nDJFz8xi0R$xN3;JxFZRv}^BCL< zk0`lT;!g95CndtT?9ZHpgIIEIx9A~zXS_e%)cfBnWH}{eye*lCme_IT9Nu zjqc~YOgR_FW_mw9k%57ARPO(;ta$2_HPOx+?JP;oUla4?9NBIYjbrAC3m%BvjbY9b>v?dyzOnx%P;`*^++s#X!5XqgfL)1h`*r z?}VvFC2zA1a{o3-J}~OCdXE4m00XD*jl^waUl~6=kMfq&7x|qFS-MBoNa>dyqLEHk zlz7>957Ra8WNtD#>=XevsQMz>l{2O~HgyohHG7`Jb0GB*)(VUpzow2a7q&?$KT-9v z1!|ZVDDVr-%`N)zph7fROIu8axR!>|yTRCCWi9r_P0X7Z~y#NLVwwJ&;b2)snHN5*F4N#uDk>?Gr$O7qe7=2}A+; zef^6U`?b!+#d9DwhYEAbrV#Tb*qTUw)udo_{ma<4%>Y=?vO|shCoUjRexUwx)U8l z0QtRjD2di9|L5I((XYf?-h=LIqfJ!IP<_$fD@f%E!kz5lb0lpo{aexl0V0ZP!sy0} zRY;?a%+UH*(d!jbx5M{L`FD=3m1M5LtL#8vZ?$(56oWjLPk)Edjy2GA@kfm3v}>C4 z##VQ_G@>JgJVTYKxd7{4>t_?j<6}hsBSRl1a{j{`@@(CLI&Ob}$CNkMe3q}^S|wNV z)&6=$bAF@Q9s=XNA%g|(si43aYD8uwA31z;!&Y?-k~_f}CH%_d$gu0i1lv(c$;Jk4k+0nw6 zo}SMW#{2NT>2eD*TU0AR8=M)F7jJ4yGZsZ0+V5hvu~XF@@5zz8lQ;IOLKwLlyS?SX z_or0)Eg16?O*Wll=VXOwT=(k}rg^vAq|mBi9z$&6UMFv6xb=tTj13+0{*f2P?<)#P z!-Oe_3vL}?}6AAqDR~UNP&fJ5f@EV zP3V*@{3YWIF??vpa&KTLOrs;cekgcq#;tbU(lGnCE+qur-%7o>Mw=f z`o0gT)%Z1&`4#wm_ixBIHon_XQ!(KFosEF;q=*kb7q&HpZF;EJO)G~yR40WA!%Z91 z1f3GGeh5nu2J;C4@$GV!u?r6i201^&K?x{$ZI@-P{>BqPpzz{U(fD|*a*)ptoUR@> zSLq-{&*vW%VQX?Z4f;au-A7FHlI$4Bw6fLsp%irOT;?ZC#>YC zs%6u25aeE@(pp34chPGOLDK$mK$5{@S@jh>D70_cYidsH7)sGC0ff~S27)!GcmStx zyYL3~2c1#0mGGHGuc@Z>#V7Ogo@@bhl4^(&J$REHkW8`7s}P4uqJEt(d$CpwfKS!A z=3u^*kpd`=SSuhBmuva49UMhQksY)0`mED2PPm1zcToK0o3?HFWX1-88vuDxWSjVwtWHq9KSgi?j< zwZ}v+FNEh~#W%khw|qdAtlZE+hfWl~RW!da2L&I#C!N1O%d{>oqXposRCVJct+ZT~ ze4iCC704$uiwW^WM1Y6hH7C&17hc0Lx}u*HtwvrGi<&NG9qkF?xwi1}izFlRkt78!oBd>;hpCV78L~_Rs@s0!r69P~ZJcPZYqT6x0+|#Jiu7#jIX)D)B{CoU16lhy5dkXoHI`V+ zn5zt3JDuwSS8gkVO!@iCV;nvBXbA38I=73TSMd@8fcqg|E5KRIU>pSWAO1G~drp5B zlV5r33P=H><&&)q3d^+VaP(pzH~<@Hf1nus(BKSvT>mWg^KLJYV7(ciur$H6Ce9Ds zyAOhd_HP*up9oWeLy#z-hsWUV-{gk`V~-z>Q=LGIquToidHH`uc^(GPw(9c$pxd0% z9!=KqIrTv_kSuEJ)=>amERQOhNvU@RpRSvT1(C^q8oci*LYPe z==a0~OuB?#fVPDi;}XP@dIK$60JdXFssn^sEtG|Xs&YCyvE?}smje{>dP-ng=m2GU z6~t--s6wIyTN`e}*pRXZZtAFD_t-+6{k+OLYHO@d|C);)kouv>n2~(hZUhBNdjG7j z!5FLoc@$v)K>+%jLd{dsRaoQOohkBG6SRVMpM+znLA7?myMd2`LzOWyZW31V;cc+{ zy4|{LA;tCv$4I6Vq)Qlyc=4^ERwAb@;u7{;d-WWkQIkhy=u|Lx(e)HPcru5Hk5CeWzM z<|S|7Wn<}OD{k#!3micFeEb4W_{5&T;ktZ$;(TJ_a6zv72Yk3`SofX5|9`+MSDTl1 zZ~pH9V2rRX94^ksFD@wd-vP@VQlEhVkN)2kyk5St_4KlQ<@P@=0_PWpi~e`a0@K(G zFoynqjE<|Fmye}~ElAeZ+4GGjvyRtmo0qQ4x~{Iyokhz5z{^0&@)~j#2#e7F1ADGu A)&Kwi diff --git a/app/javascript/icons/android-chrome-256x256.png b/app/javascript/icons/android-chrome-256x256.png old mode 100755 new mode 100644 index 8fab493ede6d3d4d7e08efe78b51d029cd21d8b3..51e3849a263062ccefb246dfcd2130114ee040ae GIT binary patch literal 11993 zcmb7qWn7d`{O!_R3sQpA0@Bh7!Y;7jE-j^mf`D{M_tFwlOLvF}NGRR$BLwM=m2RXv zmfg$$-go!az4K;fUd;2%oS8XuzTeM@($;)MLCQ=D001c9FsKdyfb-DA0TAOpRFl+T zQ2;$_bVD_Usw01T1gyLdfrNA%hUEw>}=Q+@!2lvHRS(5 zT^THvIr;Px#o}jvXRq&5$?yT^S<8QpHh60GvuMnVo18APpYT@S6gTytjav`{(g^*Si9jiAV^fy!gk4D(5T1f?3v%?81ME_9mn@lTeMYdm%_z)W4pYk zM`^>GfVTZZgEtH^GT!GUx3_!I()MUf)%owo9z9iW2lRjZwB%zD*`hvo^D)OYM070K ziPSZ?A+kJ=Cc2a^TybVdp1DQH9=K<_mQ@%H7Z-n^7MV(?={9v)s^Zp188}n^GF~y2D`lW$y zqLhO~G@j$a*oB+Eu-!ou276`2$37#H7!R)cK1?H+@0q=55pZ5*Dh@Tmr-h`CDr}j_ z=|7FW`{s;L8w=wj$OQz@3Z5k0?(n+4F-ZyGON@~3f44**h6Jkg|6yJdREucVYrX#D*dCha32% z(MycN^YYI>D1u_EC62+(fsVT;zjL-p4S74CBjrHtrvXhhBUU^oe*Uye0mgsry?d+$ zy05Dp;=nId$C5bILZNidMMC*x`&Q6V5?oe56+obkUx zQ+H~ocFD%oJ`<@Ezc1qB;FB_kcCE55&@=cve_}1p32aLCw4IJSO|k2KaXHz@NbjEq z`)4Dmkiw_go`lYgd{n&DG(7>TU+UyDYFm~D*K*S(RKy1HfdGP_d|tdHX0qZUU8T@~ zWvVq1Op$kCp5!~C@|hH>Zvi&CHQ4%!o(PFSM`T#BlpYbhIO^y=hJ7) znI^3-Y7WHn25-sViIf8q8lz?(jm?EUA*>=9CbOb-Ldb1fzk

    ?H( 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 VBYhwK;8h0z;L4iNN=37f{{_(>6$k(T literal 14862 zcmZ{L1yEFB`|pAvOQR?yog!V*T}!8QcS#7+upr%yfRvO$hk`WH-QC?K-S_4D{`0>x zcjgYmEG(SebI!ic^Ze=!Q&yD5L?c3jKp>bhFbP!%1Ofbr0D(RQ4|*TITYv{7OHl<; z2&6m){ni*6{7!BPQ&oUKJZT{izd#7&8a(B<1%Z5Ig+O+UAP~M32n63Ty;em4{NbsI zoU{bw;qfcG;adWD2GtR!?F@mSKY#p27@7CI1y7>5$S6pnY@(t=Fi7Qu@PZ%^o*Wqo zQFZs3{R}s6z46qGrp-C}od)d+rtX)z6;7QE!>CAN3b{zIw|f?D3H`JzUjox&GZj24 zJu1K0k)IlfiG6B8#xFxKHPt;xX6lvvoi@&u<~8W?P-7ZmVJgSrd>DCfak6~ULT)?I z;5=|Bu<4O`B47fWhDL>ibY@HN2|}>3u{V#9np;hAR#E*zI>|e5A=ojZk#rDJ(g1?2 z(I>FCi7%xJ6Hqh)Ib(yDPgw;8AWD#@krjOxcOG-;N^$R$gEe-9)z!0CYtA*{fLJA z6Xb6s9~%{&9rk?NcunrbT|!R0BV`+elj+q#b?%Pnm}XVn^@{zu-|#4l*-m>kWxl`a zM6+)>4vYfz%;ouxjcGg8V($Ky@5~o$-n%Z+0B~K3Ps~#jl~OuAxP3kw>Ci%-Rg&mH zTN?WdFGpD#BbU+1^DI%_+pwrO7%uF;p)6Y@nyd0!KZ|gviKyE179kG|o!*>AH;7G6 zlKx(uP%=T433YG7059ub!3eIP>+j&AsFXdMXZFVZb~e`!LSBs0G==4|N~@{LxXkn9 zl$n?bTi5*EUG&$=H7o^L#V;)kStQq2|13?A#jEK>PuMIqO|`B* zaYsCQW@XM+Wb<~@XIW^Z0`2L+)-Ii__8K-xtEAyQp@+B>&z+7yJdP4X$ge^^SaWdw z_RAp^4OQoHh9-k#%Me>%?Y}}Ti>d9&)i^WoYNXNpw*w8wq^cYzdI>4c0!Z2hf+*%5 zluOS91?Y?dFZgf6h1ioO*{W!{I6jXIt6A|@h5YXDWKrp&dgERh8uQ_j*Lg$uWem(#{0^q{$X@}q<|)1CTlzzm|}m)1j< zAz3!FF|*qi^=~07aYz_C2;d2mew~8UwpXX#{r4Hy>NIcxru>v$9RVHI&=v{rU zR+vK;t;sQkM}>~tFXqKgkG8M_G$23m^~A3NJ+v&cM#Xte^Oj97FSTK&Lv@YY#^WdoW5;N*f476t z(~Pp*Jy&C?rCA=hBPA_2!a?;j>Y#gwqsL!ZI~5TS&}${BPNbO+0b<6H`B;;#9o7xg7VJx)eEE z^!nE9CDsXEQ%I)_%m4vLna?wPG&gj*Ri+i&;D=)jLVT69-_I*ej*FdAI`d8a-aXUK z8GMyY!&Xy2>U?DKK%?7qhU0H}{DO%oMnN}I|7J$D7KS^(A2T3U#ca2tB6ROZ26qSV z(=!!Ibz?i5W!@kR^-#vf4}2Q*{qlEtHJ<%|CBLPd>Z8_jTcPRFvQT^nO7<^GraHfA z&AV5omIi6*5sOE|>P-Qe(HagH7olj~rU+KhJd4;k-L+Gg$)|?P>dI4perur`^tiwQ zg_z3(0Ytx!P3#ry0)+05=lCPpS4+&vLXLFOyT9G@n+0;DRQsrlU#4D}r^9=(yIJHK zi-akViZQ)-bu?G?Ezd*W$QUC)DY_X*WE78&@^o(@D8HM!e|Eyxn0#ZtC%iz!f%O}; zST+UWbh|NYXr#QvUX;_+O&AqFhKa?CL8>a^*;kch1N0plh>x%N1&LzJsF!^pVz2_e zOXN@6)6@wkO0a-p+f36lHR1fyI$Vkbu|h#TDY3yf=Be@xYZ|nMm&o4text2nM8SiD znP+lZcWX-9y9Y;jP11d^tt^?DX}Al+IXFFU7!Uf=0xS@ek6gBM zO_#s)4cTa@LL?^_Wpp%1t*3+5@HEre5#*pPWyh5S+?#5zd(GBOg|l<7aF!c0aUT|) z-T5MVEf;Q7WaIeFkb;+`Y23R@&kF)L#}7qnZ(rvoQN||ANGVcOmfXHc!o{C@(6{Y# z+%kRewUNTIPW7_>PYDcgFNto%G4$3c%FV&xgGw)dU>TCzH=%SIOG?Ov&Ne>v5Se$&Z2rkdoH z9-E&V`Y$uQ(Thc)7+LyLW*u}6R4K_a4x0Q?H`V1$7QZx4sRyV7A+LK)Ky!TYPTlzY zj88D#mkN{Y#&)9Y_N$k*1K-vHiIQ!Bo(l&Da~-B3IYH$>4=4fyZ*)r49q%jgi?XJT zj~9)fsoUmJhE@YOy4>Y>-b5qun6eH1ou-+_p4eK1eK+qi$1aA zEjn_G5AvbpGafQaq&qf%voLcXx1-H~`}EP77U77E439K3z%Sos6l0bc+*8KwH{%~r)b zI#iFg%J3wu0P;9*8_mFon51}2``z5Zo ze+bP}|1;kojyU+wrYezg!V8hJ>us<$7hD|vGLcdsHR!)D^4Qq4)4xk+kl&GzVvsbL zhB05R#LyGCCR?IPJex%G!-;ohexMtvL`x^_NsZAbBK|Somi$u5ou(l-P$N7i{8(Pg zokWA@7`>$iS#xke;`}zi@naXuGnHhS>8WjXdA-;&UyADG8A6*&P~p^iYlcvn-DRDL zh9lcRm!`>wfY%&$EX?>)j8&>@FFsdZ2G;r($wx_USFzf|)q@d22sWA!#T zN%UW;)wT(`A>i8o6lixzk#D^CS&1=s{RyZ7)oys`U{BI+9XyZ*8tv{_Zf{#T5|rrkH;6`;w|ky9<{H9h30*ldx2Qi7+keveiaBW3*=9-8N7PrS$k(lD zOhymy*T_OdOtp=xl3)w^qC8`Art=z}{PEwvlunGjH|Q?BfPW#acBP*nf|CbXXI(yD z-OyXU?$xkwlSIr$&9hKd7ZUnvb5AHl7II-{v|89b*{=x;@cE)ye%s=;Wp67+bbyOc z%+)A@lO^1aj(+}R66&WB-d9f{->|jO#`X}D{q2OnYoh6sY$970g(}gQy*QjH`Pe;qu&kT$VH8Y-&1Wawm^C7hvbxUNyWVj1 zOTj9yCqDBTHLHEQ0%A~b{aXKSW~~MFb}!3e3=uiuZwmDPwU62u3QakIb5li)tN+@^ z`pTd&tJ>hU*zy_ zUi!e$j2413a)j}qMxIwyOogAmQKcI9iJh4sGQvq7+$&WB!H}>Bq1EfkwAlDb(mSE~ z_faLi0T(=kX=8o$f!$0_Xq`yS2iLoFDaqS5DA}CeRm3ymwyg$}y7Z**PWD!LzK5s5 znOv>>Pty^lkwk12bTs^T>+aF4hd`H+J8YtQe&Ht6x9)TeYu)s*BnzNIBrjuvtpBTp zkFZV|p74P(a}lUd;&GSGllV)B4pCs`dYtrn`gef4Y9!;I^DE>nTaH#pTYsMqJat_N zY)(ymtUom5){ffq+tObaoij~k#@%FW7)@XdKm&1z`BkMIEDJXo6>x~3LAFoS^i=j| z+F1hgipw)6NgHAs7Ze@Xvk=5&F$|mQ60*p7K9rqZsij=~fQ!P&N-%~)VF}p1ZJ3ri z=0StX3|y+$#Jsgoq+hQ-t7r*f!C6T(eVa(>LhB$fYiu30!VPyI4N`J1WbzS}|)SRP!Y|`RSq7zh^ujkjfZG zi#y>Wqb^2tI`o0h>Vk3-k!6?VWT-f*35tymxD3A;O=)2m`c>_H!d+EK4l>W2_PN>1 zF$SaOiL$y%dl&s?`SEzjROS6kz8DfodIpP3PX=NW0AL)iChs=`zw-vrmfE@G4Hb1@ zcJfv~b3;(>aVb8*wmX?-^=5Oro&JM;UY=vtHtqVl%9|K4L6o|dAQr#a=a^4~e68|_ zrerimj^Z-ay80OIQ-9zu_UwG~73*!82dJJXf$Gyl+QGR6e#*o7nGyFO_qVV@032SI zX3BXger0HSVSV{y@tTjMc$gc%*fF%|)7QxK52QM_w9NOB^Ic-vhq|xJbvSiw^Oga8 z>%QWKXPHW0RPOon|5*Hu*Gd+7eS${Ou=WFqyb&PHfwVK33bYX8KYNI=oZe#&J{jiN z^Wt8s{;w4cqL$Ge2LNLQOY}RB*H``DJ!t$JX6nf@io=e0zV}#I2ksFHy=1v(M+@I2 zF#~ZyCZSms@*hIf*(+o|Hb~h@NdLS-+SfPa^ z6K?D|3rnx(wQCieEdRQo3tB>_w1kK#kGW*xcUVE0Q`x$W_=U(lV=h8sEJCG4J7ytPr-`=}o9WE>}&525Q zH(3|!Z{Fgnj*NQ-avR?6TN^4&$WGJVkD*yjI@DrTo-^EQQ!k^>Ii zocAW{C9O#a;9n5S^vB7JT#as)z-eje$!^-PI6tdcPC`+tbI${MOjK6)AMW|yzk~3Q z?aw}h6lQr$A1RrxF96;6X2lcXQ2(W(d=#bLDv0w@Xd$tE*qg_2VROQT7!#;Wzsrd- z5B@P=K#G`vL@7I7(s=un*p9I>I{ znP&fe2R@xdP;N9STzG~npuTn=`q#nd5VBrDNk0Ex;rHeZ^?*Y$BangYHWxMzsX3Yw z$BG2{gxs#!a)K)4!5#l_&m_Dwoi!&hS>E9*{WK8g8T=Cmx-zUAEPbij;X5a}T}93n zN{9{vs7oWA8G2{FlUH%g{y9C zi&69P*z6C!J(kw`H2MRxUO-!VVk0C%2u`O;v}f=j+vFP(`&8kKpGT)U>9%4xnsd9X z82=EfxjXcae%>!y4hQJ!rU7p@hxr(p9?_oG4P|Ham`|6$>D80I#(%bqjm!2@ib9j` zH00)n(h?)}e&QQU9&%JAK1Fe>m%N+cCU(GEIUa7?Z7kfyi+f2pc!Sq8K_DaybSBz& zC#7QA8`%d)d5JPDW##D&mz8(SOK7e>Ba4#z^4bB^M=^#sEdW-o(Xy1lRKAQ)izw}zsPsQmDP^S^mS@WSd4L7 z+rKTL*#MaM$w4YaY-mQgR~LToFnjfl%YO_*N?vGk98-4APorSorm#sy)Zq0%Qkyy? zFqZLl&JEVz_3@e)0eazDzUEf#?6Qc56PuRWx$^3emPT-v{{)VqW4ob$p}>A3ck>c& z&)&gRpSp{x1E_E^Iu@C>%mG&UTlNlOu&`--lk5Bkk@i4jMQjFRphq80zB8tvF3h|| z-B&;nl+NxAO$8mAz<}#Z)gI!cUPqaNR+wrypwwu+oplv_ak_+E7vK9DL!S)eLb#vt zBPfSERhE($I;P06L%6;q3(7jU@%OM38gM;Iq|URhhYtWox%0dn;1*Gw-d5(umxzkkwy`U`ka;PL zTnO_U2+@zrRrEZ^^FLV^B?afWEPRMquCFUc5pVnT_H| ze<49Z4L;nx2;qg5LozYIUdr7@EBCxl@)7uzf*jTASfk9-tjtyTJl_BiOE*)EO~{q% zRLLT|Pt8`$IPq|XeOkpmI-=Zr&t%Jb>mT@Cg80lq{68pJN?ynAqR%MX|~<1LoN-3BG6wwB((XxSbBWtl@1H$=OR13H5Zy=hl1>YeU1a z^0DwC4vOuo*?XI3JoLee`=jne*~c?y&T$8~xFsJ>6|xM~@VR)|;K;N+ckJd1L(!Lg z^($F2{e2&mT>e@IiliFP+C?QwY69qUZmeyrA#khjT55;+v;h6?ea4M}*5>XDdA<1(WsetsWgQek6p_hAJNOa)X;<%WKr3c6 zfN$V~1tL5b*dZFP0XetVQ&ieyYsR`$Xgs1t3yu!cgUJX4mND#R9`8$1P$tFfn|+_b z?6sb2iaLYe3HGo*6Pu!Ky1E~f#RF8Pp2eHxA05eq`dZiKJC+)}VlD@P6ZF464JFSe z^IkxTxel3q0+ltt=s#(`k5R& zcMZQ*=C?49zqN9_ubY%*GhY4(vn~TSrq+T=Ru;hzR?|)M=0;TL`#rdel!}z}G(ed> zo``4?Wb>s!n&0m~b*ZX&-+%Hg%aEcOvef0p=7Kvm1L>8)nthP-qP6M(tu+B%pItGdtdzV<5kJ$^PlsUfBA@%o z`nuC+j2!YjW6mpNvxIb1cWCjgH@@tQEJzU(;XN`D1pFuLiQ9WOFg|n<;=^k%7kJ)z zQ~2q3H^tpPM>0@<=x>?e0zU-yEQ4u*6pV^q`q7j8pauC1&6NFBhI~zuYDJSpf0%8d z7!mP8LtMcffBGL>a-?NtH|kvbqZ}?IDg`Y8kyKisvOG>aVuiGbS_r{C1jvNZLGzsC z`G-FI#fibJHLxImZGcci2_N#N!Utih|)*c*L+!i z=e*(>C3KCl%A;4s^Kyl1;D%_$AMZR$V$DXNx}tfwT6>3tONpmM0;nti;ntTy_`41EUJ7d&!#AscqNpg zDi{k4&&_GG;8ejZ=k01auaI#*MQ@1PX#YYXC>c65cvx_>g#8p#rSQnpx@* z;+X~n3M5@k;og#J11Z=OjxnDVI?uXUk7LaTn87y8LjS51I3BTan#5;Q4N|Mv1@ZiO z@yX)9*ea1C`-esv9M4P=LH*!IEbp*aO6nb(3x(#sg{n1kr#@96cacwou=_@0Sh zxz{X81L zl|A|HnAx*#Caj=T`cWQ#Ei0uURybugiN%c2%-o;Pn4qkLa{Qq$DJr8SsQNxMGM(}p z*&+gGOO?FawMdo4?9Qgv$tiqfa(4W%>ODQ?V{vI7K45)4`2D>AZfm}bU9f_l_Z*#u z#08NYlk9AEq5|j-$H*%j^uH=zlW-*cne?Hur_Z!+VOMyxQ@}+2^OGte@hRx!75~D> zrteb`m~|*HcixtoZId15d~2Yw!Ea{d=$qd3jRt(F!|VWq4*^0xGVo{J@%aMzqD`?YRiFZ04C@g-gl6BG>9+(Kdecjh+VBmEs z^tx2~#q&8hi|Xd>=&%b8AdPrU=ZgJcEAuEKI7Y^h+usIcf0nPu7R`o_6dM`7LoiU$n2A^+9bB zem>NJ%IK~lxR!X)zZuvtvU!@oQp5K1)jKw6=(+}8Z+y9Kt7v1ByZ0EH zWXEp{^-L+HaVhd_(Q<&YSq0~pzIY#|ySC}Bxd}|A*YShGtPxtKH?cW?S~~hrrzU5E z2zO|nsW+DpPIaVxgLnMq8l1K8AdY^bLl2zq7n+LHRNtT!n9??_oro{DyLtBGS!#31 zvH_Xs6eJUs4JbLMjXs$F_w{L+Wpu~U6>5Q{-qNAt7NHl zUXycLMvlnvVdUV1MzZ|Z#6rLhd>ZQ3MDma3Bh6mlU8 z!_aq1_bF*fN}XKn*<8SDRO7mk)nrWf7mkrj{~{*AC&|x)L_b}>g370Zh3T$nP15j2 zg6$=Q?wl?Eo!Q0V!#8vapnjEE-W57!wz;D3$Egh}?fqMSyqxApIR|G?YQK!n|2DFG z14cXF&|}^hJV1iKGDaA$TCks|%jL!^lBywW?b|469sXWEak9GLxAQ(T#(0ekKhX&*Byt}1qHpvt(+Bq^PJ3SRVXZBu`0BiVYL%;dGi=bEW&_Pa2){vcTs49mXqe=jKko6n=!D zSf?{&AU^soB)O6_zD{4v=bSp*FtoN6z?nRXQ^i}gFdV2?T2v(GYQ0jPAvC)5me+D2 z2_6i3=NBKmRrE7uz^eGguE8Z27}`!AG@UBRFS%H1W8)uPGvI3g*DTyNRFOWSoP))D zd9yK!B_)lOk~}{K#B!qLYzs%JwEzAbrrXff5#KL>!I+(z0$1_VAN51enJ=q0s34o= zdEL%&(9GQEizhp~8j-|nM~*1OpFINX=;cplOjVsf^uZX$(~ zmiZbJb_@u`K4Yuq{e`Z}Z_+SZv9O6W6}7?5%8SNk;Dxu4IaYJU@|#KIp@yDlS)`a_ zFNhmDd>$1SB@)6jgyXkV^&#Am-o&d20y*yqUP21Gh@l&uZRWMLYGU*Ak!;^ton%3G zZj%0xmDh+w6nhwDkK9Z}@|Tyu9vSfujYoRf4boNd`kJQaXG_VLUHCAqJ0FiTL%@MpLA?TD$!*I znH^Oa9P4Hhe6Sb4UgR)-+SY!Nq`B;Dj6}y=@jX#2)hCq4b0D8Z#N({KCVdzP{QIR% z%|IjV8TbW{=DZJ`Uy<+cGG6$&7->r}8smdvL6($&$L@J8Sz_aDa(Fuc&7Vk1JSDa; zJmcyZxRn??Y@ZtU*Got9UJ=g|HNA5M$b-pV16Y$iV-fbzhF5gfkHW#@5Usx(IpjI` z6N9WHu45teXcmWa8W+F()BZ9t&C|ay2lux_2QPyRNJk8_0_&RO>`;cGU7LgDmE-7i z4b(3d;6*Q6JLt{X1@Z3b8qP&a<3T#8p|s4MEod%Cvx75UXnuetie zg#WG^7rhpE-Gio9ZO$dVYxC$6Zs^^83=fW>qv7a0NW=|t&ejM|JhcPl-04=2K3|lT ziNiv0Z;-gILJg=rF2A^VM^d$*Kuuo|_c)tN(U#OHM5x1EeGU0EF!8jOUk6%XQS(=h zxb<86(G|#Hk&n#}Ec)Jj1X^M0!}e_V8)8|-;Uie>UbB6l_5N*=?(CIj^X=emr(Y&b z8i5cQK;dEUZ4DgFjv0EXo9sA2u(HEG6TPK8xB&;0A$*tm=xDxWn@OGyJLhj)>RhpcUMmM?mRG3Z2}DtqIiS)0N0S8f_O3 zw=qBDlN{eOFvvfO#BL`(aTb|uvap1w4vm+((InISy>g^P*}`oWsVT$YxCKFZHp5<{WMhyr}se`<=D1% z2)i)N#5?!#5C(}4kVOJ`49oi-BAGPacRkjWsoo%88Iykj4{5FA=5a?FLQ)-}C*i<^ zvyOA&8qiA`x=HH+`JD)u80;UwZCd%H3y1kmZ`IVJKg-9O!|Eed=>4kmFC;q5+OuFH zJU#xyhQY}pm`9wAb}pcz0LF1=ov6xt%|iz zP6uCSvBntb;FVWB31mG&&Y4x@O@>m4K&v!BzyU6*SCGOJB1*=QKz-6 zocGoYj`#iPdrRD(U5jKw2gJZF#%NE%?doEZqDNm>9z-ur^cf2kQ_SEX&4Wd|e*YFQ z7O5v4yfiG#8LO)*vs_jlO-JE_LxDs^mnG-B{T;Ws<}H&KM)5d(#wVRZTvYzx<(RQq zP5GwNUXXNaO+;@J0rpXxnN_ynD~W*sHk zVDgmbN#J8f3SH>t{Up=z$#33+`Mz7i!%-6R6ycX926@XuN*2xY%q4z zEV?z#Q&rf8&-FuWTHNZ6x_$9DDz5J%oEaPM0Qv(u2l4gL;G15vzQ~9lDK!xD)N=uk z7|VHlR=txVF{meB8gG@YAiJy(Rwoi*-@!9((;%7z<{{fVtEHw>K`6zRjjdVdD;Ce_ z4y$Y~(AY(Rzp)!%C=_kv`S#IJic8C%fA{H0?r8N%`3Xs4=;L<#6i6ox;u)Qg-oE%p1m+TtEBuf7L_11wB zjx(G^qxtQlPsyp>MZ@%{YSG_8{g;o-Q`@9LWDw*7qgHx$V1vTgbVEANcI+d5-t*bN zdUX$ZL|6O^-l)a%yIMp=DIn;qR2K_8^5-&qGWGMq+FScp=2zm2Q9BLjoyZW7;x|6S z75-hhm}6dop7WfRun$n%F8Ul`ZU(xY_)q{{ zc|GS1S6GM!o`-oZ$atb%tlePiAc^&Szp2!tf`A15>|`Usubv;v3(T%Xca^q8>eR&l z0oGL!4rh2x=tDg#{la&_%87@eHByj3PAdn#t{pn~C-ZYmMwf3~g_)Pn8s_&)er9CB zteVN>bIsPMK~mj+A0kk-OQN2b5C`4`GE*^Cd#yboaK=$LswkX55@B!cORBoh_vL6*}zmP*#2tpF5dAlwR$!_I4fB2aAb7hQ|!XQqC=I% z<>fSNJ4hu%3fj_=;V?Su!MKB0T!*xD`9!XJV_oU!nnSn~BkR5$9nimeTS2)8cl^%i zg9~=ZO_&BAP;e{`J}$N$VaFquFiXJ#6naT>8@5IM@gWG`4#hJuWSNZP3WH$I-qa>N zsR1kiym!TEjN7nh&BU?IpRn+WN21TZxl=m**{FUfYn50@Em~3u^S?VF$d1gQkFjiE zG<+i5p#U8VY|t=qlC$=Ug;9X2XpLW794ODdX=qPU$H>bRbO z8W+(N<&LD{+^5qko~j#?^CCD6$m|4`L4*QvV9Tl3Dpc`j+-LE+4c_q2Uivi;dtQhFZ(%3oJnA1uFsF(ly-N*lOsp4#Fr`SdHlSbO#QC$r12LS^U zkg^?}&?2k$#?!P!^lU?+KmyAf03HH1>o|rHxEG%e0*Q>TldnLz2-Mgxz(Jr{uIY*h z;F-+x4RNP_vol5rHiWVF(JuspiliSoc4TR&^0M7cd@TM55PGk%(2}(V zyNTW;3%juB7fVx~9a4kP^6>mb*HHPWX*@caLy==BNG)}NG54sQuexapARO`dWQ0FuHZ&Ss_`WsO3H`mKo4-062SLt)qRKVOP#lB))$)1u)-p&#dj(tRHCN(Rb^=>7y1KFCd57cMez$Dxv_$A|C*F7uAYKw53BCUoJUY1L2%ap z5?P03dA#!Zv+2P(+lLHb3i#oa(Cho&PGjx4Cu}^ab6@>qDA|xIt=KrwTh>)HCZVoWEq{c-sUavqWJbRG_`3R z1TN%&$iw4Wl}YvM3$OwZ@SKKId?+d+g4OhR{k!q!V8cgFuKEErDKmfZ#EJoiUpfP} zV{eN-@j@jV+8`d;;|ickG`~Sqt^C*3!y>p(qG_wpyDSLy)&wT1V8X47l|j}?h4(&@ z6F^V4%^f%j0-~s_)Ic|~=x&o{!gcI}C}^<2+%ZhR?K&c81Fx{m7JB^u z*#emIfX#iI-b?zoT?}ksq;ZkdaxpV@G3PV=U=AK2?5yk@Osu?2Y;5YRtbDAzd~BQy zk3X5jVGU_HZUwbNOgy?Le;X;9%GC TZP^?A8$?D@QKCf5=+plJBW(8O diff --git a/app/javascript/icons/android-chrome-36x36.png b/app/javascript/icons/android-chrome-36x36.png old mode 100755 new mode 100644 index 335d012db1c00cd5101475fa2473ed9c76125507..925f69c4fc71093ff043535f516735121518d495 GIT binary patch delta 939 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 KE0-%;hW-aH@Ujj7 literal 24227 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 diff --git a/app/javascript/icons/android-chrome-512x512.png b/app/javascript/icons/android-chrome-512x512.png old mode 100755 new mode 100644 index 1856b80c7cb972002dcd0315b8a3a467313a3ba6..bffacfb699c6b1133f85269342adddcc0d185c14 GIT binary patch literal 31858 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 literal 38207 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 RYk zXZ}BCW@ct)W`0GFncp!pGc#kr5HzzbX?ObBakgB!m2>5)Q>fG>)_g1dwzt0#jDOd= zh5b<;`?4Bf4X_4S1FQko0F(AlFzsVt4ab0nV|g_)W=!K4<$p2+w~skiETo4V%GImc zvV@BltGR?yGmA|$14&Htuv`vF6+svq6M*qC4h(2;5IsF=YsJJV4YpTgY}Kmp?B}>+ zkMrIm6M;+uAnyqRLXxNuvrqtlxpSExKQgRaZq^l-htV7vcjSj#`$`dw?_}W|T zyrHeVb=5~dT|D?;dmNjO?9jt-$L)gZ=$KZlppPuS@9w@cnV_PX(fL9%%>htIlk#X# zdgb}8haPtD|3A(D_Loys&PPRaF-UT9Sap1~dwg|81_SiuJ4PWW9MDq3uAc7j@I9NN;ymXIAQvsN zw|~AXKIBlJ20ijn{MX-?2l~*par4Q)50mhP(!c!2+*iFmTDZ_v6J36B_2Tm?E-C_= z;J@e2^eIove_jJZfT=zi6BNSSdC04+H6hKM0|DTrubiavo*q2r*y#B$(rG7FX&#V| zOUr!o`^NYevokOH-XRuaISC;b2ks$a&SG^tG{?8rb3 zbOKNashN|4#9TF{pkRQxs44d}s#OW~%^0fHnV+3P%5!mwcj^R4HTM|+Qf3iy|jjsjq?QYoLYoy&6ysU|f`$1tmmjg1PsZpA`gU-;(yYE=rNF^Y(s za^-o)0HBVC;@C)9`?*~oilmPyi6rt|dV=zvt^ldN&0}m#yWq}l)NYIz1*h{_ePGzUt~&PgjDRe1xVF6##%XHI$f9vnWp!TyW+P2}(c!Sf`9(ps#0W zV9DJ1u4ZolKyo%vPf&ir8GnQAYdd}1oIS33I3`L2I=56auzYXGZp=nAmEUmX$XS2i zLeiOoRM#I&>0F^>L-o+3iZk>E0K_bnFRzU2%oF?1JGqtSqPPh#0g&qWV-D$C*H%$C z_4lSXT|IKe`9oVaZlif;kuib*sGh$B3t(tnJC0rI!ZQZ8Y)n=i7=KNimadHE%yq>k zBB%0rD37VTE9vP>yS7!kJJWR!kGHKGs8&V+nmOl-<~(hhs&0-6klNM__H-^;yu@P$ z8FA$WZCL>TMp4te179z;^r_;}je)l*|S7C0#b%}-I0IlJnSF+otZGJf6VLoa{h zLd>A!|E-CDz$|a7R)0skw~cmp3fo1I#%w?)h(@!>%!5XA5R}2!*D*;1&HN>2_dosl za~CYCZQ6=8@&7zy#ckL3K|8=gNCFZe0Hgq;_XWUm4Md~^Ioh1gO zj|-pr_Hr{KFX|nSxiAWMgRnuA%y8}N`C>!AAa>;azs&PFy3|R z=0E>5ddEjwkVhj6MSIVumQFN-J8v3kUtbyMOC%NwDl}Ph$<3Ybm#vIeu8Eefj&Htt z==@Xqr#Heqw`zc*a|MO*%g${b8%^H*iKTJT^8b=}U}CyE^vGfsv|8?GKT$~_xrbK` zNOJV>agvm;zkjS_OGoA1pImm}VTC+f{vYSOjFeKs0ouc01Ryy^a7t8O_wd$leZ2C2 z&z|?9*DYGIJgV_QX=Xig-`E{D4oM)icPu&Lb~cOPl_ZtX(cVkX?YZj0t;hZAqT~Lp zbj&|DuQ{|}#+pJ92*T12K&=3?d8s`)sf+TKm{oXoGidc7j2XDrf4%p?H>GNk=$>8zl}Ld?eU^afZ1 jtO3>lYk)Pt_7nXBJ)XA4jyl9|00000NkvXXu0mjf#MWGi literal 4724 zcmZ8l2{e?^+n>tLNU|>>dv-<`p&4W-OLmj8FB7s&mPuqu$P&ib_pzlR6J?7K5{bcx zu{6dmge+PA)A@hr`_B2!d+vMR_qp%y-t)Zo{+|1LZoHX^0g#E02><{94Pkob)Ef4$ zFwjx&R_pH!s1=O|#25kq)TJ;VJJC|#g5+!U`t(bT z%m8NjtL1Mu0DwyjhI$aokjb&UP;dL*r@cBVzNYd`t-c9pSVFV->RZ

    E`vklv7) z^w^mLXihJ8Xy8=@f!E(Ww23Ugl~Ck4MT4M>R^69;pI%w_a027n4}R0tEFBM)GRJ;C zvJJ?5(yBJ1Gn2;tO{>ZZdiLx@ceE{3W%lp%Y&PduLsE{WG+4WpE%=XWu#rHpvl)&P z5ZjeBvJUYwmKA{7NiaknoR7?S@~pnc!MZoi*wlRZZQk*m5gO0K-`KOe=VE{QOIM=z z#U=C8w()}0IQyI|VnR;?sqv^k0^&agjX`_j&fW7ubC$0Cg6y4byWK)*vN@kdyK)@7 zY|p*z_g;Hn@Oa^|C(he%PKfl2rrU~H8h8KB{$E`^$>^P#sepIS;il0PnQI0zGAlM2 z_)5FhWa5i6p1-t;???s3)?8M`UX7a*zP%lHd9}tH7tb9pFqaD+hGme>!@P_O+7nv} z4!QnzTk%GhHgsB;CDy)`-6&nGohqk8z^`jTrU}N<->$8U><9=n0-x2JqensSwj({3 z1d^);OouQ5Aj+g_9eU<~DV_Fj^kB_{R~)gm zfisecfjRjg7R;kl_P^p*6J9B3mVNvAcl+T9c<1)b-K8tSIL_{|Bw6^*P2!|zj4)r$ z&o90apFKCn6!avtUhp#IjO!>%uHVJ<^-Z6B%b>I@eMA@=T6e!DCPbz2)_3u&EJ$Yv_en#E_@@_1EoJQ? z3ndwLZr`9rgF*+uCDvoGoVvf5ZP52jyOW_E&-!WCmoLeFcRz**ax&YPQI}Hb=4qCh z<8pEodg}`m_7F~__$|4yCcjGD4fbE8I5>8fWE;c4mG+H<>%}x>an@V}Km2Os(vQQb z;4eFw)5B3}qR)Pn)T3jq_EVFBt-sFCztHihJaV?aD{~UHeri6_{Gw^C%9rei!splw zo`cFfruZYmtm~K)gn@r!CGCUXN0tPPU3;AtFk2BEsnxB7@QSugFppUyaeMzPt zAZ%ZhlUPho2k9>1w5!Kc8%Gxw|4w+wfjFR!pGvk7rWdo3^sw*)xo85&!} zo*E2=yGnMc)wo)k+<8hU(sK<6yVaR>$H*(k-}TK(wqed4xY>htmI}=j z?jh&?)v`#VH7RlGj5y5)PL^iSLVs>?n#0FCqsoFUnmolrPw|MMUISDUF(|ITcgDlH z-Z!@W5|mwF-Q(w~UBXxHSC-`Zo_l6dBpVngPZO#veG@LT&D2l%tB+dG&f{758b9sn zCK98Ecs{aFhHXwg%-F~K?OG>P^ZAGFP^Mqzx?qU%<>7y|sEmlxZ9hCWKFK;*NxGwA ze?Ty7*jeUKZ-1lQuq0^<=k=e29y6NYmr)}L?5Lh!5u*sw{z0DZV zoxz;SYLoMUsU-b!eZ-->yDZeFpAP<^{pLx+6F>FoN<^~uQ%ehsp`o$Ly~4A5Ge=t= zc!ipi+1Ml3UtBHr-#!+PSA{cB<8pk=c@3XRaiA)JjBRdGm5Y!s!`4z*F5F+TeSD^J zV{dNX)B7nKLfyMPV*&Hf?Jo8ARzD(>V%TVU>9Tm%Z`XxDKmuZ1*#n3!CGu(mv2o{^ z!y1I$)xmI5w(Is0@DKUl98PYx(uyMlQ7Cj#=!qzYm3&@u*l?e)%hP;BzHd!SUHq7? zjM2lK-V}aeR&eFpBsc z9V7mX1r1)v_ZgL&M(_MC&d?VFDQVH4i|L_z>wJm5*Dq;gt!rhkq~Vq{bD6B>!ycW$ zt$4=LEM%ip72;Oh{Glk;wQ}idM_qX9-)@!d94h|^^5(Wa#qAjM+Y(EsGX>y5Yd2w#|eoW5`U$C19LlRI?Lp$+9Q3!DgbbX)r zI^P&pz;3XMZ zCM(fEyknB6$jjqi-~RHGqZ(XVz(mc_ptE=*sK((qaf|$5h-q#Tq$QqpJzGqnBY(+* zG7^zY_M7a`U*o+`i%_rhnRwP-kGU9r82l$sC(SxNO)O!B<(6a5RlO(|b*(C9I}x$W z*~RtyipA~aAQ>FDS9J4{B^wr9&~ zJj>pqe5_@oSi9c{kbLkJlT5V*J?c_rWZ8Ahmgr*=5)l*qXrtar;f!r2F(zFk)xSgU z8GP0;zgm_GUufv061(E(-bp@QmbzWkxs%3~1ZvQ;`8Wr@skW0fgJ*aEd~8(tau-#WOco?1qw&pSSQ8V0Yq{fc!-q$>EcYeKtt= z+cxBUOQhS5dEb(AcZqP(*(xuU)N1`v-y{nclE00MI(Z}@bU-9gQL3Q#d+@Cz;%PZ8D`YQAl!SUPs+B(nOlR)q_fe1#E z599J4gfJ`N#;{{uu*pUe{e=r6Kr|vCY`nT&D4biwS5;Ntio%y5!!0p75TpGi@eaGd zO8+v=>sNHt(4xN8;k9)wd{G7NHPr^)KyB+EyEO#9{-c`H8f6~#d?6?q?JW=e7XqrL zYhAjvd;1t8IbZ(U6?xX$uYb&jd);V*KFoY1ma1b|32~S0{GHS$D?uJeDWrj8i?`22Zthq9;DGrM1aa@U(?%kni$~h{|qH`7>^K5-qmAeU-?xAbB+s8wLla{LLR8e(uQmfWJ*=-N_c;e~&$jFP!Hw3+# z5}`74{hR#z3`;c=kC{F_>6cW+P&Y7Y-~%=Z|NPl+lSS@Y6{6F|R@-YQ&3dOxD>Kg6 zMC{G7>idaSw|SMI7#22sACtk@8M=XVl)njgjfk`yfH zcP4QlKw8>U2r@gSLSsNbHbn4CVAk-L zH%n<3#MUolUAXVVfwnBx>GeY3w&uC15;0CcO6>LWbF{5{qSq2D;VD^>wrp%vZX&Mz z4XX;*;#}&P=oOmuM})MNLOeHG`7D(hRtO{Eu5>>w_T7P9hTrB?-$eZ4AFch7rs&k* zeD}PrR`vy&Anj5A00m(6`@xx&gAS7l68}>MNIbte={?&#DTT5WSD!c_^cN+lOURI4|-r_gOsE zze|jCRM~>XmS?winhVG)cxKd(UVTo)rd4S|k%T z7^j7~SQqkeBSv@ISGB3xN}k5^%L)ki1}bb)Vf7$27pYoA%xOzj$#O?x&b}@)%#^uo z2JVg;sB9QW^<$ShQxjRQyU7sz-p+4S{PJR$7y?-!Q`{y`))I~QAhPTw?bUMRv-0)? z#WC%J?tXx*{ZpOT5&fkV(`EH0wf)Ib&Rv;};^xrxsp>OXJs8CCt>lUV#1(0y%h2~3 zrqFV>CRFLr#%mg`lwYwwO{nVU1&4&`dxy-KZgFB}wR;QuCfSe<>I1Hh>Q0}&94NnJ zOZ(ya>b61fgn(r$x#0Hjq&5z2Kb=)?*7g|j;fW%gkM&TKr2cL{VhAq2;o+uQ!p4BW zdI&Gdo_Fgp!(@Y%nMl62?#M?war@OrwFPcx3J&h|wK6O2->aXb2DO)qZjjh#WjP4M z`IOlM1J=z0kvdQHE-!0~@BE)TAtvjg`T4c2u7w>Y!>nzhI&YDh&e?Za&lYDD1x)zv z3E>ew=Y)sgN=k&@`1?APIdZptV+-~s-ZHSue^~(KP zTzTakHpUGoYKj*eqv7R_L%2TBulp-?c9FA}Si@6lok=|=5l8CVB3+%3ZeW)HH);h? zR#aAzQ`C@CQnFN31S@KQl|VB89u(=aFZ?@~`9FYmeZlCWb6~q4zW8v$L40Z}|1L(SW2Zja; fTOc31B7B7{eSN( diff --git a/app/javascript/icons/android-chrome-96x96.png b/app/javascript/icons/android-chrome-96x96.png old mode 100755 new mode 100644 index d1cb09582205563e59843f116b500b2aa2d4cd5e..9ade87cf32c06bc58161a12b88b2e5b65d822957 GIT binary patch literal 3306 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 diff --git a/app/javascript/icons/apple-touch-icon-1024x1024.png b/app/javascript/icons/apple-touch-icon-1024x1024.png old mode 100755 new mode 100644 index c2a2d516ef5b03e3f30ba83bf42a89286cd4c320..8ec371eb27ddbead63735957fa3464c6ad9420b1 GIT binary patch literal 77950 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%0D-WT%mq9WvsW7+ESM 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

    x$PD?pMSt8kZo-Xt$@&-U^KoraSWy@N!k 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 HvJ3t{seCCN diff --git a/app/javascript/icons/apple-touch-icon-114x114.png b/app/javascript/icons/apple-touch-icon-114x114.png old mode 100755 new mode 100644 index 218b4154390789752ac5b4b7d105db9765223e85..e1563f51e5758b72ebddbfad67d50e4af6888916 GIT binary patch literal 4123 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 IM6N<$g5H0PY5)KL literal 7494 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 diff --git a/app/javascript/icons/apple-touch-icon-144x144.png b/app/javascript/icons/apple-touch-icon-144x144.png old mode 100755 new mode 100644 index cbb055732f186aca5e9661b9b68805312cba6129..698fb4a260b13621d40468ad5f3fb3438568748d GIT binary patch literal 5810 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 literal 8852 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 diff --git a/app/javascript/icons/apple-touch-icon-152x152.png b/app/javascript/icons/apple-touch-icon-152x152.png old mode 100755 new mode 100644 index 3a7975c0541c751aeeea1355a47431eeb61dff02..0cc93cc2888c02a3a2f1b4563858a2fe46d82c0c GIT binary patch literal 6177 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 literal 9125 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 diff --git a/app/javascript/icons/apple-touch-icon-167x167.png b/app/javascript/icons/apple-touch-icon-167x167.png old mode 100755 new mode 100644 index 25be4eb5f5bba5400433a26ab819d3b8c66f0b53..9bbbf53120cc00b5246829f5bc4b51b9cc7e0cc3 GIT binary patch literal 7041 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 literal 10012 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 UfBD|>KkN%&)OFQ9qpU;z2MFg}I@$G1al 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 F{{v^@9n+gy90=jRzBk3B!b8!oY-K!Z2ZcG@$0o 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 P00000NkvXXu0mjfxX8FH literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-256x256.png b/app/javascript/icons/apple-touch-icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..51e3849a263062ccefb246dfcd2130114ee040ae GIT binary patch literal 11993 zcmb7qWn7d`{O!_R3sQpA0@Bh7!Y;7jE-j^mf`D{M_tFwlOLvF}NGRR$BLwM=m2RXv zmfg$$-go!az4K;fUd;2%oS8XuzTeM@($;)MLCQ=D001c9FsKdyfb-DA0TAOpRFl+T zQ2;$_bVD_Usw01T1gyLdfrNA%hUEw>}=Q+@!2lvHRS(5 zT^THvIr;Px#o}jvXRq&5$?yT^S<8QpHh60GvuMnVo18APpYT@S6gTytjav`{(g^*Si9jiAV^fy!gk4D(5T1f?3v%?81ME_9mn@lTeMYdm%_z)W4pYk zM`^>GfVTZZgEtH^GT!GUx3_!I()MUf)%owo9z9iW2lRjZwB%zD*`hvo^D)OYM070K ziPSZ?A+kJ=Cc2a^TybVdp1DQH9=K<_mQ@%H7Z-n^7MV(?={9v)s^Zp188}n^GF~y2D`lW$y zqLhO~G@j$a*oB+Eu-!ou276`2$37#H7!R)cK1?H+@0q=55pZ5*Dh@Tmr-h`CDr}j_ z=|7FW`{s;L8w=wj$OQz@3Z5k0?(n+4F-ZyGON@~3f44**h6Jkg|6yJdREucVYrX#D*dCha32% z(MycN^YYI>D1u_EC62+(fsVT;zjL-p4S74CBjrHtrvXhhBUU^oe*Uye0mgsry?d+$ zy05Dp;=nId$C5bILZNidMMC*x`&Q6V5?oe56+obkUx zQ+H~ocFD%oJ`<@Ezc1qB;FB_kcCE55&@=cve_}1p32aLCw4IJSO|k2KaXHz@NbjEq z`)4Dmkiw_go`lYgd{n&DG(7>TU+UyDYFm~D*K*S(RKy1HfdGP_d|tdHX0qZUU8T@~ zWvVq1Op$kCp5!~C@|hH>Zvi&CHQ4%!o(PFSM`T#BlpYbhIO^y=hJ7) znI^3-Y7WHn25-sViIf8q8lz?(jm?EUA*>=9CbOb-Ldb1fzk

    ?H( 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 VBYhwK;8h0z;L4iNN=37f{{_(>6$k(T literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-36x36.png b/app/javascript/icons/apple-touch-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..925f69c4fc71093ff043535f516735121518d495 GIT binary patch literal 950 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 KE0-%;hW-aH@Ujj7 literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-48x48.png b/app/javascript/icons/apple-touch-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..bcfe7475d0750b8d1ddb17df192841938de431dd GIT binary patch literal 1384 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 literal 0 HcmV?d00001 diff --git a/app/javascript/icons/apple-touch-icon-57x57.png b/app/javascript/icons/apple-touch-icon-57x57.png old mode 100755 new mode 100644 index bb0dc957cd896b242b99b03ef1f65cdc463e6de4..e00e142c640eca78b7e85825532a42d21166be1d GIT binary patch delta 1667 zcmV-}27LL;9f=K)8Gix*000Ae6w&|y22e>vK~#7F?U@67B+VAZ&n*mhCfSMCdbVxb zwr%5wXWO=I+gzKIoqQW^oJ>#SyxHCUeVNpoSxjW+g8gR$fG`V1x@-%Q0Y0sEuUOqIF#2c?d#=0sKInPk+B=GvW1bpf_zscaOBU zBa;yk0}!qR5VFqAiE)gLv9E%iJ9*?VAad4Ot&Q$}4|UtyS(}>cC<0>uY34sN2$0E~ z`t0nIt6mLvxRX?R@wKmp<+7Yb)>4U2f0pU$7ME-hH;EVvU|#k5jeOn<&DXyY{_zj| zpW-#bf2YCp|yul5O0~$vB!*9dC{wW+DrnT6xQSN*Qqy{Bsh;F;Qy6O~VVaLsGqlFMdsrMgyW z5Fis;V}FTKyK*LJRMyYBUs zh;03PFgX!nW~{&5`l66KgFY0`hiuO8xGa#Tq8-wb#EEk;)VRVHnk2E=mAEq_bNAlFk%Kws*wkXR3-t#V~}3??q1X zGJhI@9|3CVenk|)730YSqA@>MD{%>7ta6yZsOdBc10W(4v8W6|EGmMtGm}J%%r7K> z7}jl%_&c5QxUslh>h`tC0bF_>VBpQ18g%PCIsyfBndZvrl*f~u5$C5A)a`4N0hb)F zg2>p6UvpSvpT^&tmb;4S1r96g_5~5BmVchJM46OVjq>>hTb%oFg7V>y&yx_rma7@} z6-dDC5{9SjlL9b_{QzZlmQ9@mx~#XoW0s_d7%ONLn|GO-jNpJSjg>P~A)p&k7h*k) zD9v`X%~|{Ve2|IlUrEl+%(GW$k*ilo2wq`vH>WLscZF(UIUApPTsA56hxVDpMc; zCYJ~5v(>9Ioe{v*kprGL%hl^`v42%#VU3T5Lj(TtqrvX2vpcs|r^bi0PSsJB2*~8_ zv&h-0(Y-s`uYc1V;Htmkf8fpg0d)3s7K$pHSGl}0R=imT0ljK8GsUsdU}9{z!61~e zHkFeYG`Sc6DPn%}lgXy6SGi_7n=g4Y69avN16L4DMbX+^8MXp3HU|g^fPV>}xvkCq z^*5CrcQ0J`CN6G!m%YaWia+>j0L(1>V6myZKpIP&M<>QA5T(o~-aYt=x2*17W1ZRk zz(tx5gnC*$QqUd@XQX7f^PHLKRy)$7tn4pjGSt2$$K7Vim-$qe-mzvUHp`pdem zcI~W_jc$DF6*sz79+2tDP=7?~Q7a9{p09uUeZ+K;OXIUg6*O5v6-P zXr)ancWEG36g5fbHck+cfk2(RJ56gdz8}p@pZwCtM}GPJj=SD}+O>1--F&vxVXRdEYPD#f zuhw6w9o|>%J3b@;aOwnm?(en5*bGSo)iZsM9vnP+Xu(valtJuhk~mj>bsd}mK`^L8 zqiH^ux{S#P1cGxI1B*j1CIJ!vb@$q5N4zZmXM~GK%dE?+%dE?+{{rDsNJ^nf9;N^Q N002ovPDHLkV1g&jN$LOq literal 3787 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 diff --git a/app/javascript/icons/apple-touch-icon-60x60.png b/app/javascript/icons/apple-touch-icon-60x60.png old mode 100755 new mode 100644 index 9143a0bf07360dc7edd46b8923a6e28d908edd73..011285b564703b7bcb85bae65f9cd208e6c883aa GIT binary patch delta 1756 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 diff --git a/app/javascript/icons/apple-touch-icon-72x72.png b/app/javascript/icons/apple-touch-icon-72x72.png old mode 100755 new mode 100644 index 2b7d19484c9e3ab1e85a82f6d648af06473451d3..16679d5731a6d62d7088d02b0590891f884ab737 GIT binary patch delta 2261 zcmV;`2rBpVB-Rm-8Gix*007#LBoF`q2%SkpK~#7F?V1H}8_D{_yT6%T$yPY$aB|G> zXZ}BCW@ct)W`0GFncp!pGc#kr5HzzbX?ObBakgB!m2>5)Q>fG>)_g1dwzt0#jDOd= zh5b<;`?4Bf4X_4S1FQko0F(AlFzsVt4ab0nV|g_)W=!K4<$p2+w~skiETo4V%GImc zvV@BltGR?yGmA|$14&Htuv`vF6+svq6M*qC4h(2;5IsF=YsJJV4YpTgY}Kmp?B}>+ zkMrIm6M;+uAnyqRLXxNuvrqtlxpSExKQgRaZq^l-htV7vcjSj#`$`dw?_}W|T zyrHeVb=5~dT|D?;dmNjO?9jt-$L)gZ=$KZlppPuS@9w@cnV_PX(fL9%%>htIlk#X# zdgb}8haPtD|3A(D_Loys&PPRaF-UT9Sap1~dwg|81_SiuJ4PWW9MDq3uAc7j@I9NN;ymXIAQvsN zw|~AXKIBlJ20ijn{MX-?2l~*par4Q)50mhP(!c!2+*iFmTDZ_v6J36B_2Tm?E-C_= z;J@e2^eIove_jJZfT=zi6BNSSdC04+H6hKM0|DTrubiavo*q2r*y#B$(rG7FX&#V| zOUr!o`^NYevokOH-XRuaISC;b2ks$a&SG^tG{?8rb3 zbOKNashN|4#9TF{pkRQxs44d}s#OW~%^0fHnV+3P%5!mwcj^R4HTM|+Qf3iy|jjsjq?QYoLYoy&6ysU|f`$1tmmjg1PsZpA`gU-;(yYE=rNF^Y(s za^-o)0HBVC;@C)9`?*~oilmPyi6rt|dV=zvt^ldN&0}m#yWq}l)NYIz1*h{_ePGzUt~&PgjDRe1xVF6##%XHI$f9vnWp!TyW+P2}(c!Sf`9(ps#0W zV9DJ1u4ZolKyo%vPf&ir8GnQAYdd}1oIS33I3`L2I=56auzYXGZp=nAmEUmX$XS2i zLeiOoRM#I&>0F^>L-o+3iZk>E0K_bnFRzU2%oF?1JGqtSqPPh#0g&qWV-D$C*H%$C z_4lSXT|IKe`9oVaZlif;kuib*sGh$B3t(tnJC0rI!ZQZ8Y)n=i7=KNimadHE%yq>k zBB%0rD37VTE9vP>yS7!kJJWR!kGHKGs8&V+nmOl-<~(hhs&0-6klNM__H-^;yu@P$ z8FA$WZCL>TMp4te179z;^r_;}je)l*|S7C0#b%}-I0IlJnSF+otZGJf6VLoa{h zLd>A!|E-CDz$|a7R)0skw~cmp3fo1I#%w?)h(@!>%!5XA5R}2!*D*;1&HN>2_dosl za~CYCZQ6=8@&7zy#ckL3K|8=gNCFZe0Hgq;_XWUm4Md~^Ioh1gO zj|-pr_Hr{KFX|nSxiAWMgRnuA%y8}N`C>!AAa>;azs&PFy3|R z=0E>5ddEjwkVhj6MSIVumQFN-J8v3kUtbyMOC%NwDl}Ph$<3Ybm#vIeu8Eefj&Htt z==@Xqr#Heqw`zc*a|MO*%g${b8%^H*iKTJT^8b=}U}CyE^vGfsv|8?GKT$~_xrbK` zNOJV>agvm;zkjS_OGoA1pImm}VTC+f{vYSOjFeKs0ouc01Ryy^a7t8O_wd$leZ2C2 z&z|?9*DYGIJgV_QX=Xig-`E{D4oM)icPu&Lb~cOPl_ZtX(cVkX?YZj0t;hZAqT~Lp zbj&|DuQ{|}#+pJ92*T12K&=3?d8s`)sf+TKm{oXoGidc7j2XDrf4%p?H>GNk=$>8zl}Ld?eU^afZ1 jtO3>lYk)Pt_7nXBJ)XA4jyl9|00000NkvXXu0mjf#MWGi literal 4724 zcmZ8l2{e?^+n>tLNU|>>dv-<`p&8pymc~9Q`!XThWSL}7$P&ib_dN}nC|iV(NQ^DU z(ipoCvSj^F=l`AWJLfy^x$k}7d*9!^=Xvk_JF#Z003GH00@r;0FEe4;VS^Z6L|n&%^m;% zX9576KDo{JZc#dD9PjAs0M7qig&!-@C@u6pFdKgWfRXiIxj>i+J)tzxq7005X_x64 z0YJW1DLu+)SLh6MAm%|+W4Xbew!P1KwUoR~WSd&O<1w)KX3@2`&Xf2MSQ|gB0VDB= zBO4G-D|4jpQ3yfQ-#)U6DA$WGbf2a|l1Hl^h`&#(ta~(xb?yhh>1vjY153b5KObBB zWjt+F8PS?eW&Ng6WdS`8Kh+*>3s#!@J2RKXKGu+!tu6`HY-I`jqa0|+7wBk;V+X`^ zC5~)BJdC9Ipf+N35r-Ee(w~Oc_t;tXrW%>Rhu`L&%o}3xT)d4vd;3ndXTP+?dS6_D zpS4Zor^MQ3XO74BG!Pq)`@ z9iR7_2mB|CPuy{yKJx;^UsT-|jFPwqcMtw*>xf6~&QANidyX)PB1_%Smy%kwO2=2) zv?h(eIOqCHE&q;~Uu4N)VdT-cHR;{kagSSLqH*cM$s%Jp|4~Rf@gmH_D8D_SCI5)y zZ?^?^R7pdpnQ21pTj|Y`rP}Fo8YJST24sd{B>C;e>c}o1Un4NQ9*!9Wz1xX!Tjon# zYKe*=0${K{!Z*8O`D=A}YB8{yagZZh#|aJ67=SF3sI}{v2PSvgzR`g-4_>n`t@WQ3 zPw>yq12JJApRxWGwV3os#xNb&F1$MkjmJB-Z|yB#6U4E1k0nYYc5jbQ2}cX^WdHo) z9roFMYfMf@OydPNL-vH0qWH!=Y+v8Z`L}d(%koF0k%49R>+$%=RG#c{t=y0Mu&AW8 zr>fg$)eja!I|%+|4!JIJCmh6x^(vO{XR?O%xqH*<2b{D#2rC=DhEt9q z6$bouUBh~QCiyw_T%T@4FdBRN5&VV`(mJ3t22q zw{iIfH5?Q;1THh5fMryDMXUq9XV{z$?Yh^`IKO;J^11ghh@YL&%9OH|O1922P3>2b zA~D-vps+`Xak9^{3v<$|guOuDC9<7;cX5^x3|wj3NVr)LGZz^MJ)d~nhyN3 zn=vySsUjTytGFH$V{wp@7-;!*Vc~_ATjjB%$c;1jNb`%P^(t?Y4;r6sHFyCk z^@yXkq_S9u9RI*DDxXomF(}B*QaJ-IW|g!h#*uZG7gzuOo9|z2?Q~ryW$02;Y26+q z_p!HY2?GRlt7BEen}s>al^shRNm+#^pOrAOb{X2zN%g@S^iQ?;8*5v!Rb|vL4_$~2 zFg>waY5bZHm6gdBd8*0eoeAA@K@On*N}hnvPSgY)Z7=-doAlzh_c$P>XiBAz9+P;(cYfBTep>$YJG^?Gj?x2y3%xx&$ z8rG|Gb;r5+mMlN9+kT>nctbpz#U0m#`lErClr9YEz~|=JG-EiDYh&YM z*twClERjFmwY&;i6Y=;hc`+V2Hm>7yPO!z#PRGE=Eapsq zDAZZJOQpuy-1zP@LZObcUx;33=3PUNY+vU$t62uwcM+x!+nFlVlTp`9={gR7KN%F5 zj(GoO5@6)(1pSFx{$>r6=EI*_Ttpz~Aohhh_V%%z_=TA}Kv>t6uvsywE!Er1897Jn z2iMCY4A&(@DJ$Zz;6GK8P7VFJ%??LQbVim1nl-tL2A|=PL%sUwrtyH-{@z(P$9nIW z_A5|Uz74mZYc}y;IbWHR>U-{+MiQ-Hpj>sRqU3Fa)DA;G`L8Z|BP*9{@oU_SyNgh? z4)XcPVp(Z(%2E0O-e=D;zM983c$Yl$GRFx!E?XY@SA)WcNbUBc3lme!gO$X)N`~IO z$ZVBcsg4{x72@BS#hT0t%>l^x8@ylSYG4A~(LX68|9O(DcS$xm`FZsRLhG5s>ukjK z5@*CK_p+g{*)DI)&TDMzQ)RxNC<~k|&yCED-PBII7&T+<%7iR6MFX3RE7RJH0Nv?~ zDa=;c9~g?$uGWVg$+}8Iz4~boAKGu9#y|B@ovB17X+ASI!x|VEDcvtPzdw7t{efGc zIf;ceV&ld2BHx`8(KuxU9mOxlMPF3&suTq(6G)}aP0BK1vSp>UWTs0GmaU(hE8W_k zKXCVa#)4G!Y)@arK61H7`MuSTNyKOts$QB*u8li&K@bq12uIccvP*%q)-c|fsdEe|#@3c~jBKgs1Okwb;Fq?&JZc@l_pPp}qcg|7LI%P5L;9 zyt9y|cs@Mz?2Harz1d}Fnd7UF6GtcHhPn)r4>|SQ>B$*iV8{F%++Ak-91Wls@;N?1 z{uv7xyp-oPDl>!G{auudc}>V9#9o+M+LwECkSE&uH} z`jSjkqeK-_FLvQbxYW6F`FclPXzSl@rJZaF{|K`1VO0LC{y~%WhiG(!OO`b@&i{r@ z{__-Ig7|ln;8Vr;YEFs;%D}_h6T#@IT;@+wrccDa=0A#m)w70W4cxij=(}xP%g=+=lHt}hSk>RD=J(o zp29rLWuv7wzmXu>z-z`CDvLUltxC_dXP+h3#~>giBK*-xwUx{s(@dmKyiBZrhuPQv ztOdVbmV#Jp=%f(4;^+Qp9$uOfF6vx~6AFAan7KTh9nW;z^=Zv8Lfj8r;zO}seT9;u z(ldRS!B+YRC7jF<;xk)RXCAf)VS$hyawz}*yfYHj3e58va-zr34Ysw zTx^MO*@gElJ9ZZf7M`zhQ%J4SANf7P3_cUB(jMCvH%uf53Q!ll(inteV`t2Gw{zz9`1sbVyd32+tr4!}1Y8X@{jUs$WL*Cp1Z7HvUUlHuTy|1lv-#hgO-{1?QH~ugo z>qZE%5Nr%N(FPlDCemKIBm~4D{X!jgqNg}jxObuGv|@lu>(qXW^JUlQ)J@~!r- zP`!RdLvbyt+Z`U;H$s<`5FXQQ&`tD??uko-|LZ@>*{zZAkmrj5Nf=LA=sy=wHB;-< zt=Zd0AHn|eUsU8;Z@>953*m9A4f-hKu}F%RK_$dhy7PBpzofVfP`_2?^_5Rer&~k& zeMI`|V4Soer?kVaz{yyygdbLb8XZ@8hYv<6}b)4(}k$UUHby z?9Feo@6*jyjNNAYbR=I=6hqy>sJ<82IP~*ppDiYt8&$|oD{D=U-BionE{%*>BV&;_ zE6VRD594o?`xjQdLO=Sx9v$UGf0_d4Fj{|KhuR&n;YX*&bOj74&LA)AO2}v8W$Wo< z9H3RpTeJ@Tf1^vz# zAMlfubQgfkjVV#-)6P$4=I;S3h#r?SZ!<=-FgnEk~sL7rw@Q%&hb26fD9#uYH@FXmZL;U8elbPZ5|o{N>GZ z>LrnlOPQA*c(Gy3i?n(@khtvyPKrc~)r}N+z49Dm?V8}R%uIMjlBX^k8hiBUXHp|};oNT@T-PqPD8V3)zSdF3}@zj#M$f27JgG&tV7 zsI8H8i7G&I)YnfASp9x*cJ;8sxPr*L+?kfFl%7UK^Hf#+_r8&Y)&yIQLMtWtxcTm| zrWYo4alksW6Az9oxg;SKL-L_yKNS>}QvQU9v~HrVZ3hXdLSfJdh#tCjFx$j1Jo*)? zf#3P?Nc1a*bXHb8BSeJjQ-ZEydB?_?iR+v)pYgcoF(Majm}mW{OakXY8setI#Qv@LsvN`_Wu;Bm_ZcSF za=tE5Y1hVW5~`3_aWF%u>gNUrh3I+)&6{kqW9Kw`3;L#5P@<=D9C` zM|xcl96~545PIVtXp!ehd4eJx!x#Pu!QfMPbmoy-zU0W&k?-+A`rGJZg`_QX`sQwd zqfK4?le9B0 zBLU@+waveEJ?$#R8Vo*G7b>AtqhNE03wCo<(H)ptEUmao4rz1I;}+NyHs0@*`L(qA z$}?n)6HwR`$3I5J%^8byeyCgbSK|CKd+&G+SBYf?<(NbirE86Hc0jp+o%~!V6+ls5 zQAtK#O-4b%TwWe5uLf2CN&S0}r^&kX?_B2p0AAkCNY~*10Z=eE%@q{D@`_-P+J6D0 zPg(oH)BmVP{ofDLNmT$`J2Vt-+BmsSAqu_!gUrg6G=?BZqyY&K1_boskF@*uh5h}LHeFR$ua?U$ zx5j{idUSXDp+RJ_oIQt`0QKna*S_o3TF#oye7=^d&;V1W=soTwU;08sa55xS{hjaT z#GvNs!bpGf%lP-diTCd~04Ttj^Ov4_y1CB-+~UO?U&w#{WAy8vM>{qjtb|RUyL9b3 zx#xY|y7f}i^ZX0V_rDzt4fkfF@F@z-K-&YIuNRNMnL5DXKm$kEq6d9fv;sv86A4wJcgBKmI}aw?ElmBMd$) z4Sn(B1M?QFIrlt+agYSCauxsn*O&mv)XG&yi5D*kSZkJU-5mY(H~VRqAC=>%{LL?y&N?S&go)EnnF@Fh5dbMl z!u#2Ckw{~OKmN8PVy(*`PYxu=@Txlm3l_4!FZb`imk;bgsD=OhU6Kb9me4RcD-K6UoeE098Pt>6I%L(CO2KwW?+J4sV03 zaTyVz^4TxUEni^(KymdQ?EBw=Jv%fk7Z2?|B*q%+?)$*Z)prO$0J!`reCHYYs@0Z61!H-~yJbGHr)0iN#jI9QKu(?Nq8|(9QFX3ZaKnOLaUd-x+^qj%bu=yl6taO^ewa; z2@#IJisn<1R>Br6 za*C#T`io|jMttS+jF~2}!p`mGjw78xW}2#`Uaq}85t6_;o_uVQ+9Ow`lF^&{6z{uVz@nvg$%9m9wZ)LpTpoJOyH8$sS{C(r(~FL7+i0su-1j0r#^;zU{=*{}*lQ&cAv zfA+nB#**hdsxIs*z%@3GHlH1TEs!AY^N?|;*dj0&Dyk*JM>84f~e5_HV zM-G%X{j+d*e`#pIhoR>3|C>O0Gj+O*4y47)GmDqHQb}L3qZU zqK70)N>T(yL{$kQ1^Cdbx1co?sy_DRI1W`~g`RfSqWe8+&S~dN z0h4vxnBjr=hhOjc>9@K?>@93>9YMmt0r0VU_^lg`Zrylf)tUw8Uq0>BbMk9W&bmMv zyrwM<`)wNv|NP^?hQAFB^ba_f1N4@-?TmyGOF-1e8Y*<}u8z^a_$+74n6-R$cFqDb zcYZKyt~Cb5;_;x-kvlqyjvX%bbVS32>j{7)4FGseqhR@vD>q`osCt0vL$BWZaO`tQ zP|*M-Nq``&3B)*px7-bc)dxpw2$Gd{^*&OqpBV*75ladPq0j@=Tl#)i5&#UW3ZP(h zU^aenV?j_W2kWhB=dvn61EXZa{8!5wAXJeWeDG!eZg0=NHPGH@-~L^#wq#qfE!mcA eOSUE3lK%zmZ}(-==F?XI0000335h{!0CDKN4tPr?&DO&UrLN&o;rqphWGNRYb!201C=-k)J0 zN)W`3Do_;wp!yBfr7a2J{jQysArt@z5&!@qq5*)v1XaW@0KgXr0Q|NA02Gk`0INq% zi@^iJ1S$NnraA!s?<)9$N+W0}JhaTc0RSq-e}iazKJ1d9B=gaRYLIPEPyuN8D51`i z006@`ZFLpnfVrIY)+(3qc4J*Z|OsEDfiv}_0YT2~Z(wK@S8vo(9wIg4y z{ya(-8rGpjlkX4-8Dz=rEu402pX}pX zEqWU`5E z$R3{L)FqG})k^LYLQaI1ma@B<^WZ47MZY6<%0ELBNR_11kz()VTmCmY7- z?};Yi#7UsPQ&hG|d!LQW%QkgobagV;g95L+h z)Hj(ctS>A<^ur;iUbVhOqcx?jTa=37vTC%lPVK_XT!y1{;|3j~EA+`BQDK z%E;D7k4<<*aX>U;;aJ`m-8w4LFl6z|0kNK&>Tt89UZA5m6&jrXD0xl6l_9EnfmSta z&r(g?q`)?7>H_jeBXq0g#mji0+|GxsGah59C4uMjWS;yZ`4PdyY2Rrw5TSmCnm%$xNyFg5Ks*(*X&Gbok?7Y4W za<+dL&K3}~u(8_3O@A^n?@JUg6(Ni!u$cWV7HYni%&Y3*7RyA|(O-v>v@@E}=@m`_ zzgbRv$-a1$QYrI@~3mP)PA|$1NM%S93bl7vO6EDT_J(z{4da% zcXmEht+`?9RB+d9qgF%CxAF8mcA89-)>C*-@`HJ=X5cu5x$R2BmF zEr>&K?4A;67Q)6}gkMsvuCW%u$6~nAEW3qXvXD#9J6Fq#V|9lHXAuo=hKO(+sMh$b z^@dM@1lMg@P{LrACX=z6)KR}nc962c-MwS5BDjH0`E)g2%Gz;d0R^ESy-%u((13b# zI@CkW6@o#!k6K2?JXg;@31*}Sh{WJ5F$<3Esy*vpD%#oYsgZ~|#LNLbEef11D6oC% zbyCmGG&IW08ZnyHHHeCjy-|$gLbDJ!dT^FdWoWfnQ(oXejGRg=OjMk54V4#ll!T8? z@862bc+L07Z=IK1$#Jn@<1(8))YMtS9Ln_lB%Bhr+f*CzK}H7a+LR=6-|vK1wG*t} zpFP4vL-uv9Bc7h(T;XK7ar0rQyq@j2^W5KttMuu5F>o-!u`$3hH>bg%HHq67{CVxe zEcQ~-&FpmU4=x(H@V)-=8fpjtju2F{XPriDC0D}$KfYH+^G)J*i+ABbFbMO}j%=*@ z9l9=FMQCYdc`SpiJxD<5jDur$KB-mS+j&6P=0$~>!4p{SKCyIGl6wax83hp(dxp8o zh1~dJji<+NtAE3)Icunx6Lt?a`PiLzjlkHm>7ll^uo!E=6R zA+%N8{ALX!0}KRyIIw-@%iDEM+^!QJy}p0sXE@ygK31>m1MbAz7TPt-3{FHKG&Dj* zD|PKOUoISK{(;ggPDr2)_G$A{zXg{fW>tE=1e@2oN$nOU2IxVfVxM%zp&Fxx`9{32 z#uNA_l%27o?@nh<22eoPul_EtN=gf9QLUrn16=Dr3~xN27emfe zbYxj=k%ms${-dAQR5)anlvNNcv52Ho*blQ%A|g{2imk@0JN4L|oNH`{*U2RQ+5Ns` z6kUgZYT-f4Dy*sth<&PkQ4G+v^IkPDtbZsqE#AGx)B%V8p~Rd&*}ADeR&xmY_8ayY zd~i!yhqV1TkUFj+;-tSrxf850y{{%0r%ZkxO5A3|{B#2K!>G=r!cY)Oi8RUTu5qFq zEa!QJXJok1j&OFI$nyPuTD>v`DJ%($ThlZatFSMcGEu(jl(Oyu%M3l47Jh7@PENLw zxqoCdUneeX#T)4kN4{OmI6ScQ>Z~jLR7qlL5D3Hb!+~BqVz{C&E|5R$exXMr9xX|q zXfY0~0qC6R*P4+20K5h-59DsCS^C$X&Se|-RPS-A_j*~kKXzK>C1p7lXJ=6?Ou0L~ z5d3aRiQC~6XWhLiGN3JnN-uQl(Q|^$88oW18}ZF!c*}b3nV+ph0d$>nc2&zc8&O|g zvI#IvOETr;J8UpnV|G2(fcM5`a@~Hz{3JXi8M?p^wLIKpqohyCh>?$0Bt%dFP&F9- zWBu~qk4)0L0nyzxSwG_VcxQ4eNn9C-JNy|JkA$>pj;B^LD!WoL^1b`>?bSak%$o$s zV|$20ak|u2&v(AieS&p3$ul>ViSw#QhOImHr8y&~lw1OPDz;dlgo=hD^MIp2d z|5F--1yY^*K`3iH@rEbM`*ms{0})7UK}J^jbn|11S`c^Hm`JScoKSfws;MTg`(Q3c zKQyf;AP7t`40U`LrbCX5e`57L*>(=6=d%2l|5?o1%(mWrUyfUMYnC!@r3+r4UT(`1 zm>(KR_WZe%!N%QGCnWK-S_sFdB+RO%Uh4KkZ{;Ri|)3pTbN}{ku?@^**6X6jNwxEZq`a?Tn6(j?&hw3398L!OvC^3K!+y=YprN)t;bauhVZ88dJC8u$6-N^y+r1rQ1h{yd9^Ns z%j>r7_B2ZAk1q&Z`9ZGubuE6wlo?B^aEHPSszj32TFBYzm&^iU>ODNFVb*T2?7F@b zQ$iMa`ko)6Lhb#*89cVZxfd?tx)q|@S(rjEmG^Rju2iO4iySReq_iiA2}MR}$NrG4!;*C>wq8Faf*yjTYz=gmTCBV1NW) z%hjd!;rAJZSs17tR`z?PLgFrqcAK~$~OSid~(fQXmzihk_vrrJMY+hB{K-Wh!fg-oot`@IZYxAx(rju-!@^5dfe%M>d zWrHo_e#@Gv%Z(ih(ze$>cWMH=KHQAejwipK^<21^?4bVx<@YHk)Ql~Qnf)_XLbo$W zTcq2XTQgU3)X70gND$sTM->#uPpH!px+TYkLE)KClNpQ$kB~`a!xD-h{KDT7g?o<^JFa9g*qh9zp7C z?S2BT48>bBDgu>~CmphmcbunO^_pV%WwjYD+l9BHA2C)IyA)$${IoKa6|W^>^o@W;aDclv1a{lhw3ja@6b|=FdAEVg*Vl2`{Pon|!C4qY2H< z%;Ec6RcSAfDxKi36I$+x%!%EWZO^qYN=y=y-0?Yth)lSRnqrH6WvPEjah!c(AD0oE zDnnz!@{qw+H0AX~(yr#r35D92^Q`nq z>4kOwwf8!guHIUS4}eNP)TC4Ii58%bJUtz*7{httz`4-8#p^RpYRfS9pLjPi^yjws zf2Zb!EhycrsytcV8GWyj`hsWdl9ORvj4+h0#E4!v%gyIqP9SA9yMrEm;~l_^vV^4d zXj7oDyTu22Sc2w#08T-NT$FgeDt9eBQ)VJrcDnL7q;>Hzb}lnlV;I=2#dR9od!I>nBxZH# z>B8-nzUH10!&Y0tW6skh4;G-Dg6iTqpRh$*U82GF@!>h>so?6PM#=FB54pVSVSbHN zPAqV@`#y|2ATgKwoL9Eh?kk)^b!M+tHtM_X-1{Jpw6Wd8p=6pTCap)SS)_>~zX<_R zHVL`D3wYVgUYQ&ADo?7)BF#L2LaS!a$%U5n^x+Y;o~bRVvHBl9YB<{zuah)yBzCjg z(zuIY+`_HE6C7)MZ(^IXK03l*m_nZhNq#7G=kEeU)!fxCvdp}-jKuzV87G7JkH&Y; zS&ekYel+CAiqlDmtP3!q;nEFCss@3#P4(JU<(G;GAHMw9LKtnOuVOx_islu*Ihyse z0+kSbBifV)a!|e&4Q-qaH+;^XV&# zGFS)6ZO9V;fU1;k%Y}M3(F3L1@BJ3S_I#oU9pjs$gKN$aam1BLwNP4=>G-YS3_4_? z!?b28tWjZWDvGn}bMt<1iTgW75TR?UeJvP4YND<566^%=Bf%0ztZ*X=>BI z_Cg$eX%n1YRTM`mrA5zHT=eUEE(;zM|! zoJ@@(oju!j!1m#U>&&~*q2?O~Fi^mz{Fs)IEv4|vVJf5Kn19>8QDt5T2}=?q?O)Tc z{=$@lP6#JF5T3<7vuOdM?jvhqYYGtC^mg#)m9s+AVuR5VgOiF?Xqn1L!vo6u2*_ur zj55W~Qa1w(U_x(BX} zFJ2Sk@pTV=UxrkoJ-g=QEsnKvjk+qp`T0Gzf=XZ0HknXFgrssmCuD8FJ6vCy%Ldyb zZqh4QgekUR6Che-&ehD@$Yt%oVmd$872x%5_}#24OK}Tf>S0bd`8g!{x~i@B<2p(y zC;Un<2Ye|;Xe{imSpOXPE)g2Af;!4(*oUC@qh?msFYxe=i~9$Ga-s zFPoEF0=%wiG0&2wC{0y_*N!`p1Mf?T0~N$UAY&j<5vZUDk{12< z03^-4`R`=u{{XJ;_K4?!{{tXkWQ{=}Mc{o!X@&m+es)5N2>_x0wcvwrb@2AFb@ljv zMnF=EQZoO=FiOsv6EK|rFh=gref({`8~|z#F5ZFOca3~}?Gf&GjosZ{x==qu2+IK4 M8hYxLsy31T0q^`}#Q*>R diff --git a/app/javascript/icons/apple-touch-icon-96x96.png b/app/javascript/icons/apple-touch-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..9ade87cf32c06bc58161a12b88b2e5b65d822957 GIT binary patch literal 3306 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 Ef|LdX6#xJL literal 986 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>pkwA%IP+}FmQPuI`{h;iB&8IkWmTgp7q)EvnA)*TPDxurQeIqA zUf;^6YT5nf%^xck-LmpZQcyLJkW%o^=x*Bh&MT=Yym(e@?egr2hg!FO&Y5&XQQb&f zLauoBg{F;fZT&O!t$k}&JZjwV#x1(iJE_?twnkCSFuY`T>$b0f+5OJpCC!^Yl+M4J z(6FX@`NP1hKG&%7fUI6IahcGN()+)LicEf(%^jq6`0HLo{yiIkL4 zj;UVKxZ!Pb%f{%+h3W=&Dq7~|Zm|vPUe&IAT)yz8k$rGv**ver#^N~_(>ix3sOlHZ zI%n(<5>vfYN>7F6_v8`PR^ThTv^M^&@QlU z&2#_sF8A1KIVBx+eW2P-L)(DD8E0h_G=g#`+WBYJtbAO%>Pc+PvZ7h%8+rm|NsC0d&i3A0Aq+T$=ltf&VGkuF_6Pq;1LO=xrIQO@zUM8 zKR`kD5>H=O_UD}33|s~WH|;qC6nf?9;us=vIXM9cQj*dVQym!0%J}^B^5j|=^yTgM zH!PT7;M3vj65=zbvp3dhlAw};s;-*y=@Sa-%KR6P9bUU&#ga9P4y{|YOpixM;M#>N zm#$s7c=fWmK?*bH3JJ;CGiDVQ&5ACFisEdPNj#gMoUNYs{=thUYu-LOb>P9PXYUq1 zefjk4gU73%K9^?*5q=>jA|s@=BuPIB-gubBm7AzAbBFLKZl2y*qkp z)t^_hqBPkUKAczATiozz3((i9C9V-ADTyViR>?)FK#IZ0z{ptFz*5)HFvP&X%D~df z&_o-=FkqX>3`+e74Y~O#nQ4_!4M06+A%=!l21ZsUmJkgO57;jOYS4h&P?DLOT3nKt zTYzSXp@Ef&1w_vzF0N*v9%+!C;QX|b^2DN42IthA;>u!$;F8jm%zTBA{QR7Q%OBPN Pl`(j_`njxgN@xNA6xVEm diff --git a/app/javascript/icons/favicon-32x32.png b/app/javascript/icons/favicon-32x32.png old mode 100755 new mode 100644 index f5058cb0a56e41a0a7f2bfeb9a3cbbdb99699f53..7f865cfe96298b084581ce55004196139421aa7a GIT binary patch literal 6182 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 Ef|LdX6#xJL literal 1715 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 Ef|LdX6#xJL literal 3216 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 diff --git a/public/avatars/original/missing.png b/public/avatars/original/missing.png index 781370782ecf61f63f882639a74c3d1fc7474772..3b37e69c5d27e570718cda90b1865a668f8c4fee 100644 GIT binary patch literal 2433 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 Ha^QaeDySiy literal 2897 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 diff --git a/public/favicon.ico b/public/favicon.ico old mode 100755 new mode 100644 index fc5e475d425f5e6622c13b6f92e364ff3caaa387..7f865cfe96298b084581ce55004196139421aa7a GIT binary patch literal 6182 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 Ef|LdX6#xJL literal 9662 zcmeI2>35aY6~?dsL?J*(LK2dY1VX|XBoH7B2Eq^sqYQ?j0s%1)h5&&O1Z=B_6R3b7 zAXS{Gwz_PWw$-jW>vA4ihiV-V=kMG7JC}2F?z!)qwGCLCaO(YV@)k|MR7V5=&^Cv6Xxc~O*o+7_q?du?;TZ*K2>uRnHPiGnW zJ}sq-^z7P2(zx`Vi}$|--GaL)J6+29<;ZZo@_Y3(a)2#8rK=R@WXQ}>17ub8NU5(G zEwz`GN{v1b$X29%?q%nFqEB&o3TWBTWk@NOA8Bwa3M`1#8YIFOd)KZj^8T)FNM>-eIoq9&V9m zZ@o(PUtJ^rzjv#C+Y!TVWuW~=-=Ed?@!$W}%#*AyVRvjto9tNn{d;78=jaBRHELjov4FW^V7~0Dt2Ta_o!UKV8Sw4NmlnypcWp3w_i-ijjLja| zwM6=4q>3N^zHV7}%z%7(_LkN1y^j0nRj0fj02*8~+Ni2jBj4e4~t2 zor2HD>^|qDb(dqC<{6)54gB+(#S=S)pS8vgDv&o0HyD5MG4l+zFYe!F@DUIARZvWv zeQ>+1oI1kzrHj|SC+4P=6&sy@eLBhq*zQon>`=SmYmCc0$Lqd*iJ|62mj%Ws*zvFW znWJTNNgt^xA7J`Eas6_Ehxl$~CJqj+o7JZ7S-<|rB!Bb`hw%-+v{aepJ-mQxNVCMOf2myAD(Q~b)vq*xX&%?YYvxz|>{(V7nD@ayesF>Dan~mphkqV#oG0Wui-i^$N^*J`ePTCs z`qaLR z*N!O4jq?Flmr;GD$ZhpA27ddNd9wPuWo--h7$wfcGdcj%`TKQa>! zg_%8#ZFeo1Bws$TJx)Hju}b~P#Y&*{C|&cip3yt_nF4VTIIg>u(J;9QUiQ?swpPF z#m|~gDrc4`2I^?8(!y-xFMPwsuOD7#>eryPz&{`aKl9?7w_G(N!8UMaj@sDwTdNnh zWnFv>zVu@lInF-VEXOpCtA-UBdr~jhe)t4A$d7S5KXX%?zj z7^s2KJ+&tB%{=xBk_B6#S2xC7{87AMZskB~i=CP~vOIou=a2c%ZCA(XhI!sUu}SJQ zZu~mZa_co3({n2Z$*AHyDO3L-my*MBdUiLqK^}LlBOB(#ah%1BK3v?y7hDMcuxA6K zJCA#B;#YG8yzbkUI%J#fgM9z7>tbKx82R2--=-zjPHvrVVw<|g=6h^)P&v@&=ofU| z$F5x_A1l`o2h9DM#yPg47WQ@EVz>9X>A|+e)<-wamD4+;Jj~od7joDOzaw^N|9$f+ zv-brq~W3HZFZfr`e(-G{*fR23Kum%`jQop)=?aV;j z7Drf1zF07RsPQHI;EC&&8`*6CZxug01_tuGM{Ibeilt_UXh@kdJ`p?k)4pxeZ)APWOd7uBgp|TgU~I zhV?UXX7ZKxha=eE@60{^YYzr3lkpJ-ZkQP5Spa!MJ z0%J$l!S@$W9Hx7@ZE?D1-nQ!Ej?VA)Lw`4|o*ozjtcU%{XXGMxT-ZH&9hjFXfBVCg z3AsHQC*gH**qm*>M^{(q88CH|)w|nb|Nkk+&Z`)#HfY_`2hE8OQ9nGoXQ|c&t@|E3 zAG)|vxj$%ZXWyZJ_OU_d9qzgh?^v@! zdsj|Pu(w^C7WWNZ&hXTP&vOKoLB&UEo}kB@O?9CrTJ z+4awN9Qdg>*~1gBK5qA!_}sm8(gpYHWMx7I&Y$@$&Bg2AQ^yeR>_d}X<3jewcR2^f zKic9V@N+(!m!A5I!jEp?i#cNknfejV^mWfO9Dm>TMIEk-E~L)G=3ZT0ZqC#FSU{#v z?%fjIuY}~|usJXGd-5h{n8<+6@hQ&th>_0x&U&%&vmSd#_E@*BnPK)_{N_hqviq%{ g15+|<5)b5OxQRBIy-YIewAa`Dzd*m Date: Thu, 12 Jun 2025 20:00:16 -0400 Subject: [PATCH 68/90] Top posts test --- .../api/v1/timelines/local_top_controller.rb | 10 ++++++++++ .../mastodon/components/navigation_portal.tsx | 14 ++++++++++++-- .../mastodon/features/local_top_timeline/index.js | 14 ++++++++++++++ app/javascript/mastodon/routes.js | 6 ++++++ app/services/local_top_posts_service.rb | 15 +++++++++++++++ app/services/precompute_feed_service.rb | 10 ++++++++++ config/routes.rb | 11 +++++++++++ ...40612000000_add_local_top_algorithm_support.rb | 12 ++++++++++++ 8 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 app/controllers/api/v1/timelines/local_top_controller.rb create mode 100644 app/javascript/mastodon/features/local_top_timeline/index.js create mode 100644 app/javascript/mastodon/routes.js create mode 100644 app/services/local_top_posts_service.rb create mode 100644 db/migrate/20240612000000_add_local_top_algorithm_support.rb diff --git a/app/controllers/api/v1/timelines/local_top_controller.rb b/app/controllers/api/v1/timelines/local_top_controller.rb new file mode 100644 index 0000000000..fd11a3a24a --- /dev/null +++ b/app/controllers/api/v1/timelines/local_top_controller.rb @@ -0,0 +1,10 @@ +module Api::V1::Timelines + class LocalTopController < ApiController + before_action :require_user! + + def show + @statuses = LocalTopPostsService.new.call + render json: @statuses + end + end + end \ No newline at end of file diff --git a/app/javascript/mastodon/components/navigation_portal.tsx b/app/javascript/mastodon/components/navigation_portal.tsx index d3ac8baa6e..9904b70f2b 100644 --- a/app/javascript/mastodon/components/navigation_portal.tsx +++ b/app/javascript/mastodon/components/navigation_portal.tsx @@ -1,6 +1,16 @@ import Trends from 'mastodon/features/getting_started/containers/trends_container'; import { showTrends } from 'mastodon/initial_state'; +import { Link } from 'react-router-dom'; export const NavigationPortal: React.FC = () => ( -

    -); +
    + {/* Existing Trends section */} + {showTrends && } + + {/* Add Local Top tab */} + + + Local Top + +
    +); \ No newline at end of file diff --git a/app/javascript/mastodon/features/local_top_timeline/index.js b/app/javascript/mastodon/features/local_top_timeline/index.js new file mode 100644 index 0000000000..e23334cd9d --- /dev/null +++ b/app/javascript/mastodon/features/local_top_timeline/index.js @@ -0,0 +1,14 @@ +// app/javascript/mastodon/features/local_top_timeline/index.js +import React from 'react'; +import Timeline from '../../components/timeline'; + +export default class LocalTopTimeline extends React.PureComponent { + render() { + return ( + + ); + } +} \ No newline at end of file diff --git a/app/javascript/mastodon/routes.js b/app/javascript/mastodon/routes.js new file mode 100644 index 0000000000..b52f401472 --- /dev/null +++ b/app/javascript/mastodon/routes.js @@ -0,0 +1,6 @@ +// app/javascript/mastodon/routes.js +{ + path: '/timelines/local_top', + component: AsyncComponent(() => import('../features/local_top_timeline')), + exact: true, + } \ No newline at end of file diff --git a/app/services/local_top_posts_service.rb b/app/services/local_top_posts_service.rb new file mode 100644 index 0000000000..530ad15521 --- /dev/null +++ b/app/services/local_top_posts_service.rb @@ -0,0 +1,15 @@ +class LocalTopPostsService < BaseService + # Rank local posts by engagement (boosts > favs > replies) in last 24h + def call + Status + .local + .joins(:status_stat) + .where('statuses.created_at > ?', 24.hours.ago) + .select('statuses.*, + (status_stats.reblogs_count * 0.6 + + status_stats.favourites_count * 0.3 + + status_stats.replies_count * 0.1) AS engagement_score') + .order('engagement_score DESC') + .limit(50) # Adjust as needed + end + end \ No newline at end of file diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index a591c90913..70a8e8afb1 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -21,3 +21,13 @@ class PrecomputeFeedService < BaseService @skip_filled_timelines && FeedManager.instance.timeline_size(type, id) * 2 > FeedManager::MAX_ITEMS end end + +# app/services/precompute_feed_service.rb +def call(user) + case user.feed_algorithm + when 'local_top' + LocalTopPostsService.new.call + else + Status.chronological # Default + end +end diff --git a/config/routes.rb b/config/routes.rb index 1f97ddaaa4..bdfb8092d5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -163,6 +163,17 @@ Rails.application.routes.draw do resources :statuses, only: :show end + # config/routes.rb + namespace :api do + namespace :v1 do + resources :timelines do + collection do + get :local_top + end + end + end +end + resources :media, only: [:show] do get :player end diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb new file mode 100644 index 0000000000..1eeec1eda4 --- /dev/null +++ b/db/migrate/20240612000000_add_local_top_algorithm_support.rb @@ -0,0 +1,12 @@ +# db/migrate/20240612000000_add_local_top_algorithm_support.rb +class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[6.1] + def change + # Ensure status_stats exists (Mastodon usually has this) + unless column_exists?(:statuses, :status_stat_id) + add_reference :statuses, :status_stat, foreign_key: { on_delete: :cascade } + end + + # Add user preference for feed algorithm (default: chronological) + add_column :users, :feed_algorithm, :string, default: 'chronological' + end + end \ No newline at end of file From 5c5a35be2479a44c21b23bd19780db062ab5c87f Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 12 Jun 2025 20:04:43 -0400 Subject: [PATCH 69/90] Fix --- ...2000000_add_local_top_algorithm_support.rb | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb index 1eeec1eda4..11580d1d3f 100644 --- a/db/migrate/20240612000000_add_local_top_algorithm_support.rb +++ b/db/migrate/20240612000000_add_local_top_algorithm_support.rb @@ -1,12 +1,14 @@ # db/migrate/20240612000000_add_local_top_algorithm_support.rb -class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[6.1] - def change - # Ensure status_stats exists (Mastodon usually has this) - unless column_exists?(:statuses, :status_stat_id) - add_reference :statuses, :status_stat, foreign_key: { on_delete: :cascade } - end - - # Add user preference for feed algorithm (default: chronological) - add_column :users, :feed_algorithm, :string, default: 'chronological' - end - end \ No newline at end of file +class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[8.0] + disable_ddl_transaction! # Allows concurrent operations + + def change + # 1. Add reference without immediate foreign key validation + add_reference :statuses, :status_stat, + index: { algorithm: :concurrently }, # Concurrent index + foreign_key: { on_delete: :cascade, validate: false } # Defer validation + + # 2. Add user preference column (safe operation) + add_column :users, :feed_algorithm, :string, default: 'chronological' + end +end \ No newline at end of file From 2af5f750ad2ef5c79f4fcab08c5d0493fdeea0c0 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 12 Jun 2025 20:07:10 -0400 Subject: [PATCH 70/90] fix 2 --- ...240612000000_add_local_top_algorithm_support.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb index 11580d1d3f..51851d2837 100644 --- a/db/migrate/20240612000000_add_local_top_algorithm_support.rb +++ b/db/migrate/20240612000000_add_local_top_algorithm_support.rb @@ -1,14 +1,14 @@ # db/migrate/20240612000000_add_local_top_algorithm_support.rb class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[8.0] - disable_ddl_transaction! # Allows concurrent operations + disable_ddl_transaction! def change - # 1. Add reference without immediate foreign key validation - add_reference :statuses, :status_stat, - index: { algorithm: :concurrently }, # Concurrent index - foreign_key: { on_delete: :cascade, validate: false } # Defer validation - - # 2. Add user preference column (safe operation) + # Safe to add immediately add_column :users, :feed_algorithm, :string, default: 'chronological' + + # Add reference without foreign key constraint first + add_reference :statuses, :status_stat, + index: { algorithm: :concurrently }, + foreign_key: false end end \ No newline at end of file From 3f97292e5873051197184724f32be375b497a4b3 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 12 Jun 2025 20:09:39 -0400 Subject: [PATCH 71/90] fix 3 --- ...20160220174777_add_status_stat_foreign_key.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 db/migrate/20160220174777_add_status_stat_foreign_key.rb diff --git a/db/migrate/20160220174777_add_status_stat_foreign_key.rb b/db/migrate/20160220174777_add_status_stat_foreign_key.rb new file mode 100644 index 0000000000..6b1689b65d --- /dev/null +++ b/db/migrate/20160220174777_add_status_stat_foreign_key.rb @@ -0,0 +1,16 @@ +# db/migrate/[timestamp]_add_status_stat_foreign_key.rb +class AddStatusStatForeignKey < ActiveRecord::Migration[8.0] + disable_ddl_transaction! + + def up + add_foreign_key :statuses, :status_stats, + validate: false # Important for large tables + + # Validate in background + execute("ALTER TABLE statuses VALIDATE CONSTRAINT fk_rails_[constraint_name]") + end + + def down + remove_foreign_key :statuses, :status_stats + end + end \ No newline at end of file From d7a8574c6ea4ea9bede7d5fc601ec9519e5fd656 Mon Sep 17 00:00:00 2001 From: gitea Date: Sat, 14 Jun 2025 00:30:33 +0200 Subject: [PATCH 72/90] revert 3f97292e5873051197184724f32be375b497a4b3 revert fix 3 --- ...20160220174777_add_status_stat_foreign_key.rb | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 db/migrate/20160220174777_add_status_stat_foreign_key.rb diff --git a/db/migrate/20160220174777_add_status_stat_foreign_key.rb b/db/migrate/20160220174777_add_status_stat_foreign_key.rb deleted file mode 100644 index 6b1689b65d..0000000000 --- a/db/migrate/20160220174777_add_status_stat_foreign_key.rb +++ /dev/null @@ -1,16 +0,0 @@ -# db/migrate/[timestamp]_add_status_stat_foreign_key.rb -class AddStatusStatForeignKey < ActiveRecord::Migration[8.0] - disable_ddl_transaction! - - def up - add_foreign_key :statuses, :status_stats, - validate: false # Important for large tables - - # Validate in background - execute("ALTER TABLE statuses VALIDATE CONSTRAINT fk_rails_[constraint_name]") - end - - def down - remove_foreign_key :statuses, :status_stats - end - end \ No newline at end of file From 3f9dc3747b3f74cbdaa72f06c682c2ee2b80b513 Mon Sep 17 00:00:00 2001 From: gitea Date: Sat, 14 Jun 2025 00:31:15 +0200 Subject: [PATCH 73/90] revert 2af5f750ad2ef5c79f4fcab08c5d0493fdeea0c0 revert fix 2 --- ...240612000000_add_local_top_algorithm_support.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb index 51851d2837..11580d1d3f 100644 --- a/db/migrate/20240612000000_add_local_top_algorithm_support.rb +++ b/db/migrate/20240612000000_add_local_top_algorithm_support.rb @@ -1,14 +1,14 @@ # db/migrate/20240612000000_add_local_top_algorithm_support.rb class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[8.0] - disable_ddl_transaction! + disable_ddl_transaction! # Allows concurrent operations def change - # Safe to add immediately - add_column :users, :feed_algorithm, :string, default: 'chronological' - - # Add reference without foreign key constraint first + # 1. Add reference without immediate foreign key validation add_reference :statuses, :status_stat, - index: { algorithm: :concurrently }, - foreign_key: false + index: { algorithm: :concurrently }, # Concurrent index + foreign_key: { on_delete: :cascade, validate: false } # Defer validation + + # 2. Add user preference column (safe operation) + add_column :users, :feed_algorithm, :string, default: 'chronological' end end \ No newline at end of file From 820fff38d77a97890b571927ab20f5b6fe1fc2e7 Mon Sep 17 00:00:00 2001 From: gitea Date: Sat, 14 Jun 2025 00:31:35 +0200 Subject: [PATCH 74/90] revert 5c5a35be2479a44c21b23bd19780db062ab5c87f revert Fix --- ...2000000_add_local_top_algorithm_support.rb | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb index 11580d1d3f..1eeec1eda4 100644 --- a/db/migrate/20240612000000_add_local_top_algorithm_support.rb +++ b/db/migrate/20240612000000_add_local_top_algorithm_support.rb @@ -1,14 +1,12 @@ # db/migrate/20240612000000_add_local_top_algorithm_support.rb -class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[8.0] - disable_ddl_transaction! # Allows concurrent operations - - def change - # 1. Add reference without immediate foreign key validation - add_reference :statuses, :status_stat, - index: { algorithm: :concurrently }, # Concurrent index - foreign_key: { on_delete: :cascade, validate: false } # Defer validation - - # 2. Add user preference column (safe operation) - add_column :users, :feed_algorithm, :string, default: 'chronological' - end -end \ No newline at end of file +class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[6.1] + def change + # Ensure status_stats exists (Mastodon usually has this) + unless column_exists?(:statuses, :status_stat_id) + add_reference :statuses, :status_stat, foreign_key: { on_delete: :cascade } + end + + # Add user preference for feed algorithm (default: chronological) + add_column :users, :feed_algorithm, :string, default: 'chronological' + end + end \ No newline at end of file From db3dc2ab8392d497c42b9faf2a40cb030a964ec4 Mon Sep 17 00:00:00 2001 From: gitea Date: Sat, 14 Jun 2025 00:31:50 +0200 Subject: [PATCH 75/90] revert 16a2f4fb9e3295a6fe42c6de4e06d26d285cfae0 revert Top posts test --- .../api/v1/timelines/local_top_controller.rb | 10 ---------- .../mastodon/components/navigation_portal.tsx | 14 ++------------ .../mastodon/features/local_top_timeline/index.js | 14 -------------- app/javascript/mastodon/routes.js | 6 ------ app/services/local_top_posts_service.rb | 15 --------------- app/services/precompute_feed_service.rb | 10 ---------- config/routes.rb | 11 ----------- ...40612000000_add_local_top_algorithm_support.rb | 12 ------------ 8 files changed, 2 insertions(+), 90 deletions(-) delete mode 100644 app/controllers/api/v1/timelines/local_top_controller.rb delete mode 100644 app/javascript/mastodon/features/local_top_timeline/index.js delete mode 100644 app/javascript/mastodon/routes.js delete mode 100644 app/services/local_top_posts_service.rb delete mode 100644 db/migrate/20240612000000_add_local_top_algorithm_support.rb diff --git a/app/controllers/api/v1/timelines/local_top_controller.rb b/app/controllers/api/v1/timelines/local_top_controller.rb deleted file mode 100644 index fd11a3a24a..0000000000 --- a/app/controllers/api/v1/timelines/local_top_controller.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Api::V1::Timelines - class LocalTopController < ApiController - before_action :require_user! - - def show - @statuses = LocalTopPostsService.new.call - render json: @statuses - end - end - end \ No newline at end of file diff --git a/app/javascript/mastodon/components/navigation_portal.tsx b/app/javascript/mastodon/components/navigation_portal.tsx index 9904b70f2b..d3ac8baa6e 100644 --- a/app/javascript/mastodon/components/navigation_portal.tsx +++ b/app/javascript/mastodon/components/navigation_portal.tsx @@ -1,16 +1,6 @@ import Trends from 'mastodon/features/getting_started/containers/trends_container'; import { showTrends } from 'mastodon/initial_state'; -import { Link } from 'react-router-dom'; export const NavigationPortal: React.FC = () => ( -
    - {/* Existing Trends section */} - {showTrends && } - - {/* Add Local Top tab */} - - - Local Top - -
    -); \ No newline at end of file +
    {showTrends && }
    +); diff --git a/app/javascript/mastodon/features/local_top_timeline/index.js b/app/javascript/mastodon/features/local_top_timeline/index.js deleted file mode 100644 index e23334cd9d..0000000000 --- a/app/javascript/mastodon/features/local_top_timeline/index.js +++ /dev/null @@ -1,14 +0,0 @@ -// app/javascript/mastodon/features/local_top_timeline/index.js -import React from 'react'; -import Timeline from '../../components/timeline'; - -export default class LocalTopTimeline extends React.PureComponent { - render() { - return ( - - ); - } -} \ No newline at end of file diff --git a/app/javascript/mastodon/routes.js b/app/javascript/mastodon/routes.js deleted file mode 100644 index b52f401472..0000000000 --- a/app/javascript/mastodon/routes.js +++ /dev/null @@ -1,6 +0,0 @@ -// app/javascript/mastodon/routes.js -{ - path: '/timelines/local_top', - component: AsyncComponent(() => import('../features/local_top_timeline')), - exact: true, - } \ No newline at end of file diff --git a/app/services/local_top_posts_service.rb b/app/services/local_top_posts_service.rb deleted file mode 100644 index 530ad15521..0000000000 --- a/app/services/local_top_posts_service.rb +++ /dev/null @@ -1,15 +0,0 @@ -class LocalTopPostsService < BaseService - # Rank local posts by engagement (boosts > favs > replies) in last 24h - def call - Status - .local - .joins(:status_stat) - .where('statuses.created_at > ?', 24.hours.ago) - .select('statuses.*, - (status_stats.reblogs_count * 0.6 + - status_stats.favourites_count * 0.3 + - status_stats.replies_count * 0.1) AS engagement_score') - .order('engagement_score DESC') - .limit(50) # Adjust as needed - end - end \ No newline at end of file diff --git a/app/services/precompute_feed_service.rb b/app/services/precompute_feed_service.rb index 70a8e8afb1..a591c90913 100644 --- a/app/services/precompute_feed_service.rb +++ b/app/services/precompute_feed_service.rb @@ -21,13 +21,3 @@ class PrecomputeFeedService < BaseService @skip_filled_timelines && FeedManager.instance.timeline_size(type, id) * 2 > FeedManager::MAX_ITEMS end end - -# app/services/precompute_feed_service.rb -def call(user) - case user.feed_algorithm - when 'local_top' - LocalTopPostsService.new.call - else - Status.chronological # Default - end -end diff --git a/config/routes.rb b/config/routes.rb index bdfb8092d5..1f97ddaaa4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -163,17 +163,6 @@ Rails.application.routes.draw do resources :statuses, only: :show end - # config/routes.rb - namespace :api do - namespace :v1 do - resources :timelines do - collection do - get :local_top - end - end - end -end - resources :media, only: [:show] do get :player end diff --git a/db/migrate/20240612000000_add_local_top_algorithm_support.rb b/db/migrate/20240612000000_add_local_top_algorithm_support.rb deleted file mode 100644 index 1eeec1eda4..0000000000 --- a/db/migrate/20240612000000_add_local_top_algorithm_support.rb +++ /dev/null @@ -1,12 +0,0 @@ -# db/migrate/20240612000000_add_local_top_algorithm_support.rb -class AddLocalTopAlgorithmSupport < ActiveRecord::Migration[6.1] - def change - # Ensure status_stats exists (Mastodon usually has this) - unless column_exists?(:statuses, :status_stat_id) - add_reference :statuses, :status_stat, foreign_key: { on_delete: :cascade } - end - - # Add user preference for feed algorithm (default: chronological) - add_column :users, :feed_algorithm, :string, default: 'chronological' - end - end \ No newline at end of file From bb7024bf3f0b46a0ed16460817c1bc1c83174f28 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 12:12:06 -0400 Subject: [PATCH 76/90] Set chars via env --- app/validators/status_length_validator.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb index 575aaf1869..02aa04fa4b 100644 --- a/app/validators/status_length_validator.rb +++ b/app/validators/status_length_validator.rb @@ -1,20 +1,23 @@ # frozen_string_literal: true class StatusLengthValidator < ActiveModel::Validator - MAX_CHARS = 500 URL_PLACEHOLDER_CHARS = 23 URL_PLACEHOLDER = 'x' * 23 + def max_chars + @max_chars ||= ENV.fetch('MAX_CHARACTERS', 500).to_i + end + def validate(status) return unless status.local? && !status.reblog? - status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?(status) + status.errors.add(:text, I18n.t('statuses.over_character_limit', max: max_chars)) if too_long?(status) end private def too_long?(status) - countable_length(combined_text(status)) > MAX_CHARS + countable_length(combined_text(status)) > max_chars end def countable_length(str) @@ -56,4 +59,4 @@ class StatusLengthValidator < ActiveModel::Validator result << str[last_index..] result end -end +end \ No newline at end of file From 1f8b3fcc92078f6e7cb5e9ed3f64238b932230b7 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 13:10:05 -0400 Subject: [PATCH 77/90] Max Chars set via env --- app/validators/status_length_validator.rb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb index 02aa04fa4b..d77a0ac610 100644 --- a/app/validators/status_length_validator.rb +++ b/app/validators/status_length_validator.rb @@ -1,23 +1,20 @@ # frozen_string_literal: true class StatusLengthValidator < ActiveModel::Validator + MAX_CHARS = (ENV['MAX_CHARS'] || 500).to_i URL_PLACEHOLDER_CHARS = 23 URL_PLACEHOLDER = 'x' * 23 - def max_chars - @max_chars ||= ENV.fetch('MAX_CHARACTERS', 500).to_i - end - def validate(status) return unless status.local? && !status.reblog? - status.errors.add(:text, I18n.t('statuses.over_character_limit', max: max_chars)) if too_long?(status) + status.errors.add(:text, I18n.t('statuses.over_character_limit', max: MAX_CHARS)) if too_long?(status) end private def too_long?(status) - countable_length(combined_text(status)) > max_chars + countable_length(combined_text(status)) > MAX_CHARS end def countable_length(str) @@ -59,4 +56,4 @@ class StatusLengthValidator < ActiveModel::Validator result << str[last_index..] result end -end \ No newline at end of file +end From 51c8f9592e5d8ca55f3986be719ff00e6ab9aa01 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 13:11:54 -0400 Subject: [PATCH 78/90] env production sample --- .env.production.sample | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env.production.sample b/.env.production.sample index 4afaf8d756..a311ad5f8d 100644 --- a/.env.production.sample +++ b/.env.production.sample @@ -110,3 +110,6 @@ FETCH_REPLIES_MAX_SINGLE=500 # Max number of replies Collection pages to fetch - total FETCH_REPLIES_MAX_PAGES=500 + +# Maximum allowed character count +MAX_CHARS=5555 From f677d534dc5160413279744a11c8aec97ce710e0 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 18:46:56 -0400 Subject: [PATCH 79/90] JP to EN --- config/locales/simple_form.en.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml index 9264216121..ff17536ee1 100644 --- a/config/locales/simple_form.en.yml +++ b/config/locales/simple_form.en.yml @@ -66,18 +66,18 @@ en: setting_custom_css_lead: 'Be sure to remember: In the unlikely event that you make a mistake in entering your custom CSS and the screen does not display properly, you can disable your custom CSS from the link at the bottom of the sign-in screen. Open the sign-in screen in private mode of your browser, for example, and disable it.' setting_default_searchability: On kmyblue and Fedibird, the search is based on the search permission setting; on Misskey, all public, local public, and non-public posts are searched regardless of this setting; on Mastodon and Firefish, instead of search permission, the "Make public posts freely searchable on other servers" setting in the profile settings is applied. In Mastodon and Firefish, the "Make public posts freely searchable on other servers" setting in the profile settings is applied instead of the search permission. setting_default_sensitive: Sensitive media is hidden by default and can be revealed with a click - setting_disallow_unlisted_public_searchability: この設定を有効にすると、非収載投稿と検索範囲「誰でも」は両立できず不特定多数からの検索が不可になります。Fedibirdと同じ挙動になります + setting_disallow_unlisted_public_searchability: If you enable this setting, unlisted posts and the “everyone” search scope cannot coexist, making it impossible for unspecified users to search your posts. setting_display_media_default: Hide media marked as sensitive setting_display_media_hide_all: Always hide media setting_display_media_show_all: Always show media setting_dtl_force_searchability: 'With using #%{tag} tag, your post settings will be changed forcibly' setting_dtl_force_visibility: 'With using #%{tag} tag, your post settings will be changed forcibly' setting_emoji_reaction_policy: Even with this setting, users on non-kmyblue servers are free to put their emoji reaction on the post and share it within the same server. If you simply want to remove the emoji reaction from your own screen, you can disable it from the appearance settings - setting_emoji_reaction_streaming_notify_impl2: 当該サーバーの独自機能に対応したアプリを利用時に、絵文字リアクション機能を利用できます。動作確認していないため(そもそもそのようなアプリ自体を確認できていないため)正しく動かない場合があります + setting_emoji_reaction_streaming_notify_impl2: You can use the emoji reaction feature when using an app that supports this server’s unique functionality. However, since this has not been tested (and such apps have not even been identified), it may not work correctly. setting_enable_emoji_reaction: If turn off, other users still can react your posts setting_enabled_visibilities: If turn off, you cannot select and post the privacy. - setting_hide_network: フォローとフォロワーの情報がプロフィールページで見られないようにします - setting_public_post_to_unlisted: 未対応のサードパーティアプリからもローカル公開で投稿できますが、公開投稿はWeb以外できなくなります + setting_hide_network: It will hide the following and follower information from the profile page. + setting_public_post_to_unlisted: You can still post with local visibility using unsupported third-party apps, but public posts will no longer be possible outside of the web interface. setting_reject_send_limited_to_suspects: This applies to "Mutual Only" posts. Circle posts will be delivered without exception. Some Misskey servers have independently supported limited posting, but this is a setting for those who are concerned about it, as mutual-only posting exposes some of the users you are mutual with to Misskey users! setting_reject_unlisted_subscription: Misskey and its forks can **subscribe and search** for "non-following" posts from accounts they do not follow. This differs from kmyblue's behavior. It delivers posts in the specified public range to such servers as "followers only". Please understand, however, that due to its structure, it is difficult to handle perfectly and will occasionally be delivered as non-subscribed. setting_reverse_search_quote: Double-quotes will result in a search with a wider range of notation, which is the opposite of Mastodon's default behavior. @@ -121,10 +121,10 @@ en: peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense. profile_directory: The profile directory lists all users who have opted-in to be discoverable. receive_other_servers_emoji_reaction: It can cause load. It is recommended to enable it only when there are few people. - registrations_end_hour: 新規登録が承認なしで可能な時間帯の開始時間を指定します。これより前の時間に登録することはできません。終了時間より後にすることはできません。この時間帯から外れた新規登録には、別途承認が必要となります。 - registrations_limit: 現在のユーザー数がこれを超過すると、管理者がこの数値を増やさない限り新規登録できません。0を指定すると、この制限を無効化します。 - registrations_limit_per_day: 本日登録されたユーザー数がこれを超過すると、UTC時刻で翌日0時にならない限り新規登録できません。0を指定すると、この制限を無効化します。 - registrations_start_hour: 新規登録が承認なしで可能な時間帯の終了時間を指定します。これより後の時間に登録することはできません。開始時間より前にすることはできません。この時間帯から外れた新規登録には、別途承認が必要となります。 + registrations_end_hour: Specifies the end of the time window during which new registrations can be made without approval. Registrations cannot be made before the start time or after this end time. Registrations outside this time window will require separate approval. + registrations_limit: If the current number of users exceeds this value, new registrations will not be possible unless the administrator increases the limit. Setting this to 0 disables the restriction. + registrations_limit_per_day: If the number of users registered today exceeds this value, no new registrations will be allowed until 00:00 UTC the next day. Setting this to 0 disables the restriction. + registrations_start_hour: Specifies the start of the time window during which new registrations can be made without approval. Registrations cannot be made before this time or after the end time. Registrations outside this time window will require separate approval. require_invite_text: When sign-ups require manual approval, make the “Why do you want to join?” text input mandatory rather than optional site_contact_email: How people can reach you for legal or support inquiries. site_contact_username: How people can reach you on Mastodon. @@ -201,8 +201,8 @@ en: discoverable: Feature profile and posts in discovery algorithms fields: examples: - name_1: 例) GitHub - value_1: 例) https://github.com/xxxxxx + name_1: Example Gitea + value_1: Example https://giteahub.com name: Label value: Content indexable: Include public posts in search results From 03818781b6c66559478d468ea03ecf7793eb8c48 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 19:03:23 -0400 Subject: [PATCH 80/90] EN translation edit --- app/javascript/mastodon/components/server_banner.jsx | 2 +- app/javascript/mastodon/features/about/index.jsx | 4 ++-- .../mastodon/features/ui/components/sign_in_banner.jsx | 4 ++-- app/javascript/mastodon/locales/en-GB.json | 6 +++--- app/javascript/mastodon/locales/en.json | 8 ++++---- config/locales/en-GB.yml | 2 +- config/locales/en.yml | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/javascript/mastodon/components/server_banner.jsx b/app/javascript/mastodon/components/server_banner.jsx index 989ac7f006..72e4489dc1 100644 --- a/app/javascript/mastodon/components/server_banner.jsx +++ b/app/javascript/mastodon/components/server_banner.jsx @@ -42,7 +42,7 @@ class ServerBanner extends PureComponent { return ( diff --git a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx index 74a8fdb841..b7a57a4d9a 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx @@ -22,7 +22,7 @@ const SignInBanner = () => { if (sso_redirect) { return (
    -

    +

    @@ -45,7 +45,7 @@ const SignInBanner = () => { return (
    -

    +

    {signupButton} diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index b46d02baa9..5ce270e237 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderated servers", "about.contact": "Contact:", - "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", + "about.disclaimer": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", "about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the Fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", @@ -801,11 +801,11 @@ "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", - "server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.", + "server_banner.is_one_of_many": "{domain} is one of the many independent servers you can use to participate in the fediverse.", "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.", - "sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.", + "sign_in_banner.mastodon_is": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", "sign_in_banner.sign_in": "Sign in", "sign_in_banner.sso_redirect": "Login or Register", "status.admin_account": "Open moderation interface for @{name}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index ade34591a5..89910054d2 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -2,7 +2,7 @@ "about.blocks": "Moderated servers", "about.contact": "Contact:", "about.disabled": "Disabled", - "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", + "about.disclaimer": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", "about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.noop.explanation": "This server is limited partically.", "about.domain_blocks.noop.title": "Soft limited", @@ -14,7 +14,7 @@ "about.enabled": "Enabled", "about.full_text_search": "Full text search", "about.kmyblue_capabilities": "Features available in this server", - "about.kmyblue_capability": "This server is using kmyblue, a fork of Mastodon. On this server, kmyblues unique features are configured as follows.", + "about.kmyblue_capability": "Server unique features are configured as follows.", "about.not_available": "This information has not been made available on this server.", "about.powered_by": "Decentralized social media powered by {mastodon}", "about.public_visibility": "Public visibility", @@ -1006,11 +1006,11 @@ "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", - "server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.", + "server_banner.is_one_of_many": "{domain} is one of the many independent servers you can use to participate in the fediverse.", "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.", - "sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.", + "sign_in_banner.mastodon_is": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", "sign_in_banner.sign_in": "Login", "sign_in_banner.sso_redirect": "Login or Register", "status.admin_account": "Open moderation interface for @{name}", diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 92934f50f0..be4ec645d2 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1196,7 +1196,7 @@ en-GB: title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this Mastodon server, you'll be able to follow any other person on the Fediverse, regardless of where their account is hosted. + preamble: With an account on this server, you’ll be able to follow anyone on the Fediverse, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status diff --git a/config/locales/en.yml b/config/locales/en.yml index dca6a2d9f8..d7ae679283 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1527,7 +1527,7 @@ en: title: Login to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this Mastodon server, you'll be able to follow any other person on the fediverse, regardless of where their account is hosted. + preamble: With an account on this server, you’ll be able to follow anyone on the Fediverse, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status From 4eb1c8305c13fea79a096fc3c8582e25ab3f1c66 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 19:16:12 -0400 Subject: [PATCH 81/90] En edit --- app/javascript/mastodon/features/about/index.jsx | 2 +- app/javascript/mastodon/locales/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index e88c37b275..2f81656801 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -173,7 +173,7 @@ class About extends PureComponent {
    `${value} ${key.replace('@', '')}`).join(', ')} className='about__header__hero' />

    {isLoading ? : server.get('domain')}

    -

    Mastodon }} />

    +

    diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 89910054d2..32b3d65378 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -16,7 +16,7 @@ "about.kmyblue_capabilities": "Features available in this server", "about.kmyblue_capability": "Server unique features are configured as follows.", "about.not_available": "This information has not been made available on this server.", - "about.powered_by": "Decentralized social media powered by {mastodon}", + "about.powered_by": "Decentralized social media powered by {domain}", "about.public_visibility": "Public visibility", "about.rules": "Server rules", "account.account_note_header": "Personal note", From c3ff0887d50675d40593599f1f50fbfc695b2073 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 19:31:47 -0400 Subject: [PATCH 82/90] En edit --- app/javascript/mastodon/locales/sco.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index 872a61a8a2..7a7f926d5a 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderatit servers", "about.contact": "Contack:", - "about.disclaimer": "Mastodon is free, open-soorced saftware, an a trademairk o Mastodon gGmbH.", + "about.disclaimer": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", "about.domain_blocks.no_reason_available": "Raison no available", "about.domain_blocks.preamble": "On the hail, Mastodon lats ye view content frae an interack wi uisers fae onie ither server in the fediverse.", "about.domain_blocks.silenced.explanation": "Ye'll generally no see profiles an content frae this server, unless ye explicitly luik it up or opt intae it bi follaein.", From ebcd0950fdec4a3c4957dda96ca3dfc55a20f57e Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 20:45:06 -0400 Subject: [PATCH 83/90] Set max trending tags --- app/controllers/api/v1/trends/tags_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/v1/trends/tags_controller.rb b/app/controllers/api/v1/trends/tags_controller.rb index f84f1c0252..ecac3579fc 100644 --- a/app/controllers/api/v1/trends/tags_controller.rb +++ b/app/controllers/api/v1/trends/tags_controller.rb @@ -7,7 +7,7 @@ class Api::V1::Trends::TagsController < Api::BaseController after_action :insert_pagination_headers - DEFAULT_TAGS_LIMIT = 10 + DEFAULT_TAGS_LIMIT = (ENV['MAX_TRENDING_TAGS'] || 10).to_i deprecate_api '2022-03-30', only: :index, if: -> { request.path == '/api/v1/trends' } From 69fb60271d8b4d704d658a86b17055912defce7d Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 14 Jun 2025 20:56:08 -0400 Subject: [PATCH 84/90] Followed Tags + Profile dir --- .../features/getting_started/index.jsx | 9 ++++- .../ui/components/navigation_panel.jsx | 39 +++++++++++++++++++ app/validators/status_pin_validator.rb | 2 +- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index ff3166da35..14622e573d 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -14,6 +14,8 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import Directory from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; @@ -27,7 +29,7 @@ import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; -import { LinkFooter } from 'mastodon/features/ui/components/link_footer'; +import LinkFooter from 'mastodon/features/ui/components/link_footer'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions'; @@ -42,6 +44,8 @@ const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed Hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profile directory' }, settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' }, community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, deep_timeline: { id: 'navigation_bar.deep_timeline', defaultMessage: 'Deep timeline' }, @@ -144,8 +148,9 @@ class GettingStarted extends ImmutablePureComponent { , , , + , , - , + , , ); diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 95828ef25e..b9aabb48c2 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -13,6 +13,8 @@ import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import DirectoryIcon from '@/material-icons/400-24px/group.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; @@ -50,6 +52,8 @@ const messages = defineMessages({ home: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, explore: { id: 'explore.title', defaultMessage: 'Explore' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profiles directory' }, local: { id: 'column.local', defaultMessage: 'Local' }, deepLocal: { id: 'column.deep_local', defaultMessage: 'Deep' }, firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' }, @@ -228,7 +232,42 @@ class NavigationPanel extends Component {

    + + + )} + + {signedIn && ( + <> + + + + + + + + + )} + + {signedIn && explorer} + + {signedIn && ( + <> + + { !isHideItem('favourite_menu') && } +
    + + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + + {!signedIn && ( +
    +
    + { disabledAccountId ? : }
    diff --git a/app/validators/status_pin_validator.rb b/app/validators/status_pin_validator.rb index c9c1effba8..fa997f1c5b 100644 --- a/app/validators/status_pin_validator.rb +++ b/app/validators/status_pin_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class StatusPinValidator < ActiveModel::Validator - PIN_LIMIT = 5 + PIN_LIMIT = (ENV['MAX_PINNED_TOOTS'] || 5).to_i def validate(pin) pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog? From 9f711f854aa7d315c7c35b29344352505f5fd38b Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 04:49:58 +0200 Subject: [PATCH 85/90] revert 69fb60271d8b4d704d658a86b17055912defce7d revert Followed Tags + Profile dir --- .../features/getting_started/index.jsx | 9 +---- .../ui/components/navigation_panel.jsx | 39 ------------------- app/validators/status_pin_validator.rb | 2 +- 3 files changed, 3 insertions(+), 47 deletions(-) diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index 14622e573d..ff3166da35 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -14,8 +14,6 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; -import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; -import Directory from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; @@ -29,7 +27,7 @@ import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; import { fetchFollowRequests } from 'mastodon/actions/accounts'; import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; -import LinkFooter from 'mastodon/features/ui/components/link_footer'; +import { LinkFooter } from 'mastodon/features/ui/components/link_footer'; import { identityContextPropShape, withIdentity } from 'mastodon/identity_context'; import { canManageReports, canViewAdminDashboard } from 'mastodon/permissions'; @@ -44,8 +42,6 @@ const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' }, - followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed Hashtags' }, - directory: { id: 'navigation_bar.directory', defaultMessage: 'Profile directory' }, settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' }, community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, deep_timeline: { id: 'navigation_bar.deep_timeline', defaultMessage: 'Deep timeline' }, @@ -148,9 +144,8 @@ class GettingStarted extends ImmutablePureComponent { , , , - , , - , + , , ); diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index b9aabb48c2..95828ef25e 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -13,8 +13,6 @@ import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; -import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; -import DirectoryIcon from '@/material-icons/400-24px/group.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; @@ -52,8 +50,6 @@ const messages = defineMessages({ home: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, explore: { id: 'explore.title', defaultMessage: 'Explore' }, - followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' }, - directory: { id: 'navigation_bar.directory', defaultMessage: 'Profiles directory' }, local: { id: 'column.local', defaultMessage: 'Local' }, deepLocal: { id: 'column.deep_local', defaultMessage: 'Deep' }, firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' }, @@ -232,42 +228,7 @@ class NavigationPanel extends Component {

    - - - )} - - {signedIn && ( - <> - - - - - - - - - )} - - {signedIn && explorer} - - {signedIn && ( - <> - - { !isHideItem('favourite_menu') && } -
    - - - - {canManageReports(permissions) && } - {canViewAdminDashboard(permissions) && } - - )} - - {!signedIn && ( -
    -
    - { disabledAccountId ? : }
    diff --git a/app/validators/status_pin_validator.rb b/app/validators/status_pin_validator.rb index fa997f1c5b..c9c1effba8 100644 --- a/app/validators/status_pin_validator.rb +++ b/app/validators/status_pin_validator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class StatusPinValidator < ActiveModel::Validator - PIN_LIMIT = (ENV['MAX_PINNED_TOOTS'] || 5).to_i + PIN_LIMIT = 5 def validate(pin) pin.errors.add(:base, I18n.t('statuses.pin_errors.reblog')) if pin.status.reblog? From 8c73a671abcc029210ff01a823adf00d40353e5f Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 06:25:35 +0200 Subject: [PATCH 86/90] revert 750f5f4885845b3d9c3b0dc8da1575ac37c1a4b3 revert EN translation edit --- app/javascript/mastodon/components/server_banner.jsx | 2 +- app/javascript/mastodon/features/about/index.jsx | 4 ++-- .../mastodon/features/ui/components/sign_in_banner.jsx | 4 ++-- app/javascript/mastodon/locales/en-GB.json | 6 +++--- app/javascript/mastodon/locales/en.json | 8 ++++---- config/locales/en-GB.yml | 2 +- config/locales/en.yml | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/app/javascript/mastodon/components/server_banner.jsx b/app/javascript/mastodon/components/server_banner.jsx index 72e4489dc1..989ac7f006 100644 --- a/app/javascript/mastodon/components/server_banner.jsx +++ b/app/javascript/mastodon/components/server_banner.jsx @@ -42,7 +42,7 @@ class ServerBanner extends PureComponent { return (
    - {domain}, mastodon: Mastodon }} /> + {domain}, mastodon: Mastodon }} />
    diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 2f81656801..8158f47c11 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -229,7 +229,7 @@ class About extends PureComponent {
    -

    +

    {!isLoading && (
    1. @@ -285,7 +285,7 @@ class About extends PureComponent {
      -

      +

    diff --git a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx index b7a57a4d9a..74a8fdb841 100644 --- a/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx +++ b/app/javascript/mastodon/features/ui/components/sign_in_banner.jsx @@ -22,7 +22,7 @@ const SignInBanner = () => { if (sso_redirect) { return (
    -

    +

    @@ -45,7 +45,7 @@ const SignInBanner = () => { return (
    -

    +

    {signupButton} diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 5ce270e237..b46d02baa9 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -1,7 +1,7 @@ { "about.blocks": "Moderated servers", "about.contact": "Contact:", - "about.disclaimer": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", + "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.preamble": "Mastodon generally allows you to view content from and interact with users from any other server in the Fediverse. These are the exceptions that have been made on this particular server.", "about.domain_blocks.silenced.explanation": "You will generally not see profiles and content from this server, unless you explicitly look it up or opt into it by following.", @@ -801,11 +801,11 @@ "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", - "server_banner.is_one_of_many": "{domain} is one of the many independent servers you can use to participate in the fediverse.", + "server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.", "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.", - "sign_in_banner.mastodon_is": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", + "sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.", "sign_in_banner.sign_in": "Sign in", "sign_in_banner.sso_redirect": "Login or Register", "status.admin_account": "Open moderation interface for @{name}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 32b3d65378..cccae96dad 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -2,7 +2,7 @@ "about.blocks": "Moderated servers", "about.contact": "Contact:", "about.disabled": "Disabled", - "about.disclaimer": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", + "about.disclaimer": "Mastodon is free, open-source software, and a trademark of Mastodon gGmbH.", "about.domain_blocks.no_reason_available": "Reason not available", "about.domain_blocks.noop.explanation": "This server is limited partically.", "about.domain_blocks.noop.title": "Soft limited", @@ -14,7 +14,7 @@ "about.enabled": "Enabled", "about.full_text_search": "Full text search", "about.kmyblue_capabilities": "Features available in this server", - "about.kmyblue_capability": "Server unique features are configured as follows.", + "about.kmyblue_capability": "This server is using kmyblue, a fork of Mastodon. On this server, kmyblues unique features are configured as follows.", "about.not_available": "This information has not been made available on this server.", "about.powered_by": "Decentralized social media powered by {domain}", "about.public_visibility": "Public visibility", @@ -1006,11 +1006,11 @@ "server_banner.about_active_users": "People using this server during the last 30 days (Monthly Active Users)", "server_banner.active_users": "active users", "server_banner.administered_by": "Administered by:", - "server_banner.is_one_of_many": "{domain} is one of the many independent servers you can use to participate in the fediverse.", + "server_banner.is_one_of_many": "{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.", "server_banner.server_stats": "Server stats:", "sign_in_banner.create_account": "Create account", "sign_in_banner.follow_anyone": "Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.", - "sign_in_banner.mastodon_is": "Join the Fediverse, become part of a community, and break free from Big Tech™'s stranglehold on public discourse.", + "sign_in_banner.mastodon_is": "Mastodon is the best way to keep up with what's happening.", "sign_in_banner.sign_in": "Login", "sign_in_banner.sso_redirect": "Login or Register", "status.admin_account": "Open moderation interface for @{name}", diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index be4ec645d2..92934f50f0 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1196,7 +1196,7 @@ en-GB: title: Log in to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this server, you’ll be able to follow anyone on the Fediverse, regardless of where their account is hosted. + preamble: With an account on this Mastodon server, you'll be able to follow any other person on the Fediverse, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status diff --git a/config/locales/en.yml b/config/locales/en.yml index d7ae679283..dca6a2d9f8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1527,7 +1527,7 @@ en: title: Login to %{domain} sign_up: manual_review: Sign-ups on %{domain} go through manual review by our moderators. To help us process your registration, write a bit about yourself and why you want an account on %{domain}. - preamble: With an account on this server, you’ll be able to follow anyone on the Fediverse, regardless of where their account is hosted. + preamble: With an account on this Mastodon server, you'll be able to follow any other person on the fediverse, regardless of where their account is hosted. title: Let's get you set up on %{domain}. status: account_status: Account status From de70fca70dd9a88723cfe3ed6141fadd77c471c9 Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 06:33:48 +0200 Subject: [PATCH 87/90] Followed tags + dir --- .../features/getting_started/index.jsx | 5 +++ .../ui/components/navigation_panel.jsx | 39 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/app/javascript/mastodon/features/getting_started/index.jsx b/app/javascript/mastodon/features/getting_started/index.jsx index ff3166da35..48ce17881a 100644 --- a/app/javascript/mastodon/features/getting_started/index.jsx +++ b/app/javascript/mastodon/features/getting_started/index.jsx @@ -14,6 +14,8 @@ import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import Directory from '@/material-icons/400-24px/group.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; @@ -42,6 +44,8 @@ const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, public_timeline: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed Hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profile directory' }, settings_subheading: { id: 'column_subheading.settings', defaultMessage: 'Settings' }, community_timeline: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, deep_timeline: { id: 'navigation_bar.deep_timeline', defaultMessage: 'Deep timeline' }, @@ -144,6 +148,7 @@ class GettingStarted extends ImmutablePureComponent { , , , + , , , , diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 95828ef25e..39fd74c103 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -13,6 +13,8 @@ import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?re import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; +import HashtagIcon from '@/material-icons/400-24px/tag.svg?react'; +import DirectoryIcon from '@/material-icons/400-24px/group.svg?react'; import ModerationIcon from '@/material-icons/400-24px/gavel.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; @@ -50,6 +52,8 @@ const messages = defineMessages({ home: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, explore: { id: 'explore.title', defaultMessage: 'Explore' }, + followed_tags: { id: 'navigation_bar.followed_tags', defaultMessage: 'Followed hashtags' }, + directory: { id: 'navigation_bar.directory', defaultMessage: 'Profiles directory' }, local: { id: 'column.local', defaultMessage: 'Local' }, deepLocal: { id: 'column.deep_local', defaultMessage: 'Deep' }, firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' }, @@ -228,7 +232,42 @@ class NavigationPanel extends Component {

    + + + )} + + {signedIn && ( + <> + + + + + + + + + )} + + {signedIn && explorer} + + {signedIn && ( + <> + + { !isHideItem('favourite_menu') && } +
    + + + + {canManageReports(permissions) && } + {canViewAdminDashboard(permissions) && } + + )} + + {!signedIn && ( +
    +
    + { disabledAccountId ? : }
    From d7f7a2ed7fe77a0348d928b46075e959ae1489af Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 06:34:07 +0200 Subject: [PATCH 88/90] Fix --- .../mastodon/features/ui/components/navigation_panel.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index 39fd74c103..b9aabb48c2 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -240,7 +240,7 @@ class NavigationPanel extends Component { {signedIn && ( <> - + From b7b57bcc1a620d6956dba1138b146e8eef0900bd Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 06:34:25 +0200 Subject: [PATCH 89/90] fix --- .../ui/components/navigation_panel.jsx | 140 +++++------------- 1 file changed, 33 insertions(+), 107 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index b9aabb48c2..f3bf123415 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -1,10 +1,7 @@ import PropTypes from 'prop-types'; import { Component, useEffect } from 'react'; - import { defineMessages, injectIntl, useIntl } from 'react-intl'; - import { Link } from 'react-router-dom'; - import { useSelector, useDispatch } from 'react-redux'; import CirclesIcon from '@/material-icons/400-24px/account_circle-fill.svg?react'; @@ -33,6 +30,7 @@ import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; import StarActiveIcon from '@/material-icons/400-24px/star-fill.svg?react'; import StarIcon from '@/material-icons/400-24px/star.svg?react'; import AntennaIcon from '@/material-icons/400-24px/wifi.svg?react'; + import { fetchFollowRequests } from 'mastodon/actions/accounts'; import { IconWithBadge } from 'mastodon/components/icon_with_badge'; import { WordmarkLogo } from 'mastodon/components/logo'; @@ -75,7 +73,6 @@ const messages = defineMessages({ }); const NotificationsLink = () => { - const count = useSelector(selectUnreadNotificationGroupsCount); const intl = useIntl(); @@ -133,25 +130,20 @@ class NavigationPanel extends Component { const { intl } = this.props; const { signedIn, disabledAccountId, permissions } = this.props.identity; - const explorer = (trendsEnabled ? ( + const explorer = trendsEnabled ? ( ) : ( - )); - - let banner = undefined; + ); - if (transientSingleColumn) { - banner = ( -
    - {intl.formatMessage(messages.openedInClassicInterface)} - {" "} - - {intl.formatMessage(messages.advancedInterface)} - -
    - ); - } + const banner = transientSingleColumn ? ( +
    + {intl.formatMessage(messages.openedInClassicInterface)}{' '} + + {intl.formatMessage(messages.advancedInterface)} + +
    + ) : null; return (
    @@ -159,125 +151,59 @@ class NavigationPanel extends Component {
    - {banner && -
    - {banner} -
    - } + {banner &&
    {banner}
    }
    {signedIn && ( <> - - )} - - {signedIn && enableLocalTimeline && ( - - )} - - {signedIn && enableDtlMenu && dtlTag && ( - - )} - - {!signedIn && explorer} - - {signedIn && ( - - )} - - {(!signedIn && timelinePreview) && ( - - )} - - {signedIn && ( - <> + {enableLocalTimeline && } + {enableDtlMenu && dtlTag && } +
    - - )} - - {signedIn && ( - <> + + - - )} - - {signedIn && explorer} - - {signedIn && ( - <> + {explorer} - { !isHideItem('favourite_menu') && } + {!isHideItem('favourite_menu') && }
    - - {canManageReports(permissions) && } {canViewAdminDashboard(permissions) && } )} {!signedIn && ( -
    -
    - { disabledAccountId ? : } -
    + <> + {explorer} + {(timelinePreview || enableLocalTimeline) && ( + + )} +
    +
    + {disabledAccountId ? : } +
    + )} +
    -
    -
    - - - - )} - - {signedIn && ( - <> - - - - - - - - - )} - - {signedIn && explorer} - - {signedIn && ( - <> - - { !isHideItem('favourite_menu') && } -
    - - - - {canManageReports(permissions) && } - {canViewAdminDashboard(permissions) && } - - )} - - {!signedIn && ( -
    -
    - { disabledAccountId ? : } -
    +
    +
    +
    -
    ); } - } export default injectIntl(withIdentity(NavigationPanel)); From 972e89558c5b9c6dec90d4a47665d1219cb39bbd Mon Sep 17 00:00:00 2001 From: gitea Date: Sun, 15 Jun 2025 06:34:57 +0200 Subject: [PATCH 90/90] revert 03818781b6c66559478d468ea03ecf7793eb8c48 revert EN translation edit
    - {domain}, mastodon: Mastodon }} /> + {domain}, mastodon: Mastodon }} />
    diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 359fb2ff7a..e88c37b275 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -229,7 +229,7 @@ class About extends PureComponent {
    -

    +

    {!isLoading && (
    1. @@ -285,7 +285,7 @@ class About extends PureComponent {
      -

      +