diff --git a/src/accordion.lisp b/src/accordion.lisp index 50fbccc..a3cdd16 100644 --- a/src/accordion.lisp +++ b/src/accordion.lisp @@ -9,7 +9,7 @@ (in-package :ml-sbt/accordion) -(defmacro with-accordion ((&key (id "accordionExample") flush) &rest items) +(defmacro with-accordion ((&key (id "accordionExample") flush) &body body) "This macro generates an accordion-style collapsible list. ID: Specifies a unique identifier for the accordion. Defaults to 'accordionExample'. @@ -24,25 +24,26 @@ the accordion item. --- Example usage: - (accordion () \"Title 1\" \"Content 1\" \"Title 2\" \"Content 2\")" + (with-accordion (:id \"sample\") + \"Title 1\" \"Content 1\" \"Title 2\" \"Content 2\")" (let ((class (if flush "accordion accordion-flush" "accordion"))) `(spinneret:with-html (:div :class ,class :id ,id - ,@(loop for (title content) on items by #'cddr + ,@(loop for (title content) on body by #'cddr for counter from 1 for collapse-id = (format nil "collapse-~a-~a" id counter) for collapse-class = (concatenate 'string "accordion-collapse collapse") for btn-class = (concatenate 'string "accordion-button collapsed") collect `(:div :class "accordion-item" (:div :class "accordion-header" - (:button :class ,btn-class - :type "button" - :data-bs-toggle "collapse" - :data-bs-target ,(concatenate 'string "#" collapse-id) - :aria-expanded "false" - :aria-controls ,collapse-id - ,title)) + (:button :class ,btn-class + :type "button" + :data-bs-toggle "collapse" + :data-bs-target ,(concatenate 'string "#" collapse-id) + :aria-expanded "false" + :aria-controls ,collapse-id + ,title)) (:div :id ,collapse-id :class ,collapse-class :data-bs-parent ,(concatenate 'string "#" id)