feat: update README and package.json for version 0.3.0; add titleFormat option to GemtextConfig
This commit is contained in:
@@ -9,6 +9,11 @@ export interface GemtextConfig {
|
||||
/** Absolute import path to the layout to use for all gemtext pages.
|
||||
* If not provided, HMR and the Astro toolbar will not work. (default: none) */
|
||||
layout?: string
|
||||
/** The format to use for the page title. Can be one of:
|
||||
* - `first-heading`: The first heading in the document will be used as the title. (default)
|
||||
* - `filename`: The filename of the document will be used as the title.
|
||||
*/
|
||||
titleFormat?: "first-heading" | "filename"
|
||||
}
|
||||
|
||||
type SetupHookParams = HookParameters<"astro:config:setup"> & {
|
||||
|
||||
+13
-1
@@ -5,6 +5,18 @@ import {ext, type GemtextConfig} from "./index.js"
|
||||
|
||||
function transform(code: string, id: string, config: GemtextConfig) {
|
||||
const result = parse(code)
|
||||
let title
|
||||
|
||||
if (config.titleFormat === "first-heading") {
|
||||
for (const node of result.data) {
|
||||
if (node._ === 4) {
|
||||
title = node.text
|
||||
break
|
||||
}
|
||||
}
|
||||
} else if (config.titleFormat === "filename") {
|
||||
title = pathToFileURL(id).pathname.split("/").pop()
|
||||
}
|
||||
const html = result.generate(HTMLRenderer)
|
||||
return `
|
||||
import {
|
||||
@@ -28,7 +40,7 @@ export function getHeadings() {
|
||||
}
|
||||
export async function Content() {
|
||||
const content = h(Fragment, {"set:html": html});
|
||||
${config.layout && `return h(Layout, {title: url, children: content});`}
|
||||
${config.layout && `return h(Layout, {title: ${JSON.stringify(title)}}, content);`}
|
||||
${!config.layout && `return content;`}
|
||||
}
|
||||
export default Content;
|
||||
|
||||
Reference in New Issue
Block a user