diff options
author | Miguel Ángel Moreno <mail@migalmoreno.com> | 2023-06-12 00:39:44 +0200 |
---|---|---|
committer | Miguel Ángel Moreno <mail@migalmoreno.com> | 2023-06-12 11:59:11 +0200 |
commit | 0b9fa69eadb6ddea29ed89936f522dea34a9fa4c (patch) | |
tree | 5412aab61c69743932ef92f50326e03e5ec9cc71 | |
parent | b0705a072c70dc618d24afbd05ef3eda60cc000c (diff) |
feat: Add support for route composition by name
-rw-r--r-- | router.lisp | 27 |
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)) |