| | |
| | | import { FilePath, FullSlug, joinSegments } from "../../util/path" |
| | | import { FullSlug, joinSegments } from "../../util/path" |
| | | import { QuartzEmitterPlugin } from "../types" |
| | | |
| | | // @ts-ignore |
| | |
| | | import { Features, transform } from "lightningcss" |
| | | import { transform as transpile } from "esbuild" |
| | | import { write } from "./helpers" |
| | | import DepGraph from "../../depgraph" |
| | | |
| | | type ComponentResources = { |
| | | css: string[] |
| | |
| | | componentResources.afterDOMLoaded.push(` |
| | | const gtagScript = document.createElement("script") |
| | | gtagScript.src = "https://www.googletagmanager.com/gtag/js?id=${tagId}" |
| | | gtagScript.async = true |
| | | gtagScript.defer = true |
| | | document.head.appendChild(gtagScript) |
| | | |
| | | window.dataLayer = window.dataLayer || []; |
| | |
| | | umamiScript.src = "${cfg.analytics.host ?? "https://analytics.umami.is"}/script.js" |
| | | umamiScript.setAttribute("data-website-id", "${cfg.analytics.websiteId}") |
| | | umamiScript.setAttribute("data-auto-track", "false") |
| | | umamiScript.async = true |
| | | umamiScript.defer = true |
| | | document.head.appendChild(umamiScript) |
| | | |
| | | document.addEventListener("nav", () => { |
| | |
| | | componentResources.afterDOMLoaded.push(` |
| | | const goatcounterScript = document.createElement("script") |
| | | goatcounterScript.src = "${cfg.analytics.scriptSrc ?? "https://gc.zgo.at/count.js"}" |
| | | goatcounterScript.async = true |
| | | goatcounterScript.defer = true |
| | | goatcounterScript.setAttribute("data-goatcounter", |
| | | "https://${cfg.analytics.websiteId}.${cfg.analytics.host ?? "goatcounter.com"}/count") |
| | | document.head.appendChild(goatcounterScript) |
| | |
| | | const cabinScript = document.createElement("script") |
| | | cabinScript.src = "${cfg.analytics.host ?? "https://scripts.withcabin.com"}/hello.js" |
| | | cabinScript.defer = true |
| | | cabinScript.async = true |
| | | document.head.appendChild(cabinScript) |
| | | `) |
| | | } else if (cfg.analytics?.provider === "clarity") { |
| | | componentResources.afterDOMLoaded.push(` |
| | | const clarityScript = document.createElement("script") |
| | | clarityScript.innerHTML= \`(function(c,l,a,r,i,t,y){c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; |
| | | t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; |
| | | t=l.createElement(r);t.defer=1;t.src="https://www.clarity.ms/tag/"+i; |
| | | y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); |
| | | })(window, document, "clarity", "script", "${cfg.analytics.projectId}");\` |
| | | document.head.appendChild(clarityScript) |
| | |
| | | export const ComponentResources: QuartzEmitterPlugin = () => { |
| | | return { |
| | | name: "ComponentResources", |
| | | async getDependencyGraph(_ctx, _content, _resources) { |
| | | return new DepGraph<FilePath>() |
| | | }, |
| | | async *emit(ctx, _content, _resources) { |
| | | const cfg = ctx.cfg.configuration |
| | | // component specific scripts and styles |
| | |
| | | for (const fontFile of fontFiles) { |
| | | const res = await fetch(fontFile.url) |
| | | if (!res.ok) { |
| | | throw new Error(`failed to fetch font ${fontFile.filename}`) |
| | | throw new Error(`Failed to fetch font ${fontFile.filename}`) |
| | | } |
| | | |
| | | const buf = await res.arrayBuffer() |
| | |
| | | }, |
| | | include: Features.MediaQueries, |
| | | }).code.toString(), |
| | | }), |
| | | yield write({ |
| | | ctx, |
| | | slug: "prescript" as FullSlug, |
| | | ext: ".js", |
| | | content: prescript, |
| | | }), |
| | | yield write({ |
| | | ctx, |
| | | slug: "postscript" as FullSlug, |
| | | ext: ".js", |
| | | content: postscript, |
| | | }) |
| | | }) |
| | | |
| | | yield write({ |
| | | ctx, |
| | | slug: "prescript" as FullSlug, |
| | | ext: ".js", |
| | | content: prescript, |
| | | }) |
| | | |
| | | yield write({ |
| | | ctx, |
| | | slug: "postscript" as FullSlug, |
| | | ext: ".js", |
| | | content: postscript, |
| | | }) |
| | | }, |
| | | async *partialEmit() {}, |
| | | } |
| | | } |