dev.metalisp.survey/src/navbar.lisp
2024-07-09 20:23:19 +02:00

62 lines
1.9 KiB
Common Lisp

;;;; -*- mode: common-lisp; coding: utf-8; -*-
(defpackage ml-survey/navbar
(:use :cl)
(:export #:navbar-en))
(in-package :ml-survey/navbar)
(defmacro navbar-brand (src width)
`(spinneret:with-html
(:a :class "navbar-brand"
:href "#"
(:img :src ,src
:alt "Company Logo"
:width ,width))))
(defmacro navbar-toggle (target)
`(spinneret:with-html
(:button :class "navbar-toggler"
:type "button"
:data-bs-toggle "collapse"
:data-bs-target (format nil "#~a" ,target)
:aria-controls ,target
:aria-expanded "false"
:aria-label "Toggle Navigation"
(:span :class "navbar-toggler-icon"))))
(defmacro navbar-nav (id &body body)
`(spinneret:with-html
(:div :class "collapse navbar-collapse"
:id ,id
(:ul :class "navbar-nav"
,@(loop for navitem on body by #'cddr
collect
`(:li :class "nav-item"
(:a :class "nav-link"
:href ,(first navitem)
,(second navitem))))))))
(defmacro navbar (&body body)
`(spinneret:with-html
(:nav :class "navbar bg-body-tertiary navbar-expand-sm mb-5"
:aria-label "Primary Navigation"
(:div :class "container"
,@body))))
(defmacro navbar* (id brand-src brand-width &body body)
`(navbar (navbar-brand ,brand-src ,brand-width)
(navbar-toggle ,id)
(navbar-nav ,id ,@body)))
(defmacro navbar-de ()
(let ((id "foo-bar"))
`(navbar (navbar-brand "/company_logo.png" 30)
(navbar-toggle ,id)
(navbar-nav ,id "/" "Home" "/imprint" "Impressum"))))
(defmacro navbar-en ()
(let ((id "foo-bar"))
`(navbar (navbar-brand "/company_logo.png" 30)
(navbar-toggle ,id)
(navbar-nav ,id "/" "Home" "/imprint" "Imprint"))))