Skip to content

Commit

Permalink
take care of referencing form elements
Browse files Browse the repository at this point in the history
  • Loading branch information
rbri committed Oct 2, 2023
1 parent 34a655b commit 1930190
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 41 deletions.
2 changes: 1 addition & 1 deletion src/changes/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
Upgrade Apache commons-io to 2.14.0.
</action>
<action type="fix" dev="rbri">
Form elements are all elements that belong to a form; not only the child elements. We now
Form elements are all elements that belong to a form; not only the child elements. We now
take care of elements that use the form attribute to specify the associated form in many more places.
</action>
<action type="add" dev="Lai Quang Duong">
Expand Down
14 changes: 1 addition & 13 deletions src/main/java/org/htmlunit/html/HtmlButton.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
package org.htmlunit.html;

import static org.htmlunit.BrowserVersionFeatures.EVENT_MOUSE_ON_DISABLED;
import static org.htmlunit.BrowserVersionFeatures.FORM_FORM_ATTRIBUTE_SUPPORTED;
import static org.htmlunit.BrowserVersionFeatures.HTMLBUTTON_SUBMIT_IGNORES_DISABLED_STATE;
import static org.htmlunit.BrowserVersionFeatures.HTMLBUTTON_WILL_VALIDATE_IGNORES_READONLY;
import static org.htmlunit.html.HtmlForm.ATTRIBUTE_FORMNOVALIDATE;
Expand Down Expand Up @@ -92,18 +91,7 @@ public void setValueAttribute(final String newValue) {
@Override
protected boolean doClickStateUpdate(final boolean shiftKey, final boolean ctrlKey) throws IOException {
if (hasFeature(HTMLBUTTON_SUBMIT_IGNORES_DISABLED_STATE) || !isDisabled()) {
HtmlForm form = null;
final String formId = getAttributeDirect("form");
if (DomElement.ATTRIBUTE_NOT_DEFINED == formId || !hasFeature(FORM_FORM_ATTRIBUTE_SUPPORTED)) {
form = getEnclosingForm();
}
else {
final DomElement elem = getHtmlPageOrNull().getElementById(formId);
if (elem instanceof HtmlForm) {
form = (HtmlForm) elem;
}
}

final HtmlForm form = getEnclosingForm();
if (form != null) {
final String type = getType();
if (TYPE_BUTTON.equals(type)) {
Expand Down
31 changes: 6 additions & 25 deletions src/main/java/org/htmlunit/html/HtmlForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -600,36 +600,17 @@ private <E extends HtmlElement> List<E> getFormElementsByAttribute(
public List<HtmlElement> getElements() {
final List<HtmlElement> elements = new ArrayList<>();

final String formId = getId();
final boolean formAttribSupported = formId != ATTRIBUTE_NOT_DEFINED
&& getPage().getWebClient().getBrowserVersion().hasFeature(FORM_FORM_ATTRIBUTE_SUPPORTED);

final HashSet<HtmlElement> nestedForms = new HashSet<>();

for (final HtmlElement element : ((HtmlPage) getPage()).getBody().getHtmlElementDescendants()) {
if (element != this && element instanceof HtmlForm && this.isAncestorOf(element)) {
nestedForms.add(element);
continue;
}

if (SUBMITTABLE_ELEMENT_NAMES.contains(element.getTagName())) {
if (isAncestorOf(element)) {
elements.add(element);
continue;
}

if (formAttribSupported) {
final String formIdRef = element.getAttribute("form");
if (formId.equals(formIdRef)) {
elements.add(element);
continue;
}
}
if (SUBMITTABLE_ELEMENT_NAMES.contains(element.getTagName())
&& element.getEnclosingForm() == this) {
elements.add(element);
}
}

for (final HtmlElement element : lostChildren_) {
if (SUBMITTABLE_ELEMENT_NAMES.contains(element.getTagName())) {
if (SUBMITTABLE_ELEMENT_NAMES.contains(element.getTagName())
&& element.getEnclosingForm() == this
&& !elements.contains(element)) {
elements.add(element);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ protected Object getWithPreemption(final String name) {
return new ArrayList<>();
}
response.addAll(((HtmlForm) domNode).getElements());
response.addAll(htmlForm.getLostChildren());
return response;
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.htmlunit.html.HtmlPageTest;
import org.htmlunit.junit.BrowserRunner;
import org.htmlunit.junit.BrowserRunner.Alerts;
import org.htmlunit.junit.BrowserRunner.HtmlUnitNYI;
import org.htmlunit.junit.BrowserRunner.NotYetImplemented;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand Down Expand Up @@ -965,7 +966,7 @@ public void formInTable8() throws Exception {
@Test
@Alerts(DEFAULT = {"3", "1b", "1a", "1c", "0", "TABLE"},
IE = {"3", "1a", "1b", "1c", "0", "TABLE"})
@NotYetImplemented({CHROME, EDGE, FF, FF_ESR})
@HtmlUnitNYI(IE = {"3", "1b", "1a", "1c", "0", "TABLE"})
public void formInTable9() throws Exception {
final String html = "<html>\n"
+ "<body>\n"
Expand Down

0 comments on commit 1930190

Please sign in to comment.