added buttons to content and comments when authorized, added delete

This commit is contained in:
David Botton 2022-05-06 18:12:32 -04:00
parent fae0485b5b
commit b23f5bb1fc
2 changed files with 197 additions and 97 deletions

View file

@ -56,95 +56,134 @@ Page properties:
(let* ((website (get-web-site body))
(color-class (get-setting website :color-class "w3-black"))
(border-class (get-setting website :border-class ""))
(button-class (get-setting website :button-class
"w3-button w3-round-xlarge
w3-tiny w3-border w3-padding-small"))
(text-class (get-setting website :text-class ""))
(login-link (get-setting website :login-link "/login"))
(signup-link (get-setting website :signup-link "/signup"))
(username-link (get-setting website :username-link "/logout"))
(menu-property (get-property properties :menu "w3-black"))
(base-url (get-property properties :base-url "/"))
(content (get-property properties :content "")))
;; Setup CSS style changes
(let ((sb (create-style-block body)))
(add-style sb :element "a" '(("text-decoration" :none))))
;;
;; Page layout
;;
;; SECTION: Above of menu bar
(let* ((row (create-web-auto-row body))
(left (create-web-auto-column row))
(right (create-web-auto-column row :vertical-align :middle)))
(when (logo website)
(set-geometry (create-img (create-a left
:link (url website))
:url-src (logo website))
:height 75))
(create-span (create-a right
:link (url website))
:content (title website)
:class "w3-xlarge w3-sans-serif"))
;; SECTION: Menu bar
(let ((menu (create-web-menu-bar body :class "w3-card-4")))
(add-class menu color-class)
(dolist (drop-down menu-property)
(let ((drop (create-web-menu-drop-down menu
:content (first drop-down)
:class "w3-border"))
(count 0))
(dolist (item (second drop-down))
(when (or (and (fourth item)
(clog-auth:is-authorized-p (roles website)
(fourth item)))
(eq (fourth item) nil))
(incf count)
(create-web-menu-item drop
:content (first item)
:link (second item))))
(when (eql count 0)
(destroy (parent-element drop)))))
(if (getf (profile website) :|username|)
(create-web-menu-item menu :class "w3-right"
:content (getf (profile website) :|username|)
:link username-link)
(when login-link
(create-web-menu-item menu :class "w3-right"
:content "login"
:link login-link))))
;; SECTION: Content area
(create-br body)
(when content
(typecase content
(string
(create-div body :content content))
(function
(funcall content body))
(t
(create-div body :content (format nil "~A" content)))))
;; SECTION: Special pages - Login
(when (eq page :login)
(let* ((outter (create-web-container body))
(form (create-form outter))
(p1 (create-p form))
(l1 (create-label p1 :content "User Name"
:class text-class))
(user (create-form-element p1 :text
:name "username"
:class (format nil "w3-input ~A" border-class)))
(p2 (create-p form))
(l2 (create-label p2 :content "Password"
:class text-class))
(pass (create-form-element p2 :password
:name "password"
:class (format nil "w3-input ~A" border-class)))
(p3 (create-p form)))
(declare (ignore l1 l2 p3))
(setf (maximum-width outter) (unit :px 500))
(setf (requiredp user) t)
(setf (requiredp pass) t)
(create-form-element form :submit :value "Submit"
:class (format nil "~A ~A" "w3-button" color-class))
(set-on-submit form (getf properties :on-submit))
(when signup-link
(create-a form :class "w3-right" :content "sign up" :link signup-link))))
;; SECTION: Footer
(create-br body)
(create-br body)
(create-div body :content (format nil "~A" (footer website)))))
(cond ((or (eq page :content-body) ; data based content layout
(eq page :blog-body)) ; blog based content layout
(create-section body :h3 :content (getf content :|title|))
(create-div body :content (getf content :|value|))
(let ((panel (create-div body)))
(when (get-property properties :can-comment nil)
(create-a panel :class button-class
:content "comment"
:link (format nil "~A/add" base-url)))
(when (get-property properties :can-edit nil)
(create-a panel :class button-class
:content "edit"
:link (format nil "~A/edit" base-url))
(create-a panel :class button-class
:content "delete"
:link (format nil "~A/delete" base-url))))
(create-br body))
((or (eq page :content-comment) ; data comment layout
(eq page :blog-comment)) ; blog comment layout
(let ((comment (create-div body :content (getf content :|value|))))
(set-border comment :thin :dotted :black)
(let ((panel (create-div body)))
(when (get-property properties :can-comment nil)
(create-a panel :class button-class
:content "comment"
:link (format nil "~A/add" base-url)))
(when (get-property properties :can-edit nil)
(create-a panel :class button-class
:content "edit"
:link (format nil "~A/edit" base-url))
(create-a panel :class button-class
:content "delete"
:link (format nil "~A/delete" base-url))))))
;; Full page layout ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(t
;; Setup CSS style changes
(let ((sb (create-style-block body)))
(add-style sb :element "a" '(("text-decoration" :none))))
;;
;; Page layout
;;
;; SECTION: Above of menu bar
(let* ((row (create-web-auto-row body))
(left (create-web-auto-column row))
(right (create-web-auto-column row :vertical-align :middle)))
(when (logo website)
(set-geometry (create-img (create-a left
:link (url website))
:url-src (logo website))
:height 75))
(create-span (create-a right
:link (url website))
:content (title website)
:class "w3-xlarge w3-sans-serif"))
;; SECTION: Menu bar
(let ((menu (create-web-menu-bar body :class "w3-card-4")))
(add-class menu color-class)
(dolist (drop-down menu-property)
(let ((drop (create-web-menu-drop-down menu
:content (first drop-down)
:class "w3-border"))
(count 0))
(dolist (item (second drop-down))
(when (or (and (fourth item)
(clog-auth:is-authorized-p (roles website)
(fourth item)))
(eq (fourth item) nil))
(incf count)
(create-web-menu-item drop
:content (first item)
:link (second item))))
(when (eql count 0)
(destroy (parent-element drop)))))
(if (getf (profile website) :|username|)
(create-web-menu-item menu :class "w3-right"
:content (getf (profile website) :|username|)
:link username-link)
(when login-link
(create-web-menu-item menu :class "w3-right"
:content "login"
:link login-link))))
;; SECTION: Content area
(create-br body)
(when content
(typecase content
(string
(create-div body :content content))
(function
(funcall content body))
(t
(create-div body :content (format nil "~A" content)))))
;; SECTION: Special pages - Login
(when (eq page :login)
(let* ((outter (create-web-container body))
(form (create-form outter))
(p1 (create-p form))
(l1 (create-label p1 :content "User Name"
:class text-class))
(user (create-form-element p1 :text
:name "username"
:class (format nil "w3-input ~A" border-class)))
(p2 (create-p form))
(l2 (create-label p2 :content "Password"
:class text-class))
(pass (create-form-element p2 :password
:name "password"
:class (format nil "w3-input ~A" border-class)))
(p3 (create-p form)))
(declare (ignore l1 l2 p3))
(setf (maximum-width outter) (unit :px 500))
(setf (requiredp user) t)
(setf (requiredp pass) t)
(create-form-element form :submit :value "Submit"
:class (format nil "~A ~A" "w3-button" color-class))
(set-on-submit form (getf properties :on-submit))
(when signup-link
(create-a form :class "w3-right" :content "sign up" :link signup-link))))
;; SECTION: Footer
(create-br body)
(create-br body)
(create-div body :content (format nil "~A" (footer website)))))))