HS: halt command modes, mock event methods
Parser: - halt default/bubbling: match ident type (not just keyword) - halt the event's: consume possessive marker Runtime: - hs-halt! dispatches: default→preventDefault, bubbling→stopPropagation, event→both Mock DOM: - Add event method dispatch: preventDefault, stopPropagation, stopImmediatePropagation set correct flags on event dict Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1807,6 +1807,15 @@ let run_spec_tests env test_files =
|
|||||||
| _ -> Bool false)
|
| _ -> Bool false)
|
||||||
| _ -> Nil)
|
| _ -> Nil)
|
||||||
|
|
||||||
|
else if mt = "event" then
|
||||||
|
(match m with
|
||||||
|
| "preventDefault" -> Hashtbl.replace d "defaultPrevented" (Bool true); Nil
|
||||||
|
| "stopPropagation" -> Hashtbl.replace d "_stopped" (Bool true); Nil
|
||||||
|
| "stopImmediatePropagation" ->
|
||||||
|
Hashtbl.replace d "_stopped" (Bool true);
|
||||||
|
Hashtbl.replace d "_stopImmediate" (Bool true); Nil
|
||||||
|
| _ -> Nil)
|
||||||
|
|
||||||
else if mt = "style" then
|
else if mt = "style" then
|
||||||
(match m with
|
(match m with
|
||||||
| "setProperty" ->
|
| "setProperty" ->
|
||||||
|
|||||||
@@ -1657,8 +1657,8 @@
|
|||||||
(fn
|
(fn
|
||||||
()
|
()
|
||||||
(let
|
(let
|
||||||
((the-event (and (match-kw "the") (or (match-kw "event") (match-kw "default")))))
|
((mode (cond ((match-kw "the") (do (match-kw "event") (match-kw "'s") "event")) ((or (match-kw "default") (and (= (tp-val) "default") (do (adv!) true))) "default") ((or (match-kw "bubbling") (and (= (tp-val) "bubbling") (do (adv!) true))) "bubbling") (true "event"))))
|
||||||
(list (quote halt!) (if the-event "event" "default")))))
|
(list (quote halt!) mode))))
|
||||||
(define
|
(define
|
||||||
parse-param-list
|
parse-param-list
|
||||||
(fn () (if (= (tp-type) "paren-open") (parse-call-args) (list))))
|
(fn () (if (= (tp-type) "paren-open") (parse-call-args) (list))))
|
||||||
|
|||||||
@@ -222,8 +222,13 @@
|
|||||||
(mode)
|
(mode)
|
||||||
(when
|
(when
|
||||||
event
|
event
|
||||||
(host-call event "preventDefault" (list))
|
(cond
|
||||||
(when (= mode "event") (host-call event "stopPropagation" (list))))))
|
((= mode "default") (host-call event "preventDefault"))
|
||||||
|
((= mode "bubbling") (host-call event "stopPropagation"))
|
||||||
|
(true
|
||||||
|
(do
|
||||||
|
(host-call event "preventDefault")
|
||||||
|
(host-call event "stopPropagation")))))))
|
||||||
|
|
||||||
;; ── Type coercion ───────────────────────────────────────────────
|
;; ── Type coercion ───────────────────────────────────────────────
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user