From 4ee0872e7a238132e2002c896fe25e2f0b780c2e Mon Sep 17 00:00:00 2001 From: Marcus Kammer Date: Sat, 12 Aug 2023 09:16:37 +0200 Subject: [PATCH] Enable select to have sizes --- src/component/form.lisp | 14 +++++++++++++- tests/component/form.lisp | 10 +++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/component/form.lisp b/src/component/form.lisp index 6486837..e4e7130 100644 --- a/src/component/form.lisp +++ b/src/component/form.lisp @@ -3,7 +3,8 @@ :cl) (:export :ctrl - :ctrl-col)) + :ctrl-col + :select)) (in-package :cl-sbt/form) @@ -47,3 +48,14 @@ (:div :class "col-auto" (:span :class "form-text" ,text))))))) + +(defmacro select ((&key size) &rest rest) + `(spinneret:with-html + (:select :class ,(concatenate 'string + "form-select" + (if size (format nil " form-select-~a" size))) + :aria-label "Default select example" + (:option :selected "Open this selected menu") + ,@(loop for item in rest + collect (destructuring-bind (&key content value) item + `(:option :value ,value ,content)))))) diff --git a/tests/component/form.lisp b/tests/component/form.lisp index fdec9a6..71c0bf9 100644 --- a/tests/component/form.lisp +++ b/tests/component/form.lisp @@ -47,7 +47,7 @@ (ok (search "Another Form" result))))) (deftest test-select-default - (let ((result (spinneret:with-html-string (select (:option "One" :value 1) (:option "Two" :value 2) (:option "Three" :value 3))))) + (let ((result (spinneret:with-html-string (select () (:content "One" :value 1) (:content "Two" :value 2) (:content "Three" :value 3))))) (testing "Generates correct HTML for select element" (ok (search "class=form-select" result)) (ok (search "aria-label=\"Default select example\"" result)) @@ -56,7 +56,7 @@ (ok (search "option value=3" result))))) (deftest test-select-size-lg - (let ((result (spinneret:with-html-string (select (:size "lg") (:option "One" :value 1))))) + (let ((result (spinneret:with-html-string (select (:size "lg") (:content "One" :value 1))))) (testing "Generates correct HTML for select element" (ok (search "class=\"form-select form-select-lg\"" result)) (ok (search "class=form-select" result)) @@ -64,14 +64,14 @@ (ok (search "option value=1" result))))) (deftest test-select-size-sm - (let ((result (spinneret:with-html-string (select (:size "sm") (:option "One" :value 1))))) + (let ((result (spinneret:with-html-string (select (:size "sm") (:content "One" :value 1))))) (testing "Generates correct HTML for select element" (ok (search "class=\"form-select form-select-sm\"" result)) (ok (search "aria-label=\"Default select example\"" result)) (ok (search "option value=1" result))))) (deftest test-select-size-multiple - (let ((result (spinneret:with-html-string (select (:size "multiple") (:option "One" :value 1))))) + (let ((result (spinneret:with-html-string (select (:size "multiple") (:content "One" :value 1))))) (testing "Generates correct HTML for select element" (ok (search "class=form-select" result)) (ok (search "multiple" result)) @@ -79,7 +79,7 @@ (ok (search "option value=1" result))))) (deftest test-select-size-number - (let ((result (spinneret:with-html-string (select (:size 3) (:option "One" :value 1))))) + (let ((result (spinneret:with-html-string (select (:size 3) (:content "One" :value 1))))) (testing "Generates correct HTML for select element" (ok (search "class=form-select" result)) (ok (search "size=3" result))