diff options
Diffstat (limited to 'jakob')
| -rw-r--r-- | jakob/builder/blog.scm | 2 | ||||
| -rw-r--r-- | jakob/builder/cookbook.scm | 10 | ||||
| -rw-r--r-- | jakob/reader/org-mode-prime.scm | 5 | ||||
| -rw-r--r-- | jakob/utils/features.scm | 24 | ||||
| -rw-r--r-- | jakob/utils/sxml.scm | 40 |
5 files changed, 73 insertions, 8 deletions
diff --git a/jakob/builder/blog.scm b/jakob/builder/blog.scm index e03c3e2..003f96c 100644 --- a/jakob/builder/blog.scm +++ b/jakob/builder/blog.scm @@ -49,7 +49,7 @@ ;;; (define (build-comment-url post) - (format #f "/api/comment-form/~a" (post-slug post))) + (format #f "/apps/comment-form/~a" (post-slug post))) (define (render-article post) "Return the SHTML for POST's contents." diff --git a/jakob/builder/cookbook.scm b/jakob/builder/cookbook.scm index a0be836..f221107 100644 --- a/jakob/builder/cookbook.scm +++ b/jakob/builder/cookbook.scm @@ -32,9 +32,11 @@ #:use-module (srfi srfi-26) #:export (cookbook)) + + ;;; Commentary: ;;; -;;; A builder for a cookbook, based on Haunt's default 'blog' builder. +;;; A custom cookbook builder. ;;; ;;; Code: @@ -50,7 +52,7 @@ ;;; Rendering. ;;; -(define (tags-to-spans tags) +(define (tags->spans tags) (define (tag->class tag) (string-map (lambda (c) (if (char=? c #\:) #\- c)) tag)) (define (make-class tag) @@ -62,7 +64,7 @@ (($ <cookbook-page> path metadata body) (let* ((title (or (assq-ref metadata 'title) "Untitled")) (content `((h1 ,title) - (p ,(tags-to-spans (assq-ref metadata 'tags))) + (p ,(tags->spans (assq-ref metadata 'tags))) ,@body (p ,(hyperlink "/cookbook/" "Back to Cookbook")))) (content (theme #:title title #:content content))) @@ -78,7 +80,7 @@ (format #f "/cookbook/recipes/~a" thumb) "/cookbook/recipes/default-thumb.jpg"))))) (div (a (@ (href ,(format #f "/~a" path))) (h3 ,title)) - (p ,(tags-to-spans (assq-ref metadata 'tags))))))))) + (p ,(tags->spans (assq-ref metadata 'tags))))))))) ;;; diff --git a/jakob/reader/org-mode-prime.scm b/jakob/reader/org-mode-prime.scm index 118f1a6..85c4296 100644 --- a/jakob/reader/org-mode-prime.scm +++ b/jakob/reader/org-mode-prime.scm @@ -32,5 +32,6 @@ (make-reader (reader-matcher org-mode-reader) (lambda args (let-values (((metadata sxml) (apply (reader-proc org-mode-reader) args))) - (values metadata - (rewrite-absolute-urls-as-relative sxml)))))) + (let* ((sxml (rewrite-absolute-urls-as-relative sxml)) + (sxml (flatten-section-headings sxml))) + (values metadata sxml)))))) diff --git a/jakob/utils/features.scm b/jakob/utils/features.scm new file mode 100644 index 0000000..4dc66db --- /dev/null +++ b/jakob/utils/features.scm @@ -0,0 +1,24 @@ +;;; Copyright © 2019 - 2025 Jakob L. Kreuze <zerodaysfordays@sdf.org> +;;; +;;; This program is free software; you can redistribute it and/or +;;; modify it under the terms of the GNU General Public License as +;;; published by the Free Software Foundation; either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; This program is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see +;;; <http://www.gnu.org/licenses/>. + +(define-module (jakob utils features) + #:export (feature-enabled?)) + +(define %feature-condition-alist + `((food-gallery . ,(lambda () (getenv "HAUNT_INCLUDE_FOOD_GALLERY"))))) + +(define (feature-enabled? key) + ((assq-ref %feature-condition-alist key))) diff --git a/jakob/utils/sxml.scm b/jakob/utils/sxml.scm index 0fc34d2..5ab08a9 100644 --- a/jakob/utils/sxml.scm +++ b/jakob/utils/sxml.scm @@ -23,7 +23,8 @@ script sanitize-subtree - rewrite-absolute-urls-as-relative)) + rewrite-absolute-urls-as-relative + flatten-section-headings)) ;;; @@ -89,3 +90,40 @@ sanitize the resultant subtree." ((xs ...) (map rewrite-absolute-urls-as-relative xs)) (elem elem))) + +(define (flatten-section-headings tree) + """Flattens extraneous sections output by Org-mode + +This function traverses a SXML tree and removes the outermost `<div>` +elements that represent Org-mode section headings. + +Args: + tree: A SXML tree. + +Returns: + A SXML tree with the outermost Org section heading `<div>` elements +removed and their contents flattened. + """ + (define (flatten-section-headings-inner tree) + (define (is-org-section form) + (match form + ((or ('div ('@ ('id id) ('class _)) + rest ...) + ('div ('@ ('id id)) + rest ...) + ('div ('@ ('role "doc-footnote") ('class id)) + rest ...)) + (or (string=? "footpara" id) + (string-prefix? "text-footnotes" id) + (string-prefix? "outline-container-org" id) + (string-prefix? "text-org" id))) + (_ #f))) + (match tree + ((? is-org-section + ('div ('@ _ ...) + rest ...)) + (append-map flatten-section-headings-inner rest)) + ((xs ...) + (list (append-map flatten-section-headings-inner xs))) + (elem (list elem)))) + (first (flatten-section-headings-inner tree))) |