From c0278a8c65d74441a6237e0a90c08f8b7b263d95 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Tue, 25 Jul 2023 04:54:47 +0000
Subject: [PATCH] font loading options, optimize css
---
quartz/plugins/emitters/componentResources.ts | 94 ++++++++++++++++++++++++++++++-----------------
1 files changed, 60 insertions(+), 34 deletions(-)
diff --git a/quartz/plugins/emitters/componentResources.ts b/quartz/plugins/emitters/componentResources.ts
index bc1d4ab..72a8841 100644
--- a/quartz/plugins/emitters/componentResources.ts
+++ b/quartz/plugins/emitters/componentResources.ts
@@ -1,5 +1,5 @@
import { FilePath, ServerSlug } from "../../path"
-import { PluginTypes, QuartzEmitterPlugin } from "../types"
+import { QuartzEmitterPlugin } from "../types"
// @ts-ignore
import spaRouterScript from "../../components/scripts/spa.inline"
@@ -13,6 +13,7 @@
import { StaticResources } from "../../resources"
import { QuartzComponent } from "../../components/types"
import { googleFontHref, joinStyles } from "../../theme"
+import { transform } from "lightningcss"
type ComponentResources = {
css: string[]
@@ -67,7 +68,6 @@
) {
const cfg = ctx.cfg.configuration
const reloadScript = ctx.argv.serve
- staticResources.css.push(googleFontHref(cfg.theme))
// popovers
if (cfg.enablePopovers) {
@@ -120,35 +120,61 @@
}
}
-export const ComponentResources: QuartzEmitterPlugin = () => ({
- name: "ComponentResources",
- getQuartzComponents() {
- return []
- },
- async emit(ctx, _content, resources, emit): Promise<FilePath[]> {
- // component specific scripts and styles
- const componentResources = getComponentResources(ctx)
- // important that this goes *after* component scripts
- // as the "nav" event gets triggered here and we should make sure
- // that everyone else had the chance to register a listener for it
- addGlobalPageResources(ctx, resources, componentResources)
- const fps = await Promise.all([
- emit({
- slug: "index" as ServerSlug,
- ext: ".css",
- content: joinStyles(ctx.cfg.configuration.theme, styles, ...componentResources.css),
- }),
- emit({
- slug: "prescript" as ServerSlug,
- ext: ".js",
- content: joinScripts(componentResources.beforeDOMLoaded),
- }),
- emit({
- slug: "postscript" as ServerSlug,
- ext: ".js",
- content: joinScripts(componentResources.afterDOMLoaded),
- }),
- ])
- return fps
- },
-})
+interface Options {
+ fontOrigin: "googleFonts" | "local"
+}
+
+const defaultOptions: Options = {
+ fontOrigin: "googleFonts",
+}
+
+export const ComponentResources: QuartzEmitterPlugin<Options> = (opts?: Partial<Options>) => {
+ const { fontOrigin } = { ...defaultOptions, ...opts }
+ return {
+ name: "ComponentResources",
+ getQuartzComponents() {
+ return []
+ },
+ async emit(ctx, _content, resources, emit): Promise<FilePath[]> {
+ // component specific scripts and styles
+ const componentResources = getComponentResources(ctx)
+ // important that this goes *after* component scripts
+ // as the "nav" event gets triggered here and we should make sure
+ // that everyone else had the chance to register a listener for it
+
+ if (fontOrigin === "googleFonts") {
+ resources.css.push(googleFontHref(ctx.cfg.configuration.theme))
+ } else if (fontOrigin === "local") {
+ // let the user do it themselves in css
+ }
+
+ addGlobalPageResources(ctx, resources, componentResources)
+
+ const stylesheet = joinStyles(ctx.cfg.configuration.theme, styles, ...componentResources.css)
+ const prescript = joinScripts(componentResources.beforeDOMLoaded)
+ const postscript = joinScripts(componentResources.afterDOMLoaded)
+ const fps = await Promise.all([
+ emit({
+ slug: "index" as ServerSlug,
+ ext: ".css",
+ content: transform({
+ filename: "index.css",
+ code: Buffer.from(stylesheet),
+ minify: true
+ }).code.toString(),
+ }),
+ emit({
+ slug: "prescript" as ServerSlug,
+ ext: ".js",
+ content: prescript,
+ }),
+ emit({
+ slug: "postscript" as ServerSlug,
+ ext: ".js",
+ content: postscript,
+ }),
+ ])
+ return fps
+ },
+ }
+}
--
Gitblit v1.10.0