HS: fix empty/halt/morph/reset/dialog — 17 upstream tests pass
- parser `empty` no-target → (ref "me") (was bogus (sym "me")) - parser `halt` modes distinguish: "all"/"bubbling"/"default" halt execution (raise hs-return), "the-event"/"the event's" only stop propagation/default. "'s" now matched as op token, not keyword. - parser `get` cmd: dispatch + cmd-kw list + parse-get-cmd (parses expr with optional `as TYPE`). Required for `get result as JSON` in fetch chains. - compiler empty-target for (local X): emit (set! X (hs-empty-like X)) so arrays/sets/maps clear the variable, not call DOM empty on the value. - runtime hs-empty-like: container-of-same-type empty value. - runtime hs-empty-target!: drop dead FORM branch that was short-circuiting to innerHTML=""; the querySelectorAll-over-inputs branch now runs. - runtime hs-halt!: take ev param (was free `event` lookup); raise hs-return to stop execution unless mode is "the-event". - runtime hs-reset!: type-aware — FORM → reset, INPUT/TEXTAREA → value/checked from defaults, SELECT → defaultSelected option. - runtime hs-open!/hs-close!: toggle `open` attribute on details elements (not just the prop) so dom-has-attr? assertions work. - runtime hs-coerce JSON: json-stringify dict/list (was str). - test-runner mock: host-get on List + "length"/"size" (was only Dict); dom-set-attr tracks defaultChecked / defaultSelected / defaultValue; mock_query_all supports comma-separated selector groups. - generator: emit boolean attrs (checked/selected/etc) even with null value; drop overcautious "skip HS with bare quotes or embedded HTML" guard so morph tests (source contains embedded <div>) emit properly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,14 @@
|
||||
(let ((sx (hs-to-sx (hs-compile src))))
|
||||
(let ((handler (eval-expr-cek
|
||||
(list (quote fn) (list (quote me)) (list (quote let) (list (list (quote it) nil) (list (quote event) nil)) sx)))))
|
||||
(handler nil)))))
|
||||
(guard
|
||||
(_e
|
||||
(true
|
||||
(if
|
||||
(and (list? _e) (= (first _e) "hs-return"))
|
||||
(nth _e 1)
|
||||
(raise _e))))
|
||||
(handler nil))))))
|
||||
|
||||
;; Evaluate with a specific me value (for "I am between" etc.)
|
||||
(define eval-hs-with-me
|
||||
@@ -31,7 +38,14 @@
|
||||
(let ((sx (hs-to-sx (hs-compile src))))
|
||||
(let ((handler (eval-expr-cek
|
||||
(list (quote fn) (list (quote me)) (list (quote let) (list (list (quote it) nil) (list (quote event) nil)) sx)))))
|
||||
(handler me-val)))))
|
||||
(guard
|
||||
(_e
|
||||
(true
|
||||
(if
|
||||
(and (list? _e) (= (first _e) "hs-return"))
|
||||
(nth _e 1)
|
||||
(raise _e))))
|
||||
(handler me-val))))))
|
||||
|
||||
;; ── add (19 tests) ──
|
||||
(defsuite "hs-upstream-add"
|
||||
@@ -235,6 +249,7 @@
|
||||
(dom-set-attr _el-d1 "id" "d1")
|
||||
(dom-add-class _el-d1 "item")
|
||||
(dom-set-attr _el-none "id" "none")
|
||||
(dom-set-attr _el-none "hidden" "")
|
||||
(dom-append (dom-body) _el-trigger)
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(dom-append (dom-body) _el-none)
|
||||
@@ -365,7 +380,7 @@
|
||||
(dom-append _el-d1 _el-p)
|
||||
(dom-append _el-div _el-p3)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
;; SKIP check: skip div.innerHTML.includes("foo").should.equal(true)
|
||||
;; SKIP check: skip div.innerHTML.includes("bar").should.equal(true)
|
||||
;; SKIP check: skip div.innerHTML.includes("doh").should.equal(true)
|
||||
@@ -797,8 +812,8 @@
|
||||
(dom-append (dom-body) _el-div)
|
||||
(dom-append _el-div _el-d1)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "foo")
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(assert= (dom-inner-html _el-div) "foo")
|
||||
))
|
||||
(deftest "can set complex indirect properties rhs"
|
||||
(hs-cleanup!)
|
||||
@@ -808,8 +823,8 @@
|
||||
(dom-append (dom-body) _el-div)
|
||||
(dom-append _el-div _el-d1)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "foo")
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(assert= (dom-inner-html _el-div) "foo")
|
||||
))
|
||||
(deftest "can set chained indirect properties"
|
||||
(hs-cleanup!)
|
||||
@@ -819,8 +834,8 @@
|
||||
(dom-append (dom-body) _el-div)
|
||||
(dom-append _el-div _el-d1)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "foo")
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(assert= (dom-inner-html _el-div) "foo")
|
||||
))
|
||||
(deftest "can set styles"
|
||||
(hs-cleanup!)
|
||||
@@ -1358,8 +1373,8 @@
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(assert= (dom-inner-html _el-div) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "properly processes hyperscript in new content in a element target"
|
||||
(hs-cleanup!)
|
||||
@@ -1369,8 +1384,8 @@
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "properly processes hyperscript in before"
|
||||
(hs-cleanup!)
|
||||
@@ -1380,8 +1395,8 @@
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "properly processes hyperscript at start of"
|
||||
(hs-cleanup!)
|
||||
@@ -1391,8 +1406,8 @@
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "properly processes hyperscript at end of"
|
||||
(hs-cleanup!)
|
||||
@@ -1402,8 +1417,8 @@
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "properly processes hyperscript after"
|
||||
(hs-cleanup!)
|
||||
@@ -1413,8 +1428,8 @@
|
||||
(dom-append (dom-body) _el-d1)
|
||||
(hs-activate! _el-d1)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(dom-dispatch _el-d1 "click" nil)
|
||||
(assert= (dom-inner-html _el-d1) "42")
|
||||
(dom-dispatch (dom-query "button") "click" nil)
|
||||
(assert= (dom-inner-html (dom-query "button")) "42")
|
||||
))
|
||||
(deftest "is null tolerant"
|
||||
(hs-cleanup!)
|
||||
@@ -2324,7 +2339,7 @@
|
||||
(dom-append _el-div _el-d3)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-d2 "click" nil)
|
||||
(assert (not (dom-has-class? _el-d1 "foo")))
|
||||
(assert (not (dom-has-class? _el-div "foo")))
|
||||
(assert (dom-has-class? _el-d2 "foo"))
|
||||
(assert (not (dom-has-class? _el-d3 "foo")))
|
||||
))
|
||||
@@ -2441,7 +2456,7 @@
|
||||
(dom-append _el-div _el-d3)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-d2 "click" nil)
|
||||
(assert= (dom-get-attr _el-d1 "data-foo") "bar")
|
||||
(assert= (dom-get-attr _el-div "data-foo") "bar")
|
||||
(assert= (dom-get-attr _el-d2 "data-foo") "")
|
||||
;; SKIP check: skip assert.isNull(d2.getAttribute("data-foo")
|
||||
;; SKIP check: skip assert.isNull(d3.getAttribute("data-foo")
|
||||
@@ -3300,7 +3315,7 @@
|
||||
(dom-append (dom-body) _el-div)
|
||||
(hs-activate! _el-div)
|
||||
(dom-dispatch _el-div "click" nil)
|
||||
(assert (dom-has-class? _el-div "topping"))
|
||||
(assert (dom-has-class? (dom-query "span") "topping"))
|
||||
))
|
||||
(deftest "can append a value to a set"
|
||||
(hs-cleanup!)
|
||||
@@ -4227,6 +4242,7 @@
|
||||
(hs-cleanup!)
|
||||
(let ((_el-d (dom-create-element "details")) (_el-summary (dom-create-element "summary")) (_el-p (dom-create-element "p")) (_el-button (dom-create-element "button")))
|
||||
(dom-set-attr _el-d "id" "d")
|
||||
(dom-set-attr _el-d "open" "")
|
||||
(dom-set-inner-html _el-summary "More")
|
||||
(dom-set-inner-html _el-p "Content")
|
||||
(dom-set-attr _el-button "_" "on click close #d")
|
||||
@@ -4386,6 +4402,7 @@
|
||||
(let ((_el-cb1 (dom-create-element "input")) (_el-button (dom-create-element "button")))
|
||||
(dom-set-attr _el-cb1 "id" "cb1")
|
||||
(dom-set-attr _el-cb1 "type" "checkbox")
|
||||
(dom-set-attr _el-cb1 "checked" "")
|
||||
(dom-set-attr _el-button "_" "on click empty #cb1")
|
||||
(dom-set-inner-html _el-button "Empty")
|
||||
(dom-append (dom-body) _el-cb1)
|
||||
@@ -4401,6 +4418,7 @@
|
||||
(dom-set-attr _el-option "value" "a")
|
||||
(dom-set-inner-html _el-option "A")
|
||||
(dom-set-attr _el-option2 "value" "b")
|
||||
(dom-set-attr _el-option2 "selected" "")
|
||||
(dom-set-inner-html _el-option2 "B")
|
||||
(dom-set-attr _el-button "_" "on click empty #sel1")
|
||||
(dom-set-inner-html _el-button "Empty")
|
||||
@@ -4422,6 +4440,7 @@
|
||||
(dom-set-inner-html _el-ta2 "text")
|
||||
(dom-set-attr _el-cb2 "id" "cb2")
|
||||
(dom-set-attr _el-cb2 "type" "checkbox")
|
||||
(dom-set-attr _el-cb2 "checked" "")
|
||||
(dom-set-attr _el-button "_" "on click empty #f1")
|
||||
(dom-set-inner-html _el-button "Empty")
|
||||
(dom-append (dom-body) _el-f1)
|
||||
@@ -4649,10 +4668,11 @@
|
||||
(let ((_el-target (dom-create-element "div")) (_el-button (dom-create-element "button")))
|
||||
(dom-set-attr _el-target "id" "target")
|
||||
(dom-set-inner-html _el-target "old")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click morph #target to \"<div id=target>new</div>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
(assert= (dom-text-content (dom-query-by-id "target")) "new")
|
||||
))
|
||||
@@ -4662,10 +4682,11 @@
|
||||
(dom-set-attr _el-target "id" "target")
|
||||
(dom-set-inner-html _el-target "old")
|
||||
(dom-set-attr _el-go "id" "go")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-go "_" "on click morph #target to \"<div id=target>new</div>\"")
|
||||
(dom-set-inner-html _el-go "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append (dom-body) _el-go)
|
||||
(hs-activate! _el-go)
|
||||
(dom-dispatch (dom-query-by-id "go") "click" nil)
|
||||
(assert= (dom-text-content (dom-query-by-id "target")) "new")
|
||||
))
|
||||
@@ -4675,10 +4696,11 @@
|
||||
(dom-set-attr _el-target "id" "target")
|
||||
(dom-add-class _el-target "old")
|
||||
(dom-set-inner-html _el-target "content")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click morph #target to \"<div id=target class=new>content</div>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
(assert (dom-has-class? (dom-query-by-id "target") "new"))
|
||||
))
|
||||
@@ -4736,12 +4758,13 @@
|
||||
(dom-set-attr _el-child "id" "child")
|
||||
(dom-set-attr _el-child "_" "on click put \"alive\" into me")
|
||||
(dom-set-inner-html _el-child "child")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click morph #target to \"<div id=target><p>replaced</p></div>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append _el-target _el-child)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-child)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
))
|
||||
(deftest "morph reorders children by id"
|
||||
@@ -4752,12 +4775,13 @@
|
||||
(dom-set-inner-html _el-a "A")
|
||||
(dom-set-attr _el-b "id" "b")
|
||||
(dom-set-inner-html _el-b "B")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click morph #target to \"<div id=target><div id=b>B2</div><div id=a>A2</div></div>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append _el-target _el-a)
|
||||
(dom-append _el-target _el-b)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
))
|
||||
(deftest "morph preserves matched child identity"
|
||||
@@ -4767,11 +4791,12 @@
|
||||
(dom-set-attr _el-child "id" "child")
|
||||
(dom-set-inner-html _el-child "old")
|
||||
(dom-set-attr _el-go "id" "go")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-go "_" "on click morph #target to \"<div id=target><div id=child>new</div></div>\"")
|
||||
(dom-set-inner-html _el-go "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append _el-target _el-child)
|
||||
(dom-append (dom-body) _el-go)
|
||||
(hs-activate! _el-go)
|
||||
(dom-dispatch (dom-query-by-id "go") "click" nil)
|
||||
))
|
||||
(deftest "morph with variable content"
|
||||
@@ -4856,6 +4881,7 @@
|
||||
(let ((_el-cb1 (dom-create-element "input")) (_el-button (dom-create-element "button")))
|
||||
(dom-set-attr _el-cb1 "id" "cb1")
|
||||
(dom-set-attr _el-cb1 "type" "checkbox")
|
||||
(dom-set-attr _el-cb1 "checked" "")
|
||||
(dom-set-attr _el-button "_" "on click reset #cb1")
|
||||
(dom-set-inner-html _el-button "Reset")
|
||||
(dom-append (dom-body) _el-cb1)
|
||||
@@ -4906,6 +4932,7 @@
|
||||
(dom-set-attr _el-option "value" "a")
|
||||
(dom-set-inner-html _el-option "A")
|
||||
(dom-set-attr _el-option2 "value" "b")
|
||||
(dom-set-attr _el-option2 "selected" "")
|
||||
(dom-set-inner-html _el-option2 "B")
|
||||
(dom-set-attr _el-option3 "value" "c")
|
||||
(dom-set-inner-html _el-option3 "C")
|
||||
@@ -5633,6 +5660,7 @@
|
||||
(dom-set-attr _el-input "type" "radio")
|
||||
(dom-set-attr _el-input "name" "color")
|
||||
(dom-set-attr _el-input "value" "red")
|
||||
(dom-set-attr _el-input "checked" "")
|
||||
(dom-set-attr _el-input1 "_" "bind $color to me")
|
||||
(dom-set-attr _el-input1 "type" "radio")
|
||||
(dom-set-attr _el-input1 "name" "color")
|
||||
@@ -6891,10 +6919,11 @@
|
||||
(let ((_el-target (dom-create-element "div")) (_el-button (dom-create-element "button")))
|
||||
(dom-set-attr _el-target "id" "target")
|
||||
(dom-set-inner-html _el-target "old")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click set #target to \"<span id=target>new</span>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-target)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
(assert= (dom-text-content (dom-query-by-id "target")) "new")
|
||||
))
|
||||
@@ -6920,13 +6949,14 @@
|
||||
(dom-set-inner-html _el-li2 "b")
|
||||
(dom-add-class _el-li3 "item")
|
||||
(dom-set-inner-html _el-li3 "c")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click set .item to \"<li class=item>replaced</li>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-list)
|
||||
(dom-append _el-list _el-li)
|
||||
(dom-append _el-list _el-li2)
|
||||
(dom-append _el-list _el-li3)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
))
|
||||
(deftest "set <query/> replaces all matching elements"
|
||||
@@ -6935,22 +6965,24 @@
|
||||
(dom-set-attr _el-box "id" "box")
|
||||
(dom-set-inner-html _el-p "one")
|
||||
(dom-set-inner-html _el-p2 "two")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click set <p/> in #box to \"<p>done</p>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-box)
|
||||
(dom-append _el-box _el-p)
|
||||
(dom-append _el-box _el-p2)
|
||||
(dom-append (dom-body) _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
))
|
||||
(deftest "set closest replaces ancestor"
|
||||
(hs-cleanup!)
|
||||
(let ((_el-div (dom-create-element "div")) (_el-button (dom-create-element "button")))
|
||||
(dom-add-class _el-div "wrapper")
|
||||
;; HS source has bare quotes or embedded HTML
|
||||
(dom-set-attr _el-button "_" "on click set (closest <div/>) to \"<div class=wrapper>replaced</div>\"")
|
||||
(dom-set-inner-html _el-button "go")
|
||||
(dom-append (dom-body) _el-div)
|
||||
(dom-append _el-div _el-button)
|
||||
(hs-activate! _el-button)
|
||||
(dom-dispatch _el-button "click" nil)
|
||||
(assert= (dom-text-content (dom-query ".wrapper")) "replaced")
|
||||
))
|
||||
@@ -7195,10 +7227,12 @@
|
||||
(let ((_el-table (dom-create-element "table")) (_el-tr (dom-create-element "tr")) (_el-td (dom-create-element "td")) (_el-input (dom-create-element "input")) (_el-tr4 (dom-create-element "tr")) (_el-td5 (dom-create-element "td")) (_el-input6 (dom-create-element "input")) (_el-tr7 (dom-create-element "tr")) (_el-td8 (dom-create-element "td")) (_el-input9 (dom-create-element "input")) (_el-tr10 (dom-create-element "tr")) (_el-td11 (dom-create-element "td")) (_el-master (dom-create-element "input")))
|
||||
(dom-add-class _el-input "cb")
|
||||
(dom-set-attr _el-input "type" "checkbox")
|
||||
(dom-set-attr _el-input "checked" "")
|
||||
(dom-add-class _el-input6 "cb")
|
||||
(dom-set-attr _el-input6 "type" "checkbox")
|
||||
(dom-add-class _el-input9 "cb")
|
||||
(dom-set-attr _el-input9 "type" "checkbox")
|
||||
(dom-set-attr _el-input9 "checked" "")
|
||||
(dom-set-attr _el-master "id" "master")
|
||||
(dom-set-attr _el-master "_" "set :checkboxes to <input[type=checkbox]/> in the closest <table/> where it is not me then on change set checked of the :checkboxes to my checked")
|
||||
(dom-set-attr _el-master "type" "checkbox")
|
||||
@@ -7223,10 +7257,12 @@
|
||||
(let ((_el-table (dom-create-element "table")) (_el-tr (dom-create-element "tr")) (_el-td (dom-create-element "td")) (_el-input (dom-create-element "input")) (_el-tr4 (dom-create-element "tr")) (_el-td5 (dom-create-element "td")) (_el-input6 (dom-create-element "input")) (_el-tr7 (dom-create-element "tr")) (_el-td8 (dom-create-element "td")) (_el-input9 (dom-create-element "input")) (_el-tr10 (dom-create-element "tr")) (_el-td11 (dom-create-element "td")) (_el-master (dom-create-element "input")))
|
||||
(dom-add-class _el-input "cb")
|
||||
(dom-set-attr _el-input "type" "checkbox")
|
||||
(dom-set-attr _el-input "checked" "")
|
||||
(dom-add-class _el-input6 "cb")
|
||||
(dom-set-attr _el-input6 "type" "checkbox")
|
||||
(dom-add-class _el-input9 "cb")
|
||||
(dom-set-attr _el-input9 "type" "checkbox")
|
||||
(dom-set-attr _el-input9 "checked" "")
|
||||
(dom-set-attr _el-master "id" "master")
|
||||
(dom-set-attr _el-master "_" "set :checkboxes to <input[type=checkbox]/> in the closest <table/> where it is not me then on change set checked of the :checkboxes to my checked then on change from the closest <table/> then if no :checkboxes where it is checked then set my indeterminate to false then set my checked to false then else if no :checkboxes where it is not checked then set my indeterminate to false then set my checked to true then else then set my indeterminate to true then end")
|
||||
(dom-set-attr _el-master "type" "checkbox")
|
||||
@@ -8292,6 +8328,7 @@
|
||||
(hs-cleanup!)
|
||||
(let ((_el-b1 (dom-create-element "button")) (_el-b2 (dom-create-element "button")))
|
||||
(dom-set-attr _el-b1 "id" "b1")
|
||||
(dom-set-attr _el-b1 "disabled" "")
|
||||
(dom-set-inner-html _el-b1 "Disabled")
|
||||
(dom-set-attr _el-b2 "id" "b2")
|
||||
(dom-set-inner-html _el-b2 "Enabled")
|
||||
|
||||
Reference in New Issue
Block a user