Compare commits
18 Commits
v4.5.2
...
active-fol
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51bfc8f9e3 | ||
|
|
86a30ad150 | ||
|
|
45d2ef8690 | ||
|
|
0ecb859d2d | ||
|
|
2fdc8129b6 | ||
|
|
8bc6cb9061 | ||
|
|
af5773f0e4 | ||
|
|
4260214a07 | ||
|
|
0c4386dce1 | ||
|
|
08c861707b | ||
|
|
1377004fca | ||
|
|
519d56c132 | ||
|
|
52460f376f | ||
|
|
b4805a1031 | ||
|
|
f14260b2ba | ||
|
|
9ad3481da6 | ||
|
|
3ff7ca4155 | ||
|
|
eb6cc6ff8e |
4
.github/workflows/build-preview.yaml
vendored
4
.github/workflows/build-preview.yaml
vendored
@@ -16,7 +16,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
run: npx quartz build -d docs -v
|
run: npx quartz build -d docs -v
|
||||||
|
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: preview-build
|
name: preview-build
|
||||||
path: public
|
path: public
|
||||||
|
|||||||
4
.github/workflows/ci.yaml
vendored
4
.github/workflows/ci.yaml
vendored
@@ -24,7 +24,7 @@ jobs:
|
|||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup Node
|
- name: Setup Node
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: 22
|
node-version: 22
|
||||||
- name: Get package version
|
- name: Get package version
|
||||||
|
|||||||
2
.github/workflows/deploy-preview.yaml
vendored
2
.github/workflows/deploy-preview.yaml
vendored
@@ -18,7 +18,7 @@ jobs:
|
|||||||
name: Deploy Preview to Cloudflare Pages
|
name: Deploy Preview to Cloudflare Pages
|
||||||
steps:
|
steps:
|
||||||
- name: Download build artifact
|
- name: Download build artifact
|
||||||
uses: actions/download-artifact@v5
|
uses: actions/download-artifact@v6
|
||||||
id: preview-build-artifact
|
id: preview-build-artifact
|
||||||
with:
|
with:
|
||||||
name: preview-build
|
name: preview-build
|
||||||
|
|||||||
4
.github/workflows/docker-build-push.yaml
vendored
4
.github/workflows/docker-build-push.yaml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
- name: Inject slug/short variables
|
- name: Inject slug/short variables
|
||||||
uses: rlespinasse/github-slug-action@v5.2.0
|
uses: rlespinasse/github-slug-action@v5.3.0
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v3
|
uses: docker/setup-qemu-action@v3
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
@@ -37,7 +37,7 @@ jobs:
|
|||||||
network=host
|
network=host
|
||||||
- name: Install cosign
|
- name: Install cosign
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: sigstore/cosign-installer@v3.9.2
|
uses: sigstore/cosign-installer@v4.0.0
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
|
|||||||
740
package-lock.json
generated
740
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
32
package.json
32
package.json
@@ -48,23 +48,23 @@
|
|||||||
"esbuild-sass-plugin": "^3.3.1",
|
"esbuild-sass-plugin": "^3.3.1",
|
||||||
"flexsearch": "^0.8.205",
|
"flexsearch": "^0.8.205",
|
||||||
"github-slugger": "^2.0.0",
|
"github-slugger": "^2.0.0",
|
||||||
"globby": "^14.1.0",
|
"globby": "^15.0.0",
|
||||||
"gray-matter": "^4.0.3",
|
"gray-matter": "^4.0.3",
|
||||||
"hast-util-to-html": "^9.0.5",
|
"hast-util-to-html": "^9.0.5",
|
||||||
"hast-util-to-jsx-runtime": "^2.3.6",
|
"hast-util-to-jsx-runtime": "^2.3.6",
|
||||||
"hast-util-to-string": "^3.0.1",
|
"hast-util-to-string": "^3.0.1",
|
||||||
"is-absolute-url": "^4.0.1",
|
"is-absolute-url": "^5.0.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"lightningcss": "^1.30.1",
|
"lightningcss": "^1.30.2",
|
||||||
"mdast-util-find-and-replace": "^3.0.2",
|
"mdast-util-find-and-replace": "^3.0.2",
|
||||||
"mdast-util-to-hast": "^13.2.0",
|
"mdast-util-to-hast": "^13.2.0",
|
||||||
"mdast-util-to-string": "^4.0.0",
|
"mdast-util-to-string": "^4.0.0",
|
||||||
"micromorph": "^0.4.5",
|
"micromorph": "^0.4.5",
|
||||||
"minimatch": "^10.0.3",
|
"minimatch": "^10.1.1",
|
||||||
"pixi.js": "^8.13.1",
|
"pixi.js": "^8.14.0",
|
||||||
"preact": "^10.27.1",
|
"preact": "^10.27.2",
|
||||||
"preact-render-to-string": "^6.6.1",
|
"preact-render-to-string": "^6.6.3",
|
||||||
"pretty-bytes": "^7.0.1",
|
"pretty-bytes": "^7.1.0",
|
||||||
"pretty-time": "^1.1.0",
|
"pretty-time": "^1.1.0",
|
||||||
"reading-time": "^1.5.0",
|
"reading-time": "^1.5.0",
|
||||||
"rehype-autolink-headings": "^7.1.0",
|
"rehype-autolink-headings": "^7.1.0",
|
||||||
@@ -83,9 +83,9 @@
|
|||||||
"remark-rehype": "^11.1.2",
|
"remark-rehype": "^11.1.2",
|
||||||
"remark-smartypants": "^3.0.2",
|
"remark-smartypants": "^3.0.2",
|
||||||
"rfdc": "^1.4.1",
|
"rfdc": "^1.4.1",
|
||||||
"satori": "^0.18.2",
|
"satori": "^0.18.3",
|
||||||
"serve-handler": "^6.1.6",
|
"serve-handler": "^6.1.6",
|
||||||
"sharp": "^0.34.3",
|
"sharp": "^0.34.4",
|
||||||
"shiki": "^1.26.2",
|
"shiki": "^1.26.2",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"to-vfile": "^8.0.0",
|
"to-vfile": "^8.0.0",
|
||||||
@@ -93,7 +93,7 @@
|
|||||||
"unified": "^11.0.5",
|
"unified": "^11.0.5",
|
||||||
"unist-util-visit": "^5.0.0",
|
"unist-util-visit": "^5.0.0",
|
||||||
"vfile": "^6.0.3",
|
"vfile": "^6.0.3",
|
||||||
"workerpool": "^9.3.3",
|
"workerpool": "^10.0.0",
|
||||||
"ws": "^8.18.3",
|
"ws": "^8.18.3",
|
||||||
"yargs": "^18.0.0"
|
"yargs": "^18.0.0"
|
||||||
},
|
},
|
||||||
@@ -101,14 +101,14 @@
|
|||||||
"@types/d3": "^7.4.3",
|
"@types/d3": "^7.4.3",
|
||||||
"@types/hast": "^3.0.4",
|
"@types/hast": "^3.0.4",
|
||||||
"@types/js-yaml": "^4.0.9",
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^24.3.1",
|
"@types/node": "^24.10.0",
|
||||||
"@types/pretty-time": "^1.1.5",
|
"@types/pretty-time": "^1.1.5",
|
||||||
"@types/source-map-support": "^0.5.10",
|
"@types/source-map-support": "^0.5.10",
|
||||||
"@types/ws": "^8.18.1",
|
"@types/ws": "^8.18.1",
|
||||||
"@types/yargs": "^17.0.33",
|
"@types/yargs": "^17.0.34",
|
||||||
"esbuild": "^0.25.9",
|
"esbuild": "^0.25.12",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "^3.6.2",
|
||||||
"tsx": "^4.20.5",
|
"tsx": "^4.20.6",
|
||||||
"typescript": "^5.9.2"
|
"typescript": "^5.9.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import { visit } from "unist-util-visit"
|
|||||||
import { Root, Element, ElementContent } from "hast"
|
import { Root, Element, ElementContent } from "hast"
|
||||||
import { GlobalConfiguration } from "../cfg"
|
import { GlobalConfiguration } from "../cfg"
|
||||||
import { i18n } from "../i18n"
|
import { i18n } from "../i18n"
|
||||||
|
import { styleText } from "util"
|
||||||
|
|
||||||
interface RenderComponents {
|
interface RenderComponents {
|
||||||
head: QuartzComponent
|
head: QuartzComponent
|
||||||
@@ -68,6 +69,7 @@ function renderTranscludes(
|
|||||||
cfg: GlobalConfiguration,
|
cfg: GlobalConfiguration,
|
||||||
slug: FullSlug,
|
slug: FullSlug,
|
||||||
componentData: QuartzComponentProps,
|
componentData: QuartzComponentProps,
|
||||||
|
visited: Set<FullSlug>,
|
||||||
) {
|
) {
|
||||||
// process transcludes in componentData
|
// process transcludes in componentData
|
||||||
visit(root, "element", (node, _index, _parent) => {
|
visit(root, "element", (node, _index, _parent) => {
|
||||||
@@ -76,6 +78,30 @@ function renderTranscludes(
|
|||||||
if (classNames.includes("transclude")) {
|
if (classNames.includes("transclude")) {
|
||||||
const inner = node.children[0] as Element
|
const inner = node.children[0] as Element
|
||||||
const transcludeTarget = (inner.properties["data-slug"] ?? slug) as FullSlug
|
const transcludeTarget = (inner.properties["data-slug"] ?? slug) as FullSlug
|
||||||
|
if (visited.has(transcludeTarget)) {
|
||||||
|
console.warn(
|
||||||
|
styleText(
|
||||||
|
"yellow",
|
||||||
|
`Warning: Skipping circular transclusion: ${slug} -> ${transcludeTarget}`,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
node.children = [
|
||||||
|
{
|
||||||
|
type: "element",
|
||||||
|
tagName: "p",
|
||||||
|
properties: { style: "color: var(--secondary);" },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
type: "text",
|
||||||
|
value: `Circular transclusion detected: ${transcludeTarget}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
visited.add(transcludeTarget)
|
||||||
|
|
||||||
const page = componentData.allFiles.find((f) => f.slug === transcludeTarget)
|
const page = componentData.allFiles.find((f) => f.slug === transcludeTarget)
|
||||||
if (!page) {
|
if (!page) {
|
||||||
return
|
return
|
||||||
@@ -196,7 +222,8 @@ export function renderPage(
|
|||||||
// make a deep copy of the tree so we don't remove the transclusion references
|
// make a deep copy of the tree so we don't remove the transclusion references
|
||||||
// for the file cached in contentMap in build.ts
|
// for the file cached in contentMap in build.ts
|
||||||
const root = clone(componentData.tree) as Root
|
const root = clone(componentData.tree) as Root
|
||||||
renderTranscludes(root, cfg, slug, componentData)
|
const visited = new Set<FullSlug>([slug])
|
||||||
|
renderTranscludes(root, cfg, slug, componentData, visited)
|
||||||
|
|
||||||
// set componentData.tree to the edited html that has transclusions rendered
|
// set componentData.tree to the edited html that has transclusions rendered
|
||||||
componentData.tree = root
|
componentData.tree = root
|
||||||
|
|||||||
@@ -111,6 +111,10 @@ function createFolderNode(
|
|||||||
const folderPath = node.slug
|
const folderPath = node.slug
|
||||||
folderContainer.dataset.folderpath = folderPath
|
folderContainer.dataset.folderpath = folderPath
|
||||||
|
|
||||||
|
if (currentSlug === folderPath) {
|
||||||
|
folderContainer.classList.add("active")
|
||||||
|
}
|
||||||
|
|
||||||
if (opts.folderClickBehavior === "link") {
|
if (opts.folderClickBehavior === "link") {
|
||||||
// Replace button with link for link behavior
|
// Replace button with link for link behavior
|
||||||
const button = titleContainer.querySelector(".folder-button") as HTMLElement
|
const button = titleContainer.querySelector(".folder-button") as HTMLElement
|
||||||
|
|||||||
@@ -133,12 +133,16 @@ button.desktop-explorer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.folder-outer {
|
.folder-outer {
|
||||||
|
visibility: collapse;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: 0fr;
|
grid-template-rows: 0fr;
|
||||||
transition: grid-template-rows 0.3s ease-in-out;
|
transition-property: grid-template-rows, visibility;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
transition-timing-function: ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.folder-outer.open {
|
.folder-outer.open {
|
||||||
|
visibility: visible;
|
||||||
grid-template-rows: 1fr;
|
grid-template-rows: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
& > p {
|
& > p {
|
||||||
display: inline;
|
display: inline;
|
||||||
color: var(--gray);
|
color: var(--gray);
|
||||||
|
text-wrap: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
& svg {
|
& svg {
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ import lt from "./locales/lt-LT"
|
|||||||
import fi from "./locales/fi-FI"
|
import fi from "./locales/fi-FI"
|
||||||
import no from "./locales/nb-NO"
|
import no from "./locales/nb-NO"
|
||||||
import id from "./locales/id-ID"
|
import id from "./locales/id-ID"
|
||||||
|
import kk from "./locales/kk-KZ"
|
||||||
|
import he from "./locales/he-IL"
|
||||||
|
|
||||||
export const TRANSLATIONS = {
|
export const TRANSLATIONS = {
|
||||||
"en-US": enUs,
|
"en-US": enUs,
|
||||||
@@ -78,6 +80,8 @@ export const TRANSLATIONS = {
|
|||||||
"fi-FI": fi,
|
"fi-FI": fi,
|
||||||
"nb-NO": no,
|
"nb-NO": no,
|
||||||
"id-ID": id,
|
"id-ID": id,
|
||||||
|
"kk-KZ": kk,
|
||||||
|
"he-IL": he,
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export const defaultTranslation = "en-US"
|
export const defaultTranslation = "en-US"
|
||||||
|
|||||||
88
quartz/i18n/locales/he-IL.ts
Normal file
88
quartz/i18n/locales/he-IL.ts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
import { Translation } from "./definition"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
propertyDefaults: {
|
||||||
|
title: "ללא כותרת",
|
||||||
|
description: "לא סופק תיאור",
|
||||||
|
},
|
||||||
|
direction: "rtl" as const,
|
||||||
|
components: {
|
||||||
|
callout: {
|
||||||
|
note: "הערה",
|
||||||
|
abstract: "תקציר",
|
||||||
|
info: "מידע",
|
||||||
|
todo: "לעשות",
|
||||||
|
tip: "טיפ",
|
||||||
|
success: "הצלחה",
|
||||||
|
question: "שאלה",
|
||||||
|
warning: "אזהרה",
|
||||||
|
failure: "כשלון",
|
||||||
|
danger: "סכנה",
|
||||||
|
bug: "באג",
|
||||||
|
example: "דוגמה",
|
||||||
|
quote: "ציטוט",
|
||||||
|
},
|
||||||
|
backlinks: {
|
||||||
|
title: "קישורים חוזרים",
|
||||||
|
noBacklinksFound: "לא נמצאו קישורים חוזרים",
|
||||||
|
},
|
||||||
|
themeToggle: {
|
||||||
|
lightMode: "מצב בהיר",
|
||||||
|
darkMode: "מצב כהה",
|
||||||
|
},
|
||||||
|
readerMode: {
|
||||||
|
title: "מצב קריאה",
|
||||||
|
},
|
||||||
|
explorer: {
|
||||||
|
title: "סייר",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
createdWith: "נוצר באמצעות",
|
||||||
|
},
|
||||||
|
graph: {
|
||||||
|
title: "מבט גרף",
|
||||||
|
},
|
||||||
|
recentNotes: {
|
||||||
|
title: "הערות אחרונות",
|
||||||
|
seeRemainingMore: ({ remaining }) => `עיין ב ${remaining} נוספים →`,
|
||||||
|
},
|
||||||
|
transcludes: {
|
||||||
|
transcludeOf: ({ targetSlug }) => `מצוטט מ ${targetSlug}`,
|
||||||
|
linkToOriginal: "קישור למקורי",
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
title: "חיפוש",
|
||||||
|
searchBarPlaceholder: "חפשו משהו",
|
||||||
|
},
|
||||||
|
tableOfContents: {
|
||||||
|
title: "תוכן עניינים",
|
||||||
|
},
|
||||||
|
contentMeta: {
|
||||||
|
readingTime: ({ minutes }) => `${minutes} דקות קריאה`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pages: {
|
||||||
|
rss: {
|
||||||
|
recentNotes: "הערות אחרונות",
|
||||||
|
lastFewNotes: ({ count }) => `${count} הערות אחרונות`,
|
||||||
|
},
|
||||||
|
error: {
|
||||||
|
title: "לא נמצא",
|
||||||
|
notFound: "העמוד הזה פרטי או לא קיים.",
|
||||||
|
home: "חזרה לעמוד הבית",
|
||||||
|
},
|
||||||
|
folderContent: {
|
||||||
|
folder: "תיקייה",
|
||||||
|
itemsUnderFolder: ({ count }) =>
|
||||||
|
count === 1 ? "פריט אחד תחת תיקייה זו." : `${count} פריטים תחת תיקייה זו.`,
|
||||||
|
},
|
||||||
|
tagContent: {
|
||||||
|
tag: "תגית",
|
||||||
|
tagIndex: "מפתח התגיות",
|
||||||
|
itemsUnderTag: ({ count }) =>
|
||||||
|
count === 1 ? "פריט אחד עם תגית זו." : `${count} פריטים עם תגית זו.`,
|
||||||
|
showingFirst: ({ count }) => `מראה את ה-${count} תגיות הראשונות.`,
|
||||||
|
totalTags: ({ count }) => `${count} תגיות נמצאו סך הכל.`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as const satisfies Translation
|
||||||
@@ -8,7 +8,7 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
callout: {
|
callout: {
|
||||||
note: "Nota",
|
note: "Nota",
|
||||||
abstract: "Astratto",
|
abstract: "Abstract",
|
||||||
info: "Info",
|
info: "Info",
|
||||||
todo: "Da fare",
|
todo: "Da fare",
|
||||||
tip: "Consiglio",
|
tip: "Consiglio",
|
||||||
@@ -17,7 +17,7 @@ export default {
|
|||||||
warning: "Attenzione",
|
warning: "Attenzione",
|
||||||
failure: "Errore",
|
failure: "Errore",
|
||||||
danger: "Pericolo",
|
danger: "Pericolo",
|
||||||
bug: "Bug",
|
bug: "Problema",
|
||||||
example: "Esempio",
|
example: "Esempio",
|
||||||
quote: "Citazione",
|
quote: "Citazione",
|
||||||
},
|
},
|
||||||
@@ -43,10 +43,11 @@ export default {
|
|||||||
},
|
},
|
||||||
recentNotes: {
|
recentNotes: {
|
||||||
title: "Note recenti",
|
title: "Note recenti",
|
||||||
seeRemainingMore: ({ remaining }) => `Vedi ${remaining} altro →`,
|
seeRemainingMore: ({ remaining }) =>
|
||||||
|
remaining === 1 ? "Vedi 1 altra →" : `Vedi altre ${remaining} →`,
|
||||||
},
|
},
|
||||||
transcludes: {
|
transcludes: {
|
||||||
transcludeOf: ({ targetSlug }) => `Transclusione di ${targetSlug}`,
|
transcludeOf: ({ targetSlug }) => `Inclusione di ${targetSlug}`,
|
||||||
linkToOriginal: "Link all'originale",
|
linkToOriginal: "Link all'originale",
|
||||||
},
|
},
|
||||||
search: {
|
search: {
|
||||||
@@ -54,16 +55,16 @@ export default {
|
|||||||
searchBarPlaceholder: "Cerca qualcosa",
|
searchBarPlaceholder: "Cerca qualcosa",
|
||||||
},
|
},
|
||||||
tableOfContents: {
|
tableOfContents: {
|
||||||
title: "Tabella dei contenuti",
|
title: "Indice",
|
||||||
},
|
},
|
||||||
contentMeta: {
|
contentMeta: {
|
||||||
readingTime: ({ minutes }) => `${minutes} minuti`,
|
readingTime: ({ minutes }) => (minutes === 1 ? "1 minuto" : `${minutes} minuti`),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
pages: {
|
pages: {
|
||||||
rss: {
|
rss: {
|
||||||
recentNotes: "Note recenti",
|
recentNotes: "Note recenti",
|
||||||
lastFewNotes: ({ count }) => `Ultime ${count} note`,
|
lastFewNotes: ({ count }) => (count === 1 ? "Ultima nota" : `Ultime ${count} note`),
|
||||||
},
|
},
|
||||||
error: {
|
error: {
|
||||||
title: "Non trovato",
|
title: "Non trovato",
|
||||||
@@ -80,8 +81,9 @@ export default {
|
|||||||
tagIndex: "Indice etichette",
|
tagIndex: "Indice etichette",
|
||||||
itemsUnderTag: ({ count }) =>
|
itemsUnderTag: ({ count }) =>
|
||||||
count === 1 ? "1 oggetto con questa etichetta." : `${count} oggetti con questa etichetta.`,
|
count === 1 ? "1 oggetto con questa etichetta." : `${count} oggetti con questa etichetta.`,
|
||||||
showingFirst: ({ count }) => `Prime ${count} etichette.`,
|
showingFirst: ({ count }) => (count === 1 ? "Prima etichetta." : `Prime ${count} etichette.`),
|
||||||
totalTags: ({ count }) => `Trovate ${count} etichette totali.`,
|
totalTags: ({ count }) =>
|
||||||
|
count === 1 ? "Trovata 1 etichetta in totale." : `Trovate ${count} etichette totali.`,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} as const satisfies Translation
|
} as const satisfies Translation
|
||||||
|
|||||||
87
quartz/i18n/locales/kk-KZ.ts
Normal file
87
quartz/i18n/locales/kk-KZ.ts
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
import { Translation } from "./definition"
|
||||||
|
|
||||||
|
export default {
|
||||||
|
propertyDefaults: {
|
||||||
|
title: "Атаусыз",
|
||||||
|
description: "Сипаттама берілмеген",
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
callout: {
|
||||||
|
note: "Ескерту",
|
||||||
|
abstract: "Аннотация",
|
||||||
|
info: "Ақпарат",
|
||||||
|
todo: "Істеу керек",
|
||||||
|
tip: "Кеңес",
|
||||||
|
success: "Сәттілік",
|
||||||
|
question: "Сұрақ",
|
||||||
|
warning: "Ескерту",
|
||||||
|
failure: "Қате",
|
||||||
|
danger: "Қауіп",
|
||||||
|
bug: "Қате",
|
||||||
|
example: "Мысал",
|
||||||
|
quote: "Дәйексөз",
|
||||||
|
},
|
||||||
|
backlinks: {
|
||||||
|
title: "Артқа сілтемелер",
|
||||||
|
noBacklinksFound: "Артқа сілтемелер табылмады",
|
||||||
|
},
|
||||||
|
themeToggle: {
|
||||||
|
lightMode: "Жарық режимі",
|
||||||
|
darkMode: "Қараңғы режим",
|
||||||
|
},
|
||||||
|
readerMode: {
|
||||||
|
title: "Оқу режимі",
|
||||||
|
},
|
||||||
|
explorer: {
|
||||||
|
title: "Зерттеуші",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
createdWith: "Құрастырылған құрал:",
|
||||||
|
},
|
||||||
|
graph: {
|
||||||
|
title: "Граф көрінісі",
|
||||||
|
},
|
||||||
|
recentNotes: {
|
||||||
|
title: "Соңғы жазбалар",
|
||||||
|
seeRemainingMore: ({ remaining }) => `Тағы ${remaining} жазбаны қарау →`,
|
||||||
|
},
|
||||||
|
transcludes: {
|
||||||
|
transcludeOf: ({ targetSlug }) => `${targetSlug} кірістіру`,
|
||||||
|
linkToOriginal: "Бастапқыға сілтеме",
|
||||||
|
},
|
||||||
|
search: {
|
||||||
|
title: "Іздеу",
|
||||||
|
searchBarPlaceholder: "Бірдеңе іздеу",
|
||||||
|
},
|
||||||
|
tableOfContents: {
|
||||||
|
title: "Мазмұны",
|
||||||
|
},
|
||||||
|
contentMeta: {
|
||||||
|
readingTime: ({ minutes }) => `${minutes} мин оқу`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pages: {
|
||||||
|
rss: {
|
||||||
|
recentNotes: "Соңғы жазбалар",
|
||||||
|
lastFewNotes: ({ count }) => `Соңғы ${count} жазба`,
|
||||||
|
},
|
||||||
|
error: {
|
||||||
|
title: "Табылмады",
|
||||||
|
notFound: "Бұл бет жеке немесе жоқ болуы мүмкін.",
|
||||||
|
home: "Басты бетке оралу",
|
||||||
|
},
|
||||||
|
folderContent: {
|
||||||
|
folder: "Қалта",
|
||||||
|
itemsUnderFolder: ({ count }) =>
|
||||||
|
count === 1 ? "Бұл қалтада 1 элемент бар." : `Бұл қалтада ${count} элемент бар.`,
|
||||||
|
},
|
||||||
|
tagContent: {
|
||||||
|
tag: "Тег",
|
||||||
|
tagIndex: "Тегтер индексі",
|
||||||
|
itemsUnderTag: ({ count }) =>
|
||||||
|
count === 1 ? "Бұл тегпен 1 элемент." : `Бұл тегпен ${count} элемент.`,
|
||||||
|
showingFirst: ({ count }) => `Алғашқы ${count} тег көрсетілуде.`,
|
||||||
|
totalTags: ({ count }) => `Барлығы ${count} тег табылды.`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as const satisfies Translation
|
||||||
@@ -103,7 +103,6 @@ export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
|||||||
const created = coalesceAliases(data, ["created", "date"])
|
const created = coalesceAliases(data, ["created", "date"])
|
||||||
if (created) {
|
if (created) {
|
||||||
data.created = created
|
data.created = created
|
||||||
data.modified ||= created // if modified is not set, use created
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const modified = coalesceAliases(data, [
|
const modified = coalesceAliases(data, [
|
||||||
@@ -113,6 +112,8 @@ export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
|||||||
"last-modified",
|
"last-modified",
|
||||||
])
|
])
|
||||||
if (modified) data.modified = modified
|
if (modified) data.modified = modified
|
||||||
|
data.modified ||= created // if modified is not set, use created
|
||||||
|
|
||||||
const published = coalesceAliases(data, ["published", "publishDate", "date"])
|
const published = coalesceAliases(data, ["published", "publishDate", "date"])
|
||||||
if (published) data.published = published
|
if (published) data.published = published
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
|||||||
) {
|
) {
|
||||||
let dest = node.properties.href as RelativeURL
|
let dest = node.properties.href as RelativeURL
|
||||||
const classes = (node.properties.className ?? []) as string[]
|
const classes = (node.properties.className ?? []) as string[]
|
||||||
const isExternal = isAbsoluteUrl(dest)
|
const isExternal = isAbsoluteUrl(dest, { httpOnly: false })
|
||||||
classes.push(isExternal ? "external" : "internal")
|
classes.push(isExternal ? "external" : "internal")
|
||||||
|
|
||||||
if (isExternal && opts.externalLinkIcon) {
|
if (isExternal && opts.externalLinkIcon) {
|
||||||
@@ -99,7 +99,9 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// don't process external links or intra-document anchors
|
// don't process external links or intra-document anchors
|
||||||
const isInternal = !(isAbsoluteUrl(dest) || dest.startsWith("#"))
|
const isInternal = !(
|
||||||
|
isAbsoluteUrl(dest, { httpOnly: false }) || dest.startsWith("#")
|
||||||
|
)
|
||||||
if (isInternal) {
|
if (isInternal) {
|
||||||
dest = node.properties.href = transformLink(
|
dest = node.properties.href = transformLink(
|
||||||
file.data.slug!,
|
file.data.slug!,
|
||||||
@@ -145,7 +147,7 @@ export const CrawlLinks: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
|
|||||||
node.properties.loading = "lazy"
|
node.properties.loading = "lazy"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isAbsoluteUrl(node.properties.src)) {
|
if (!isAbsoluteUrl(node.properties.src, { httpOnly: false })) {
|
||||||
let dest = node.properties.src as RelativeURL
|
let dest = node.properties.src as RelativeURL
|
||||||
dest = node.properties.src = transformLink(
|
dest = node.properties.src = transformLink(
|
||||||
file.data.slug!,
|
file.data.slug!,
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import { QuartzTransformerPlugin } from "../types"
|
import { QuartzTransformerPlugin } from "../types"
|
||||||
|
import rehypeRaw from "rehype-raw"
|
||||||
|
import { PluggableList } from "unified"
|
||||||
|
|
||||||
export interface Options {
|
export interface Options {
|
||||||
/** Replace {{ relref }} with quartz wikilinks []() */
|
/** Replace {{ relref }} with quartz wikilinks []() */
|
||||||
@@ -102,5 +104,9 @@ export const OxHugoFlavouredMarkdown: QuartzTransformerPlugin<Partial<Options>>
|
|||||||
}
|
}
|
||||||
return src
|
return src
|
||||||
},
|
},
|
||||||
|
htmlPlugins() {
|
||||||
|
const plugins: PluggableList = [rehypeRaw]
|
||||||
|
return plugins
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,16 +123,25 @@
|
|||||||
transform: rotateZ(-90deg);
|
transform: rotateZ(-90deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.callout-content > :first-child {
|
.callout-content {
|
||||||
|
& > * {
|
||||||
transition:
|
transition:
|
||||||
height 0.1s cubic-bezier(0.02, 0.01, 0.47, 1),
|
height 0.1s cubic-bezier(0.02, 0.01, 0.47, 1),
|
||||||
margin 0.1s cubic-bezier(0.02, 0.01, 0.47, 1);
|
margin 0.1s cubic-bezier(0.02, 0.01, 0.47, 1),
|
||||||
|
padding 0.1s cubic-bezier(0.02, 0.01, 0.47, 1);
|
||||||
overflow-y: clip;
|
overflow-y: clip;
|
||||||
height: 0;
|
height: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
& > :first-child {
|
||||||
margin-top: -1rem;
|
margin-top: -1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.callout-title {
|
.callout-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
Reference in New Issue
Block a user