Skip to content

Commit 6b128bf

Browse files
committed
feat(core dom): Add "delete_data" to remove a previously set variable on a DOM element.
1 parent 755dff2 commit 6b128bf

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
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", () => {

0 commit comments

Comments
 (0)