From 86192fad48987626b8edf82d6ec7c8211bd9d3ca Mon Sep 17 00:00:00 2001 From: Rio Bahtiar Date: Thu, 19 Jan 2023 05:50:46 +0700 Subject: [PATCH 01/28] feat(i18n): Improvements for Indonesian translation --- locales/id-ID.json | 158 +++++++++++++++++++++++++++++---------------- 1 file changed, 104 insertions(+), 54 deletions(-) diff --git a/locales/id-ID.json b/locales/id-ID.json index e18b3343..39453468 100644 --- a/locales/id-ID.json +++ b/locales/id-ID.json @@ -28,31 +28,34 @@ "muted_users": "Pengguna dibisukan", "muting": "Bisukan", "mutuals": "Terkait", + "notifications_on_post_disable": "Berhenti memberi tahu saya saat {username} memposting", + "notifications_on_post_enable": "Beri tahu saya jika {username} memposting", "notify_on_post": "Beri tahu saya jika {username} memposting", - "pinned": "Disematkan", + "pinned": "Dilekatkan", "posts": "Posting", "posts_count": "{0} Pos|{0} Pos|{0} Pos", "profile_description": "tajuk profil {0}", "profile_unavailable": "Profil tidak tersedia", "unblock": "Buka blokir", "unfollow": "Berhenti mengikuti", - "unmute": "Membunyikan", + "unmute": "Bunyikan", "view_other_followers": "Pengikut dari contoh lain mungkin tidak ditampilkan.", "view_other_following": "Mengikuti dari contoh lain mungkin tidak ditampilkan." }, "action": { "apply": "Terapkan", - "bookmark": "Tandai", + "bookmark": "Markah", "bookmarked": "Ditandai", - "boost": "Dorong", + "boost": "Dukung", "boost_count": "{0}", - "boosted": "Didorong", + "boosted": "Didukung", + "clear_publish_failed": "Hapus error publikasi", "clear_upload_failed": "Hapus kesalahan pengunggahan file", - "close": "Menutup", - "compose": "Menyusun", - "confirm": "Mengonfirmasi", + "close": "Tutup", + "compose": "Menulis", + "confirm": "Konfirmasi", "edit": "Sunting", - "enter_app": "Masukkan Aplikasi", + "enter_app": "Masuk Aplikasi", "favourite": "Favorit", "favourite_count": "{0}", "favourited": "Difavoritkan", @@ -85,8 +88,8 @@ "sign_in_desc": "Tambahkan akun yang ada", "switch_account": "Beralih ke {0}", "switch_account_desc": "Beralih ke akun lain", - "toggle_dark_mode": "Beralih ke mode gelap", - "toggle_zen_mode": "Beralih ke mode zen" + "toggle_dark_mode": "Beralih ke modus gelap", + "toggle_zen_mode": "Beralih ke modus zen" }, "common": { "confirm_dialog": { @@ -104,9 +107,52 @@ "draft_title": "Draf {0}", "drafts": "Draf ({v})" }, + "confirm": { + "block_account": { + "cancel": "Batalkan", + "confirm": "Blokir", + "title": "Yakin ingin memblokir {0}?" + }, + "block_domain": { + "cancel": "Batalkan", + "confirm": "Blokir", + "title": "Yakin ingin memblokir {0}?" + }, + "common": { + "cancel": "Tidak", + "confirm": "Ya" + }, + "delete_posts": { + "cancel": "Batalkan", + "confirm": "Hapus", + "title": "Yakin ingin menghapus postingan ini?" + }, + "mute_account": { + "cancel": "Batalkan", + "confirm": "Bisukan", + "title": "Yakin ingin membisukan {0}?" + }, + "show_reblogs": { + "cancel": "Batalkan", + "confirm": "Tampilkan", + "title": "Yakin ingin menampilkan dukungan dari {0}?" + }, + "unfollow": { + "cancel": "Batalkan", + "confirm": "Berhenti mengikuti", + "title": "Anda yakin ingin berhenti mengikuti?" + } + }, "conversation": { "with": "dengan" }, + "custom_cards": { + "stackblitz": { + "lines": "Garis {0}", + "open": "Buka", + "snippet_from": "Cuplikan dari {0}" + } + }, "error": { "account_not_found": "Akun {0} tidak ditemukan", "explore-list-empty": "Tidak ada yang sedang tren saat ini. \nPeriksa kembali nanti!", @@ -131,7 +177,7 @@ "menu": { "block_account": "Blokir {0}", "block_domain": "Blokir domain {0}", - "copy_link_to_post": "Salin tautan ke pos ini", + "copy_link_to_post": "Salin tautan pos ini", "delete": "Hapus", "delete_and_redraft": "Hapus dan buat ulang draf", "delete_confirm": { @@ -142,18 +188,18 @@ "direct_message_account": "Pesan langsung {0}", "edit": "Sunting", "hide_reblogs": "Sembunyikan dukungan dari {0}", - "mention_account": "Penyebutan {0}", + "mention_account": "Sebut {0}", "mute_account": "Bisukan {0}", "mute_conversation": "Nonaktifkan postingan ini", "open_in_original_site": "Buka di situs asli", "pin_on_profile": "Sematkan di profil", "share_post": "Bagikan postingan ini", - "show_favourited_and_boosted_by": "Tunjukkan siapa yang difavoritkan dan didukung", - "show_reblogs": "Tampilkan peningkatan dari {0}", + "show_favourited_and_boosted_by": "Tampilkan siapa yang memfavoritkan dan mendukung", + "show_reblogs": "Tampilkan dukungan dari {0}", "show_untranslated": "Tampilkan versi non-terjemahan", "toggle_theme": { - "dark": "Beralih mode gelap", - "light": "Beralih mode cahaya" + "dark": "Beralih ke modus gelap", + "light": "Beralih ke modus terang" }, "translate_post": "Terjemahkan pos", "unblock_account": "Buka blokir {0}", @@ -166,11 +212,11 @@ "back": "Kembali", "blocked_domains": "Domain yang diblokir", "blocked_users": "Pengguna diblokir", - "bookmarks": "Penanda", - "built_at": "Dibangun {0}", + "bookmarks": "Markah", + "built_at": "Diperbarui {0}", "compose": "Menyusun", "conversations": "Percakapan", - "explore": "Mengeksplorasi", + "explore": "Jelajahi", "favourites": "Favorit", "federated": "Federasi", "home": "Beranda", @@ -185,14 +231,14 @@ "settings": "Pengaturan", "show_intro": "Tampilkan pengantar", "toggle_theme": "Beralih Tema", - "zen_mode": "Mode Zen" + "zen_mode": "Modus Zen" }, "notification": { "favourited_post": "memfavoritkan kiriman Anda", "followed_you": "mengikutimu", "followed_you_count": "{0} orang mengikuti Anda|{0} orang mengikuti Anda|{0} orang mengikuti Anda", "missing_type": "NOTIFIKASI HILANG.jenis:", - "reblogged_post": "me-reblog posting Anda", + "reblogged_post": "mendukung posting Anda", "request_to_follow": "meminta untuk mengikuti Anda", "signed_up": "mendaftar", "update_status": "memperbarui postingannya" @@ -205,9 +251,9 @@ "the_thread": "utas" }, "pwa": { - "dismiss": "Membubarkan", - "title": "Pembaruan Elk baru tersedia!", - "update": "Memperbarui", + "dismiss": "Batalkan", + "title": "Pembaruan Elk tersedia!", + "update": "Perbarui", "update_available_short": "Perbarui Elk", "webmanifest": { "canary": { @@ -239,25 +285,25 @@ "settings": { "about": { "label": "Tentang", - "meet_the_team": "Temui Tim", - "sponsor_action": "Sponsori kami", + "meet_the_team": "Tim Pengembang", + "sponsor_action": "Dukung kami", "sponsor_action_desc": "Untuk mendukung tim mengembangkan Elk", - "sponsors": "Sponsor", - "sponsors_body_1": "Elk dimungkinkan berkat sponsor yang murah hati dan bantuan dari:", - "sponsors_body_2": "Dan semua perusahaan dan individu yang mensponsori Elk Team dan para anggotanya.", - "sponsors_body_3": "Jika Anda menikmati aplikasi ini, pertimbangkan untuk mensponsori kami:" + "sponsors": "Sponsorship", + "sponsors_body_1": "Elk dimungkinkan berkat pendukung yang murah hati dan bantuan dari:", + "sponsors_body_2": "Dan semua perusahaan dan individu yang mendukung Tim Elk dan para anggotanya.", + "sponsors_body_3": "Jika Anda menikmati aplikasi ini, pertimbangkan untuk mendukung kami:" }, "account_settings": { - "description": "Edit pengaturan akun Anda di Mastodon UI", + "description": "Sunting pengaturan akun Anda di Mastodon UI", "label": "Pengaturan akun" }, "interface": { - "color_mode": "Mode Warna", - "dark_mode": "Mode Gelap", + "color_mode": "Berwarna", + "dark_mode": "Gelap", "default": "(bawaan)", "font_size": "Ukuran huruf", "label": "Antarmuka", - "light_mode": "Mode Cahaya", + "light_mode": "Terang", "size_label": { "lg": "Besar", "md": "Medium", @@ -265,7 +311,8 @@ "xl": "Ekstra besar", "xs": "Ekstra kecil" }, - "system_mode": "Sistem" + "system_mode": "Sistem", + "theme_color": "Warna Tema" }, "language": { "display_language": "Bahasa tampilan", @@ -280,7 +327,7 @@ "alerts": { "favourite": "Favorit", "follow": "Pengikut baru", - "mention": "Penyebutan", + "mention": "Sebutan", "poll": "Polling", "reblog": "Reblog posting Anda", "title": "Pemberitahuan apa yang harus diterima?" @@ -323,8 +370,9 @@ "notifications_settings": "Notifikasi", "preferences": { "github_cards": "Kartu GitHub", - "hide_boost_count": "Sembunyikan jumlah peningkatan", - "hide_favorite_count": "Sembunyikan hitungan favorit", + "grayscale_mode": "Modus Hitam Putih", + "hide_boost_count": "Sembunyikan jumlah dukungan", + "hide_favorite_count": "Sembunyikan jumlah favorit", "hide_follower_count": "Sembunyikan jumlah pengikut", "label": "Preferensi", "title": "Fitur Eksperimental", @@ -334,7 +382,7 @@ "profile": { "appearance": { "bio": "Bio", - "description": "Edit avatar, nama pengguna, profil, dll.", + "description": "Sunting avatar, nama pengguna, profil, dll.", "display_name": "Nama tampilan", "label": "Penampilan", "profile_metadata": "Metadata profil", @@ -343,7 +391,7 @@ }, "featured_tags": { "description": "Orang-orang dapat menelusuri kiriman publik Anda di bawah tagar ini.", - "label": "Hashtag unggulan" + "label": "Tagar unggulan" }, "label": "Profil" }, @@ -362,23 +410,24 @@ "state": { "attachments_exceed_server_limit": "Jumlah lampiran melebihi batas per posting.", "attachments_limit_error": "Batas per posting terlampaui", - "edited": "(Diedit)", - "editing": "Mengedit", + "edited": "(Disunting)", + "editing": "Menyunting", "loading": "Memuat...", + "publish_failed": "Publikasi gagal", "publishing": "Penerbitan", "upload_failed": "Gagal mengunggah", "uploading": "Mengunggah..." }, "status": { - "boosted_by": "Didorong Oleh", - "edited": "Diedit {0}", - "favourited_by": "Favorit Oleh", + "boosted_by": "Didukung Oleh", + "edited": "Disunting {0}", + "favourited_by": "Difavoritkan Oleh", "filter_hidden_phrase": "Difilter oleh", "filter_removed_phrase": "Dihapus oleh filter", "filter_show_anyway": "Tetap tampilkan", "img_alt": { "desc": "Keterangan", - "dismiss": "Membubarkan" + "dismiss": "Batalkan" }, "poll": { "count": "{0} suara|{0} suara|{0} suara", @@ -396,7 +445,7 @@ }, "status_history": { "created": "dibuat {0}", - "edited": "diubah {0}" + "edited": "disunting {0}" }, "tab": { "for_you": "Untuk kamu", @@ -410,9 +459,9 @@ }, "tag": { "follow": "Ikuti", - "follow_label": "Ikuti tag {0}", + "follow_label": "Ikuti tagar {0}", "unfollow": "Berhenti mengikuti", - "unfollow_label": "Berhenti mengikuti tag {0}" + "unfollow_label": "Berhenti mengikuti tagar {0}" }, "time_ago_options": { "day_future": "dalam 0 hari|besok|dalam {n} hari", @@ -436,8 +485,8 @@ "short_month_past": "{n}bln", "short_second_future": "dalam {n}dtk", "short_second_past": "{n}dtk", - "short_week_future": "di {n}mg", - "short_week_past": "{n}mg", + "short_week_future": "di {n}mng", + "short_week_past": "{n}mng", "short_year_future": "di {n}th", "short_year_past": "{n}th", "week_future": "dalam 0 minggu|minggu depan|dalam {n} minggu", @@ -464,13 +513,14 @@ "explore_links_intro": "Berita-berita ini sedang dibicarakan oleh orang-orang di server ini dan server-server lain dari jaringan terdesentralisasi saat ini.", "explore_posts_intro": "Postingan-postingan ini dari server ini dan server lain di jaringan terdesentralisasi sedang mendapatkan daya tarik di server ini sekarang.", "explore_tags_intro": "Tagar-tagar ini mendapatkan daya tarik di antara orang-orang di server ini dan server lain dari jaringan terdesentralisasi saat ini.", - "toggle_code_block": "Alihkan blok kode" + "publish_failed": "Tutup pesan yang gagal di bagian atas editor untuk mempublikasikan ulang postingan", + "toggle_code_block": "Tulis sebagai blok kode" }, "user": { "add_existing": "Tambahkan akun yang ada", "server_address_label": "Alamat Server Mastodon", "sign_in_desc": "Masuk untuk mengikuti profil atau hashtag, favorit, berbagi dan membalas posting, atau berinteraksi dari akun Anda di server lain.", - "sign_in_notice_title": "Melihat {0} data publik", + "sign_in_notice_title": "Menampilkan data publik {0}", "sign_out_account": "Keluar {0}", "tip_no_account": "Jika Anda belum memiliki akun Mastodon, {0}.", "tip_register_account": "pilih server Anda dan daftarkan" From a81e8742d1887b7f591f7a9d6856ee770230004e Mon Sep 17 00:00:00 2001 From: patak Date: Thu, 19 Jan 2023 01:01:48 +0100 Subject: [PATCH 02/28] chore: remove unused snapshots --- tests/__snapshots__/html-parse.test.ts.snap | 66 --------------------- 1 file changed, 66 deletions(-) diff --git a/tests/__snapshots__/html-parse.test.ts.snap b/tests/__snapshots__/html-parse.test.ts.snap index 492b2846..d7f36a0d 100644 --- a/tests/__snapshots__/html-parse.test.ts.snap +++ b/tests/__snapshots__/html-parse.test.ts.snap @@ -92,25 +92,6 @@ exports[`html-parse > empty > html 1`] = `""`; exports[`html-parse > empty > text 1`] = `""`; -exports[`html-parse > hide mentions in context > html 1`] = ` -"

- @haoqunGreat to see this happening -

-" -`; - -exports[`html-parse > hide mentions in context > text 1`] = `"@haoqunGreat to see this happening"`; - exports[`html-parse > html entities > html 1`] = ` "

Hello <World />.

" @@ -161,50 +142,3 @@ exports[`html-parse > link + mention > html 1`] = ` `; exports[`html-parse > link + mention > text 1`] = `"Happy 🤗 we’re now using @vitest (migrated from chai+mocha) https://github.com/ayoayco/astro-reactive-library/pull/203"`; - -exports[`html-parse > mentions without context > html 1`] = ` -"

- @haoqunGreat to see this happening -

-" -`; - -exports[`html-parse > mentions without context > text 1`] = `"@haoqunGreat to see this happening"`; - -exports[`html-parse > show mentions in context > html 1`] = ` -"

- @haoqun - @antfuGreat to see this happening -

-" -`; - -exports[`html-parse > show mentions in context > text 1`] = `"@haoqun @antfuGreat to see this happening"`; From 1f427e2538f80459443e0c09506e306fb0981c85 Mon Sep 17 00:00:00 2001 From: Vivi Date: Thu, 19 Jan 2023 09:19:05 +0000 Subject: [PATCH 03/28] docs: add guide to hosting on Netlify and CloudFlare (#1302) --- docs/content/2.deployment/1.netlify.md | 59 ++++++++++++++++++ .../cf-api-token-settings.png | Bin 0 -> 34183 bytes .../images/selfhosting-guide/github-fork.png | Bin 0 -> 27237 bytes 3 files changed, 59 insertions(+) create mode 100644 docs/content/2.deployment/1.netlify.md create mode 100644 docs/public/images/selfhosting-guide/cf-api-token-settings.png create mode 100644 docs/public/images/selfhosting-guide/github-fork.png diff --git a/docs/content/2.deployment/1.netlify.md b/docs/content/2.deployment/1.netlify.md new file mode 100644 index 00000000..054f3be6 --- /dev/null +++ b/docs/content/2.deployment/1.netlify.md @@ -0,0 +1,59 @@ +# Netlify and Cloudflare + +Want to host Elk for your Mastodon instance? You came to the right place! + +For this guide we're going to use Netlify for hosting the app, and Cloudflare for key value storage. Both of which can be used on their free tiers if your instance is small. + +## Forking Elk + +In order to use Netlify with Elk, we'll need to fork the Elk repo. + +Fork the repository from [https://github.com/elk-zone/elk](https://github.com/elk-zone/elk). Make sure you deselect "Copy the main branch only" if you want to use the stable `release` branch. +![The settings to use for forking the Elk repository](/docs/images/selfhosting-guide/github-fork.png) + +## Importing the Elk repo into Netlify + +On the main page of your Netlify dashboard, press the "Import from GitHub" button. Point it to your Elk fork. + +On the third page with Site settings, change the "Branch to deploy" to `release` if you wish. Press "Deploy site". + +That's one step done! Keep the tab open while we hop over to CloudFlare for a bit. + +## Setting up CloudFlare Workers KV + +From your CloudFlare dashboard, open "Workers". If this is your first time opening this tab, CloudFlare will ask you to set up a free custom Cloudflare Workers subdomain. Follow the instructions. + +Go to "KV" and create a new namespace. + +Then go to "Overview" and click on API tokens. We want to create an API token that will let Elk modify our newly made Worker. Click on "Create token" and then in the Custom token section click "Get started". + +The only permission that we'll need is to edit the Workers KV Storage. +![The settings to use for the CloudFlare API token](/docs/images/selfhosting-guide/cf-api-token-settings.png) + +Save the newly made token in a safe spot. Keep the tab open while we'll configure the environment variables on Netlify. + +## Setting the environment variables on Netlify + +On your project page, go to "Site settings", and open the "Environment variables" section. + +There are 5 environment variables to add. + +| Environment variable | What it is | +|---|---| +| NUXT_CLOUDFLARE_ACCOUNT_ID | This is your CloudFlare Account ID. You can find it in "Workers > Overview". | +| NUXT_CLOUDFLARE_API_TOKEN | Put your CloudFlare API token here. | +| NUXT_CLOUDFLARE_NAMESPACE_ID | This is your CloudFlare KV Namespace ID. You can find it in "Workers > KV". | +| NUXT_STORAGE_DRIVER | Because we're using CloudFlare, we'll need to set this to `cloudflare`. | +| NUXT_PUBLIC_DEFAULT_SERVER | This is the address of the Mastodon instance that will show up when a user visits your Elk deployment and is not logged in. If you don't make that variable, it will point to `m.webtoo.ls` by default. | + +That's it! All that's left to do is... + +## Deploy Elk! +On your project page open the Deploys tab, click on "Trigger deploy" and "Deploy site". In a few minutes Elk should be up and running! + +## Use a custom domain +If you want to use a custom domain, go to "Domain settings" on your Netlify project page, and press "Add custom domain". If your domain is not bought from Netlify, it will ask you to add a CNAME record. Do that. + +Once the custom domain is added, you'll need to add an SSL/TLS certificate. At the bottom of the page press "Verify DNS configuration" and if it succeeds, press "Provision certificate". If that fails, you may need to wait some time until your DNS propagetes. + +And that's it! Enjoy your instance's Elk! diff --git a/docs/public/images/selfhosting-guide/cf-api-token-settings.png b/docs/public/images/selfhosting-guide/cf-api-token-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..1f3c58381bbe3f50d39f4c82e41b3a81f0fd23d1 GIT binary patch literal 34183 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

jy;Y<+9VoW`mrJNOTd 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 Date: Thu, 19 Jan 2023 11:26:01 +0100 Subject: [PATCH 04/28] feat: inline some mentions to reduce spacing (#1307) --- composables/content-parse.ts | 21 ++++++++--- tests/content-rich.test.ts | 70 ++++++++++++++++++++++++++---------- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/composables/content-parse.ts b/composables/content-parse.ts index 2891be12..cd0ce75e 100644 --- a/composables/content-parse.ts +++ b/composables/content-parse.ts @@ -469,6 +469,7 @@ function transformCollapseMentions(status?: mastodon.v1.Status, inReplyToStatus? return node const mentions: (Node | undefined)[] = [] const children = node.children as Node[] + let trimContentStart: (() => void) | undefined for (const child of children) { // mention if (isMention(child)) { @@ -480,8 +481,11 @@ function transformCollapseMentions(status?: mastodon.v1.Status, inReplyToStatus? } // other content, stop collapsing else { - if (child.type === TEXT_NODE) - child.value = child.value.trimStart() + if (child.type === TEXT_NODE) { + trimContentStart = () => { + child.value = child.value.trimStart() + } + } // remove
after mention if (child.name === 'br') mentions.push(undefined) @@ -495,6 +499,7 @@ function transformCollapseMentions(status?: mastodon.v1.Status, inReplyToStatus? let mentionsCount = 0 let contextualMentionsCount = 0 let removeNextSpacing = false + const contextualMentions = mentions.filter((mention) => { if (!mention) return false @@ -508,24 +513,30 @@ function transformCollapseMentions(status?: mastodon.v1.Status, inReplyToStatus? mentionsCount++ if (inReplyToStatus) { const mentionHandle = getMentionHandle(mention) - if (inReplyToStatus.account.acct === mentionHandle || inReplyToStatus.mentions.some(m => m.acct === mentionHandle)) + if (inReplyToStatus.account.acct === mentionHandle || inReplyToStatus.mentions.some(m => m.acct === mentionHandle)) { + removeNextSpacing = true return false + } } contextualMentionsCount++ } return true - }) + }) as Node[] // We have a special case for single mentions that are part of a reply. // We already have the replying to badge in this case or the status is connected to the previous one. // This is needed because the status doesn't included the in Reply to handle, only the account id. // But this covers the majority of cases. const showMentions = !(contextualMentionsCount === 0 || (mentionsCount === 1 && status?.inReplyToAccountId)) + const grouped = contextualMentionsCount > 2 + if (grouped) + trimContentStart?.() const contextualChildren = children.slice(mentions.length) + const mentionNodes = showMentions ? (grouped ? [h('mention-group', null, ...contextualMentions)] : contextualMentions) : [] return { ...node, - children: showMentions ? [h('mention-group', null, ...contextualMentions), ...contextualChildren] : contextualChildren, + children: [...mentionNodes, ...contextualChildren], } } } diff --git a/tests/content-rich.test.ts b/tests/content-rich.test.ts index e56cba11..bf9ed51e 100644 --- a/tests/content-rich.test.ts +++ b/tests/content-rich.test.ts @@ -91,21 +91,21 @@ describe('content-rich', () => { }) expect(formatted).toMatchInlineSnapshot(` "

- - content + + + content { `) }) - it('shows some collapsed mentions', async () => { + it('shows some collapsed mentions inline', async () => { const { formatted } = await render('

@elk @antfu content

', { collapseMentionLink: true, inReplyToStatus: { account: { acct: 'elk@webtoo.ls' }, mentions: [] as mastodon.v1.StatusMention[] } as mastodon.v1.Status, }) expect(formatted).toMatchInlineSnapshot(` "

- - + content +

+ " + `) + }) + + it('shows some collapsed mentions grouped', async () => { + const { formatted } = await render('

@elk @antfu @patak @sxzzcontent

', { + collapseMentionLink: true, + inReplyToStatus: { account: { acct: 'elk@webtoo.ls' }, mentions: [] as mastodon.v1.StatusMention[] } as mastodon.v1.Status, + }) + expect(formatted).toMatchInlineSnapshot(` + "

+ + + content

From 09997c2f90769d56e8378384b1017a9ba1a33212 Mon Sep 17 00:00:00 2001 From: webfansplz <308241863@qq.com> Date: Thu, 19 Jan 2023 18:26:40 +0800 Subject: [PATCH 05/28] chore: preview header only when it's already set (#1311) Co-authored-by: Daniel Roe --- components/account/AccountHeader.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/components/account/AccountHeader.vue b/components/account/AccountHeader.vue index cc69486e..e2779d21 100644 --- a/components/account/AccountHeader.vue +++ b/components/account/AccountHeader.vue @@ -20,6 +20,7 @@ const relationship = $(useRelationship(account)) const namedFields = ref([]) const iconFields = ref([]) +const hasHeader = $computed(() => !account.header.endsWith('/original/missing.png')) function getFieldIconTitle(fieldName: string) { return fieldName === 'Joined' ? t('account.joined') : fieldName @@ -85,9 +86,9 @@ const isNotifiedOnPost = $computed(() => !!relationship?.notifying)