mirror of
				https://github.com/jackyzha0/quartz.git
				synced 2025-11-04 09:59:52 +01:00 
			
		
		
		
	Compare commits
	
		
			No commits in common. "457b77dd485f08616bd597492cdc26ed89ae92d3" and "9316ddf2f5ca7d0a08b06a9a6d548e9ad180fc4f" have entirely different histories.
		
	
	
		
			457b77dd48
			...
			9316ddf2f5
		
	
		
@ -62,7 +62,7 @@ The following properties can be used to customize your link previews:
 | 
			
		||||
| `socialDescription` | `description`    | Description to be used for preview. |
 | 
			
		||||
| `socialImage`       | `image`, `cover` | Link to preview image.              |
 | 
			
		||||
 | 
			
		||||
The `socialImage` property should contain a link to an image either relative to `quartz/static`, or a full URL. If you have a folder for all your images in `quartz/static/my-images`, an example for `socialImage` could be `"my-images/cover.png"`. Alternatively, you can use a fully qualified URL like `"https://example.com/cover.png"`.
 | 
			
		||||
The `socialImage` property should contain a link to an image relative to `quartz/static`. If you have a folder for all your images in `quartz/static/my-images`, an example for `socialImage` could be `"my-images/cover.png"`.
 | 
			
		||||
 | 
			
		||||
> [!info] Info
 | 
			
		||||
>
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { QuartzEmitterPlugin } from "../types"
 | 
			
		||||
import { i18n } from "../../i18n"
 | 
			
		||||
import { unescapeHTML } from "../../util/escape"
 | 
			
		||||
import { FullSlug, getFileExtension, isAbsoluteURL, joinSegments, QUARTZ } from "../../util/path"
 | 
			
		||||
import { FullSlug, getFileExtension, joinSegments, QUARTZ } from "../../util/path"
 | 
			
		||||
import { ImageOptions, SocialImageOptions, defaultImage, getSatoriFonts } from "../../util/og"
 | 
			
		||||
import sharp from "sharp"
 | 
			
		||||
import satori, { SatoriOptions } from "satori"
 | 
			
		||||
@ -144,19 +144,13 @@ export const CustomOgImages: QuartzEmitterPlugin<Partial<SocialImageOptions>> =
 | 
			
		||||
        additionalHead: [
 | 
			
		||||
          (pageData) => {
 | 
			
		||||
            const isRealFile = pageData.filePath !== undefined
 | 
			
		||||
            let userDefinedOgImagePath = pageData.frontmatter?.socialImage
 | 
			
		||||
 | 
			
		||||
            if (userDefinedOgImagePath) {
 | 
			
		||||
              userDefinedOgImagePath = isAbsoluteURL(userDefinedOgImagePath)
 | 
			
		||||
                ? userDefinedOgImagePath
 | 
			
		||||
                : `https://${baseUrl}/static/${userDefinedOgImagePath}`
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            const userDefinedOgImagePath = pageData.frontmatter?.socialImage
 | 
			
		||||
            const generatedOgImagePath = isRealFile
 | 
			
		||||
              ? `https://${baseUrl}/${pageData.slug!}-og-image.webp`
 | 
			
		||||
              : undefined
 | 
			
		||||
            const defaultOgImagePath = `https://${baseUrl}/static/og-image.png`
 | 
			
		||||
            const ogImagePath = userDefinedOgImagePath ?? generatedOgImagePath ?? defaultOgImagePath
 | 
			
		||||
 | 
			
		||||
            const ogImageMimeType = `image/${getFileExtension(ogImagePath) ?? "png"}`
 | 
			
		||||
            return (
 | 
			
		||||
              <>
 | 
			
		||||
 | 
			
		||||
@ -114,10 +114,6 @@ export const FrontMatter: QuartzTransformerPlugin<Partial<Options>> = (userOpts)
 | 
			
		||||
 | 
			
		||||
            if (socialImage) data.socialImage = socialImage
 | 
			
		||||
 | 
			
		||||
            // Remove duplicate slugs
 | 
			
		||||
            const uniqueSlugs = [...new Set(allSlugs)]
 | 
			
		||||
            allSlugs.splice(0, allSlugs.length, ...uniqueSlugs)
 | 
			
		||||
 | 
			
		||||
            // fill in frontmatter
 | 
			
		||||
            file.data.frontmatter = data as QuartzPluginData["frontmatter"]
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
@ -38,17 +38,6 @@ describe("typeguards", () => {
 | 
			
		||||
    assert(!path.isRelativeURL("./abc/def.md"))
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  test("isAbsoluteURL", () => {
 | 
			
		||||
    assert(path.isAbsoluteURL("https://example.com"))
 | 
			
		||||
    assert(path.isAbsoluteURL("http://example.com"))
 | 
			
		||||
    assert(path.isAbsoluteURL("ftp://example.com/a/b/c"))
 | 
			
		||||
    assert(path.isAbsoluteURL("http://host/%25"))
 | 
			
		||||
    assert(path.isAbsoluteURL("file://host/twoslashes?more//slashes"))
 | 
			
		||||
 | 
			
		||||
    assert(!path.isAbsoluteURL("example.com/abc/def"))
 | 
			
		||||
    assert(!path.isAbsoluteURL("abc"))
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  test("isFullSlug", () => {
 | 
			
		||||
    assert(path.isFullSlug("index"))
 | 
			
		||||
    assert(path.isFullSlug("abc/def"))
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
import { slug as slugAnchor } from "github-slugger"
 | 
			
		||||
import type { Element as HastElement } from "hast"
 | 
			
		||||
import { clone } from "./clone"
 | 
			
		||||
 | 
			
		||||
// this file must be isomorphic so it can't use node libs (e.g. path)
 | 
			
		||||
 | 
			
		||||
export const QUARTZ = "quartz"
 | 
			
		||||
@ -40,15 +39,6 @@ export function isRelativeURL(s: string): s is RelativeURL {
 | 
			
		||||
  return validStart && validEnding && ![".md", ".html"].includes(getFileExtension(s) ?? "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function isAbsoluteURL(s: string): boolean {
 | 
			
		||||
  try {
 | 
			
		||||
    new URL(s)
 | 
			
		||||
  } catch {
 | 
			
		||||
    return false
 | 
			
		||||
  }
 | 
			
		||||
  return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function getFullSlug(window: Window): FullSlug {
 | 
			
		||||
  const res = window.document.body.dataset.slug! as FullSlug
 | 
			
		||||
  return res
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user