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:
@@ -1985,12 +1985,26 @@ let run_spec_tests env test_files =
|
||||
Hashtbl.replace r "right" (Number 100.0); Hashtbl.replace r "bottom" (Number 100.0);
|
||||
Dict r
|
||||
| "insertAdjacentHTML" ->
|
||||
(* Simplified: coerce value to string and append to innerHTML *)
|
||||
(* Position-aware insertion, coerce value to string *)
|
||||
(match rest with
|
||||
| [String _pos; value] ->
|
||||
| [String pos; value] ->
|
||||
let html = match dom_stringify value with String s -> s | _ -> "" in
|
||||
let cur = match Hashtbl.find_opt d "innerHTML" with Some (String s) -> s | _ -> "" in
|
||||
Hashtbl.replace d "innerHTML" (String (cur ^ html)); Nil
|
||||
let new_html = match pos with
|
||||
| "afterbegin" -> html ^ cur (* prepend *)
|
||||
| _ -> cur ^ html (* beforeend / default: append *)
|
||||
in
|
||||
Hashtbl.replace d "innerHTML" (String new_html);
|
||||
(* Sync textContent *)
|
||||
let buf = Buffer.create (String.length new_html) in
|
||||
let in_tag = ref false in
|
||||
String.iter (fun c ->
|
||||
if c = '<' then in_tag := true
|
||||
else if c = '>' then in_tag := false
|
||||
else if not !in_tag then Buffer.add_char buf c
|
||||
) new_html;
|
||||
Hashtbl.replace d "textContent" (String (Buffer.contents buf));
|
||||
Nil
|
||||
| _ -> Nil)
|
||||
| "showModal" | "show" ->
|
||||
Hashtbl.replace d "open" (Bool true);
|
||||
|
||||
Reference in New Issue
Block a user