From 9cbb2ea16423cd9552fb31415515c6dbd41bd880 Mon Sep 17 00:00:00 2001 From: ccsang Date: Fri, 20 Mar 2026 05:07:57 +0000 Subject: [PATCH 1/2] fix(dashboard): restore plugin card changelog and author --- .../src/components/shared/ExtensionCard.vue | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/dashboard/src/components/shared/ExtensionCard.vue b/dashboard/src/components/shared/ExtensionCard.vue index c324545785..d0b07302b6 100644 --- a/dashboard/src/components/shared/ExtensionCard.vue +++ b/dashboard/src/components/shared/ExtensionCard.vue @@ -325,6 +325,30 @@ const viewChangelog = () => { +
+ + + {{ extension.author }} + + + {{ extension.author }} + +
+
{ {{ tm("buttons.viewInfo") }} + + {{ tm("pluginChangelog.menuTitle") }} + + {{ extension.has_update @@ -465,6 +497,39 @@ const viewChangelog = () => { gap: 8px; } +.extension-author-row { + display: flex; + align-items: center; + gap: 4px; + margin-top: 8px; + color: rgb(var(--v-theme-primary)); + min-width: 0; +} + +.extension-author-row__icon { + color: rgba(var(--v-theme-on-surface), 0.5); + flex-shrink: 0; +} + +.extension-author-row__link, +.extension-author-row__text { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 0.95rem; + font-weight: 500; +} + +.extension-author-row__link { + color: inherit; + text-decoration: none; +} + +.extension-author-row__link:hover { + text-decoration: underline; +} + .extension-desc { margin-top: 8px; font-size: 90%; From f31886421854a8ed6778d39b874945cccd5217b7 Mon Sep 17 00:00:00 2001 From: ccsang Date: Fri, 20 Mar 2026 06:20:28 +0000 Subject: [PATCH 2/2] fix(dashboard): sanitize plugin author links --- .../src/components/shared/ExtensionCard.vue | 35 +++++++++++++++---- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/dashboard/src/components/shared/ExtensionCard.vue b/dashboard/src/components/shared/ExtensionCard.vue index d0b07302b6..4fc7b95ff6 100644 --- a/dashboard/src/components/shared/ExtensionCard.vue +++ b/dashboard/src/components/shared/ExtensionCard.vue @@ -126,6 +126,22 @@ const viewChangelog = () => { emit("view-changelog", props.extension); }; +const safeSocialLink = computed(() => { + const socialLink = props.extension?.social_link; + if (typeof socialLink !== "string" || !socialLink.trim().length) { + return ""; + } + + try { + const parsed = new URL(socialLink); + return parsed.protocol === "http:" || parsed.protocol === "https:" + ? parsed.href + : ""; + } catch { + return ""; + } +}); +