diff --git a/src/pat/sortable/index.html b/src/pat/sortable/index.html
index 2dc0b6fd2..df2f2350f 100644
--- a/src/pat/sortable/index.html
+++ b/src/pat/sortable/index.html
@@ -30,7 +30,8 @@
Horizontal sorting
Vertical sorting with pat-clone
- Add item via injection
+
diff --git a/src/pat/sortable/sortable.js b/src/pat/sortable/sortable.js
index 054f4aa09..f202a4b44 100644
--- a/src/pat/sortable/sortable.js
+++ b/src/pat/sortable/sortable.js
@@ -23,31 +23,18 @@ export default Base.extend({
this.options = parser.parse(this.$el, false);
this.recordPositions().initScrolling();
this.$el.on("pat-update", this.onPatternUpdate.bind(this));
+ this.$el.on("patterns-injected", this.recordPositions.bind(this));
},
onPatternUpdate: function (ev, data) {
/* Handler which gets called when pat-update is triggered within
* the .pat-sortable element.
*/
- if (data?.pattern !== "clone" || data?.action !== "added" || !data?.dom) {
+ if (data?.pattern !== "clone" || data?.action !== "added") {
// Nothing to do.
return;
}
-
this.recordPositions();
-
- events.add_event_listener(
- data.dom,
- "dragstart",
- "pat-sortable--dragstart",
- this.onDragStart.bind(this)
- );
- events.add_event_listener(
- data.dom,
- "dragend",
- "pat-sortable--dragend",
- this.onDragEnd.bind(this)
- );
},
recordPositions: function () {
diff --git a/src/pat/sortable/sortable.test.js b/src/pat/sortable/sortable.test.js
index 151e0b4d1..4a1198a21 100644
--- a/src/pat/sortable/sortable.test.js
+++ b/src/pat/sortable/sortable.test.js
@@ -1,4 +1,5 @@
import events from "../../core/events";
+import utils from "../../core/utils";
import $ from "jquery";
import Sortable from "./sortable";
@@ -180,4 +181,36 @@ describe("pat-sortable", function () {
expect(cloned.classList.contains(sortable.options.dragClass)).toBe(true);
});
+
+ it("6 - Initializes sorting behavior on pat-injected elements.", async function () {
+ const Inject = (await import("../inject/inject")).default;
+
+ document.body.innerHTML = `
+
+ Inject
+
+ - item
+
+ `;
+ const el = document.querySelector(".pat-sortable");
+ const sortable = new Sortable(el);
+ const el_inject = document.querySelector(".pat-inject");
+ Inject.init($(el_inject));
+
+ el_inject.click();
+ await utils.timeout(1);
+
+ const injected = el.querySelector("li");
+ expect(injected).toBeTruthy();
+
+ const drag_handle = injected.querySelector(".sortable-handle");
+ expect(drag_handle).toBeTruthy();
+ drag_handle.dispatchEvent(new Event("dragstart"));
+
+ expect(injected.classList.contains(sortable.options.dragClass)).toBe(true);
+ });
});