From 85f05ea99b16e246b5b86e5408ff35ffa52783e2 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 28 Jan 2024 21:27:16 -0800 Subject: [PATCH 01/65] fix: revert parsing dates in frontmatter --- quartz/plugins/transformers/frontmatter.ts | 32 --------------- quartz/plugins/transformers/lastmod.ts | 46 ++++++++++++++-------- 2 files changed, 29 insertions(+), 49 deletions(-) diff --git a/quartz/plugins/transformers/frontmatter.ts b/quartz/plugins/transformers/frontmatter.ts index 41c1b1375..eae359e1e 100644 --- a/quartz/plugins/transformers/frontmatter.ts +++ b/quartz/plugins/transformers/frontmatter.ts @@ -5,7 +5,6 @@ import yaml from "js-yaml" import toml from "toml" import { slugTag } from "../../util/path" import { QuartzPluginData } from "../vfile" -import chalk from "chalk" export interface Options { delims: string | string[] @@ -17,23 +16,6 @@ const defaultOptions: Options = { language: "yaml", } -function coerceDate(fp: string, d: unknown): Date | undefined { - if (d === undefined || d === null) return undefined - const dt = new Date(d as string | number) - const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0 - if (invalidDate) { - console.log( - chalk.yellow( - `\nWarning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format`, - ), - ) - - return undefined - } - - return dt -} - function coalesceAliases(data: { [key: string]: any }, aliases: string[]) { for (const alias of aliases) { if (data[alias] !== undefined && data[alias] !== null) return data[alias] @@ -66,7 +48,6 @@ export const FrontMatter: QuartzTransformerPlugin | undefined> [remarkFrontmatter, ["yaml", "toml"]], () => { return (_, file) => { - const fp = file.data.filePath! const { data } = matter(Buffer.from(file.value), { ...opts, engines: { @@ -88,16 +69,6 @@ export const FrontMatter: QuartzTransformerPlugin | undefined> if (aliases) data.aliases = aliases const cssclasses = coerceToArray(coalesceAliases(data, ["cssclasses", "cssclass"])) if (cssclasses) data.cssclasses = cssclasses - const created = coerceDate(fp, coalesceAliases(data, ["created", "date"])) - - if (created) data.created = created - const modified = coerceDate( - fp, - coalesceAliases(data, ["modified", "lastmod", "updated", "last-modified"]), - ) - if (modified) data.modified = modified - const published = coerceDate(fp, coalesceAliases(data, ["published", "publishDate"])) - if (published) data.published = published // fill in frontmatter file.data.frontmatter = data as QuartzPluginData["frontmatter"] @@ -120,9 +91,6 @@ declare module "vfile" { draft: boolean enableToc: string cssclasses: string[] - created: Date - modified: Date - published: Date }> } } diff --git a/quartz/plugins/transformers/lastmod.ts b/quartz/plugins/transformers/lastmod.ts index 193664d65..31c8c2084 100644 --- a/quartz/plugins/transformers/lastmod.ts +++ b/quartz/plugins/transformers/lastmod.ts @@ -12,6 +12,21 @@ const defaultOptions: Options = { priority: ["frontmatter", "git", "filesystem"], } +function coerceDate(fp: string, d: any): Date { + const dt = new Date(d) + const invalidDate = isNaN(dt.getTime()) || dt.getTime() === 0 + if (invalidDate && d !== undefined) { + console.log( + chalk.yellow( + `\nWarning: found invalid date "${d}" in \`${fp}\`. Supported formats: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format`, + ), + ) + } + + return invalidDate ? new Date() : dt +} + +type MaybeDate = undefined | string | number export const CreatedModifiedDate: QuartzTransformerPlugin | undefined> = ( userOpts, ) => { @@ -23,21 +38,23 @@ export const CreatedModifiedDate: QuartzTransformerPlugin | und () => { let repo: Repository | undefined = undefined return async (_tree, file) => { - let created: Date | undefined = undefined - let modified: Date | undefined = undefined - let published: Date | undefined = undefined + let created: MaybeDate = undefined + let modified: MaybeDate = undefined + let published: MaybeDate = undefined const fp = file.data.filePath! const fullFp = path.posix.join(file.cwd, fp) for (const source of opts.priority) { if (source === "filesystem") { const st = await fs.promises.stat(fullFp) - created ||= new Date(st.birthtimeMs) - modified ||= new Date(st.mtimeMs) + created ||= st.birthtimeMs + modified ||= st.mtimeMs } else if (source === "frontmatter" && file.data.frontmatter) { - created ||= file.data.frontmatter.created - modified ||= file.data.frontmatter.modified - published ||= file.data.frontmatter.published + created ||= file.data.frontmatter.date as MaybeDate + modified ||= file.data.frontmatter.lastmod as MaybeDate + modified ||= file.data.frontmatter.updated as MaybeDate + modified ||= file.data.frontmatter["last-modified"] as MaybeDate + published ||= file.data.frontmatter.publishDate as MaybeDate } else if (source === "git") { if (!repo) { // Get a reference to the main git repo. @@ -47,9 +64,7 @@ export const CreatedModifiedDate: QuartzTransformerPlugin | und } try { - modified ||= new Date( - await repo.getFileLatestModifiedDateAsync(file.data.filePath!), - ) + modified ||= await repo.getFileLatestModifiedDateAsync(file.data.filePath!) } catch { console.log( chalk.yellow( @@ -61,13 +76,10 @@ export const CreatedModifiedDate: QuartzTransformerPlugin | und } } - created ||= new Date() - modified ||= new Date() - published ||= new Date() file.data.dates = { - created, - modified, - published, + created: coerceDate(fp, created), + modified: coerceDate(fp, modified), + published: coerceDate(fp, published), } } }, From b014d060f3f16b2460da08cdf88bef25d05d5d3b Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Sun, 28 Jan 2024 22:12:01 -0800 Subject: [PATCH 02/65] fix: content-disposition inline should apply to all resource types (closes #728) --- quartz/cli/handlers.js | 2 +- quartz/util/path.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/quartz/cli/handlers.js b/quartz/cli/handlers.js index b8b97b721..12e7e8ec9 100644 --- a/quartz/cli/handlers.js +++ b/quartz/cli/handlers.js @@ -347,7 +347,7 @@ export async function handleBuild(argv) { directoryListing: false, headers: [ { - source: "**/*.html", + source: "**/*.*", headers: [{ key: "Content-Disposition", value: "inline" }], }, ], diff --git a/quartz/util/path.ts b/quartz/util/path.ts index 95acf119d..07f25a59d 100644 --- a/quartz/util/path.ts +++ b/quartz/util/path.ts @@ -52,7 +52,7 @@ function sluggify(s: string): string { .split("/") .map((segment) => segment.replace(/\s/g, "-").replace(/%/g, "-percent").replace(/\?/g, "-q").replace(/#/g, ""), - ) // slugify all segments + ) .join("/") // always use / as sep .replace(/\/$/, "") } From 16adbd30114bfcc1aaefa851a5a1786787f97a10 Mon Sep 17 00:00:00 2001 From: Mara-Li Date: Mon, 29 Jan 2024 07:12:48 +0100 Subject: [PATCH 03/65] fix: `cssclasses` was not applied on folder note (index) (#749) * docs: improve first-time git setup * fix: cssClasses was not applied on index page * refactor: remove vscode files * fix: format * fix: cssClasses should be applied on the entire div, not only the article * feat: support cssClasses for tag-listing --------- Co-authored-by: Jacky Zhao --- quartz/components/pages/FolderContent.tsx | 5 +++-- quartz/components/pages/TagContent.tsx | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/quartz/components/pages/FolderContent.tsx b/quartz/components/pages/FolderContent.tsx index 67cfa8dd4..436ed91fe 100644 --- a/quartz/components/pages/FolderContent.tsx +++ b/quartz/components/pages/FolderContent.tsx @@ -33,7 +33,8 @@ export default ((opts?: Partial) => { const isDirectChild = fileParts.length === folderParts.length + 1 return prefixed && isDirectChild }) - + const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? [] + const classes = ["popover-hint", ...cssClasses].join(" ") const listProps = { ...props, allFiles: allPagesInFolder, @@ -45,7 +46,7 @@ export default ((opts?: Partial) => { : htmlToJsx(fileData.filePath!, tree) return ( -
+

{content}

diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx index 890755bbc..50507461d 100644 --- a/quartz/components/pages/TagContent.tsx +++ b/quartz/components/pages/TagContent.tsx @@ -26,7 +26,8 @@ function TagContent(props: QuartzComponentProps) { (tree as Root).children.length === 0 ? fileData.description : htmlToJsx(fileData.filePath!, tree) - + const cssClasses: string[] = fileData.frontmatter?.cssclasses ?? [] + const classes = ["popover-hint", ...cssClasses].join(" ") if (tag === "/") { const tags = [ ...new Set( @@ -37,9 +38,8 @@ function TagContent(props: QuartzComponentProps) { for (const tag of tags) { tagItemMap.set(tag, allPagesWithTag(tag)) } - return ( -
+

{content}

@@ -81,7 +81,7 @@ function TagContent(props: QuartzComponentProps) { } return ( -
+
{content}

{pluralize(pages.length, "item")} with this tag.

From 603c181ad27109327617a78e5f672ebf68edc267 Mon Sep 17 00:00:00 2001 From: Mara-Li Date: Mon, 29 Jan 2024 07:13:59 +0100 Subject: [PATCH 04/65] feat: allow to config a translation for date (#739) * fix: alt error mix with height/width More granular detection of alt and resize in image * fix: format * feat: allow to translate the date displayed * style: format * fix: rename to fusion dateLocale with locale (i18n support) * Update quartz/components/PageList.tsx Co-authored-by: Jacky Zhao * remove default key as it was already set * add docstring for locale --------- Co-authored-by: Jacky Zhao --- quartz/cfg.ts | 6 ++++++ quartz/components/ContentMeta.tsx | 2 +- quartz/components/Date.tsx | 9 +++++---- quartz/components/PageList.tsx | 2 +- quartz/components/RecentNotes.tsx | 2 +- quartz/plugins/transformers/ofm.ts | 2 +- 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/quartz/cfg.ts b/quartz/cfg.ts index 7f0f206e1..153bbe21d 100644 --- a/quartz/cfg.ts +++ b/quartz/cfg.ts @@ -35,6 +35,12 @@ export interface GlobalConfiguration { */ baseUrl?: string theme: Theme + /** + * The locale to use for date formatting. Default to "en-US" + * Allow to translate the date in the language of your choice. + * Need to be formated following the IETF language tag format (https://en.wikipedia.org/wiki/IETF_language_tag) + */ + locale?: string } export interface QuartzConfig { diff --git a/quartz/components/ContentMeta.tsx b/quartz/components/ContentMeta.tsx index 254c5d405..5337feed8 100644 --- a/quartz/components/ContentMeta.tsx +++ b/quartz/components/ContentMeta.tsx @@ -24,7 +24,7 @@ export default ((opts?: Partial) => { const segments: string[] = [] if (fileData.dates) { - segments.push(formatDate(getDate(cfg, fileData)!)) + segments.push(formatDate(getDate(cfg, fileData)!, cfg.locale)) } // Display reading time if enabled diff --git a/quartz/components/Date.tsx b/quartz/components/Date.tsx index 8713cfd3c..6feac178c 100644 --- a/quartz/components/Date.tsx +++ b/quartz/components/Date.tsx @@ -3,6 +3,7 @@ import { QuartzPluginData } from "../plugins/vfile" interface Props { date: Date + locale?: string } export type ValidDateType = keyof Required["dates"] @@ -16,14 +17,14 @@ export function getDate(cfg: GlobalConfiguration, data: QuartzPluginData): Date return data.dates?.[cfg.defaultDateType] } -export function formatDate(d: Date): string { - return d.toLocaleDateString("en-US", { +export function formatDate(d: Date, locale = "en-US"): string { + return d.toLocaleDateString(locale, { year: "numeric", month: "short", day: "2-digit", }) } -export function Date({ date }: Props) { - return <>{formatDate(date)} +export function Date({ date, locale }: Props) { + return <>{formatDate(date, locale)} } diff --git a/quartz/components/PageList.tsx b/quartz/components/PageList.tsx index eb34f02f7..644e354c4 100644 --- a/quartz/components/PageList.tsx +++ b/quartz/components/PageList.tsx @@ -46,7 +46,7 @@ export function PageList({ cfg, fileData, allFiles, limit }: Props) {
{page.dates && (

- +

)}
diff --git a/quartz/components/RecentNotes.tsx b/quartz/components/RecentNotes.tsx index 63f040d81..9a53ad7eb 100644 --- a/quartz/components/RecentNotes.tsx +++ b/quartz/components/RecentNotes.tsx @@ -47,7 +47,7 @@ export default ((userOpts?: Partial) => {
{page.dates && (

- +

)}
    diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 7c9b33bbd..1eeb78322 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -441,7 +441,7 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin value: `
    -
    ${callouts[calloutType] ?? callouts.note}
    +
    ${callouts[calloutType] ?? callouts.note}
    ${title}
    ${collapse ? toggleIcon : ""}
    `, From b7152f743bc90411ffd5a9e59057a79be430751b Mon Sep 17 00:00:00 2001 From: Mara-Li Date: Mon, 29 Jan 2024 07:52:04 +0100 Subject: [PATCH 05/65] feat: div that encapsulate PageList component (#750) * feat: div that encapsulate PageList component * change class to follow review Co-authored-by: Jacky Zhao * apply page-listing div to TagContent --------- Co-authored-by: Jacky Zhao --- quartz/components/pages/FolderContent.tsx | 12 +++++++----- quartz/components/pages/TagContent.tsx | 20 ++++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/quartz/components/pages/FolderContent.tsx b/quartz/components/pages/FolderContent.tsx index 436ed91fe..47fb02f1b 100644 --- a/quartz/components/pages/FolderContent.tsx +++ b/quartz/components/pages/FolderContent.tsx @@ -50,11 +50,13 @@ export default ((opts?: Partial) => {

    {content}

    - {options.showFolderCount && ( -

    {pluralize(allPagesInFolder.length, "item")} under this folder.

    - )} -
    - +
    + {options.showFolderCount && ( +

    {pluralize(allPagesInFolder.length, "item")} under this folder.

    + )} +
    + +
    ) diff --git a/quartz/components/pages/TagContent.tsx b/quartz/components/pages/TagContent.tsx index 50507461d..ec30c5ff9 100644 --- a/quartz/components/pages/TagContent.tsx +++ b/quartz/components/pages/TagContent.tsx @@ -62,11 +62,13 @@ function TagContent(props: QuartzComponentProps) { {content &&

    {content}

    } -

    - {pluralize(pages.length, "item")} with this tag.{" "} - {pages.length > numPages && `Showing first ${numPages}.`} -

    - +
    +

    + {pluralize(pages.length, "item")} with this tag.{" "} + {pages.length > numPages && `Showing first ${numPages}.`} +

    + +
) })} @@ -83,9 +85,11 @@ function TagContent(props: QuartzComponentProps) { return (
{content}
-

{pluralize(pages.length, "item")} with this tag.

-
- +
+

{pluralize(pages.length, "item")} with this tag.

+
+ +
) From f68872c09f011b12db9de360eb852010bd07ed79 Mon Sep 17 00:00:00 2001 From: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Mon, 29 Jan 2024 02:38:59 -0500 Subject: [PATCH 06/65] feat(icon): update content for gfm links (#751) * feat(icon): update content for gfm links Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> * chore: remove unused var Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> * fix: inherit display to remove additional spacing Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> * revert: remove redundant svg attribute Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --------- Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --- quartz/plugins/transformers/gfm.ts | 32 ++++++++++++++++++++++++++++-- quartz/styles/base.scss | 1 - 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/quartz/plugins/transformers/gfm.ts b/quartz/plugins/transformers/gfm.ts index 40c2205d3..7860f851c 100644 --- a/quartz/plugins/transformers/gfm.ts +++ b/quartz/plugins/transformers/gfm.ts @@ -37,8 +37,36 @@ export const GitHubFlavoredMarkdown: QuartzTransformerPlugin | "data-no-popover": true, }, content: { - type: "text", - value: " §", + type: "element", + tagName: "svg", + properties: { + width: 18, + height: 18, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + "stroke-width": "2", + "stroke-linecap": "round", + "stroke-linejoin": "round", + }, + children: [ + { + type: "element", + tagName: "path", + properties: { + d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71", + }, + children: [], + }, + { + type: "element", + tagName: "path", + properties: { + d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71", + }, + children: [], + }, + ], }, }, ], diff --git a/quartz/styles/base.scss b/quartz/styles/base.scss index d597ba7d5..65e68f3a5 100644 --- a/quartz/styles/base.scss +++ b/quartz/styles/base.scss @@ -276,7 +276,6 @@ h6 { opacity: 0; transition: opacity 0.2s ease; transform: translateY(-0.1rem); - display: inline-block; font-family: var(--codeFont); user-select: none; } From 76be137283a497c88b7da445cd9f4b8533a04f35 Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 29 Jan 2024 00:56:12 -0800 Subject: [PATCH 07/65] fix: attempt to merge cached folder state between builds (closes #691) --- quartz/components/Explorer.tsx | 3 +- quartz/components/scripts/explorer.inline.ts | 156 ++++++++----------- quartz/components/scripts/toc.inline.ts | 6 +- 3 files changed, 68 insertions(+), 97 deletions(-) diff --git a/quartz/components/Explorer.tsx b/quartz/components/Explorer.tsx index e3ed9b1cc..fdfff23b1 100644 --- a/quartz/components/Explorer.tsx +++ b/quartz/components/Explorer.tsx @@ -69,9 +69,8 @@ export default ((userOpts?: Partial) => { } // Get all folders of tree. Initialize with collapsed state - const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") - // Stringify to pass json tree as data attribute ([data-tree]) + const folders = fileTree.getFolderPaths(opts.folderDefaultState === "collapsed") jsonTree = JSON.stringify(folders) } diff --git a/quartz/components/scripts/explorer.inline.ts b/quartz/components/scripts/explorer.inline.ts index 8e79d200e..12546bbb0 100644 --- a/quartz/components/scripts/explorer.inline.ts +++ b/quartz/components/scripts/explorer.inline.ts @@ -1,132 +1,106 @@ import { FolderState } from "../ExplorerNode" -// Current state of folders -let explorerState: FolderState[] - +type MaybeHTMLElement = HTMLElement | undefined +let currentExplorerState: FolderState[] const observer = new IntersectionObserver((entries) => { // If last element is observed, remove gradient of "overflow" class so element is visible - const explorer = document.getElementById("explorer-ul") + const explorerUl = document.getElementById("explorer-ul") + if (!explorerUl) return for (const entry of entries) { if (entry.isIntersecting) { - explorer?.classList.add("no-background") + explorerUl.classList.add("no-background") } else { - explorer?.classList.remove("no-background") + explorerUl.classList.remove("no-background") } } }) function toggleExplorer(this: HTMLElement) { - // Toggle collapsed state of entire explorer this.classList.toggle("collapsed") - const content = this.nextElementSibling as HTMLElement + const content = this.nextElementSibling as MaybeHTMLElement + if (!content) return + content.classList.toggle("collapsed") content.style.maxHeight = content.style.maxHeight === "0px" ? content.scrollHeight + "px" : "0px" } function toggleFolder(evt: MouseEvent) { evt.stopPropagation() + const target = evt.target as MaybeHTMLElement + if (!target) return - // Element that was clicked - const target = evt.target as HTMLElement - - // Check if target was svg icon or button const isSvg = target.nodeName === "svg" + const childFolderContainer = ( + isSvg + ? target.parentElement?.nextSibling + : target.parentElement?.parentElement?.nextElementSibling + ) as MaybeHTMLElement + const currentFolderParent = ( + isSvg ? target.nextElementSibling : target.parentElement + ) as MaybeHTMLElement + if (!(childFolderContainer && currentFolderParent)) return - // corresponding
    element relative to clicked button/folder - let childFolderContainer: HTMLElement - - //
  • element of folder (stores folder-path dataset) - let currentFolderParent: HTMLElement - - // Get correct relative container and toggle collapsed class - if (isSvg) { - childFolderContainer = target.parentElement?.nextSibling as HTMLElement - currentFolderParent = target.nextElementSibling as HTMLElement - - childFolderContainer.classList.toggle("open") - } else { - childFolderContainer = target.parentElement?.parentElement?.nextElementSibling as HTMLElement - currentFolderParent = target.parentElement as HTMLElement - - childFolderContainer.classList.toggle("open") - } - if (!childFolderContainer) return - - // Collapse folder container + childFolderContainer.classList.toggle("open") const isCollapsed = childFolderContainer.classList.contains("open") setFolderState(childFolderContainer, !isCollapsed) - - // Save folder state to localStorage - const clickFolderPath = currentFolderParent.dataset.folderpath as string - - const fullFolderPath = clickFolderPath - toggleCollapsedByPath(explorerState, fullFolderPath) - - const stringifiedFileTree = JSON.stringify(explorerState) + const fullFolderPath = currentFolderParent.dataset.folderpath as string + toggleCollapsedByPath(currentExplorerState, fullFolderPath) + const stringifiedFileTree = JSON.stringify(currentExplorerState) localStorage.setItem("fileTree", stringifiedFileTree) } function setupExplorer() { - // Set click handler for collapsing entire explorer const explorer = document.getElementById("explorer") + if (!explorer) return + + if (explorer.dataset.behavior === "collapse") { + for (const item of document.getElementsByClassName( + "folder-button", + ) as HTMLCollectionOf) { + item.removeEventListener("click", toggleFolder) + item.addEventListener("click", toggleFolder) + } + } + + explorer.removeEventListener("click", toggleExplorer) + explorer.addEventListener("click", toggleExplorer) + + // Set up click handlers for each folder (click handler on folder "icon") + for (const item of document.getElementsByClassName( + "folder-icon", + ) as HTMLCollectionOf) { + item.removeEventListener("click", toggleFolder) + item.addEventListener("click", toggleFolder) + } // Get folder state from local storage const storageTree = localStorage.getItem("fileTree") - - // Convert to bool const useSavedFolderState = explorer?.dataset.savestate === "true" + const oldExplorerState: FolderState[] = + storageTree && useSavedFolderState ? JSON.parse(storageTree) : [] + const oldIndex = new Map(oldExplorerState.map((entry) => [entry.path, entry.collapsed])) + const newExplorerState: FolderState[] = explorer.dataset.tree + ? JSON.parse(explorer.dataset.tree) + : [] + currentExplorerState = [] + for (const { path, collapsed } of newExplorerState) { + currentExplorerState.push({ path, collapsed: oldIndex.get(path) ?? collapsed }) + } - if (explorer) { - // Get config - const collapseBehavior = explorer.dataset.behavior - - // Add click handlers for all folders (click handler on folder "label") - if (collapseBehavior === "collapse") { - Array.prototype.forEach.call( - document.getElementsByClassName("folder-button"), - function (item) { - item.removeEventListener("click", toggleFolder) - item.addEventListener("click", toggleFolder) - }, - ) + currentExplorerState.map((folderState) => { + const folderLi = document.querySelector( + `[data-folderpath='${folderState.path}']`, + ) as MaybeHTMLElement + const folderUl = folderLi?.parentElement?.nextElementSibling as MaybeHTMLElement + if (folderUl) { + setFolderState(folderUl, folderState.collapsed) } - - // Add click handler to main explorer - explorer.removeEventListener("click", toggleExplorer) - explorer.addEventListener("click", toggleExplorer) - } - - // Set up click handlers for each folder (click handler on folder "icon") - Array.prototype.forEach.call(document.getElementsByClassName("folder-icon"), function (item) { - item.removeEventListener("click", toggleFolder) - item.addEventListener("click", toggleFolder) }) - - if (storageTree && useSavedFolderState) { - // Get state from localStorage and set folder state - explorerState = JSON.parse(storageTree) - explorerState.map((folderUl) => { - // grab
  • element for matching folder path - const folderLi = document.querySelector(`[data-folderpath='${folderUl.path}']`) as HTMLElement - - // Get corresponding content
      tag and set state - if (folderLi) { - const folderUL = folderLi.parentElement?.nextElementSibling - if (folderUL) { - setFolderState(folderUL as HTMLElement, folderUl.collapsed) - } - } - }) - } else if (explorer?.dataset.tree) { - // If tree is not in localStorage or config is disabled, use tree passed from Explorer as dataset - explorerState = JSON.parse(explorer.dataset.tree) - } } window.addEventListener("resize", setupExplorer) document.addEventListener("nav", () => { setupExplorer() - observer.disconnect() // select pseudo element at end of list @@ -142,11 +116,7 @@ document.addEventListener("nav", () => { * @param collapsed if folder should be set to collapsed or not */ function setFolderState(folderElement: HTMLElement, collapsed: boolean) { - if (collapsed) { - folderElement?.classList.remove("open") - } else { - folderElement?.classList.add("open") - } + return collapsed ? folderElement.classList.remove("open") : folderElement.classList.add("open") } /** diff --git a/quartz/components/scripts/toc.inline.ts b/quartz/components/scripts/toc.inline.ts index f3da52cd5..2e1e52b0e 100644 --- a/quartz/components/scripts/toc.inline.ts +++ b/quartz/components/scripts/toc.inline.ts @@ -16,7 +16,8 @@ const observer = new IntersectionObserver((entries) => { function toggleToc(this: HTMLElement) { this.classList.toggle("collapsed") - const content = this.nextElementSibling as HTMLElement + const content = this.nextElementSibling as HTMLElement | undefined + if (!content) return content.classList.toggle("collapsed") content.style.maxHeight = content.style.maxHeight === "0px" ? content.scrollHeight + "px" : "0px" } @@ -25,7 +26,8 @@ function setupToc() { const toc = document.getElementById("toc") if (toc) { const collapsed = toc.classList.contains("collapsed") - const content = toc.nextElementSibling as HTMLElement + const content = toc.nextElementSibling as HTMLElement | undefined + if (!content) return content.style.maxHeight = collapsed ? "0px" : content.scrollHeight + "px" toc.removeEventListener("click", toggleToc) toc.addEventListener("click", toggleToc) From 2d727443b3cc716ea057a897f588e2c563102d5c Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 29 Jan 2024 09:36:36 -0800 Subject: [PATCH 08/65] fix: implement regex fix for alt in image wikilinks (closes #753) --- quartz/plugins/transformers/ofm.ts | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 1eeb78322..3757f4212 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -138,6 +138,7 @@ const tagRegex = new RegExp(/(?:^| )#((?:[-_\p{L}\p{Emoji}\d])+(?:\/[-_\p{L}\p{E const blockReferenceRegex = new RegExp(/\^([-_A-Za-z0-9]+)$/, "g") const ytLinkRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ const videoExtensionRegex = new RegExp(/\.(mp4|webm|ogg|avi|mov|flv|wmv|mkv|mpg|mpeg|3gp|m4v)$/) +const wikilinkImageEmbedRegex = new RegExp(/^(?(?!^\d*x?\d*$).*?)?(\|?\s*?(?\d+)(x(?\d+))?)?$/) export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin | undefined> = ( userOpts, @@ -222,18 +223,10 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin const ext: string = path.extname(fp).toLowerCase() const url = slugifyFilePath(fp as FilePath) if ([".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg", ".webp"].includes(ext)) { - // either |alt|dims or |dims - let [alt, dims] = (alias ?? "").split("|") - - // |dims case, treat first alt slot as dims - if (dims === undefined) { - dims = alt - alt = "" - } - - let [width, height] = dims.split("x", 2) - width ||= "auto" - height ||= "auto" + const match = wikilinkImageEmbedRegex.exec(alias ?? "") + const alt = match?.groups?.alt ?? "" + const width = match?.groups?.width ?? "auto" + const height = match?.groups?.height ?? "auto" return { type: "image", url, @@ -267,9 +260,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin return { type: "html", data: { hProperties: { transclude: true } }, - value: `
      Transclude of ${url}${block}
      `, + value: `
      Transclude of ${url}${block}
      `, } } @@ -467,9 +459,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin node.data = { hProperties: { ...(node.data?.hProperties ?? {}), - className: `callout ${calloutType} ${collapse ? "is-collapsible" : ""} ${ - defaultState === "collapsed" ? "is-collapsed" : "" - }`, + className: `callout ${calloutType} ${collapse ? "is-collapsible" : ""} ${defaultState === "collapsed" ? "is-collapsed" : "" + }`, "data-callout": calloutType, "data-callout-fold": collapse, }, From ebf429a9c66e206109f17f6f961e3a874c2157cf Mon Sep 17 00:00:00 2001 From: Jacky Zhao Date: Mon, 29 Jan 2024 09:38:14 -0800 Subject: [PATCH 09/65] fix: fmt --- quartz/plugins/transformers/ofm.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 3757f4212..fc98bb2a3 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -138,7 +138,9 @@ const tagRegex = new RegExp(/(?:^| )#((?:[-_\p{L}\p{Emoji}\d])+(?:\/[-_\p{L}\p{E const blockReferenceRegex = new RegExp(/\^([-_A-Za-z0-9]+)$/, "g") const ytLinkRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ const videoExtensionRegex = new RegExp(/\.(mp4|webm|ogg|avi|mov|flv|wmv|mkv|mpg|mpeg|3gp|m4v)$/) -const wikilinkImageEmbedRegex = new RegExp(/^(?(?!^\d*x?\d*$).*?)?(\|?\s*?(?\d+)(x(?\d+))?)?$/) +const wikilinkImageEmbedRegex = new RegExp( + /^(?(?!^\d*x?\d*$).*?)?(\|?\s*?(?\d+)(x(?\d+))?)?$/, +) export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin | undefined> = ( userOpts, @@ -260,8 +262,9 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin return { type: "html", data: { hProperties: { transclude: true } }, - value: `
      Transclude of ${url}${block}
      `, + value: `
      Transclude of ${url}${block}
      `, } } @@ -459,8 +462,9 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin node.data = { hProperties: { ...(node.data?.hProperties ?? {}), - className: `callout ${calloutType} ${collapse ? "is-collapsible" : ""} ${defaultState === "collapsed" ? "is-collapsed" : "" - }`, + className: `callout ${calloutType} ${collapse ? "is-collapsible" : ""} ${ + defaultState === "collapsed" ? "is-collapsed" : "" + }`, "data-callout": calloutType, "data-callout-fold": collapse, }, From b85a3543f4aa9424cca02f544723a8329d2d972f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:40:55 -0800 Subject: [PATCH 10/65] chore(deps): bump @napi-rs/simple-git from 0.1.11 to 0.1.14 (#756) Bumps [@napi-rs/simple-git](https://github.com/Brooooooklyn/simple-git) from 0.1.11 to 0.1.14. - [Release notes](https://github.com/Brooooooklyn/simple-git/releases) - [Commits](https://github.com/Brooooooklyn/simple-git/compare/v0.1.11...v0.1.14) --- updated-dependencies: - dependency-name: "@napi-rs/simple-git" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 96 +++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 49 insertions(+), 49 deletions(-) diff --git a/package-lock.json b/package-lock.json index 594c5ad3f..98e0b5257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@clack/prompts": "^0.7.0", "@floating-ui/dom": "^1.5.3", - "@napi-rs/simple-git": "0.1.11", + "@napi-rs/simple-git": "0.1.14", "async-mutex": "^0.4.0", "chalk": "^5.3.0", "chokidar": "^3.5.3", @@ -517,30 +517,30 @@ } }, "node_modules/@napi-rs/simple-git": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git/-/simple-git-0.1.11.tgz", - "integrity": "sha512-z14cPCBrtDKKVJ3q4GS5gmXEithGUAt+U8sICgA9i3UFdxJKD4H5rCnO7BVC3htdE9g6OR2w2IcHAL56AjpFbg==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git/-/simple-git-0.1.14.tgz", + "integrity": "sha512-2cDnsT0nKpQ7yg5u/Zf8/ibp9YFIKhpcfMAGATYuqdJoHuBo6P6UArZ0RDOOtfFC5b9FXuYcGw2ApbM4eWdnbQ==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@napi-rs/simple-git-android-arm-eabi": "0.1.11", - "@napi-rs/simple-git-android-arm64": "0.1.11", - "@napi-rs/simple-git-darwin-arm64": "0.1.11", - "@napi-rs/simple-git-darwin-x64": "0.1.11", - "@napi-rs/simple-git-linux-arm-gnueabihf": "0.1.11", - "@napi-rs/simple-git-linux-arm64-gnu": "0.1.11", - "@napi-rs/simple-git-linux-arm64-musl": "0.1.11", - "@napi-rs/simple-git-linux-x64-gnu": "0.1.11", - "@napi-rs/simple-git-linux-x64-musl": "0.1.11", - "@napi-rs/simple-git-win32-arm64-msvc": "0.1.11", - "@napi-rs/simple-git-win32-x64-msvc": "0.1.11" + "@napi-rs/simple-git-android-arm-eabi": "0.1.14", + "@napi-rs/simple-git-android-arm64": "0.1.14", + "@napi-rs/simple-git-darwin-arm64": "0.1.14", + "@napi-rs/simple-git-darwin-x64": "0.1.14", + "@napi-rs/simple-git-linux-arm-gnueabihf": "0.1.14", + "@napi-rs/simple-git-linux-arm64-gnu": "0.1.14", + "@napi-rs/simple-git-linux-arm64-musl": "0.1.14", + "@napi-rs/simple-git-linux-x64-gnu": "0.1.14", + "@napi-rs/simple-git-linux-x64-musl": "0.1.14", + "@napi-rs/simple-git-win32-arm64-msvc": "0.1.14", + "@napi-rs/simple-git-win32-x64-msvc": "0.1.14" } }, "node_modules/@napi-rs/simple-git-android-arm-eabi": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm-eabi/-/simple-git-android-arm-eabi-0.1.11.tgz", - "integrity": "sha512-wt4Wu9MxvKzEqT4iwodFs7Nrc31K73gR5hM7VnlO6iLELmUQZ5JVJkYoFWgzLQWtzIC48W2+zFMbBgY6+F2rZg==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm-eabi/-/simple-git-android-arm-eabi-0.1.14.tgz", + "integrity": "sha512-fAJ/Hxc9DhtSHOcB3dPCRW1YcVsqAnbNoOOnHir4aDCtqTP64HrFa7A/675v3vQZpI0u3fXHRcYqW8NF0O/zcg==", "cpu": [ "arm" ], @@ -553,9 +553,9 @@ } }, "node_modules/@napi-rs/simple-git-android-arm64": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm64/-/simple-git-android-arm64-0.1.11.tgz", - "integrity": "sha512-5/Aj6N44CxwhV3TZWRZ4vGqFj4wb2/a2gwvUZJo9Dwik9Spls7As8LaLe7pOptiGPH0GRP3H5kTT7I6twHNgqw==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-android-arm64/-/simple-git-android-arm64-0.1.14.tgz", + "integrity": "sha512-dav730MRAR142DoyNDafuwKXcUCYwlbxxxxOarDph7bbN0mZZnKHOQohvRCD/Uz4aJLaj6khCavXSjLDWArEUg==", "cpu": [ "arm64" ], @@ -568,9 +568,9 @@ } }, "node_modules/@napi-rs/simple-git-darwin-arm64": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-arm64/-/simple-git-darwin-arm64-0.1.11.tgz", - "integrity": "sha512-vdVsJUNcRsGVu0hBmLZdxxgwIbJA/Ias8NKWze8MZkZ3VyBwhg0uAzFgESEL3/USAgeCCHjF3uwVki8E+iPq1w==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-arm64/-/simple-git-darwin-arm64-0.1.14.tgz", + "integrity": "sha512-f6+DqRnI+vFvnsAyw66mWhwl0vw1TOieHV07hvKbg4PU5j+RBI+lVqwY2L+IEAxDFlPirTWKKvGY1Lr7M/yi/A==", "cpu": [ "arm64" ], @@ -583,9 +583,9 @@ } }, "node_modules/@napi-rs/simple-git-darwin-x64": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-x64/-/simple-git-darwin-x64-0.1.11.tgz", - "integrity": "sha512-ufVuZxyJ3LpApk3V101X9qYNX91fnQ4isulz9lWjg90U7Xz0Cav4J3yyFZy6B/cJpYxuiy49R8wV1xDtTeGThA==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-darwin-x64/-/simple-git-darwin-x64-0.1.14.tgz", + "integrity": "sha512-x/EnwJdDWJAFay8TQt09byJoBlVZhPEaTAPmRR0fUPzWTjrr28bOy8UW1ysszd9ylBxlyIhuWjOHMHu9CBigTQ==", "cpu": [ "x64" ], @@ -598,9 +598,9 @@ } }, "node_modules/@napi-rs/simple-git-linux-arm-gnueabihf": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm-gnueabihf/-/simple-git-linux-arm-gnueabihf-0.1.11.tgz", - "integrity": "sha512-rFafW0Qc/j5we2ghUecB7mFzGcNDtJ5lTiB4I7kffNeL8pEi6Yi7kST8hylswcCowia65d45xsyeNp1mFlFwcg==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm-gnueabihf/-/simple-git-linux-arm-gnueabihf-0.1.14.tgz", + "integrity": "sha512-k0JZaXBl031gP5VOnoMa1I3lCHlBG7QvtunX5rxnRjx2kZ+JgUyT12s/qle/4xkJ0MnmfKTeiD7hs4Cc4Z3Tzw==", "cpu": [ "arm" ], @@ -613,9 +613,9 @@ } }, "node_modules/@napi-rs/simple-git-linux-arm64-gnu": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-gnu/-/simple-git-linux-arm64-gnu-0.1.11.tgz", - "integrity": "sha512-HZ4yaqpj/FQ3V9qNQrTGhtXb7pLAARXeRJrwoaGfz3eZ069y2bHReFcNR//5bsVhZ18JaS9EV47F8WjDxtpI5g==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-gnu/-/simple-git-linux-arm64-gnu-0.1.14.tgz", + "integrity": "sha512-CsmKP6tSIxau10ZKxV1Q1kem2QcJ/Qlov7pxp1Q7kMErcouW0H6vliVniewicaXRVDYV9wK18iD2t5GoJttwlA==", "cpu": [ "arm64" ], @@ -628,9 +628,9 @@ } }, "node_modules/@napi-rs/simple-git-linux-arm64-musl": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-musl/-/simple-git-linux-arm64-musl-0.1.11.tgz", - "integrity": "sha512-b39lJiC3n2+Y6Exjx6qwHoBF++D3k2hN4mZZkvQCFSdLXJ2xtalCatSRWW3pt+mHOHMOgbGektL5v5BYq52hxw==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-arm64-musl/-/simple-git-linux-arm64-musl-0.1.14.tgz", + "integrity": "sha512-krfEckZQ3myoHwmGmqY0aHBnqAzzV66+jFNLQEKaVMSGsXA2P+UcGo0coGzmB13rFRWC2eZpZRNB3MrfrStHkw==", "cpu": [ "arm64" ], @@ -643,9 +643,9 @@ } }, "node_modules/@napi-rs/simple-git-linux-x64-gnu": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-gnu/-/simple-git-linux-x64-gnu-0.1.11.tgz", - "integrity": "sha512-9EPFvY7PZg+oqWi6Jft5WgSsQtvy9Ey1g4NG+LG8y1RbvaNKthxKbR5zgx196pnFVdcLtsuIdOv/OaQlbcTXkw==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-gnu/-/simple-git-linux-x64-gnu-0.1.14.tgz", + "integrity": "sha512-4T2Q2QdO6t3OawkwdVmdqLz2EH8lfAw2cMT/zdjfTMfhNKjJgSg3kTgRnu/tf8TLCb+wu80fFvafwE0laB2VTQ==", "cpu": [ "x64" ], @@ -658,9 +658,9 @@ } }, "node_modules/@napi-rs/simple-git-linux-x64-musl": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-musl/-/simple-git-linux-x64-musl-0.1.11.tgz", - "integrity": "sha512-doIt1lPYIGL3UthlEQjdM9s1Wv0v8bz8LVAgbzJMS+UpVZzArwLWkanAJCy1HjgMTUMiE3AVJqACKIF3EfW/TQ==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-linux-x64-musl/-/simple-git-linux-x64-musl-0.1.14.tgz", + "integrity": "sha512-RaTGW8u+RXJbfRF4QN2Dcr5r5DrFh4wLjOvFeOy7sGX3Q9m3IKuw5AjRxTJqIw6xD/AAPKKNzOvPjrIF7728Lw==", "cpu": [ "x64" ], @@ -673,9 +673,9 @@ } }, "node_modules/@napi-rs/simple-git-win32-arm64-msvc": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-arm64-msvc/-/simple-git-win32-arm64-msvc-0.1.11.tgz", - "integrity": "sha512-TK3Uvj3Q72ebxfxDT/eLFt8sxCNHo20QMvqJ5BHt4zP1Y9Fl1DXSPRUKLBIhJd0nPcI45ZOMRiZyoT8joxAC9g==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-arm64-msvc/-/simple-git-win32-arm64-msvc-0.1.14.tgz", + "integrity": "sha512-kb9bKG9t79HJMuRMqbUJFLfWRf952O2Ea4VFwoRA2d/Uwtowm85Ol3JV9E6oeurguRLqdMLrUKyduCW6Hc9Jsg==", "cpu": [ "arm64" ], @@ -688,9 +688,9 @@ } }, "node_modules/@napi-rs/simple-git-win32-x64-msvc": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-x64-msvc/-/simple-git-win32-x64-msvc-0.1.11.tgz", - "integrity": "sha512-XOgP6kFDXGmB2KCXFQEsCq70n/Do2h7W9o7qZu8APAD+Sc8JGKz4hKG7PKY2ot924v9nIoKSYbHnupnhXSoXkg==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@napi-rs/simple-git-win32-x64-msvc/-/simple-git-win32-x64-msvc-0.1.14.tgz", + "integrity": "sha512-3835xy0e2gOaZ3SPt1pINBFSBBL3dOx3cChyAzQU0TnMU4Ye/YOh1qa5pO7BOJlCSnOh7iWt782blxCT0HH61w==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index 5ebe7eee1..670fef043 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "@clack/prompts": "^0.7.0", "@floating-ui/dom": "^1.5.3", - "@napi-rs/simple-git": "0.1.11", + "@napi-rs/simple-git": "0.1.14", "async-mutex": "^0.4.0", "chalk": "^5.3.0", "chokidar": "^3.5.3", From b8ddf53aa8b72286ee55373384447f862a52a91a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:41:33 -0800 Subject: [PATCH 11/65] chore(deps): bump rfdc from 1.3.0 to 1.3.1 (#759) Bumps [rfdc](https://github.com/davidmarkclements/rfdc) from 1.3.0 to 1.3.1. - [Commits](https://github.com/davidmarkclements/rfdc/compare/v1.3.0...v1.3.1) --- updated-dependencies: - dependency-name: rfdc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98e0b5257..04e764dc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,7 +51,7 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "remark-smartypants": "^2.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "rimraf": "^5.0.5", "serve-handler": "^6.1.5", "shikiji": "^0.10.2", @@ -5171,9 +5171,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" }, "node_modules/rimraf": { "version": "5.0.5", diff --git a/package.json b/package.json index 670fef043..ce156f4ec 100644 --- a/package.json +++ b/package.json @@ -76,7 +76,7 @@ "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "remark-smartypants": "^2.0.0", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "rimraf": "^5.0.5", "serve-handler": "^6.1.5", "shikiji": "^0.10.2", From 5f624edb38c9c95415537fcccb5df616a12ebe56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:41:51 -0800 Subject: [PATCH 12/65] chore(deps): bump remark-rehype from 11.0.0 to 11.1.0 (#758) Bumps [remark-rehype](https://github.com/remarkjs/remark-rehype) from 11.0.0 to 11.1.0. - [Release notes](https://github.com/remarkjs/remark-rehype/releases) - [Commits](https://github.com/remarkjs/remark-rehype/compare/11.0.0...11.1.0) --- updated-dependencies: - dependency-name: remark-rehype dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04e764dc1..1a115e250 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,7 +49,7 @@ "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", + "remark-rehype": "^11.1.0", "remark-smartypants": "^2.0.0", "rfdc": "^1.3.1", "rimraf": "^5.0.5", @@ -4854,9 +4854,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.0.0.tgz", - "integrity": "sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", diff --git a/package.json b/package.json index ce156f4ec..b1580751b 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", + "remark-rehype": "^11.1.0", "remark-smartypants": "^2.0.0", "rfdc": "^1.3.1", "rimraf": "^5.0.5", From fbb4d7e39928d7e4c7d6cdea3566e00f58f1a0b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 12:45:37 -0800 Subject: [PATCH 13/65] chore(deps): bump workerpool from 8.0.0 to 9.1.0 (#757) * chore(deps): bump workerpool from 8.0.0 to 9.1.0 Bumps [workerpool](https://github.com/josdejong/workerpool) from 8.0.0 to 9.1.0. - [Changelog](https://github.com/josdejong/workerpool/blob/master/HISTORY.md) - [Commits](https://github.com/josdejong/workerpool/compare/v8.0.0...v9.1.0) --- updated-dependencies: - dependency-name: workerpool dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * remove @types/workerpool --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jacky Zhao --- package-lock.json | 18 ++++-------------- package.json | 3 +-- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1a115e250..22dc37f1f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,7 @@ "unified": "^11.0.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "workerpool": "^8.0.0", + "workerpool": "^9.1.0", "ws": "^8.15.1", "yargs": "^17.7.2" }, @@ -76,7 +76,6 @@ "@types/node": "^20.1.2", "@types/pretty-time": "^1.1.5", "@types/source-map-support": "^0.5.10", - "@types/workerpool": "^6.4.7", "@types/ws": "^8.5.10", "@types/yargs": "^17.0.32", "esbuild": "^0.19.9", @@ -1114,15 +1113,6 @@ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, - "node_modules/@types/workerpool": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/@types/workerpool/-/workerpool-6.4.7.tgz", - "integrity": "sha512-DI2U4obcMzFViyNjLw0xXspim++qkAJ4BWRdYPVMMFtOpTvMr6PAk3UTZEoSqnZnvgUkJ3ck97Ybk+iIfuJHMg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -6069,9 +6059,9 @@ "integrity": "sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==" }, "node_modules/workerpool": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-8.0.0.tgz", - "integrity": "sha512-aoLtwqMXoYVA1JV+t8uCLo7sXkF4Q1Ijrn7954X2IVyysk2bv2Il7C9sVJH8xk9xJAL0FNgR+hPOhmvnMk/P5Q==" + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.1.0.tgz", + "integrity": "sha512-+wRWfm9yyJghvXLSHMQj3WXDxHbibHAQmRrWbqKBfy0RjftZNeQaW+Std5bSYc83ydkrxoPTPOWVlXUR9RWJdQ==" }, "node_modules/wrap-ansi": { "version": "8.1.0", diff --git a/package.json b/package.json index b1580751b..ff315a0d0 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "unified": "^11.0.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.1", - "workerpool": "^8.0.0", + "workerpool": "^9.1.0", "ws": "^8.15.1", "yargs": "^17.7.2" }, @@ -98,7 +98,6 @@ "@types/node": "^20.1.2", "@types/pretty-time": "^1.1.5", "@types/source-map-support": "^0.5.10", - "@types/workerpool": "^6.4.7", "@types/ws": "^8.5.10", "@types/yargs": "^17.0.32", "esbuild": "^0.19.9", From 9555407f65097cfb244d9994c605a7b98765a9a6 Mon Sep 17 00:00:00 2001 From: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Mon, 29 Jan 2024 19:26:47 -0500 Subject: [PATCH 14/65] fix(type): make sure dispatchEvent also accept UIEvent (#760) Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --- globals.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/globals.d.ts b/globals.d.ts index 4473d59eb..0509f2665 100644 --- a/globals.d.ts +++ b/globals.d.ts @@ -4,7 +4,7 @@ export declare global { type: K, listener: (this: Document, ev: CustomEventMap[K]) => void, ): void - dispatchEvent(ev: CustomEventMap[K]): void + dispatchEvent(ev: CustomEventMap[K] | UIEvent): void } interface Window { spaNavigate(url: URL, isBack: boolean = false) From 37c6231e79d197f4d51db86e2760283f316ed191 Mon Sep 17 00:00:00 2001 From: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:51:13 -0500 Subject: [PATCH 15/65] fix(div): update class name to remove weird space afterwards (#763) Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --- quartz/components/ArticleTitle.tsx | 3 ++- quartz/components/Backlinks.tsx | 3 ++- quartz/components/Breadcrumbs.tsx | 3 ++- quartz/components/ContentMeta.tsx | 3 ++- quartz/components/Darkmode.tsx | 3 ++- quartz/components/Explorer.tsx | 3 ++- quartz/components/Graph.tsx | 3 ++- quartz/components/PageTitle.tsx | 3 ++- quartz/components/RecentNotes.tsx | 3 ++- quartz/components/Search.tsx | 3 ++- quartz/components/Spacer.tsx | 3 ++- quartz/components/TableOfContents.tsx | 3 ++- quartz/components/TagList.tsx | 3 ++- quartz/util/lang.ts | 10 ++++++++++ 14 files changed, 36 insertions(+), 13 deletions(-) diff --git a/quartz/components/ArticleTitle.tsx b/quartz/components/ArticleTitle.tsx index a52b2a466..2484c946a 100644 --- a/quartz/components/ArticleTitle.tsx +++ b/quartz/components/ArticleTitle.tsx @@ -1,9 +1,10 @@ import { QuartzComponentConstructor, QuartzComponentProps } from "./types" +import { classNames } from "../util/lang" function ArticleTitle({ fileData, displayClass }: QuartzComponentProps) { const title = fileData.frontmatter?.title if (title) { - return

      {title}

      + return

      {title}

      } else { return null } diff --git a/quartz/components/Backlinks.tsx b/quartz/components/Backlinks.tsx index c4172ce24..d5bdc0b95 100644 --- a/quartz/components/Backlinks.tsx +++ b/quartz/components/Backlinks.tsx @@ -1,12 +1,13 @@ import { QuartzComponentConstructor, QuartzComponentProps } from "./types" import style from "./styles/backlinks.scss" import { resolveRelative, simplifySlug } from "../util/path" +import { classNames } from "../util/lang" function Backlinks({ fileData, allFiles, displayClass }: QuartzComponentProps) { const slug = simplifySlug(fileData.slug!) const backlinkFiles = allFiles.filter((file) => file.links?.includes(slug)) return ( -