diff --git a/clog.asd b/clog.asd index 7956f8c..58ed08d 100644 --- a/clog.asd +++ b/clog.asd @@ -38,6 +38,7 @@ (:file "clog-auth") (:file "clog-gui") (:file "clog-web") + (:file "clog-web-themes") (:file "clog-helpers"))) (asdf:defsystem #:clog/docs diff --git a/source/clog-web-themes.lisp b/source/clog-web-themes.lisp new file mode 100644 index 0000000..187a221 --- /dev/null +++ b/source/clog-web-themes.lisp @@ -0,0 +1,84 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;; CLOG - The Common Lisp Omnificent GUI ;;;; +;;;; (c) 2020-2022 David Botton ;;;; +;;;; License BSD 3 Clause ;;;; +;;;; ;;;; +;;;; clog-web-themes.lisp ;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; Built in clog-web-site themese + +(cl:in-package :clog-web) + +(defsection @clog-web-themes (:title "CLOG Web Site Themes") + "Built in themes" + (default-theme function)) + +;;;;;;;;;;;;;;;;;;; +;; default-theme ;; +;;;;;;;;;;;;;;;;;;; + +(defun default-theme (body website page properties) + "The default theme for clog-web-site. +Settings available: + :menu-class - w3 color class for menu bar +Page properties: + :menu - ((\"Menu Name\" ((\"Menu Item\" \"link\")))) + :content" + (let ((sb (create-style-block body))) + (add-style sb :element "a" '(("text-decoration" :none)))) + (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")) + (let ((menu (create-web-menu-bar body :class "w3-card-4"))) + (when (getf (settings website) :menu-class) + (add-class menu (getf (settings website) :menu-class))) + (dolist (drop-down (getf properties :menu)) + (let ((drop (create-web-menu-drop-down menu + :content (first drop-down) + :class "w3-border"))) + (dolist (item (second drop-down)) + (create-web-menu-item drop + :content (first item) + :link (second item)))))) + (create-br body) + (let ((c (getf properties :content))) + (when c + (typecase c + (string + (create-div body :content c)) + (function + (funcall c body)) + (t + (create-div body :content (format nil "~A" c)))))) + (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")) + (user (create-form-element p1 :text :name "username" :class "w3-input")) + (p2 (create-p form)) + (l2 (create-label p2 :content "Password")) + (pass (create-form-element p2 :password :name "password" :class "w3-input")) + (p3 (create-p form))) + (declare (ignore l1 l2)) + (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" + (getf (settings website) + :menu-class))) + (set-on-submit form (getf properties :on-submit)))) + (create-br body) + (create-br body) + (create-div body :content (format nil "~A" (footer website)))) diff --git a/source/clog-web.lisp b/source/clog-web.lisp index 2cf3a16..3519c7e 100644 --- a/source/clog-web.lisp +++ b/source/clog-web.lisp @@ -98,7 +98,6 @@ (clog-web-site class) (clog-web-routes-from-menu function) (clog-web-meta function) - (default-theme function) (theme generic-function) (settings generic-function) (url generic-function) @@ -1028,57 +1027,6 @@ if confirmed or nil if canceled. CANCEL-TEXT is only displayed if modal is t" :reader logo)) (:documentation "Website information")) -;;;;;;;;;;;;;;;;;;; -;; default-theme ;; -;;;;;;;;;;;;;;;;;;; - -(defun default-theme (body website page properties) - "The default theme for clog-web-site. -Settings available: - :menu-class - w3 color class for menu bar -Page properties: - :menu - ((\"Menu Name\" ((\"Menu Item\" \"link\")))) - :content" - (declare (ignore page)) - (let ((sb (create-style-block body))) - (add-style sb :element "a" '(("text-decoration" :none)))) - (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")) - (let ((menu (create-web-menu-bar body :class "w3-card-4"))) - (when (getf (settings website) :menu-class) - (add-class menu (getf (settings website) :menu-class))) - (dolist (drop-down (getf properties :menu)) - (let ((drop (create-web-menu-drop-down menu - :content (first drop-down) - :class "w3-border"))) - (dolist (item (second drop-down)) - (create-web-menu-item drop - :content (first item) - :link (second item)))))) - (create-br body) - (let ((c (getf properties :content))) - (when c - (typecase c - (string - (create-div body :content c)) - (function - (funcall c body)) - (t - (create-div body :content (format nil "~A" c)))))) - (create-br body) - (create-br body) - (create-div body :content (format nil "~A" (footer website)))) - ;;;;;;;;;;;;;;;;;;; ;; clog-web-meta ;; ;;;;;;;;;;;;;;;;;;; diff --git a/source/clog.lisp b/source/clog.lisp index 4cd486f..4984cb3 100644 --- a/source/clog.lisp +++ b/source/clog.lisp @@ -48,6 +48,7 @@ embedded in a native template application.)" (@clog-auth section) (@clog-gui section) (@clog-web section) + (@clog-web-themes section) (@clog-body section) (@clog-window section) (@clog-document section)