diff --git a/lib/hyperscript/parser.sx b/lib/hyperscript/parser.sx index 2a1c6527..f3babb96 100644 --- a/lib/hyperscript/parser.sx +++ b/lib/hyperscript/parser.sx @@ -730,8 +730,13 @@ (list (quote put!) value "before" (parse-expr))) ((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))))) (true - (error (str "Expected into/before/after at position " p))))))) + (error (str "Expected into/before/after/at at position " p))))))) (define parse-if-cmd (fn @@ -919,7 +924,9 @@ (let ((cls (get (adv!) "value"))) (let - ((tgt (parse-tgt-kw "from" (list (quote me))))) + ((tgt (if (match-kw "for") + (parse-expr) + (parse-tgt-kw "from" (list (quote me)))))) (list (quote take) cls tgt))) nil))) (define diff --git a/lib/hyperscript/runtime.sx b/lib/hyperscript/runtime.sx index 01d4fd11..014971ce 100644 --- a/lib/hyperscript/runtime.sx +++ b/lib/hyperscript/runtime.sx @@ -88,7 +88,9 @@ ((= pos "into") (dom-set-inner-html target value)) ((= pos "before") (dom-insert-adjacent-html target "beforebegin" value)) - ((= pos "after") (dom-insert-adjacent-html target "afterend" value))))) + ((= pos "after") (dom-insert-adjacent-html target "afterend" value)) + ((= pos "start") (dom-insert-adjacent-html target "afterbegin" value)) + ((= pos "end") (dom-insert-adjacent-html target "beforeend" value))))) ;; ── Navigation / traversal ────────────────────────────────────── diff --git a/shared/static/wasm/sx/hs-parser.sx b/shared/static/wasm/sx/hs-parser.sx index 2a1c6527..f3babb96 100644 --- a/shared/static/wasm/sx/hs-parser.sx +++ b/shared/static/wasm/sx/hs-parser.sx @@ -730,8 +730,13 @@ (list (quote put!) value "before" (parse-expr))) ((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))))) (true - (error (str "Expected into/before/after at position " p))))))) + (error (str "Expected into/before/after/at at position " p))))))) (define parse-if-cmd (fn @@ -919,7 +924,9 @@ (let ((cls (get (adv!) "value"))) (let - ((tgt (parse-tgt-kw "from" (list (quote me))))) + ((tgt (if (match-kw "for") + (parse-expr) + (parse-tgt-kw "from" (list (quote me)))))) (list (quote take) cls tgt))) nil))) (define diff --git a/shared/static/wasm/sx/hs-runtime.sx b/shared/static/wasm/sx/hs-runtime.sx index 01d4fd11..014971ce 100644 --- a/shared/static/wasm/sx/hs-runtime.sx +++ b/shared/static/wasm/sx/hs-runtime.sx @@ -88,7 +88,9 @@ ((= pos "into") (dom-set-inner-html target value)) ((= pos "before") (dom-insert-adjacent-html target "beforebegin" value)) - ((= pos "after") (dom-insert-adjacent-html target "afterend" value))))) + ((= pos "after") (dom-insert-adjacent-html target "afterend" value)) + ((= pos "start") (dom-insert-adjacent-html target "afterbegin" value)) + ((= pos "end") (dom-insert-adjacent-html target "beforeend" value))))) ;; ── Navigation / traversal ──────────────────────────────────────