diff --git a/src/app.lisp b/src/app.lisp index 9c4f838..e447261 100644 --- a/src/app.lisp +++ b/src/app.lisp @@ -26,8 +26,8 @@ (fbr:assign-routes *app* :system "hp" :directory "src/routes") - (jg:install-middleware *app* mw:*serve-assets*) (jg:install-middleware *app* mw:*recovery*) + (jg:install-middleware *app* mw:*serve-assets*) (jg:install-middleware *app* mw:*normalize-path*) (jg:install-middleware *app* mw:*accesslog*) (jg:install-middleware *app* mw:*block-unsupported-browser*)) diff --git a/src/routes/about.lisp b/src/routes/about.lisp index d9040dd..1dda441 100644 --- a/src/routes/about.lisp +++ b/src/routes/about.lisp @@ -11,8 +11,8 @@ (pi:define-element page () (pi:h - (section (view:asset-props :style "pages/about.css" - :script "pages/about.js" + (section (view:asset-props :css "pages/about.css" + :js "pages/about.js" :x-data "aboutPage") (h1 "About") (a :href "/" :hx-boost "true" diff --git a/src/routes/index.lisp b/src/routes/index.lisp index 069952e..23cb65c 100644 --- a/src/routes/index.lisp +++ b/src/routes/index.lisp @@ -7,8 +7,8 @@ (pi:define-element page () (pi:h - (section (view:asset-props :style "pages/index.css" - :script "pages/index.js" + (section (view:asset-props :css "pages/index.css" + :js "pages/index.js" :x-data "indexPage") (h1 "Hello, World!") diff --git a/src/view/asset.lisp b/src/view/asset.lisp index 5918e38..b9b6fdc 100644 --- a/src/view/asset.lisp +++ b/src/view/asset.lisp @@ -30,10 +30,10 @@ (lambda (path) (asset-path kind path))) -(defmacro define-asset (name kind &body files) +(defmacro define-asset (name kind files) `(defparameter ,name - (funcall ,(if (rest files) '#'identity '#'car) - (mapcar (asset-path-under ,kind) ',files)))) + (,(if (listp files) 'mapcar 'funcall) + (asset-path-under ,kind) ',files))) (define-asset *ress* :vendor "ress@5.0.2.css") @@ -46,31 +46,29 @@ (define-asset *htmx* :vendor "htmx@1.9.12.js") (define-asset *htmx-extentions* :htmx-ext - "alpine-morph@1.9.12.js" - "head-support@1.9.12.js") + ("alpine-morph@1.9.12.js" + "head-support@1.9.12.js")) (define-asset *alpine* :vendor "alpine@3.13.8.js") (define-asset *alpine-extentions* :alpine-ext - "async-alpine@1.2.2.js" - "persist@3.13.8.js" - "morph@3.13.8.js") + ("async-alpine@1.2.2.js" + "persist@3.13.8.js" + "morph@3.13.8.js")) (defun detect-data-props (html-str data-prop-name) - (remove-duplicates (re:all-matches-as-strings (format nil - "(?<=~a=\")[^\"]*(?=\")" - data-prop-name) - html-str) - :test #'string=)) + (let* ((regex (format nil "(?<=~a=\")[^\"]*(?=\")" data-prop-name)) + (data-props (re:all-matches-as-strings regex html-str))) + (remove-duplicates data-props :test #'string=))) (defun get-css-paths (html-str) (mapcar (asset-path-under :css) (detect-data-props html-str "data-style"))) -(defun asset-props (&key style script x-data) - (append (and style `(:data-style ,style)) - (and script x-data +(defun asset-props (&key css js x-data) + (append (and css `(:data-style ,css)) + (and js x-data `(:ax-load t - :ax-load-src ,(asset-path :js script) + :ax-load-src ,(asset-path :js js) :x-ignore t :x-data ,x-data))))