Skip to content

Commit aeb653d

Browse files
authored
Merge pull request #1189 from Patternslib/fix-pat-inject
pat inject fixes
2 parents e71c270 + 3be0170 commit aeb653d

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

src/core/events.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,11 +237,13 @@ const scroll_event = () => {
237237
});
238238
};
239239

240-
const submit_event = () => {
241-
return new Event("submit", {
240+
const submit_event = ({ submitter } = { submitter: undefined }) => {
241+
const event = new Event("submit", {
242242
bubbles: true,
243243
cancelable: true,
244244
});
245+
event.submitter = submitter; // undefined or the submitting element
246+
return event;
245247
};
246248

247249
const dragstart_event = () => {

src/core/events.test.js

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,12 +546,27 @@ describe("core.events tests", () => {
546546
});
547547

548548
it("submit event", async () => {
549-
outer.addEventListener("submit", () => {
549+
let submitter = "not defined";
550+
outer.addEventListener("submit", (e) => {
550551
catched = "outer";
552+
submitter = e.submitter;
551553
});
552554
inner.dispatchEvent(events.submit_event());
553555
await utils.timeout(1);
554556
expect(catched).toBe("outer");
557+
expect(submitter).toBe(undefined);
558+
});
559+
560+
it("submit event with defined submitter", async () => {
561+
let submitter = "not defined";
562+
outer.addEventListener("submit", (e) => {
563+
catched = "outer";
564+
submitter = e.submitter;
565+
});
566+
inner.dispatchEvent(events.submit_event({ submitter: inner }));
567+
await utils.timeout(1);
568+
expect(catched).toBe("outer");
569+
expect(submitter).toBe(inner);
555570
});
556571

557572
it("dragstart event", async () => {

src/lib/input-change-events.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
// helper functions to make all input elements
22
import $ from "jquery";
33
import logging from "../core/logging";
4-
var namespace = "input-change-events";
4+
const namespace = "input-change-events";
55
const log = logging.getLogger(namespace);
66

7-
var _ = {
7+
const _ = {
88
setup: function ($el, pat) {
99
if (!pat) {
1010
log.error("The name of the calling pattern has to be set.");
1111
return;
1212
}
1313
// list of patterns that installed input-change-event handlers
14-
var patterns = $el.data(namespace) || [];
14+
const patterns = $el.data(namespace) || [];
1515
log.debug("setup handlers for " + pat);
1616

1717
if (!patterns.length) {
@@ -42,9 +42,9 @@ var _ = {
4242
},
4343

4444
registerHandlersForElement: function () {
45-
var $el = $(this),
46-
isNumber = $el.is("input[type=number]"),
47-
isText = $el.is("input:text, input[type=search], textarea");
45+
const $el = $(this);
46+
const isNumber = $el.is("input[type=number]");
47+
const isText = $el.is("input:text, input[type=search], textarea");
4848

4949
if (isNumber) {
5050
// for <input type="number" /> we want to trigger the change
@@ -74,7 +74,7 @@ var _ = {
7474
},
7575

7676
remove: function ($el, pat) {
77-
var patterns = $el.data(namespace) || [];
77+
let patterns = $el.data(namespace) || [];
7878
if (patterns.indexOf(pat) === -1) {
7979
log.warn("input-change-events were never installed for " + pat);
8080
} else {

src/pat/auto-submit/auto-submit.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export default Base.extend({
6666

6767
// get all subforms whice are not yet auto submit forms.
6868
const subforms = el.querySelectorAll(
69-
".pat-autosubmit:not(.pat-autosubmit):not(.pat-auto-submit)"
69+
".pat-subform:not(.pat-autosubmit):not(.pat-auto-submit)"
7070
);
7171
for (const subform of subforms) {
7272
// register autosubmit on subform
@@ -128,7 +128,7 @@ export default Base.extend({
128128

129129
onInputChange(e) {
130130
e.stopPropagation();
131-
this.el.dispatchEvent(events.submit_event());
131+
this.el.dispatchEvent(events.submit_event({ submitter: e.target }));
132132
log.debug("triggered by " + e.type);
133133
},
134134
});

src/pat/inject/inject.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,9 @@ describe("pat-inject", function () {
11101110
// Work around jsDOM not submitting with image buttons.
11111111
$submit[0].addEventListener("click", async () => {
11121112
await utils.timeout(1); // wait a tick for click event reaching form before submitting.
1113-
$submit[0].form.dispatchEvent(events.submit_event());
1113+
$submit[0].form.dispatchEvent(
1114+
events.submit_event({ submitter: $submit[0] })
1115+
);
11141116
});
11151117

11161118
$submit[0].click();

0 commit comments

Comments
 (0)