frontend: work in progress: abstract form and field definitions -> dom rendering
This commit is contained in:
parent
6afcfa36fb
commit
dd1501636e
5 changed files with 45 additions and 9 deletions
|
@ -5,6 +5,7 @@
|
||||||
(defpackage :scopes/frontend/cs-hx
|
(defpackage :scopes/frontend/cs-hx
|
||||||
(:use :common-lisp)
|
(:use :common-lisp)
|
||||||
(:local-nicknames (:dom :scopes/web/dom)
|
(:local-nicknames (:dom :scopes/web/dom)
|
||||||
|
(:frontend :scopes/frontend)
|
||||||
(:message :scopes/core/message)
|
(:message :scopes/core/message)
|
||||||
(:response :scopes/web/response)
|
(:response :scopes/web/response)
|
||||||
(:shape :scopes/shape)
|
(:shape :scopes/shape)
|
||||||
|
@ -35,13 +36,15 @@
|
||||||
(fields (getf data :fields)))
|
(fields (getf data :fields)))
|
||||||
(dom:form (list :name "login" :hx-target "#cs-debug" :hx-post "/hx/auth/login")
|
(dom:form (list :name "login" :hx-target "#cs-debug" :hx-post "/hx/auth/login")
|
||||||
(mapcar (lambda (f) (form-field f)) fields)
|
(mapcar (lambda (f) (form-field f)) fields)
|
||||||
(button '(:class "btn btn-primary") "Login")
|
(button '(:class "btn btn-primary") (getf data :button))
|
||||||
)))
|
)))
|
||||||
|
|
||||||
(defun form-field (name)
|
(defun form-field (fld)
|
||||||
(div nil
|
(div nil
|
||||||
(label '(:class "form-label") name)
|
(label '(:class "form-label") (frontend:label fld))
|
||||||
(input (list :type "text" :name name :class "form-control"))))
|
(input (list :type (frontend:field-type fld)
|
||||||
|
:name (frontend:name fld)
|
||||||
|
:class "form-control"))))
|
||||||
|
|
||||||
(setf (gethash :view *templates*) #'view)
|
(setf (gethash :view *templates*) #'view)
|
||||||
(setf (gethash :form *templates*) #'form)
|
(setf (gethash :form *templates*) #'form)
|
||||||
|
|
18
frontend/frontend.lisp
Normal file
18
frontend/frontend.lisp
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
;;;; cl-scopes/frontend - generic (browser-oriented) frontend definitions.
|
||||||
|
|
||||||
|
(defpackage :scopes/frontend
|
||||||
|
(:use :common-lisp)
|
||||||
|
(:export #:form
|
||||||
|
#:field #:attrs #:field-type #:label #:name
|
||||||
|
#:control))
|
||||||
|
|
||||||
|
(in-package :scopes/frontend)
|
||||||
|
|
||||||
|
(defclass field ()
|
||||||
|
((name :reader name :initarg :name)
|
||||||
|
(label :reader label :initarg :label)
|
||||||
|
(field-type :reader field-type :initarg :type :initform :text)
|
||||||
|
(attrs :reader attrs :initarg :attrs :initform nil)))
|
||||||
|
|
||||||
|
(defun field (name label &key type attrs)
|
||||||
|
(make-instance 'field :name name :label label :type type :attrs attrs))
|
|
@ -6,6 +6,7 @@
|
||||||
(:auth :scopes-auth)
|
(:auth :scopes-auth)
|
||||||
(:config :scopes/config)
|
(:config :scopes/config)
|
||||||
(:core :scopes/core)
|
(:core :scopes/core)
|
||||||
|
(:frontend :scopes/frontend)
|
||||||
(:jwt :scopes/web/jwt)
|
(:jwt :scopes/web/jwt)
|
||||||
(:message :scopes/core/message)
|
(:message :scopes/core/message)
|
||||||
(:server :scopes/web/server)
|
(:server :scopes/web/server)
|
||||||
|
@ -15,12 +16,23 @@
|
||||||
|
|
||||||
(in-package :scopes-auth/web)
|
(in-package :scopes-auth/web)
|
||||||
|
|
||||||
(defun login-form (ctx msg)
|
;;;; set up login form for interactive (browser) login
|
||||||
(let ((mso (message:create '(:auth :form :login)
|
|
||||||
:data '(:fields (:login :password) :button "Login"))))
|
(defun login-form (ctx msg-in)
|
||||||
(actor:send (actor:customer msg) mso)
|
(let ((msg (message:create '(:auth :form :login)
|
||||||
|
:data (list
|
||||||
|
;:fields (:login :password)
|
||||||
|
:fields (login-fields)
|
||||||
|
:button "Login"))))
|
||||||
|
(actor:send (actor:customer msg-in) msg)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
(defun login-fields ()
|
||||||
|
(list (frontend:field :login "User Name" :attrs '(:autofocus t))
|
||||||
|
(frontend:field :password "Password" :type :password)))
|
||||||
|
|
||||||
|
;;;; browser login: check credentials / auth token / external auth
|
||||||
|
|
||||||
(defun login (ctx msg)
|
(defun login (ctx msg)
|
||||||
(let* ((prc (auth:login (shape:data msg))))
|
(let* ((prc (auth:login (shape:data msg))))
|
||||||
;(jwt:create ...)
|
;(jwt:create ...)
|
||||||
|
|
|
@ -9,7 +9,9 @@
|
||||||
:depends-on (:cl-cookie :cl-html-parse :clack :dexador :flexi-streams
|
:depends-on (:cl-cookie :cl-html-parse :clack :dexador :flexi-streams
|
||||||
:lack :lack-component :lack-app-file :quri
|
:lack :lack-component :lack-app-file :quri
|
||||||
:scopes-core)
|
:scopes-core)
|
||||||
:components ((:file "frontend/cs-hx" :depends-on ("web/dom" "web/response"))
|
:components ((:file "frontend/frontend")
|
||||||
|
(:file "frontend/cs-hx"
|
||||||
|
:depends-on ("web/dom" "web/response"))
|
||||||
(:file "web/client")
|
(:file "web/client")
|
||||||
(:file "web/cookie")
|
(:file "web/cookie")
|
||||||
(:file "web/dom")
|
(:file "web/dom")
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
(config:add :child :class 'child-config
|
(config:add :child :class 'child-config
|
||||||
:user (config:from-env :user)
|
:user (config:from-env :user)
|
||||||
|
;:user (util:getenv "SCOPES_USER")
|
||||||
:password (config:from-env :password)
|
:password (config:from-env :password)
|
||||||
:address (config:from-env :address)
|
:address (config:from-env :address)
|
||||||
:port (config:from-env :port "8199")
|
:port (config:from-env :port "8199")
|
||||||
|
|
Loading…
Add table
Reference in a new issue