diff --git a/README.md b/README.md index a90fd1c..4023a32 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,10 @@ Or loop: (hsx (li item)))))) ``` +## Utils + +- `(clsx &rest strs)`: A utility function for constructing class strings conditionally. It removes `nil` from the string list, then joins the remaining strings with spaces. + ## 📄 License MIT License diff --git a/hsx.asd b/hsx.asd index 10f33bb..e3fa1f0 100644 --- a/hsx.asd +++ b/hsx.asd @@ -1,5 +1,5 @@ (defsystem "hsx" - :version "0.5.0" + :version "0.6.0" :description "Simple and powerful HTML generation library." :author "Akira Tempaku, Bo Yao" :maintainer "Akira Tempaku <paku@skyizwhite.dev>" diff --git a/src/main.lisp b/src/main.lisp index 80f1fab..440bf6d 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -2,9 +2,11 @@ (:nicknames #:hsx/main) (:use #:cl #:hsx/element - #:hsx/dsl) + #:hsx/dsl + #:hsx/utils) (:import-from #:hsx/builtin) (:export #:hsx #:defcomp - #:render-to-string)) + #:render-to-string + #:clsx)) (in-package :hsx) diff --git a/src/utils.lisp b/src/utils.lisp index 2a1f397..94a3b25 100644 --- a/src/utils.lisp +++ b/src/utils.lisp @@ -5,7 +5,8 @@ #:make-keyword #:symbolicate) (:export #:escape-html-attribute - #:escape-html-text-content)) + #:escape-html-text-content + #:clsx)) (in-package #:hsx/utils) (defparameter *text-content-escape-map* @@ -40,3 +41,6 @@ (defun escape-html-attribute (str) (escape-string str *attribute-escape-map*)) + +(defun clsx (&rest strs) + (format nil "~{~a~^ ~}" (remove nil strs)))