HS parser/compiler/mock: fix put positions, add CSS properties
Parser: - Skip optional "the" in "at the start/end of" put targets - Handle "style" token type in parse-add-cmd for *prop:value syntax Compiler: - Add set-style dispatch → dom-set-style for CSS property additions Mock DOM: - Position-aware insertAdjacentHTML: afterbegin prepends, beforeend appends - Sync textContent after insertAdjacentHTML mutations Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -775,50 +775,62 @@
|
||||
parse-add-cmd
|
||||
(fn
|
||||
()
|
||||
(if
|
||||
(= (tp-type) "class")
|
||||
(let
|
||||
((cls (get (adv!) "value")) (extra-classes (list)))
|
||||
(define
|
||||
collect-classes!
|
||||
(fn
|
||||
()
|
||||
(when
|
||||
(= (tp-type) "class")
|
||||
(set!
|
||||
extra-classes
|
||||
(append extra-classes (list (get (adv!) "value"))))
|
||||
(collect-classes!))))
|
||||
(collect-classes!)
|
||||
(cond
|
||||
((= (tp-type) "class")
|
||||
(let
|
||||
((tgt (parse-tgt-kw "to" (list (quote me)))))
|
||||
((cls (get (adv!) "value")) (extra-classes (list)))
|
||||
(define
|
||||
collect-classes!
|
||||
(fn
|
||||
()
|
||||
(when
|
||||
(= (tp-type) "class")
|
||||
(set!
|
||||
extra-classes
|
||||
(append extra-classes (list (get (adv!) "value"))))
|
||||
(collect-classes!))))
|
||||
(collect-classes!)
|
||||
(let
|
||||
((when-clause (if (match-kw "when") (parse-expr) nil)))
|
||||
(if
|
||||
(empty? extra-classes)
|
||||
((tgt (if (match-kw "to") (parse-expr) (list (quote me)))))
|
||||
(let
|
||||
((when-clause (if (match-kw "when") (parse-expr) nil)))
|
||||
(if
|
||||
when-clause
|
||||
(list (quote add-class-when) cls tgt when-clause)
|
||||
(list (quote add-class) cls tgt))
|
||||
(if
|
||||
when-clause
|
||||
(list
|
||||
(quote multi-add-class-when)
|
||||
tgt
|
||||
(empty? extra-classes)
|
||||
(if
|
||||
when-clause
|
||||
cls
|
||||
extra-classes)
|
||||
(cons
|
||||
(quote multi-add-class)
|
||||
(cons tgt (cons cls extra-classes))))))))
|
||||
(let
|
||||
((value (parse-expr)))
|
||||
(if
|
||||
(match-kw "to")
|
||||
(list (quote add-class-when) cls tgt when-clause)
|
||||
(list (quote add-class) cls tgt))
|
||||
(if
|
||||
when-clause
|
||||
(list
|
||||
(quote multi-add-class-when)
|
||||
tgt
|
||||
when-clause
|
||||
cls
|
||||
extra-classes)
|
||||
(cons
|
||||
(quote multi-add-class)
|
||||
(cons tgt (cons cls extra-classes)))))))))
|
||||
((= (tp-type) "style")
|
||||
(let
|
||||
((prop (get (adv!) "value"))
|
||||
(value
|
||||
(if
|
||||
(= (tp-type) "local")
|
||||
(get (adv!) "value")
|
||||
(parse-expr))))
|
||||
(let
|
||||
((tgt (parse-expr)))
|
||||
(list (quote add-value) value tgt))
|
||||
nil)))))
|
||||
((tgt (if (match-kw "to") (parse-expr) (list (quote me)))))
|
||||
(list (quote set-style) prop value tgt))))
|
||||
(true
|
||||
(let
|
||||
((value (parse-expr)))
|
||||
(if
|
||||
(match-kw "to")
|
||||
(let
|
||||
((tgt (parse-expr)))
|
||||
(list (quote add-value) value tgt))
|
||||
nil))))))
|
||||
(define
|
||||
parse-remove-cmd
|
||||
(fn
|
||||
@@ -1050,17 +1062,19 @@
|
||||
((match-kw "after")
|
||||
(list (quote put!) value "after" (parse-expr)))
|
||||
((match-kw "at")
|
||||
(cond
|
||||
((match-kw "start")
|
||||
(do
|
||||
(expect-kw! "of")
|
||||
(list (quote put!) value "start" (parse-expr))))
|
||||
((match-kw "end")
|
||||
(do
|
||||
(expect-kw! "of")
|
||||
(list (quote put!) value "end" (parse-expr))))
|
||||
(true
|
||||
(error (str "Expected start/end after at, position " p)))))
|
||||
(do
|
||||
(match-kw "the")
|
||||
(cond
|
||||
((match-kw "start")
|
||||
(do
|
||||
(expect-kw! "of")
|
||||
(list (quote put!) value "start" (parse-expr))))
|
||||
((match-kw "end")
|
||||
(do
|
||||
(expect-kw! "of")
|
||||
(list (quote put!) value "end" (parse-expr))))
|
||||
(true
|
||||
(error (str "Expected start/end after at, position " p))))))
|
||||
(true
|
||||
(error (str "Expected into/before/after/at at position " p)))))))
|
||||
(define
|
||||
|
||||
Reference in New Issue
Block a user