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)
|
||||
| _ -> 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
|
||||
(match m with
|
||||
| "setProperty" ->
|
||||
|
||||
@@ -1657,8 +1657,8 @@
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((the-event (and (match-kw "the") (or (match-kw "event") (match-kw "default")))))
|
||||
(list (quote halt!) (if the-event "event" "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!) mode))))
|
||||
(define
|
||||
parse-param-list
|
||||
(fn () (if (= (tp-type) "paren-open") (parse-call-args) (list))))
|
||||
|
||||
@@ -222,8 +222,13 @@
|
||||
(mode)
|
||||
(when
|
||||
event
|
||||
(host-call event "preventDefault" (list))
|
||||
(when (= mode "event") (host-call event "stopPropagation" (list))))))
|
||||
(cond
|
||||
((= mode "default") (host-call event "preventDefault"))
|
||||
((= mode "bubbling") (host-call event "stopPropagation"))
|
||||
(true
|
||||
(do
|
||||
(host-call event "preventDefault")
|
||||
(host-call event "stopPropagation")))))))
|
||||
|
||||
;; ── Type coercion ───────────────────────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user