Description
κΈ°λ³Έμ μΌλ‘ .md λλ html νμΌμ μνλ ννλ‘ λ³ννλ μμ
μ ν¨.
quartz.config.tsνμΌμ Listννλ‘ λ±λ‘ν μ μμΌλ©°, λ€μ΄κ° μμμ λ°λΌ λμ..mdνμΌμhtmlλ‘ λ³ν..mdνμΌμ λν ν΄μμ κΈ°λ³Έμ μΌλ‘ remark λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©.- μΆκ°μ μΈ Transformersλ₯Ό μΆκ°νμ¬ customκ°λ₯
Types
AST : μΆμ ꡬ문 νΈλ¦¬(Abstract Syntax Tree)μ μ½μλ‘ μμ€μ½λμ ꡬ쑰λ₯Ό νΈλ¦¬ ννλ‘ ννν κ².
| type | description |
|---|---|
| MdProcessor | λ§ν¬λ€μ΄ νμΌμ νμ±νμ¬ λ§ν¬λ€μ΄ ASTλ‘ λ³ν.md β MD AST |
| HtmlProcessor | λ§ν¬λ€μ΄ ASTλ₯Ό HTML ASTλ‘ λ³νMD AST β HTML AST |
Example
import { QuartzTransformerPlugin } from "../../types"
import { visit } from "unist-util-visit"
type CardData = {
url: string,
title: string,
description: string,
image: string
}
export const CardLink: QuartzTransformerPlugin = () => {
return {
name: "CardLink",
markdownPlugins() {
return [
() => {
return (tree) => {
visit(tree, "code", (node) => {
if (node.lang === "cardlink") {
const cardData = parseCardData(node.value)
if (cardData) {
node.type = "html"
node.value = `
<div class="card-link">
<a href="${cardData.url}" target="_blank" rel="noopener noreferrer">
${createContent(cardData)}
</a>
</div>
`
}
}
})
}
},
]
},
}
}
function createContent(cardData:CardData) {
if (cardData.image)
return `
<div class="card-link-content">
<div class="card-image-container">
<img src="${cardData.image}" alt="${cardData.title}" class="card-image" />
</div>
<div class="card-text">
<h3 class="card-title">${cardData.title}</h3>
<p class="card-description">${cardData.description}</p>
</div>
</div>
`
return `
<div class="card-link-content-no-img">
<div class="card-text">
<h3 class="card-title">${cardData.title}</h3>
<p class="card-description">${cardData.description}</p>
</div>
</div>
`
}
function parseCardData(cardlink: string): CardData {
const cardData: { [key: string]: string } = {}
const lines = cardlink.split("\n")
for (const line of lines) {
const [key, ...valueParts] = line.split(":")
if (key && valueParts.length > 0) {
const value = valueParts.join(":").trim() // λλ¨Έμ§ κ°μ λ€μ ν©μ³μ μ²λ¦¬
cardData[key.trim()] = value ? value.replaceAll("\"", "") : ""
}
}
return {
url: cardData.url || "",
title: cardData.title || "",
description: cardData.description || "",
image: cardData.image || "",
}
}