]> Lady’s Gitweb - Beorn/blobdiff - README.markdown
Support hooks for transforming build script output
[Beorn] / README.markdown
index 6cce62f773505b9381c3ea3442189fb75714aa07..6a72afb3e0e4eb075caface925e73317c5948d1a 100644 (file)
@@ -58,6 +58,9 @@ probably look something like this :—
 </awol:Feed>
 ```
 
+The value of `rdf:about` on the root element needs to be the absolute
+U·R·L for your blog.
+
 Your `entry.rdf` will look similar, but it needs a `sioc:content`
 property :—
 
@@ -78,6 +81,9 @@ I love it!
 </awol:Entry>
 ```
 
+In this case, the `rdf:about` can be automatically filled in based on
+the path to the entry from the blog root.
+
 As you can see from the above example, 🧸📔 Bjørn supports a
 (nonstandard) `Markdown` value for `rdf:parseType` in addition to
 `Literal`. Some words of caution regarding this :—
@@ -96,7 +102,69 @@ Alongside the metadata files, there are two template files,
 content will replace the first `<bjørn-content>` element. Metadata will
 be inserted into the `<head>` for you automatically.
 
-To modify what content is generated, simply edit `build.js` :) .
+## Serving Content
+
+You will need a file server which supports index files with a `.xhtml`
+file extension. A sample `.rsync-filter` might be as follows :—
+
+```rsync-filter
+- /.rsync-filter
+-s .git
+-s .gitignore
+-s /README*
+-s /build.js
+-s /deno.json
+-s index#*.xhtml
+-s #*.rdf
+```
+
+## Customization
+
+Feel free to add styles, additional content, and whatever else you like
+to the template files (as well as the rest of the website).
+
+### Hooks
+
+🧸📔 Bjørn recognizes the following hooks (defined on the global
+object) when it runs :—
+
+- **`globalThis.bjørnTransformEntryHTML(document, metadata)`:**
+  Receives a document and a metadata object for each generated HTML
+  entry.
+
+- **`globalThis.bjørnTransformFeedAtom(document, metadata)`:** Receives
+  a document and a metadata object for each generated Atom feed index.
+
+- **`globalThis.bjørnTransformFeedHTML(document, metadata)`:** Receives
+  a document and a metadata object for each generated HTML feed index.
+
+- **`globalThis.bjørnTransformHead(headElement, metadata, type)`:**
+  Receives a `<head>` element, a metadata object, and a type value of
+  either `"entry"` or `"feed"`.
+
+- **`globalThis.bjørnTransformMetadata(metadata, type)`:** Receives a
+  metadata object, and a type value of either `"entry"` or `"feed"`.
+  Use this to provide any initial transformations to the metadata prior
+  to document generation.
+
+Naturally, when running 🧸📔 Bjørn normally from the command line, all
+of these hooks are undefined. You can write your own small build script
+to define them, and run that instead :—
+
+```js
+#!/usr/bin/env -S deno run --allow-read --allow-write
+// custom_build.js
+
+// Define your hooks first…
+globalThis.bjørnTransformHead = (headElement, metadata, type) => {
+  Array.from(headElement.children)
+    .find(($) => $.localName == "title")
+    .textContent += " | My Cool Site";
+};
+
+// Then run the script…
+await import("./build.js");
+```
 
 [CommonMark]: <https://commonmark.org>
 [Deno]: <https://deno.land/>
This page took 0.054585 seconds and 4 git commands to generate.