From 42c378c844da506315111407c4d736a52a7cfc6d Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 21:29:06 +0800 Subject: [PATCH 01/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20GitLab=20?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astro.config.mjs | 2 + src/plugins/rehype-component-gitlab-card.mjs | 100 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 src/plugins/rehype-component-gitlab-card.mjs diff --git a/astro.config.mjs b/astro.config.mjs index 621c415998..c769fd1f94 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -19,6 +19,7 @@ import { expressiveCodeConfig } from "./src/config.ts"; import { pluginLanguageBadge } from "./src/plugins/expressive-code/language-badge.ts"; import { AdmonitionComponent } from "./src/plugins/rehype-component-admonition.mjs"; import { GithubCardComponent } from "./src/plugins/rehype-component-github-card.mjs"; +import { GitlabCardComponent } from "./src/plugins/rehype-component-gitlab-card.mjs"; import { parseDirectiveNode } from "./src/plugins/remark-directive-rehype.js"; import { remarkExcerpt } from "./src/plugins/remark-excerpt.js"; import { remarkReadingTime } from "./src/plugins/remark-reading-time.mjs"; @@ -120,6 +121,7 @@ export default defineConfig({ { components: { github: GithubCardComponent, + gitlab: GitlabCardComponent, note: (x, y) => AdmonitionComponent(x, y, "note"), tip: (x, y) => AdmonitionComponent(x, y, "tip"), important: (x, y) => AdmonitionComponent(x, y, "important"), diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs new file mode 100644 index 0000000000..1fc68f4cb3 --- /dev/null +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -0,0 +1,100 @@ +/// +import { h } from "hastscript"; + +/** + * Creates a GitLab Card component. + * + * @param {Object} properties - The properties of the component. + * @param {string} properties.repo - The Gitlab repository in the format "owner/repo". + * @param {import('mdast').RootContent[]} children - The children elements of the component. + * @returns {import('mdast').Parent} The created GitHub Card component. + */ +export function GitlabCardComponent(properties, children) { + if (Array.isArray(children) && children.length !== 0) + return h("div", { class: "" }, [ + 'Invalid directive. ("gitlab" directive must be leaf type "::gitlab{repo="owner/repo"}")', + ]); + + if (!properties.repo || !properties.repo.includes("/")) + return h( + "div", + { class: "" }, + 'Invalid repository. ("repo" attributte must be in the format "owner/repo")', + ); + + const repo = properties.repo; + const repoE = repo.replace("/", "%2F"); // encoding by replace / to %2F + const cardUuid = `GC${Math.random().toString(36).slice(-6)}`; // Collisions are not important + + const nAvatar = h(`div#${cardUuid}-avatar`, { class: "gc-avatar" }); + // const nLanguage = h( + // `span#${cardUuid}-language`, + // { class: "gc-language" }, + // "Waiting...", + // ); + + const nTitle = h("div", { class: "gc-titlebar" }, [ + h("div", { class: "gc-titlebar-left" }, [ + h("div", { class: "gc-owner" }, [ + nAvatar, + h("div", { class: "gc-user" }, repo.split("/")[0]), + ]), + h("div", { class: "gc-divider" }, "/"), + h("div", { class: "gc-repo" }, repo.split("/")[1]), + ]), + h("div", { class: "github-logo" }), + ]); + + const nDescription = h( + `div#${cardUuid}-description`, + { class: "gc-description" }, + "Waiting for gitlab.com api...", + ); + + const nStars = h(`div#${cardUuid}-stars`, { class: "gc-stars" }, "00K"); + const nForks = h(`div#${cardUuid}-forks`, { class: "gc-forks" }, "0K"); + // const nLicense = h(`div#${cardUuid}-license`, { class: "gc-license" }, "0K"); + + console.log(`https://gitlab.com/api/v4/projects/${repoE}`); + + const nScript = h( + `script#${cardUuid}-script`, + { type: "text/javascript", defer: true }, + ` + fetch('https://gitlab.com/api/v4/projects/${repoE}', { referrerPolicy: "no-referrer" }).then(response => response.json()).then(data => { + console.log(data); + document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; + document.getElementById('${cardUuid}-language').innerText = data.language; + document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); + document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); + const avatarEl = document.getElementById('${cardUuid}-avatar'); + avatarEl.style.backgroundImage = 'url(' + data.owner.avatar_url + ')'; + avatarEl.style.backgroundColor = 'transparent'; + // document.getElementById('${cardUuid}-license').innerText = data.license?.spdx_id || "no-license"; + document.getElementById('${cardUuid}-card').classList.remove("fetch-waiting"); + console.log("[GITLAB-CARD] Loaded card for ${repo} | ${cardUuid}.") + }).catch(err => { + const c = document.getElementById('${cardUuid}-card'); + c?.classList.add("fetch-error"); + console.error("[GITLAB-CARD] (Error) Loading card for ${repo} | ${cardUuid}."); + console.error(err); + }) + `, + ); + + return h( + `a#${cardUuid}-card`, + { + class: "card-github fetch-waiting no-styling", + href: `https://gitlab.com/${repo}`, + target: "_blank", + repo, + }, + [ + nTitle, + nDescription, + h("div", { class: "gc-infobar" }, [nStars, nForks]), + nScript, + ], + ); +} From 14277a6c203565d5001a4a413638729d2a5444aa Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 21:29:28 +0800 Subject: [PATCH 02/12] =?UTF-8?q?docs:=20=E6=96=B0=E5=A2=9E=20GitLab=20?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E5=8A=9F=E8=83=BD=E4=BB=8B=E7=B4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/posts/markdown-extended.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/content/posts/markdown-extended.md b/src/content/posts/markdown-extended.md index 241e7e21af..eef2b761bc 100644 --- a/src/content/posts/markdown-extended.md +++ b/src/content/posts/markdown-extended.md @@ -12,7 +12,7 @@ draft: false ## GitHub Repository Cards You can add dynamic cards that link to GitHub repositories, on page load, the repository information is pulled from the GitHub API. -::github{repo="Fabrizz/MMM-OnSpotify"} +::github{repo="saicaca/fuwari"} Create a GitHub repository card with the code `::github{repo="/"}`. @@ -20,6 +20,18 @@ Create a GitHub repository card with the code `::github{repo="/"}`. ::github{repo="saicaca/fuwari"} ``` +## GitLab Repository Cards + +You can also add dynamic cards that show a GitLab repository, on page load, the repository information is pulled from the GitLab API. + +::gitlab{repo="noeFly/blog"} + +Create a GitHub repository card with the code `::gitlab{repo="/"}`. + +```markdown +::gitlab{repo="noeFly/blog"} +``` + ## Admonitions Following types of admonitions are supported: `note` `tip` `important` `warning` `caution` From 00d19cfb415b6f1ad38aefe51052d76b1277370f Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:03:38 +0800 Subject: [PATCH 03/12] =?UTF-8?q?fix:=20=E4=BF=AE=E5=BE=A9=E4=BD=9C?= =?UTF-8?q?=E8=80=85=E9=A0=AD=E8=B2=BC=E9=A1=AF=E7=A4=BA=20refactor:=20?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=8E=88=E6=AC=8A=E6=A2=9D=E6=AC=BE=E8=88=87?= =?UTF-8?q?=E7=A8=8B=E5=BC=8F=E8=AA=9E=E8=A8=80=E9=A1=AF=E7=A4=BA=20-=20?= =?UTF-8?q?=E5=9B=A0=E7=82=BA=20GitLab=20API=20=E4=B8=AD=E4=B8=A6=E7=84=A1?= =?UTF-8?q?=E6=AD=A4=E8=B3=87=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index 1fc68f4cb3..0a0aa9b31d 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -27,11 +27,6 @@ export function GitlabCardComponent(properties, children) { const cardUuid = `GC${Math.random().toString(36).slice(-6)}`; // Collisions are not important const nAvatar = h(`div#${cardUuid}-avatar`, { class: "gc-avatar" }); - // const nLanguage = h( - // `span#${cardUuid}-language`, - // { class: "gc-language" }, - // "Waiting...", - // ); const nTitle = h("div", { class: "gc-titlebar" }, [ h("div", { class: "gc-titlebar-left" }, [ @@ -40,7 +35,7 @@ export function GitlabCardComponent(properties, children) { h("div", { class: "gc-user" }, repo.split("/")[0]), ]), h("div", { class: "gc-divider" }, "/"), - h("div", { class: "gc-repo" }, repo.split("/")[1]), + h("div", { class: `gc-repo ${cardUuid}-repo` }, repo.split("/")[1]), ]), h("div", { class: "github-logo" }), ]); @@ -53,24 +48,21 @@ export function GitlabCardComponent(properties, children) { const nStars = h(`div#${cardUuid}-stars`, { class: "gc-stars" }, "00K"); const nForks = h(`div#${cardUuid}-forks`, { class: "gc-forks" }, "0K"); - // const nLicense = h(`div#${cardUuid}-license`, { class: "gc-license" }, "0K"); - - console.log(`https://gitlab.com/api/v4/projects/${repoE}`); const nScript = h( `script#${cardUuid}-script`, { type: "text/javascript", defer: true }, ` - fetch('https://gitlab.com/api/v4/projects/${repoE}', { referrerPolicy: "no-referrer" }).then(response => response.json()).then(data => { + fetch('https://gitlab.com/api/v4/projects/${repoE}').then(response => response.json()).then(data => { console.log(data); + document.getElementsByClassName('${cardUuid}-repo')[0].innerText = data.name; document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; - document.getElementById('${cardUuid}-language').innerText = data.language; + // document.getElementById('${cardUuid}-language').innerText = data.language; document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); const avatarEl = document.getElementById('${cardUuid}-avatar'); - avatarEl.style.backgroundImage = 'url(' + data.owner.avatar_url + ')'; + avatarEl.style.backgroundImage = 'url(' + data.namespace.avatar_url + ')'; avatarEl.style.backgroundColor = 'transparent'; - // document.getElementById('${cardUuid}-license').innerText = data.license?.spdx_id || "no-license"; document.getElementById('${cardUuid}-card').classList.remove("fetch-waiting"); console.log("[GITLAB-CARD] Loaded card for ${repo} | ${cardUuid}.") }).catch(err => { From b4b6585ce8fba3f5b78f4727b8f467caebb979f2 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:09:03 +0800 Subject: [PATCH 04/12] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E8=AA=9E?= =?UTF-8?q?=E8=A8=80=E9=A1=AF=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index 0a0aa9b31d..89f2906586 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -57,7 +57,6 @@ export function GitlabCardComponent(properties, children) { console.log(data); document.getElementsByClassName('${cardUuid}-repo')[0].innerText = data.name; document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; - // document.getElementById('${cardUuid}-language').innerText = data.language; document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); const avatarEl = document.getElementById('${cardUuid}-avatar'); From 07a82347312cdfed9af0022e4cb350d7bfa41544 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:20:50 +0800 Subject: [PATCH 05/12] =?UTF-8?q?refactor:=20=E6=94=B9=E7=94=A8=20id=20?= =?UTF-8?q?=E6=A8=99=E8=A8=98=E4=BB=A5=E9=85=8D=E5=90=88=E5=85=B6=E9=A4=98?= =?UTF-8?q?=E7=A8=8B=E5=BC=8F=E7=A2=BC=E9=A2=A8=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index 89f2906586..a0b08b5553 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -35,7 +35,7 @@ export function GitlabCardComponent(properties, children) { h("div", { class: "gc-user" }, repo.split("/")[0]), ]), h("div", { class: "gc-divider" }, "/"), - h("div", { class: `gc-repo ${cardUuid}-repo` }, repo.split("/")[1]), + h(`div#${cardUuid}-repo`, { class: "gc-repo" }, repo.split("/")[1]), ]), h("div", { class: "github-logo" }), ]); @@ -55,7 +55,7 @@ export function GitlabCardComponent(properties, children) { ` fetch('https://gitlab.com/api/v4/projects/${repoE}').then(response => response.json()).then(data => { console.log(data); - document.getElementsByClassName('${cardUuid}-repo')[0].innerText = data.name; + document.getElementById('${cardUuid}-repo').innerText = data.name; document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); From be77d0e21405ae5936f02567012a348b2a03038a Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:21:15 +0800 Subject: [PATCH 06/12] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E9=99=A4?= =?UTF-8?q?=E9=8C=AF=E7=94=A8=E7=A8=8B=E5=BC=8F=E7=A2=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index a0b08b5553..43fcbd3e79 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -54,7 +54,6 @@ export function GitlabCardComponent(properties, children) { { type: "text/javascript", defer: true }, ` fetch('https://gitlab.com/api/v4/projects/${repoE}').then(response => response.json()).then(data => { - console.log(data); document.getElementById('${cardUuid}-repo').innerText = data.name; document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); From 8471636a5c464fa3c583eb77e896c07fa7339e93 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:45:08 +0800 Subject: [PATCH 07/12] refactor: --- src/plugins/rehype-component-gitlab-card.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index 43fcbd3e79..d3466ebad5 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -59,8 +59,8 @@ export function GitlabCardComponent(properties, children) { document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); const avatarEl = document.getElementById('${cardUuid}-avatar'); - avatarEl.style.backgroundImage = 'url(' + data.namespace.avatar_url + ')'; - avatarEl.style.backgroundColor = 'transparent'; + document.getElementById('${cardUuid}-avatar').style.backgroundImage = 'url(' + data.namespace.avatar_url + ')'; + document.getElementById('${cardUuid}-avatar').style.backgroundColor = 'transparent'; document.getElementById('${cardUuid}-card').classList.remove("fetch-waiting"); console.log("[GITLAB-CARD] Loaded card for ${repo} | ${cardUuid}.") }).catch(err => { From f57988f27c17f19d1a54d96580f26530353f61d4 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:45:35 +0800 Subject: [PATCH 08/12] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E7=AF=84?= =?UTF-8?q?=E4=BE=8B=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/posts/markdown-extended.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/posts/markdown-extended.md b/src/content/posts/markdown-extended.md index eef2b761bc..a1d76e8845 100644 --- a/src/content/posts/markdown-extended.md +++ b/src/content/posts/markdown-extended.md @@ -24,12 +24,12 @@ Create a GitHub repository card with the code `::github{repo="/"}`. You can also add dynamic cards that show a GitLab repository, on page load, the repository information is pulled from the GitLab API. -::gitlab{repo="noeFly/blog"} +::gitlab{repo="gitlab-org/gitlab"} Create a GitHub repository card with the code `::gitlab{repo="/"}`. ```markdown -::gitlab{repo="noeFly/blog"} +::gitlab{repo="gitlab-org/gitlab"} ``` ## Admonitions From 3f662629018cf3fade924be36fc26b031b021d0a Mon Sep 17 00:00:00 2001 From: noeFly Date: Sat, 21 Jun 2025 23:46:01 +0800 Subject: [PATCH 09/12] =?UTF-8?q?revert:=20=E5=9B=9E=E5=BE=A9=E5=85=88?= =?UTF-8?q?=E5=89=8D=E7=9A=84=E8=AA=A4=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/posts/markdown-extended.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/posts/markdown-extended.md b/src/content/posts/markdown-extended.md index a1d76e8845..564be71a25 100644 --- a/src/content/posts/markdown-extended.md +++ b/src/content/posts/markdown-extended.md @@ -12,7 +12,7 @@ draft: false ## GitHub Repository Cards You can add dynamic cards that link to GitHub repositories, on page load, the repository information is pulled from the GitHub API. -::github{repo="saicaca/fuwari"} +::github{repo="Fabrizz/MMM-OnSpotify"} Create a GitHub repository card with the code `::github{repo="/"}`. From 7cd09b117dcc71028e54b232dddc7babd5857771 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sun, 22 Jun 2025 00:29:59 +0800 Subject: [PATCH 10/12] =?UTF-8?q?fix:=20=E4=BF=AE=E5=BE=A9=20GitLab=20?= =?UTF-8?q?=E7=B6=B2=E5=9D=80=E4=BD=BF=E7=94=A8=E9=8C=AF=E8=AA=A4=E7=9A=84?= =?UTF-8?q?=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index d3466ebad5..7467fa93d8 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -58,8 +58,13 @@ export function GitlabCardComponent(properties, children) { document.getElementById('${cardUuid}-description').innerText = data.description?.replace(/:[a-zA-Z0-9_]+:/g, '') || "Description not set"; document.getElementById('${cardUuid}-forks').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.forks_count).replaceAll("\u202f", ''); document.getElementById('${cardUuid}-stars').innerText = Intl.NumberFormat('en-us', { notation: "compact", maximumFractionDigits: 1 }).format(data.star_count).replaceAll("\u202f", ''); - const avatarEl = document.getElementById('${cardUuid}-avatar'); - document.getElementById('${cardUuid}-avatar').style.backgroundImage = 'url(' + data.namespace.avatar_url + ')'; + + const avatar_url = data.namespace.avatar_url; + if (avatar_url.startsWith('/')) { + document.getElementById('${cardUuid}-avatar').style.backgroundImage = 'url(https://gitlab.com' + avatar_url + ')'; + } else { + document.getElementById('${cardUuid}-avatar').style.backgroundImage = 'url(' + avatar_url + ')'; + } document.getElementById('${cardUuid}-avatar').style.backgroundColor = 'transparent'; document.getElementById('${cardUuid}-card').classList.remove("fetch-waiting"); console.log("[GITLAB-CARD] Loaded card for ${repo} | ${cardUuid}.") From 967a4d5d171bf34fe71731afa6eed97120073134 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sun, 22 Jun 2025 00:32:34 +0800 Subject: [PATCH 11/12] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E7=AF=84?= =?UTF-8?q?=E4=BE=8B=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/content/posts/markdown-extended.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/posts/markdown-extended.md b/src/content/posts/markdown-extended.md index 564be71a25..017b756431 100644 --- a/src/content/posts/markdown-extended.md +++ b/src/content/posts/markdown-extended.md @@ -28,7 +28,7 @@ You can also add dynamic cards that show a GitLab repository, on page load, the Create a GitHub repository card with the code `::gitlab{repo="/"}`. -```markdown +```mdx ::gitlab{repo="gitlab-org/gitlab"} ``` From 4c3d405f1c621af32964904412c0a2c19086a810 Mon Sep 17 00:00:00 2001 From: noeFly Date: Sun, 22 Jun 2025 00:52:01 +0800 Subject: [PATCH 12/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20GitLab=20?= =?UTF-8?q?=E5=9C=96=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/rehype-component-gitlab-card.mjs | 2 +- src/styles/markdown-extend.styl | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/rehype-component-gitlab-card.mjs b/src/plugins/rehype-component-gitlab-card.mjs index 7467fa93d8..6ebef01c21 100644 --- a/src/plugins/rehype-component-gitlab-card.mjs +++ b/src/plugins/rehype-component-gitlab-card.mjs @@ -37,7 +37,7 @@ export function GitlabCardComponent(properties, children) { h("div", { class: "gc-divider" }, "/"), h(`div#${cardUuid}-repo`, { class: "gc-repo" }, repo.split("/")[1]), ]), - h("div", { class: "github-logo" }), + h("div", { class: "gitlab-logo" }), ]); const nDescription = h( diff --git a/src/styles/markdown-extend.styl b/src/styles/markdown-extend.styl index 687be288e3..ed334d6976 100644 --- a/src/styles/markdown-extend.styl +++ b/src/styles/markdown-extend.styl @@ -163,7 +163,7 @@ a.card-github .gc-language display: none - .gc-stars, .gc-forks, .gc-license, .github-logo + .gc-stars, .gc-forks, .gc-license, .github-logo, .gitlab-logo font-weight: 500 font-size: 0.875rem opacity: 0.9; @@ -206,6 +206,14 @@ a.card-github margin-right: 0 mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='31' height='32' viewBox='0 0 496 512'%3E%3Cpath fill='%23a1f7cb' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6c-3.3.3-5.6-1.3-5.6-3.6c0-2 2.3-3.6 5.2-3.6c3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9c2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9c.3 2 2.9 3.3 5.9 2.6c2.9-.7 4.9-2.6 4.6-4.6c-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2c12.8 2.3 17.3-5.6 17.3-12.1c0-6.2-.3-40.4-.3-61.4c0 0-70 15-84.7-29.8c0 0-11.4-29.1-27.8-36.6c0 0-22.9-15.7 1.6-15.4c0 0 24.9 2 38.6 25.8c21.9 38.6 58.6 27.5 72.9 20.9c2.3-16 8.8-27.1 16-33.7c-55.9-6.2-112.3-14.3-112.3-110.5c0-27.5 7.6-41.3 23.6-58.9c-2.6-6.5-11.1-33.3 2.6-67.9c20.9-6.5 69 27 69 27c20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27c13.7 34.7 5.2 61.4 2.6 67.9c16 17.7 25.8 31.5 25.8 58.9c0 96.5-58.9 104.2-114.8 110.5c9.2 7.9 17 22.9 17 46.4c0 33.7-.3 75.4-.3 83.6c0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252C496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2c1.6 1.6 3.9 2.3 5.2 1c1.3-1 1-3.3-.7-5.2c-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9c1.6 1 3.6.7 4.3-.7c.7-1.3-.3-2.9-2.3-3.9c-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2c2.3 2.3 5.2 2.6 6.5 1c1.3-1.3.7-4.3-1.3-6.2c-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9c1.6 2.3 4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2c-1.4-2.3-4-3.3-5.6-2'/%3E%3C/svg%3E") + .gitlab-logo + font-size: 1.25rem + + &:before + background-color: var(--tw-prose-headings) + margin-right: 0 + mask-image: url("https://images.ctfassets.net/xz1dnu24egyd/4V92fFTJOIlTPHHzSdfxem/3fdc9f0d82f08ed4c355c6e4126b870c/gitlab-logo-600.svg") + a.card-github.fetch-waiting pointer-events: none opacity: 0.7 @@ -239,7 +247,7 @@ a.card-github.fetch-error 100% opacity: 0.15 -.card-github, .gc-description, .gc-titlebar, .gc-stars, .gc-forks, .gc-license, .gc-avatar, .github-logo +.card-github, .gc-description, .gc-titlebar, .gc-stars, .gc-forks, .gc-license, .gc-avatar, .github-logo, .gitlab-logo transition-property: all transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) transition-duration: 0.15s