diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-03 23:45:32 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-03 23:45:32 +0100 |
commit | 72c9cd858c8c0711b936ff08f255db8e451e150d (patch) | |
tree | 96b02a81f9f5706613d2513087cb797e48331512 /src | |
parent | 9f7289b063eb863523e5a0d4cbe7c707b48af225 (diff) | |
download | chawan-72c9cd858c8c0711b936ff08f255db8e451e150d.tar.gz |
dom: JS input/form fixes
Fixes acid3 test 53
Diffstat (limited to 'src')
-rw-r--r-- | src/html/dom.nim | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/html/dom.nim b/src/html/dom.nim index 22e66480..36aadf8e 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -289,7 +289,7 @@ type parserInserted*: bool HTMLInputElement* = ref object of FormAssociatedElement - inputType* {.jsgetset: "type".}: InputType + inputType* {.jsget: "type".}: InputType value* {.jsget.}: string internalChecked {.jsget: "checked".}: bool xcoord*: int @@ -1019,6 +1019,7 @@ const ReflectTable0 = [ makes("target", TAG_A, TAG_AREA, TAG_LABEL, TAG_LINK), makes("href", TAG_LINK), makeb("required", TAG_INPUT, TAG_SELECT, TAG_TEXTAREA), + makes("name", TAG_INPUT, TAG_SELECT, TAG_TEXTAREA), makeb("novalidate", "noValidate", TAG_FORM), makes("rel", TAG_A, TAG_LINK, TAG_LABEL), makes("for", "htmlFor", TAG_LABEL), @@ -2953,6 +2954,9 @@ proc setValue(this: HTMLInputElement; value: string) {.jsfset: "value".} = this.value = value this.setInvalid() +proc setType(this: HTMLInputElement; s: string) {.jsfset: "type".} = + this.attr(satType, s) + # <select> func jsForm(this: HTMLSelectElement): HTMLFormElement {.jsfget: "form".} = return this.form @@ -4169,6 +4173,7 @@ proc setForm*(element: FormAssociatedElement; form: HTMLFormElement) = of TAG_FIELDSET, TAG_OBJECT, TAG_OUTPUT, TAG_IMG: discard #TODO else: assert false + form.invalidateCollections() proc resetFormOwner(element: FormAssociatedElement) = element.parserInserted = false @@ -4183,6 +4188,10 @@ proc resetFormOwner(element: FormAssociatedElement) = let form = element.document.getElementById(element.attr(satForm)) if form of HTMLFormElement: element.setForm(HTMLFormElement(form)) + if element.form == nil: + for ancestor in element.ancestors: + if ancestor of HTMLFormElement: + element.setForm(HTMLFormElement(ancestor)) proc elementInsertionSteps(element: Element) = if element of HTMLOptionElement: |