From 59761c1c04a8896120e164044ae905f5c244fbe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Wed, 4 Jan 2023 23:43:01 +0800 Subject: [PATCH 01/62] ci: remove testing on netlify --- netlify.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netlify.toml b/netlify.toml index 9060086f..ed2110f0 100755 --- a/netlify.toml +++ b/netlify.toml @@ -1,6 +1,6 @@ [build] publish = "dist" - command = "pnpm run build && pnpm run test && pnpm run lint && pnpm test:typecheck" + command = "pnpm run build" # Redirect to Discord server [[redirects]] From 733c4003c9908dca0ca240a76dfa8623e4d35dfa Mon Sep 17 00:00:00 2001 From: PraZ <1631886+prazdevs@users.noreply.github.com> Date: Wed, 4 Jan 2023 16:49:44 +0100 Subject: [PATCH 02/62] feat(i18n): update french help modal locales (#770) --- locales/fr-FR.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/locales/fr-FR.json b/locales/fr-FR.json index e41eb33d..6ded4fa1 100644 --- a/locales/fr-FR.json +++ b/locales/fr-FR.json @@ -102,8 +102,11 @@ "help": { "desc_highlight": "Il est possible de rencontrer, par-ci par-là, quelques bugs et fonctionnalités manquantes.", "desc_para1": "Merci de l'intérêt pour Elk, notre client Mastodon en cours de développement !", - "desc_para2": "Nous travaillons dur sur le développement et l'améliorons au fur et à mesure. Nous allons prochainement vous inviter à prêter main forte une fois que nous l'aurons rendu open-source", - "desc_para3": "Mais avant cela, pour supporter son développement, vous pouvez parrainer les membres de l'équipe avec les liens ci-dessous.", + "desc_para2": "Nous travaillons dur sur le développement et l'améliorons au fur et à mesure. Nous allons open-sourcer l'application une fois qu'elle sera prête pour un usage public.", + "desc_para3": "Pour supporter son développement, vous pouvez parrainer les membres de l'équipe avec les liens ci-dessous. Nous espérons que vous apprécierez Elk!", + "desc_para4": "Avant cela, si vous voulez aider à tester, donner des retours ou contribuer", + "desc_para5": "contactez nous sur Mastodon", + "desc_para6": "et rejoingez l'aventure.", "title": "Elk est mode Preview !" }, "menu": { From 7d6904d73bf39931a471b6861af91b4cb9e43ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 5 Jan 2023 03:02:38 +0800 Subject: [PATCH 03/62] chore: release v0.1.18 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a3038fd..be919386 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "type": "module", - "version": "0.1.17", + "version": "0.1.18", "private": true, "packageManager": "pnpm@7.9.0", "license": "MIT", From 4eb9d52fc204602ad10e4feef7fe095b1e4b1b81 Mon Sep 17 00:00:00 2001 From: Ivan Demchuk Date: Wed, 4 Jan 2023 21:55:57 +0200 Subject: [PATCH 04/62] fix: loading status replies after page refresh (#780) --- pages/[[server]]/@[account]/[status].vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pages/[[server]]/@[account]/[status].vue b/pages/[[server]]/@[account]/[status].vue index cfd1be88..deb7f358 100644 --- a/pages/[[server]]/@[account]/[status].vue +++ b/pages/[[server]]/@[account]/[status].vue @@ -19,7 +19,11 @@ const { data: status, pending, refresh: refreshStatus } = useAsyncData( { watch: [isMastoInitialised], immediate: isMastoInitialised.value }, ) const masto = useMasto() -const { data: context, pending: pendingContext, refresh: refreshContext } = useAsyncData(`context:${id}`, () => masto.statuses.fetchContext(id)) +const { data: context, pending: pendingContext, refresh: refreshContext } = useAsyncData( + `context:${id}`, + async () => masto.statuses.fetchContext(id), + { watch: [isMastoInitialised], immediate: isMastoInitialised.value }, +) const replyDraft = $computed(() => status.value ? getReplyDraft(status.value) : null) From 6b5b1f2aedfd6f6748e1387570f8da7b21b03f06 Mon Sep 17 00:00:00 2001 From: Piotrek Tomczewski Date: Wed, 4 Jan 2023 21:08:05 +0100 Subject: [PATCH 05/62] feat(search): :sparkles: show hashtag stats and chart in autocomplete (#779) --- components/search/HashtagInfo.vue | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/components/search/HashtagInfo.vue b/components/search/HashtagInfo.vue index 20e53228..f98cf3fd 100644 --- a/components/search/HashtagInfo.vue +++ b/components/search/HashtagInfo.vue @@ -1,5 +1,11 @@ From 9d7b7b66ed3d65c534e2823adf38cd66310f6da6 Mon Sep 17 00:00:00 2001 From: Max <44031065+mxcop@users.noreply.github.com> Date: Wed, 4 Jan 2023 21:10:09 +0100 Subject: [PATCH 06/62] i18n(nl-NL): dutch locales (#745) --- config/i18n.ts | 5 + locales/nl-NL.json | 396 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 401 insertions(+) create mode 100644 locales/nl-NL.json diff --git a/config/i18n.ts b/config/i18n.ts index edee590c..22261a0e 100644 --- a/config/i18n.ts +++ b/config/i18n.ts @@ -41,6 +41,11 @@ const locales: LocaleObjectData[] = [ file: 'ja-JP.json', name: '日本語', }, + { + code: 'nl-NL', + file: 'nl-NL.json', + name: 'Nederlands', + }, { code: 'es-ES', file: 'es-ES.json', diff --git a/locales/nl-NL.json b/locales/nl-NL.json new file mode 100644 index 00000000..f8cf7c98 --- /dev/null +++ b/locales/nl-NL.json @@ -0,0 +1,396 @@ +{ + "a11y": { + "loading_page": "Pagina laden, even wachten", + "loading_titled_page": "Pagina {0} laden, even wachten", + "locale_changed": "Taal veranderd naar {0}", + "locale_changing": "Taal veranderen, even wachten", + "route_loaded": "Pagina {0} geladen" + }, + "account": { + "avatar_description": "{0}'s avatar", + "blocked_by": "Je bent geblokkeerd door deze gebruiker.", + "blocked_domains": "Geblokkeerde domeinen", + "blocked_users": "Geblokkeerde gebruikers", + "blocking": "Geblokkeerd", + "bot": "BOT", + "favourites": "Favorieten", + "follow": "Volg", + "follow_back": "Volg terug", + "follow_requested": "Aangevraagd", + "followers": "Volgers", + "followers_count": "{0} Followers|{0} Follower|{0} Followers", + "following": "Volgend", + "following_count": "{0} Volgend", + "follows_you": "Volgt jou", + "go_to_profile": "Ga naar profiel", + "joined": "Lid geworden", + "moved_title": "heeft aangegeven hun nieuwe account is nu:", + "muted_users": "Gedempte gebruikers", + "muting": "Gedempt", + "mutuals": "Gedeeld", + "pinned": "Gepind", + "posts": "Posts", + "posts_count": "{0} posts|{0} post|{0} posts", + "profile_description": "{0}'s profiel koptekst", + "profile_unavailable": "Profiel niet beschikbaar", + "unblock": " Deblokkeren", + "unfollow": "Ontvolgen", + "unmute": "Ontdempen" + }, + "action": { + "apply": "Toepassen", + "bookmark": "Bookmark", + "bookmarked": "Gebookmarkt", + "boost": "Boost", + "boost_count": "{0}", + "boosted": "Geboost", + "clear_upload_failed": "Wis bestand upload fouten", + "close": "Sluit", + "compose": "Composeer", + "confirm": "Confirmeer", + "edit": "Aanpassen", + "enter_app": "Ga naar App", + "favourite": "Favoriet", + "favourite_count": "{0}", + "favourited": "Favoriet", + "more": "Meer", + "next": "Volgende", + "prev": "Vorige", + "publish": "Publiceer!", + "reply": "Beantwoord", + "reply_count": "{0}", + "reset": "Resetten", + "save": "Opslaan", + "save_changes": "Aanpassingen opslaan", + "sign_in": "Sign in", + "switch_account": "Wissel van account", + "vote": "Stem" + }, + "app_desc_short": "Een vlotte Mastodon web client", + "app_logo": "Elk Logo", + "app_name": "Elk", + "attachment": { + "edit_title": "Descriptie", + "remove_label": "Verwijder bijlage" + }, + "command": { + "activate": "Activeren", + "complete": "Compleet", + "compose_desc": "Schrijf een nieuwe post", + "n-people-in-the-past-n-days": "{0} mensen in de laatste {1} dagen", + "select_lang": "Selecteer een taal", + "sign_in_desc": "Add an existing account", + "switch_account": "Wissel naar {0}", + "switch_account_desc": "Wissel naar ander account", + "toggle_dark_mode": "Dark modus wisselen", + "toggle_zen_mode": "Zen modus schakelen" + }, + "common": { + "end_of_list": "Einde van de lijst", + "error": "FOUT", + "in": "in", + "not_found": "404 Niet Gevonden", + "offline_desc": "Zo te zien ben je offline. Check je internet verbinding." + }, + "conversation": { + "with": "met" + }, + "error": { + "account_not_found": "Account {0} niet gevonden", + "explore-list-empty": "Er is nu niets trending. Kom later terug!", + "file_size_cannot_exceed_n_mb": "Bestand grote mag niet groter zijn dan {0}MB", + "sign_in_error": "Kan geen connectie maken met de server.", + "status_not_found": "Post niet gevonden", + "unsupported_file_format": "Bestandstype niet ondersteund" + }, + "help": { + "desc_highlight": "Expect some bugs and missing features here and there.", + "desc_para1": "Thanks for your interest in trying out Elk, our work-in-progress generic Mastodon client!", + "desc_para2": "We are working hard on the development and improving it over time. We will open source the app once it is ready for public use.", + "desc_para3": "To help boosting out development, you can sponsor our team members with the links below. We hope you enjoy Elk!", + "desc_para4": "Before that, if you'd like to help with testing, giving feedback, or contributing,", + "desc_para5": "reach out to us on Mastodon", + "desc_para6": "and get involved.", + "title": "Elk is in Preview!" + }, + "language": { + "none": "Niets", + "search": "Opzoeken" + }, + "menu": { + "block_account": "Blokkeer {0}", + "block_domain": "Blokkeer domein {0}", + "copy_link_to_post": "Kopieer link naar deze post", + "delete": "Verwijder", + "delete_and_redraft": "Verwijder & Opnieuw opstellen", + "direct_message_account": "Direct bericht naar {0}", + "edit": "Aanpassen", + "mention_account": "Noem {0}", + "mute_account": "Demp {0}", + "mute_conversation": "Demp deze post", + "open_in_original_site": "Open in originele site", + "pin_on_profile": "Pin op profiel", + "share_post": "Deel deze post", + "show_untranslated": "Laat onvertaalde zien", + "toggle_theme": { + "dark": "Dark modus wisselen", + "light": "Light modus wisselen" + }, + "translate_post": "Vertaal post", + "unblock_account": "Deblokkeer {0}", + "unblock_domain": "Deblokkeer domein {0}", + "unmute_account": "Ontdemp {0}", + "unmute_conversation": "Ontdemp deze post", + "unpin_on_profile": "Ontpin op profiel" + }, + "nav": { + "bookmarks": "Bookmarks", + "built_at": "Gebouwd {0}", + "conversations": "Conversaties", + "explore": "Ontdekken", + "favourites": "Favorieten", + "federated": "Gefedereerd", + "home": "Home", + "local": "Lokaal", + "notifications": "Notificaties", + "profile": "Profiel", + "search": "Zoeken", + "select_feature_flags": "Schakel Feature Vlaggen", + "select_font_size": "Font Grootte", + "select_language": "Display Taal", + "settings": "Instellingen", + "show_intro": "Laat intro zien", + "toggle_theme": "Schakel Thema", + "zen_mode": "Zen Modus" + }, + "notification": { + "favourited_post": "vindt jou post favoriet", + "followed_you": "volgt jou", + "followed_you_count": "{followers} mensen hebben je gevolgd|{followers} persoon heeft je gevold|{followers} mensen hebben je gevolgd", + "missing_type": "MISSEND notificatie.type:", + "reblogged_post": "herblogd je post", + "request_to_follow": "vraagt om jou te volgen", + "settings": { + "alerts": { + "favourite": "Favorieten", + "follow": "Nieuwe volgers", + "mention": " Vermeldingen", + "poll": "Peilingen", + "reblog": "Herblogd jou post", + "title": "Welke notificaties wil je krijgen?" + }, + "close_btn": "Sluit push notificaties instellingen", + "policy": { + "all": "Van iedereen", + "followed": "Van mensen die ik volg", + "follower": "Van mensen die mij volgen", + "none": "Van niemand", + "title": "Van wie kan ik notificaties krijgen?" + }, + "save_settings": "Instellingen aanpassingen opslaan", + "show_btn": "Laat push notificaties instellingen zien", + "subscription_error": { + "clear_error": "Wis error", + "permission_denied": "Geen toestemming: zet notificaties aan in je browser.", + "request_error": "Er is een error tijdens het ophalen van de subscriptie, probeer opnieuw en als de error blijft, raporteer het probleem naar de Elk repository.", + "title": "Kon niet subscriben aan push notificaties" + }, + "title": "Push notificaties instellingen", + "undo_settings": "Undo veranderden instellingen", + "unsubscribe": "Zet push notificaties uit", + "unsubscribed_with_warning": "Zet notificaties aan om notificaties te krijgen van dit account, klik deze \"@:notification.settings.warning.enable_desktop{'\"'} knop.", + "unsupported": "Je browser ondersteunt geen push notificaties.", + "warning": { + "enable_close": "Sluit", + "enable_description": "Om notificaties te krijgen terwijl Elk niet open is, zet push notificaties aan. Je kan precies instellen wat voor typen interacties push notificaties genereren via de \"@:notification.settings.show_btn{'\"'} knop hierboven wanneer ze aan staan.", + "enable_description_short": "Om push notificatie instellingen te veranderen terwijl Elk niet open is, moet je eerst push notificaties aan zetten.", + "enable_desktop": "Zet push notificaties aan", + "enable_title": "Mis niets", + "re_auth": "It seems that your server does not support push notifications. Try sign out and sign in again, if this message still appears contact your server administrator." + } + }, + "signed_up": "signed up", + "update_status": "heeft hun post aangepast" + }, + "placeholder": { + "content_warning": "Schrijf je warning hier", + "default_1": "Waar denk je aan?", + "reply_to_account": "Reageer op {0}", + "replying": "Reageren", + "the_thread": "de thread" + }, + "pwa": { + "dismiss": "Afwijzen", + "title": "Er is een nieuwe Elk update!", + "update": "Update", + "update_available_short": "Update Elk" + }, + "search": { + "search_desc": "Zoek naar mensen & hashtags" + }, + "settings": { + "about": { + "label": "Over" + }, + "feature_flags": { + "github_cards": "GitHub Cards", + "title": "Experimentelen Functies", + "user_picker": "Gebruiker Picker", + "virtual_scroll": "Virtueel Scrollen" + }, + "interface": { + "color_mode": "Kleur Modus", + "dark_mode": "Dark Modus", + "default": " (standaard)", + "font_size": "Font Grootte", + "label": "Interface", + "light_mode": "Light Modus" + }, + "language": { + "display_language": "Display Taal", + "label": "Taal" + }, + "preferences": { + "label": "Voorkeuren" + }, + "profile": { + "appearance": { + "bio": "Bio", + "description": "Aanpassen van avatar, username, profile, etc.", + "display_name": "Zichtbare naam", + "label": "Uiterlijk", + "profile_metadata": "Profiel metadata", + "profile_metadata_desc": "Je kan tot en met 4 elementen als table zetten op je profiel zetten", + "title": "Aanpassen profiel" + }, + "featured_tags": { + "description": "Mensen kunnen je publieke posts vinden onder deze hashtags.", + "label": "Uitgelichte hashtags" + }, + "label": "Profiel" + }, + "select_a_settings": "Selecteer een instelling", + "users": { + "export": "Exporteer Gebruikers Tokens", + "import": "Importeer Gebruikers Tokens", + "label": "Ingelogde gebruikers" + } + }, + "state": { + "attachments_exceed_server_limit": "De hoeveelheid bijlage is meer als het limiet per post.", + "attachments_limit_error": "Limiet per post overschreden", + "edited": "(Aangepast)", + "editing": "Aanpassen", + "loading": "Laden...", + "upload_failed": "Upload gefaald", + "uploading": "Uploading..." + }, + "status": { + "edited": "Aangepast {0}", + "filter_hidden_phrase": "Gefilterd door", + "filter_removed_phrase": "Verwijderd door filter", + "filter_show_anyway": "Laat toch zien", + "img_alt": { + "desc": "Descriptie", + "dismiss": "Afwijzen" + }, + "poll": { + "count": "{0} stemmen|{0} stem|{0} stemmen", + "ends": "eindigt {0}", + "finished": "geëindigd {0}" + }, + "reblogged": "{0} herblogd", + "someone": "Iemand", + "spoiler_show_less": "Minder zien", + "spoiler_show_more": "Meer zien", + "try_original_site": "Probeer originele site" + }, + "status_history": { + "created": "gecreëerd {0}", + "edited": "aangepast {0}" + }, + "tab": { + "for_you": "Voor jou", + "hashtags": "Hashtags", + "media": "Media", + "news": "Nieuws", + "notifications_all": "Alles", + "notifications_mention": "Vermelding", + "posts": "Posts", + "posts_with_replies": "Posts & Reacties" + }, + "tag": { + "follow": "Volg", + "follow_label": "Volg {0} tag", + "unfollow": "Ontvolg", + "unfollow_label": "Ontvolg {0} tag" + }, + "time_ago_options": { + "day_future": "in 0 dagen|morgen|in {n} dagen", + "day_past": "0 dagen geleden|gisteren|{n} dagen geleden", + "hour_future": "in 0 uur|in 1 uur|in {n} uur", + "hour_past": "0 uur geleden|1 uur geleden|{n} uur geleden", + "just_now": "nu net", + "minute_future": "in 0 minuten|in 1 minuut|in {n} minuten", + "minute_past": "0 minuten geleden|1 minuut geleden|{n} minuten geleden", + "month_future": "in 0 maanden|volgende maand|in {n} maanden", + "month_past": "0 maanden geleden|laatste maand|{n} maanden geleden", + "second_future": "nu net|in {n} seconden|in {n} seconden", + "second_past": "nu net|{n} seconden geleden|{n} seconden geleden", + "short_day_future": "in {n}d", + "short_day_past": "{n}d", + "short_hour_future": "in {n}u", + "short_hour_past": "{n}u", + "short_minute_future": "in {n}min", + "short_minute_past": "{n}min", + "short_month_future": "in {n}ma", + "short_month_past": "{n}ma", + "short_second_future": "in {n}s", + "short_second_past": "{n}s", + "short_week_future": "in {n}w", + "short_week_past": "{n}w", + "short_year_future": "in {n}j", + "short_year_past": "{n}j", + "week_future": "in 0 weken|volgende week|in {n} weken", + "week_past": "0 weken geleden|vorige week|{n} weken geleden", + "year_future": "in 0 jaar|volgend jaar|in {n} jaar", + "year_past": "0 jaar geleden|vorig jaar|{n} jaar geleden" + }, + "timeline": { + "show_new_items": "Laat {v} nieuwe artikelen zien|Laat {v} nieuw artikel zien|Laat {v} nieuwe artikelen zien" + }, + "title": { + "federated_timeline": "Gefedereerde Tijdlijn", + "local_timeline": "Lokale Tijdlijn" + }, + "tooltip": { + "add_content_warning": "Voeg inhoud waarschuwing toe", + "add_media": "Voeg fotos, een video of een audio bestand toe", + "change_content_visibility": "Verander inhoud zichtbaarheid", + "change_language": "Verander taal", + "emoji": "Emoji", + "explore_links_intro": "Deze nieuws artikelen worden veel over gepraat op deze en anderen servers op het decentralized network op dit moment.", + "explore_posts_intro": "Deze posts van deze en andere servers op het decentralized network krijgen veel aandacht op deze server op dit moment.", + "explore_tags_intro": "Deze hashtags krijgen veel aandacht op dit moment op deze en anderen servers op het decentralized network.", + "toggle_code_block": "Zet code blok aan/uit" + }, + "user": { + "add_existing": "Voeg een bestaand account toe", + "server_address_label": "Mastodon Server Address", + "sign_in_desc": "Sign in om profielen te volgen of hashtags, markeer posts als favoriet, deel en reageer op posts, of interact vanaf je account op een anderen server.", + "sign_in_notice_title": "Je bekijkt {0} publieke data", + "sign_out_account": "Sign out {0}", + "tip_no_account": "Als je nog geen Mastodon account hebt, {0}.", + "tip_register_account": "kies jou server en registreer een account" + }, + "visibility": { + "direct": "Direct", + "direct_desc": "Zichtbaar voor alleen vermelden gebruikers", + "private": "Alleen volgers", + "private_desc": "Alleen zichtbaar voor volgers", + "public": "Publiek", + "public_desc": "Zichtbaar voor iedereen", + "unlisted": "Niet vermeld", + "unlisted_desc": "Zichtbaar voor iedereen, maar kan niet gevonden worden via discovery functies" + } +} From 1ff584bf8bb0df54cda5965186192ce6a8a08594 Mon Sep 17 00:00:00 2001 From: Piotrek Tomczewski Date: Wed, 4 Jan 2023 21:47:29 +0100 Subject: [PATCH 07/62] feat(publish): add hashtag autocomplete (#778) --- components/tiptap/TiptapHashtagList.vue | 68 +++++++++++++++++++++++++ composables/tiptap.ts | 6 +-- composables/tiptap/suggestion.ts | 37 ++++++++------ styles/tiptap.css | 3 +- 4 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 components/tiptap/TiptapHashtagList.vue diff --git a/components/tiptap/TiptapHashtagList.vue b/components/tiptap/TiptapHashtagList.vue new file mode 100644 index 00000000..15e57c92 --- /dev/null +++ b/components/tiptap/TiptapHashtagList.vue @@ -0,0 +1,68 @@ + + + diff --git a/composables/tiptap.ts b/composables/tiptap.ts index fa610a31..fe3d9ae0 100644 --- a/composables/tiptap.ts +++ b/composables/tiptap.ts @@ -12,7 +12,7 @@ import Code from '@tiptap/extension-code' import { Plugin } from 'prosemirror-state' import type { Ref } from 'vue' -import { HashSuggestion, MentionSuggestion } from './tiptap/suggestion' +import { HashtagSuggestion, MentionSuggestion } from './tiptap/suggestion' import { CodeBlockShiki } from './tiptap/shiki' import { CustomEmoji } from './tiptap/custom-emoji' import { Emoji } from './tiptap/emoji' @@ -54,9 +54,9 @@ export function useTiptap(options: UseTiptapOptions) { suggestion: MentionSuggestion, }), Mention - .extend({ name: 'hastag' }) + .extend({ name: 'hashtag' }) .configure({ - suggestion: HashSuggestion, + suggestion: HashtagSuggestion, }), Placeholder.configure({ placeholder: placeholder.value, diff --git a/composables/tiptap/suggestion.ts b/composables/tiptap/suggestion.ts index 7b8975e7..7445164a 100644 --- a/composables/tiptap/suggestion.ts +++ b/composables/tiptap/suggestion.ts @@ -3,7 +3,9 @@ import tippy from 'tippy.js' import { VueRenderer } from '@tiptap/vue-3' import type { SuggestionOptions } from '@tiptap/suggestion' import { PluginKey } from 'prosemirror-state' +import type { Component } from 'vue' import TiptapMentionList from '~/components/tiptap/TiptapMentionList.vue' +import TiptapHashtagList from '~/components/tiptap/TiptapHashtagList.vue' export const MentionSuggestion: Partial = { pluginKey: new PluginKey('mention'), @@ -17,29 +19,32 @@ export const MentionSuggestion: Partial = { return results.value.accounts }, - render: createSuggestionRenderer(), + render: createSuggestionRenderer(TiptapMentionList), } -export const HashSuggestion: Partial = { +export const HashtagSuggestion: Partial = { pluginKey: new PluginKey('hashtag'), char: '#', - items({ query }) { - // TODO: query - return [ - 'TODO HASH QUERY', - ].filter(item => item.toLowerCase().startsWith(query.toLowerCase())).slice(0, 5) + async items({ query }) { + if (query.length === 0) + return [] + + const paginator = useMasto().search({ q: query, type: 'hashtags', limit: 25, resolve: true }) + const results = await paginator.next() + + return results.value.hashtags }, - render: createSuggestionRenderer(), + render: createSuggestionRenderer(TiptapHashtagList), } -function createSuggestionRenderer(): SuggestionOptions['render'] { +function createSuggestionRenderer(component: Component): SuggestionOptions['render'] { return () => { - let component: VueRenderer + let renderer: VueRenderer let popup: Instance return { onStart(props) { - component = new VueRenderer(TiptapMentionList, { + renderer = new VueRenderer(component, { props, editor: props.editor, }) @@ -50,7 +55,7 @@ function createSuggestionRenderer(): SuggestionOptions['render'] { popup = tippy(document.body, { getReferenceClientRect: props.clientRect as GetReferenceClientRect, appendTo: () => document.body, - content: component.element, + content: renderer.element, showOnCreate: true, interactive: true, trigger: 'manual', @@ -60,11 +65,11 @@ function createSuggestionRenderer(): SuggestionOptions['render'] { // Use arrow function here because Nuxt will transform it incorrectly as Vue hook causing the build to fail onBeforeUpdate: (props) => { - component.updateProps({ ...props, isPending: true }) + renderer.updateProps({ ...props, isPending: true }) }, onUpdate(props) { - component.updateProps({ ...props, isPending: false }) + renderer.updateProps({ ...props, isPending: false }) if (!props.clientRect) return @@ -79,12 +84,12 @@ function createSuggestionRenderer(): SuggestionOptions['render'] { popup?.hide() return true } - return component?.ref?.onKeyDown(props.event) + return renderer?.ref?.onKeyDown(props.event) }, onExit() { popup?.destroy() - component?.destroy() + renderer?.destroy() }, } } diff --git a/styles/tiptap.css b/styles/tiptap.css index 606e19f9..5ba87138 100644 --- a/styles/tiptap.css +++ b/styles/tiptap.css @@ -6,6 +6,7 @@ opacity: 0.4; } -span[data-type='mention'] { +span[data-type='mention'], +span[data-type='hashtag'] { --at-apply: text-primary; } From fc48f8b90c4c442d2ecd2ed9c798026791ebe6b9 Mon Sep 17 00:00:00 2001 From: patak Date: Thu, 5 Jan 2023 00:17:30 +0100 Subject: [PATCH 08/62] feat: style experiments --- components/nav/NavSideItem.vue | 6 +++--- components/nav/NavTitle.vue | 4 +--- components/publish/PublishButton.vue | 6 +++--- components/publish/PublishWidget.vue | 2 +- components/search/SearchWidget.vue | 6 +++--- components/status/StatusCard.vue | 5 +++-- error.vue | 2 +- layouts/default.vue | 8 ++++---- pages/[[server]]/@[account]/index.vue | 2 +- pages/[[server]]/explore.vue | 2 +- pages/[[server]]/public/index.vue | 2 +- pages/[[server]]/public/local.vue | 2 +- pages/blocks.vue | 2 +- pages/bookmarks.vue | 2 +- pages/conversations.vue | 2 +- pages/domain_blocks.vue | 2 +- pages/favourites.vue | 2 +- pages/home.vue | 2 +- pages/mutes.vue | 2 +- pages/notifications.vue | 2 +- pages/pinned.vue | 2 +- pages/search.vue | 2 +- pages/settings.vue | 2 +- unocss.config.ts | 3 +++ 24 files changed, 37 insertions(+), 35 deletions(-) diff --git a/components/nav/NavSideItem.vue b/components/nav/NavSideItem.vue index 485234d8..82cf59c3 100644 --- a/components/nav/NavSideItem.vue +++ b/components/nav/NavSideItem.vue @@ -58,11 +58,11 @@ const noUserVisual = computed(() => isMastoInitialised.value && props.userOnly &
diff --git a/components/nav/NavTitle.vue b/components/nav/NavTitle.vue index f4f9524c..bf2172fa 100644 --- a/components/nav/NavTitle.vue +++ b/components/nav/NavTitle.vue @@ -8,11 +8,9 @@ const { env } = buildInfo diff --git a/components/publish/PublishButton.vue b/components/publish/PublishButton.vue index 44d3748d..ede9feff 100644 --- a/components/publish/PublishButton.vue +++ b/components/publish/PublishButton.vue @@ -7,11 +7,11 @@ const disabledVisual = computed(() => isMastoInitialised.value && !currentUser.v