summaryrefslogtreecommitdiff
path: root/src/view-components.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/view-components.lisp')
-rw-r--r--src/view-components.lisp51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/view-components.lisp b/src/view-components.lisp
new file mode 100644
index 0000000..0711dda
--- /dev/null
+++ b/src/view-components.lisp
@@ -0,0 +1,51 @@
+;;;; views-components.lisp -- reusable components
+
+(in-package :dnd)
+
+;;; LIST DATA
+
+(defrender :list ((data list) (class "listview") (item-class "listitem"))
+ "A catch all for rendering lists of renderable data items as unordered
+lists. CLASS is the lass string for the containing list. ITEM-CLASS is
+the class string for the contained list items."
+ (with-html
+ (:ol :class class
+ (dolist (item data)
+ (:li :class item-class (render :list-item item))))))
+
+(defrender :horiz-list ((data list) (class "hlistview") (item-class "listitem"))
+ (with-html
+ (:ol :class class
+ (dolist (item data)
+ (:li :class item-class (render :list-item item))))))
+
+(defrender :select ((data list) name class)
+ (with-html
+ (when data
+ (:select :name (or name (format nil "select-~a" (class-of (first data))))
+ :class (or class (format nil "select ~a" (class-of (first data))))
+ (dolist (item data)
+ (render :option item))))))
+
+(defrender :checkboxes ((data list) id class)
+ (with-html
+ (when data
+ (:div :class (or class (format nil "checkboxes ~a" (class-of (first data))))
+ :id (or id (format nil "checkboxes-~a" (class-of (first data))))
+ (dolist (item data)
+ (render :checkbox item)
+ (:br))))))
+
+
+;;;; PAGE ELEMENTS
+
+(defun navbar ()
+ (with-html
+ (:nav :class "navbar" :aria-label "Navigation"
+ (:div :class "logo" :aria-label "DND logo" "DND")
+ (:ul :class "nav-links" :aria-label "Nav links"
+ (:li (:a :href "/hero" :aria-label "Hero profile" "🧝"))
+ (:li (:a :href "/inventory" :aria-label "Inventory" "🎒"))
+ (:li (:a :href "/quests" :aria-label "Quests" "📜"))
+ (:li (:a :href "/tavern" :aria-label "Tavern" "🍺"))))))
+