Skip to content

Commit 99b3b32

Browse files
authored
Merge pull request #1081 from Patternslib/fix-inject-close-panel
Fix inject close panel
2 parents 755dff2 + 3ff3b60 commit 99b3b32

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

src/core/dom.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,18 @@ const set_data = (el, name, value) => {
279279
el[`${DATA_PREFIX}${name}`] = value;
280280
};
281281

282+
/**
283+
* Delete a variable from the node instance.
284+
* We are using a prefix to make sure the data doesn't collide with other attributes.
285+
*
286+
* @param el {Node} - The DOM node which we want to delete the variable from.
287+
* @param name {String} - The name of the variable. Note - this is stored on
288+
* the DOM node prefixed with the DATA_PREFIX.
289+
*/
290+
const delete_data = (el, name) => {
291+
delete el[`${DATA_PREFIX}${name}`];
292+
};
293+
282294
/**
283295
* Simple template engine, based on JS template literal
284296
*
@@ -315,6 +327,7 @@ const dom = {
315327
find_scroll_container: find_scroll_container,
316328
get_data: get_data,
317329
set_data: set_data,
330+
delete_data: delete_data,
318331
template: template,
319332
add_event_listener: events.add_event_listener, // BBB export. TODO: Remove in an upcoming version.
320333
remove_event_listener: events.remove_event_listener, // BBB export. TODO: Remove in an upcoming version.

src/core/dom.test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -696,7 +696,7 @@ describe("core.dom tests", () => {
696696
});
697697
});
698698

699-
describe("set_data, get_data", function () {
699+
describe("set_data, get_data, delete_data", function () {
700700
it("can be used to store and retrieve data on DOM nodes.", function () {
701701
const el = document.createElement("div");
702702
dom.set_data(el, "test_data", "hello.");
@@ -715,6 +715,13 @@ describe("core.dom tests", () => {
715715
expect(dom.get_data(el, "test_data", null)).toBe(null);
716716
expect(dom.get_data(el, "test_data")).toBe(undefined);
717717
});
718+
it("can also delete the data from dom nodes.", function () {
719+
const el = document.createElement("div");
720+
dom.set_data(el, "test_data", "hello.");
721+
expect(dom.get_data(el, "test_data")).toBe("hello.");
722+
dom.delete_data(el, "test_data");
723+
expect(dom.get_data(el, "test_data")).toBe(undefined);
724+
});
718725
});
719726

720727
describe("template", () => {

src/pat/inject/inject.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -768,11 +768,11 @@ const inject = {
768768
// Wait for the next tick to ensure that the close-panel listener
769769
// is called before this one, even for non-async local injects.
770770
await utils.timeout(1);
771+
// Remove the close-panel event listener.
772+
events.remove_event_listener($el[0], "pat-inject--close-panel");
771773
// Only close the panel if a close-panel event was catched previously.
772774
if (do_close_panel) {
773775
do_close_panel = false;
774-
// Remove the close-panel event listener.
775-
events.remove_event_listener($el[0], "pat-inject--close-panel");
776776
// Re-trigger close-panel event if it was caught while injection was in progress.
777777
$el[0].dispatchEvent(
778778
new Event("close-panel", { bubbles: true, cancelable: true })

0 commit comments

Comments
 (0)