Skip to content

Commit

Permalink
SubmitEvent support added
Browse files Browse the repository at this point in the history
  • Loading branch information
rbri committed Apr 30, 2023
1 parent b104422 commit aa9c0f3
Show file tree
Hide file tree
Showing 7 changed files with 386 additions and 9 deletions.
3 changes: 3 additions & 0 deletions src/changes/changes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

<body>
<release version="3.2.0" date="Mai xx, 2023" description="Chrome/Edge 112, Firefox 112, Bugfixes">
<action type="add" dev="rbri">
SubmitEvent support added.
</action>
<action type="update" dev="rbri">
Avoid usage of org.w3c.dom.ranges.Range - this is not available on android.
</action>
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/org/htmlunit/html/HtmlForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import org.htmlunit.WebWindow;
import org.htmlunit.httpclient.HttpClientConverter;
import org.htmlunit.javascript.host.event.Event;
import org.htmlunit.javascript.host.event.SubmitEvent;
import org.htmlunit.protocol.javascript.JavaScriptURLConnection;
import org.htmlunit.util.EncodingSniffer;
import org.htmlunit.util.NameValuePair;
Expand Down Expand Up @@ -152,8 +153,8 @@ && getAttributeDirect(ATTRIBUTE_NOVALIDATE) != ATTRIBUTE_NOT_DEFINED) {
if (validate && !areChildrenValid()) {
return;
}

final ScriptResult scriptResult = fireEvent(Event.TYPE_SUBMIT);
final ScriptResult scriptResult = fireEvent(new SubmitEvent(this,
((HtmlElement) submitElement).getScriptableObject()));
if (isPreventDefault_) {
// null means 'nothing executed'
if (scriptResult == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@
import org.htmlunit.javascript.host.event.SecurityPolicyViolationEvent;
import org.htmlunit.javascript.host.event.SpeechSynthesisEvent;
import org.htmlunit.javascript.host.event.StorageEvent;
import org.htmlunit.javascript.host.event.SubmitEvent;
import org.htmlunit.javascript.host.event.TextEvent;
import org.htmlunit.javascript.host.event.TimeEvent;
import org.htmlunit.javascript.host.event.TouchEvent;
Expand Down Expand Up @@ -610,7 +611,7 @@ public final class JavaScriptConfiguration extends AbstractJavaScriptConfigurati
SpeechSynthesis.class, SpeechSynthesisErrorEvent.class, SpeechSynthesisEvent.class,
SpeechSynthesisUtterance.class, SpeechSynthesisVoice.class,
StereoPannerNode.class, Storage.class, StorageEvent.class, StorageManager.class,
StyleMedia.class, StyleSheet.class, StyleSheetList.class, SubtleCrypto.class,
StyleMedia.class, StyleSheet.class, StyleSheetList.class, SubmitEvent.class, SubtleCrypto.class,
SVGAElement.class, SVGAngle.class, SVGAnimatedAngle.class,
SVGAnimatedBoolean.class, SVGAnimatedEnumeration.class, SVGAnimatedInteger.class,
SVGAnimatedLength.class, SVGAnimatedLengthList.class, SVGAnimatedNumber.class, SVGAnimatedNumberList.class,
Expand Down
83 changes: 83 additions & 0 deletions src/main/java/org/htmlunit/javascript/host/event/SubmitEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Copyright (c) 2002-2023 Gargoyle Software Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.htmlunit.javascript.host.event;

import static org.htmlunit.javascript.configuration.SupportedBrowser.CHROME;
import static org.htmlunit.javascript.configuration.SupportedBrowser.EDGE;
import static org.htmlunit.javascript.configuration.SupportedBrowser.FF;
import static org.htmlunit.javascript.configuration.SupportedBrowser.FF_ESR;

import org.htmlunit.corejs.javascript.ScriptableObject;
import org.htmlunit.corejs.javascript.Undefined;
import org.htmlunit.html.DomNode;
import org.htmlunit.javascript.configuration.JsxClass;
import org.htmlunit.javascript.configuration.JsxConstructor;
import org.htmlunit.javascript.configuration.JsxGetter;
import org.htmlunit.javascript.host.html.HTMLElement;

/**
* A JavaScript object for {@code SubmitEvent}.
*
* @author Ronald Brill
*/
@JsxClass
public class SubmitEvent extends Event {

private HTMLElement submitter_;

/**
* Default constructor.
*/
public SubmitEvent() {
}

/**
* Ctor.
* @param domNode the DOM node that triggered the event
* @param submitElement
*
*/
public SubmitEvent(final DomNode domNode, final HTMLElement submitElement) {
super(domNode, Event.TYPE_SUBMIT);
submitter_ = submitElement;
}

/**
* JavaScript constructor.
*
* @param type the event type
* @param details the event details (optional)
*/
@Override
@JsxConstructor({CHROME, EDGE, FF, FF_ESR})
public void jsConstructor(final String type, final ScriptableObject details) {
super.jsConstructor(type, details);

if (details != null && !Undefined.isUndefined(details)) {
final Object submitter = details.get("submitter");
if (submitter instanceof HTMLElement) {
submitter_ = (HTMLElement) submitter;
}
}
}

/**
* @return the submitter
*/
@JsxGetter
public HTMLElement getSubmitter() {
return submitter_;
}
}
Loading

0 comments on commit aa9c0f3

Please sign in to comment.