aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Ángel Moreno <mail@migalmoreno.com>2023-06-12 00:39:44 +0200
committerMiguel Ángel Moreno <mail@migalmoreno.com>2023-06-12 11:59:11 +0200
commit0b9fa69eadb6ddea29ed89936f522dea34a9fa4c (patch)
tree5412aab61c69743932ef92f50326e03e5ec9cc71
parentb0705a072c70dc618d24afbd05ef3eda60cc000c (diff)
feat: Add support for route composition by name
-rw-r--r--router.lisp27
1 files changed, 20 insertions, 7 deletions
diff --git a/router.lisp b/router.lisp
index 5a1ce5b..dffe3f1 100644
--- a/router.lisp
+++ b/router.lisp
@@ -119,13 +119,26 @@ the current URL as argument, and can be given in a `format'-like syntax."))
(nyxt:glyph "⚑")))
(defmethod nyxt:enable ((mode router-mode) &key)
- "Initialize `router-mode' to enable routes."
- (hooks:add-hook (nyxt:request-resource-hook (buffer mode))
- (make-instance
- 'hooks:handler
- :fn (lambda (request-data)
- (route-handler request-data mode))
- :name 'handle-routing)))
+ (with-slots (routers buffer) mode
+ (setf routers
+ (reverse
+ (reduce
+ (lambda (acc router)
+ (alex:if-let ((base (find (name router) acc :key #'name)))
+ (progn
+ (dolist (slot (set-difference
+ (mopu:slot-names (class-of base))
+ (mopu:direct-slot-names (class-of base))))
+ (setf (slot-value router slot) (slot-value base slot)))
+ (cons router acc))
+ (cons router acc)))
+ routers
+ :initial-value '())))
+ (hooks:add-hook (nyxt:request-resource-hook buffer)
+ (make-instance 'hooks:handler
+ :fn (lambda (request-data)
+ (router-handler request-data mode))
+ :name 'handle-routing))))
(defmethod nyxt:disable ((mode router-mode) &key)
(hooks:remove-hook (nyxt:request-resource-hook (buffer mode))