dalfuss.net/quartz/components/Head.tsx

53 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

import { i18n } from "../i18n"
import { FullSlug, joinSegments, pathToRoot } from "../util/path"
2024-11-16 22:07:50 +00:00
import { JSResourceToScriptElement } from "../util/resources"
import { googleFontHref } from "../util/theme"
import { QuartzComponent, QuartzComponentConstructor, QuartzComponentProps } from "./types"
2023-05-30 15:02:20 +00:00
2023-07-02 20:08:29 +00:00
export default (() => {
2024-11-16 22:07:50 +00:00
const Head: QuartzComponent = ({ cfg, fileData, externalResources }: QuartzComponentProps) => {
const title = fileData.frontmatter?.title ?? i18n(cfg.locale).propertyDefaults.title
const description =
feat(open-graph): generate OG images + further OG support (#740) * Quartz sync: Aug 29, 2023, 10:17 PM * feat: add basic satori og image generation * Squashed commit of the following: commit fa69c2a5656254251b74dbd5545bef000f67af2f Author: Ben Schlegel <31989404+benschlegel@users.noreply.github.com> Date: Thu Sep 21 19:35:11 2023 +0200 fix(explorer): increase consistency, explicitly use font-family (#496) * fix(explorer): display name for folders without `index` file * docs(explorer): add section for folder display names * docs(explorer): fix broken wikilink * fix(consistency): explicitly set font + label/link fix Use consistent styling between folders with `folderClickBehavior: "link"` and `"collapse` * Update quartz/components/styles/explorer.scss Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * Update quartz/components/styles/explorer.scss Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> --------- Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> commit 8eb1554b13532a2441b41d2018800c56cfa84ce9 Author: Ben Schlegel <31989404+benschlegel@users.noreply.github.com> Date: Thu Sep 21 18:54:33 2023 +0200 fix(explorer): display names for folders without frontmatter (#494) * fix(explorer): display name for folders without `index` file * docs(explorer): add section for folder display names commit dcdeae4e7bd527945b887ca347b3b4408c03055b Author: Ben Schlegel <31989404+benschlegel@users.noreply.github.com> Date: Thu Sep 21 18:53:19 2023 +0200 docs(explorer): update default config + new example (#493) commit 48452231d5fcd14ef218928bde9ae7e5bc745f4a Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 16:09:18 2023 -0700 perf: memoize filetree computation (#490) * perf: memoize filetree computation * format * var -> let commit 16d33fb77193710bede887d6a177d2144b78fb67 Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 16:08:54 2023 -0700 feat: display name for folders, expand explorer a little bit (#489) * feat: display name for folders, expand explorer a little bit * update docs commit b029eeadabe0877df6ec11443c68743f1494bc40 Author: Ben Schlegel <31989404+benschlegel@users.noreply.github.com> Date: Wed Sep 20 22:55:29 2023 +0200 feat(explorer): improve accessibility and consistency (+ bug fix) (#488) * feat(consistency): use `all: unset` on button * style: improve accessibility and consistency for explorer * fix: localStorage bug with folder name changes * chore: bump quartz version commit 6a9e6352e88aa9ff18e5b33cf2de442a250bd960 Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 13:52:45 2023 -0700 Revert "feat: Making Quartz available offline by making it a PWA (#465)" This reverts commit d6301fae90d9f922618bf0f413e273156731eef7. commit 70e029d151ccbb9aeab30a0f811b9f529b7f8818 Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 13:52:29 2023 -0700 Revert "docs: wording changes for offline support" This reverts commit 52a172d1a4911080444ff797183e29ba8175741e. commit 0bad3ce7990aa4ef417128f9d74c2947fe5117fd Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 11:58:52 2023 -0700 docs: document enableToc commit 52a172d1a4911080444ff797183e29ba8175741e Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Wed Sep 20 11:40:36 2023 -0700 docs: wording changes for offline support commit d6301fae90d9f922618bf0f413e273156731eef7 Author: Adam Brangenberg <adambrangenberg@proton.me> Date: Wed Sep 20 20:38:13 2023 +0200 feat: Making Quartz available offline by making it a PWA (#465) * Adding PWA and chaching for offline aviability * renamed workbox config to fit Quartz' scheme * Documenting new configuration * Added missig umami documentation * Fixed formatting so the build passes, thank you prettier :) * specified caching strategies to improve performance * formatting... * fixing "404 manifest.json not found" on subdirectories by adding a / to manifestpath * turning it into a plugin * Removed Workbox-cli and updated @types/node * Added Serviceworkercode to offline.ts * formatting * Removing workbox from docs * applied suggestions * Removed path.join for sw path Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * Removed path.join for manifest path Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * Removing path module import * Added absolute path to manifests start_url and manifest "import" using baseUrl * Adding protocol to baseurl Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * Adding protocol to start_url too then * formatting... * Adding fallback page * Documenting offline plugin * formatting... * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * merge suggestion Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * formatting... * Fixing manifest path, all these nits hiding the actual issues .-. * Offline fallback page through plugins, most things taken from 404 Plugin * adding Offline Plugin to config * formatting... * Turned offline off as default and removed offline.md --------- Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> commit 27a6087dd5a25dd5031b86b9917adde6ef4b211a Author: rwutscher <richard.wutscher@gmail.com> Date: Tue Sep 19 21:26:30 2023 +0200 fix: tag regex no longer includes purely numerical 'tags' (#485) * fix: tag regex no longer includes purely numerical 'tags' * fix: formatting * fix: use guard in findAndReplace() instead of expanding the regex commit 1bf7e3d8b3966590ebfa3418d6fb2ce6a520c846 Author: Jacky Zhao <j.zhao2k19@gmail.com> Date: Tue Sep 19 10:22:39 2023 -0700 fix(nit): make defaultOptions on explorer not a function commit cc31a40b0cb53cba7f51187cb6d68076c3f54c0f Author: David Fischer <david@konst.fish> Date: Tue Sep 19 18:25:51 2023 +0200 feat: support changes in system theme (#484) * feat: support changes in system theme * fix: run prettier * fix: add content/.gitkeep commit 0d3cf2922618774fc397dca8cb92fcf76fb0db02 Author: Ben Schlegel <31989404+benschlegel@users.noreply.github.com> Date: Mon Sep 18 23:32:00 2023 +0200 docs: fix explorer example (#483) * feat: dynamically generate og images, write to fs as png * fix: og preview on discord * feat: use `sharp` to convert to webp, add content headers * feat: add config for theme (light or dark) * feat: improve image margins, add font breakpoint * feat: use config header + body fonts for satori * perf: memoize fonts * feat: use default og image if no path exists * feat: add config option for social images * feat: support custom og images via frontmatter * refactor: clean font helpers, rename fonts helper * refactor: make image generation cleaner * refactor: move default image to own component * chore: add todos * fix: only set width/height header if known * feat: remove html from description * feat: make image dimensions configurable * feat: pass userOpts to image generator * feat: option for users to provide own image struct (satori) This allows users to pass their own jsx for generating the default og image * refactor: rename `defaultImage.tsx` > `socialImage.tsx` * chore: improve comments + types * refactor: rename socialImage frontmatter property * feat: add frontmatter aliases for cover image * feat: add frontmatter alias for obsidian publish * docs: add documentation for social images * feat: add `generateSocialImages` prop to config * chore: update lock file * fix: fix type error * chore: update package.json * chore: update package-lock.json * docs: update docs Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * fix: clean url for use in metadata * refactor: clean function signature * feat: pass `fileData` to image generator * CI: run format * fix: file system import * fix: merge paths using `joinSegments` * fix: get output dir via `ctx.argv.output` * chore: add explanation to font regex * Squashed commit of the following: commit 7164857f6e32aeba3da80112d604244aa8f557f4 Author: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Fri Mar 15 21:17:42 2024 -0400 chore(ofm): remove unused (#999) Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> commit 47024022e834e1bb6c70f671cb32597f42aabd94 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri Mar 15 18:29:14 2024 -0400 chore(deps-dev): bump @types/node from 20.11.24 to 20.11.25 (#990) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.11.24 to 20.11.25. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit b98e4be66548e452419a1e4138d9d6d1981f891e Author: Mara-Li <lili.simonetti@outlook.fr> Date: Fri Mar 15 23:28:31 2024 +0100 feat(i18n): Add French translation for reading time (#998) Signed-off-by: Mara-Li <lili.simonetti@outlook.fr> commit 8be51a0504a7d819a9dab66d854dbef77878520a Author: catcodeme <1020082805@qq.com> Date: Fri Mar 15 14:25:01 2024 +0800 fix: wikiLink in table (#993) * fix: wikiLink in table - update regexp to make '\' to group in alias - handle alias using block_id * style: format with prettier * style: add comment for block_ref(without alias) in table --------- Co-authored-by: hulinjiang <hulinjiang@58.com> commit 92cc23dc456ffc23285b83728fbc3434bbca5472 Author: Linus Sehn <37184648+linozen@users.noreply.github.com> Date: Wed Mar 13 08:59:37 2024 +0100 feat(plugin): citations (#984) * feat: add rehype-citations * feat: add citations transformer plugin * feat: add rehype-rewrite * feat: add csl option and add no-popover to citation links * revert: add rehype-rewrite 04b2692 'feat: add rehype-rewrite' * feat: use existing package for html manipulation * fix: remove `console.log()` commit 097abc3cda0d9a6f3cfedfa3c6351648efd8d6b8 Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Mar 11 13:41:48 2024 -0700 chore(deps): bump async-mutex from 0.4.1 to 0.5.0 (#991) Bumps [async-mutex](https://github.com/DirtyHairy/async-mutex) from 0.4.1 to 0.5.0. - [Changelog](https://github.com/DirtyHairy/async-mutex/blob/master/CHANGELOG.md) - [Commits](https://github.com/DirtyHairy/async-mutex/compare/v0.4.1...v0.5.0) --- updated-dependencies: - dependency-name: async-mutex dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit a00324ddfdea9adf6aaec03abf4f076cb756ee7a Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon Mar 11 13:41:41 2024 -0700 chore(deps-dev): bump typescript from 5.3.3 to 5.4.2 (#989) Bumps [typescript](https://github.com/Microsoft/TypeScript) from 5.3.3 to 5.4.2. - [Release notes](https://github.com/Microsoft/TypeScript/releases) - [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml) - [Commits](https://github.com/Microsoft/TypeScript/compare/v5.3.3...v5.4.2) --- updated-dependencies: - dependency-name: typescript dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> commit 9fff6d7d0dbaacad0f9988d4017b72738e6f6c58 Author: Mara-Li <lili.simonetti@outlook.fr> Date: Mon Mar 11 17:46:53 2024 +0100 fix: spelling error (#987) I really don't know why I translated this like that into "pas trouvé", and it bugged me a lot. I finally fixed it… Signed-off-by: Mara-Li <lili.simonetti@outlook.fr> commit 0f5a9d7b661a1f8610d7001f80a3fd2c52661e51 Author: Matt Vogel <mainmoniker@googlemail.com> Date: Sun Mar 10 12:57:10 2024 -0400 feat: separated content meta (#929) to allow for CSS styling commit b4236e5142c31829cf809c0fbc8370ac22b6d1ba Author: kabirgh <15871468+kabirgh@users.noreply.github.com> Date: Sun Mar 10 00:42:23 2024 +0000 feat(perf:fast-rebuilds): Stop mutating resources param in ComponentResources emitter (#977) * Stop mutating resources param in ComponentResources emitter * Add done rebuilding log for fast rebuilds * Move google font loading to Head component * Simplify code and fix comment commit 6e0c10297095a918109a058762beb47efc384a21 Author: Emile Bangma <ewjbangma@hotmail.com> Date: Sun Mar 10 01:14:31 2024 +0100 fix(transclusion): prevent duplicate transclusion if multiple transclusions are present. (#982) commit 94a54698ab7f29a609ca90033c1384a7ec5f5e65 Author: Emile Bangma <ewjbangma@hotmail.com> Date: Sat Mar 9 17:59:55 2024 +0100 fix(resources): Use full path to font when cdnCache is false (#976) commit 2e9a0c21db717c324a74f761fb0910b1218fdd72 Author: Emile Bangma <ewjbangma@hotmail.com> Date: Sat Mar 9 17:43:40 2024 +0100 fix(description): first sentence no longer repeats until max length (#981) commit b30a200bd4ddc64f4fd3d2124fcda0b354847073 Author: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Fri Mar 8 12:14:22 2024 -0500 fix(i18n): make sure to use correct fileData for manual localization (#975) Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> commit 6d59aa8201a1fd3abea32ef36206af6471d85435 Author: Emile Bangma <ewjbangma@hotmail.com> Date: Fri Mar 8 10:04:44 2024 +0100 fix(description): counts characters instead of words (#972) * fix(description): make sure description counts characters instead of words * ref: removed duplicate ternary * CI: fix package log post merge * CI: fix more merge artifacts * CI: fix package-lock.json * feat: add new default image template * feat: use icon.png for image generation * chore: update satori and sharp version * feat(image-generator): add new default template * Update quartz/components/Head.tsx * Update quartz/components/Head.tsx * Update quartz/components/Head.tsx * Update docs/features/social images.md * Update quartz/components/Head.tsx Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> * feat(og-image): add config option to use default og image for root path * docs(og-image): add `excludeRoot` config + update preview images * docs(open-graph): add examples section * chore: remove unused `socialImage2.tsx` component * feat(open-graph): add frontmatter aliases for socialImage/cover/image * fix(open-graph): only load satori font if config option is enabled * refactor(open-graph): dont use async promise inside `fetchTtf()` * chore: renaming and finished copywriting Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * chore: update typo Signed-off-by: Aaron Pham <contact@aarnphm.xyz> * chore: update hinting for socialImage Signed-off-by: Aaron Pham <contact@aarnphm.xyz> --------- Signed-off-by: Aaron Pham <contact@aarnphm.xyz> Co-authored-by: Jacky Zhao <j.zhao2k19@gmail.com> Co-authored-by: Emile Bangma <ewjbangma@hotmail.com> Co-authored-by: Emile Bangma <github@emilebangma.com> Co-authored-by: Aaron Pham <contact@aarnphm.xyz>
2024-11-12 12:33:35 +00:00
fileData.description?.trim() ?? i18n(cfg.locale).propertyDefaults.description
2023-06-18 17:47:07 +00:00
const { css, js } = externalResources
const url = new URL(`https://${cfg.baseUrl ?? "example.com"}`)
const path = url.pathname as FullSlug
const baseDir = fileData.slug === "404" ? path : pathToRoot(fileData.slug!)
2024-11-16 22:07:50 +00:00
const iconPath = joinSegments(baseDir, "static/favicon.ico")
const ogImagePath = joinSegments(baseDir, "static/ogimage.ico")
2023-06-18 17:47:07 +00:00
2023-07-23 00:27:41 +00:00
return (
<head>
<title>{title}</title>
<meta charSet="utf-8" />
{cfg.theme.cdnCaching && cfg.theme.fontOrigin === "googleFonts" && (
<>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" />
<link rel="stylesheet" href={googleFontHref(cfg.theme)} />
</>
)}
2023-07-23 18:02:45 +00:00
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
2023-07-23 00:27:41 +00:00
<meta property="og:title" content={title} />
2023-08-09 03:36:24 +00:00
<meta property="og:description" content={description} />
2024-11-16 22:07:50 +00:00
{cfg.baseUrl && <meta property="og:image" content={ogImagePath} />}
<meta property="og:width" content="1200" />
<meta property="og:height" content="675" />
2023-07-23 00:27:41 +00:00
<link rel="icon" href={iconPath} />
<meta name="description" content={description} />
<meta name="generator" content="Quartz" />
2024-11-16 22:07:50 +00:00
{css.map((href) => (
<link key={href} href={href} rel="stylesheet" type="text/css" spa-preserve />
))}
2023-07-23 00:27:41 +00:00
{js
.filter((resource) => resource.loadTime === "beforeDOMReady")
.map((res) => JSResourceToScriptElement(res, true))}
</head>
)
2023-06-18 17:47:07 +00:00
}
return Head
}) satisfies QuartzComponentConstructor