summaryrefslogtreecommitdiff
path: root/jakob
diff options
context:
space:
mode:
Diffstat (limited to 'jakob')
-rw-r--r--jakob/builder/blog.scm2
-rw-r--r--jakob/builder/cookbook.scm10
-rw-r--r--jakob/reader/org-mode-prime.scm5
-rw-r--r--jakob/utils/features.scm24
-rw-r--r--jakob/utils/sxml.scm40
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)))