Add get-element utility

This commit is contained in:
paku 2024-04-15 23:34:38 +09:00
parent 1f588b8a62
commit fc264bfb2c
2 changed files with 23 additions and 3 deletions

View file

@ -46,8 +46,22 @@ It's
```
- Improved:
- Element functions are wrapped in macros for natural indentation.
- Element functions are wrapped in macros for natural indentation. To manipulate them as function objects, prefix '%' to the element name, or use `get-element` function.
- Bugfix. https://github.com/ailisp/flute/issues/5, https://github.com/ailisp/flute/issues/7
```lisp
(define-element dynamic-1 (as)
(funcall as props children))
(define-element dynamic-2 (as)
(funcall (get-element as) props children))
(dynamic-1 :as #'%span :class "bold" "child")
(dynamic-2 :as "span" :class "bold" "child")
; <span class="bold">child</span>
```
- Removed:
- Attributes like CSS selectors (e.g. `div#id.class`)
- ASCII-based escaping. Piccolo only supports UTF-8.
@ -367,4 +381,4 @@ Licensed under MIT License. 
Copyright (c) 2024, skyizwhite.
Copyright (c) 2018, Bo Yao. All rights reserved.
Copyright (c) 2018, Bo Yao.

View file

@ -37,7 +37,8 @@
#:element-prefix
#:element-children
#:user-element-expand-to
#:h))
#:h
#:get-element))
(in-package #:piccolo/elements)
;;; classes
@ -279,3 +280,8 @@
(or (html-element-p node) (fragment-p node)))
(lambda (node)
(find-symbol (string node) :piccolo)))))
;;; Utility
(defun get-element (name)
(find-symbol (concatenate 'string "%" (string-upcase name)) :piccolo))