[update] use :local-nicknames to import package

This commit is contained in:
Akira Tempaku 2024-01-30 10:28:28 +09:00
commit d62ff175dd
5 changed files with 36 additions and 46 deletions

View file

@ -3,8 +3,7 @@
(:use #:cl) (:use #:cl)
(:import-from #:clack) (:import-from #:clack)
(:import-from #:lack) (:import-from #:lack)
(:import-from #:hp/pages/**/* (:local-nicknames (#:pages #:hp/pages/**/*))
#:*index-app*)
(:export #:start-app (:export #:start-app
#:stop-app)) #:stop-app))
(in-package :hp) (in-package :hp)
@ -13,7 +12,7 @@
(defun start-app () (defun start-app ()
(unless *handler* (unless *handler*
(setf *handler* (clack:clackup (lack:builder *index-app*) (setf *handler* (clack:clackup (lack:builder pages:*index-app*)
:address "localhost" :address "localhost"
:port 3000)))) :port 3000))))

View file

@ -1,44 +1,42 @@
(defpackage #:hp/pages/index (defpackage #:hp/pages/index
(:use #:cl) (:use #:cl)
(:import-from #:jingle) (:local-nicknames (#:jg #:jingle))
(:import-from #:markup) (:local-nicknames (#:mk #:markup))
(:import-from #:hp/ui/layout (:local-nicknames (#:ui #:hp/ui/*))
#:layout) (:local-nicknames (#:utils #:hp/utils/*))
(:import-from #:hp/utils
#:render-html
#:register-routes)
(:export #:*index-app*)) (:export #:*index-app*))
(in-package #:hp/pages/index) (in-package #:hp/pages/index)
(markup:enable-reader) (mk:enable-reader)
(defparameter *counter* 0) (defparameter *counter* 0)
(markup:deftag counter (&key value) (mk:deftag counter (&key id value)
<div id="counter">,(progn value)</div>) <div id=id >,(progn value)</div>)
(defun index-page (params) (defun index-page (params)
(declare (ignore params)) (declare (ignore params))
(render-html (jg:with-html-response
<layout> (mk:write-html
<counter value=*counter* /> <ui:layout>
<button hx-target="#counter" hx-post="/decrease"> - </button> <counter id="counter" value=*counter* />
<button hx-target="#counter" hx-post="/increase"> + </button> <button hx-target="#counter" hx-post="/decrease"> - </button>
</layout>)) <button hx-target="#counter" hx-post="/increase"> + </button>
</ui:layout>)))
(defun increase (params) (defun increase (params)
(declare (ignore params)) (declare (ignore params))
(render-html (jg:with-html-response
<counter value=(incf *counter*) />)) (mk:write-html <counter id="counter" value=(incf *counter*) />)))
(defun decrease (params) (defun decrease (params)
(declare (ignore params)) (declare (ignore params))
(render-html (jg:with-html-response
<counter value=(decf *counter*) />)) (mk:write-html <counter id= "counter" value=(decf *counter*) />)))
(defparameter *index-app* (jingle:make-app)) (defparameter *index-app* (jg:make-app))
(register-routes (utils:register-routes
*index-app* *index-app*
`((:method :GET :path "/" :handler ,#'index-page) `((:method :GET :path "/" :handler ,#'index-page)
(:method :POST :path "/increase" :handler ,#'increase) (:method :POST :path "/increase" :handler ,#'increase)

View file

@ -1,12 +1,12 @@
(defpackage #:hp/ui/layout (defpackage #:hp/ui/layout
(:use #:cl) (:use #:cl)
(:import-from #:markup) (:local-nicknames (#:mk #:markup))
(:export #:layout)) (:export #:layout))
(in-package #:hp/ui/layout) (in-package #:hp/ui/layout)
(markup:enable-reader) (markup:enable-reader)
(markup:deftag layout (children) (mk:deftag layout (children)
<html> <html>
<head> <head>
<title>skyizwhite.dev</title> <title>skyizwhite.dev</title>

View file

@ -1,19 +0,0 @@
(defpackage #:hp/utils
(:use #:cl)
(:import-from #:markup)
(:import-from #:jingle)
(:export #:register-routes
#:render-html))
(in-package #:hp/utils)
(defun register-routes (app routes)
(loop :for item :in routes
:for path = (getf item :path)
:for handler = (getf item :handler)
:for method = (getf item :method)
:do (setf (jingle:route app path :method method) handler)))
(defmacro render-html (&body body)
`(jingle:with-html-response
(markup:write-html
,@body)))

12
src/utils/routes.lisp Normal file
View file

@ -0,0 +1,12 @@
(defpackage #:hp/utils/routes
(:use #:cl)
(:local-nicknames (#:jg #:jingle))
(:export #:register-routes))
(in-package #:hp/utils/routes)
(defun register-routes (app routes)
(loop :for item :in routes
:for path = (getf item :path)
:for handler = (getf item :handler)
:for method = (getf item :method)
:do (setf (jg:route app path :method method) handler)))