From 01fd613c53d7208d206449e24b3523e2df3a559d Mon Sep 17 00:00:00 2001 From: imasustink Date: Tue, 26 Sep 2017 17:48:45 -0700 Subject: [PATCH] Deprecate dom/data/core in favor of can-dom-data-state --- dom/data/core.js | 77 ---------------------- dom/data/data-test.js | 28 ++++---- dom/data/data.js | 16 ++--- dom/mutation-observer/document/document.js | 16 ++--- js/cid/get-cid.js | 4 +- package.json | 1 + 6 files changed, 33 insertions(+), 109 deletions(-) delete mode 100644 dom/data/core.js diff --git a/dom/data/core.js b/dom/data/core.js deleted file mode 100644 index fdf27e64..00000000 --- a/dom/data/core.js +++ /dev/null @@ -1,77 +0,0 @@ -'use strict'; - -var isEmptyObject = require("../../js/is-empty-object/is-empty-object"); - -var data = {}; -var expando = "can" + new Date(); -var uuid = 0; - -// set data for an element -// returns true if this is the first data for this element -// so that caller can track number of elements with data set -var setData = function(name, value) { - var id = this[expando] || (this[expando] = ++uuid), - store = data[id], - newStore = false; - - if (!data[id]) { - newStore = true; - store = data[id] = {}; - } - - if (name !== undefined) { - store[name] = value; - } - return newStore; -}; - -// delete this node's `data` -// returns true if the node was deleted. -var deleteNode = function() { - var id = this[expando]; - var nodeDeleted = false; - if(id && data[id]) { - nodeDeleted = true; - delete data[id]; - } - return nodeDeleted; -}; - -/* - * Core of domData that does not depend on mutationDocument - * This is separated in order to prevent circular dependencies - */ -module.exports = { - _data: data, - - getCid: function() { - return this[expando]; - }, - - cid: function(){ - return this[expando] || (this[expando] = ++uuid); - }, - - expando: expando, - - get: function(key) { - var id = this[expando], - store = id && data[id]; - return key === undefined ? store || setData(this) : store && store[key]; - }, - - set: setData, - - clean: function(prop) { - var id = this[expando]; - var itemData = data[id]; - if (itemData && itemData[prop]) { - delete itemData[prop]; - } - if(isEmptyObject(itemData)) { - deleteNode.call(this); - } - }, - - delete: deleteNode -}; diff --git a/dom/data/data-test.js b/dom/data/data-test.js index 242e10f7..23f22df3 100644 --- a/dom/data/data-test.js +++ b/dom/data/data-test.js @@ -1,7 +1,7 @@ 'use strict'; var domData = require("./data"); -var domDataCore = require("./core"); +var domDataState = require("can-dom-data-state"); var diff = require("../../js/diff-object/diff-object"); var getDocument = require('can-globals/document/document'); var mutate = require("../mutate/mutate"); @@ -14,18 +14,18 @@ unit.module('can-util/dom/data'); unit.test('domData should be cleaned up if element is removed from DOM', function (assert) { var done = assert.async(); var fixture = document.getElementById('qunit-fixture'); - var origDataKeys = Object.keys(domDataCore._data); + var origDataKeys = Object.keys(domDataState._data); var div = document.createElement('div'); mutate.appendChild.call(fixture, div); domData.set.call(div, "div-data", { abc: "def" }); - var newDataKeys = Object.keys(domDataCore._data); + var newDataKeys = Object.keys(domDataState._data); assert.ok(diff(origDataKeys, newDataKeys).length > 0, "items added to domData._data for div"); mutate.removeChild.call(fixture, div); var checkRemoved = function() { - if (diff(Object.keys(domDataCore._data), origDataKeys).length === 0) { + if (diff(Object.keys(domDataState._data), origDataKeys).length === 0) { assert.ok(true, "domData._data returned to initial state"); done(); } @@ -40,25 +40,25 @@ unit.test('domData should be cleaned up if element is removed from DOM', functio unit.test('domData should be cleaned up if multiple elements are removed from DOM', function (assert) { var done = assert.async(); var fixture = document.getElementById('qunit-fixture'); - var origDataKeys = Object.keys(domDataCore._data); + var origDataKeys = Object.keys(domDataState._data); var div = document.createElement('div'); mutate.appendChild.call(fixture, div); domData.set.call(div, "div-data", { abc: "def" }); - var newDataKeys = Object.keys(domDataCore._data); + var newDataKeys = Object.keys(domDataState._data); assert.ok(diff(origDataKeys, newDataKeys).length > 0, "items added to domData._data for div"); var p = document.createElement('p'); mutate.appendChild.call(fixture, p); domData.set.call(p, "p-data", { ghi: "jkl" }); - newDataKeys = Object.keys(domDataCore._data); + newDataKeys = Object.keys(domDataState._data); assert.ok(diff(origDataKeys, newDataKeys).length > 1, "items added to domData._data for p"); mutate.removeChild.call(fixture, div); mutate.removeChild.call(fixture, p); var checkRemoved = function() { - if (diff(Object.keys(domDataCore._data), origDataKeys).length === 0) { + if (diff(Object.keys(domDataState._data), origDataKeys).length === 0) { assert.ok(true, "domData._data returned to initial state"); done(); } @@ -73,19 +73,19 @@ unit.test('domData should be cleaned up if multiple elements are removed from DO unit.test('domData should be cleaned up if element is removed from DOM after calling setData for two different keys', function (assert) { var fixture = document.getElementById('qunit-fixture'); var done = assert.async(); - var origDataKeys = Object.keys(domDataCore._data); + var origDataKeys = Object.keys(domDataState._data); var div = document.createElement('div'); mutate.appendChild.call(fixture, div); domData.set.call(div, "div-data", { abc: "def" }); domData.set.call(div, "div-other-data", { ghi: "jkl" }); - var newDataKeys = Object.keys(domDataCore._data); + var newDataKeys = Object.keys(domDataState._data); assert.ok(diff(origDataKeys, newDataKeys).length > 0, "items added to domData._data for div"); mutate.removeChild.call(fixture, div); var checkRemoved = function() { - if (diff(Object.keys(domDataCore._data), origDataKeys).length === 0) { + if (diff(Object.keys(domDataState._data), origDataKeys).length === 0) { assert.ok(true, "domData._data returned to initial state"); done(); } @@ -100,19 +100,19 @@ unit.test('domData should be cleaned up if element is removed from DOM after cal unit.test('domData should be cleaned up if element is removed from DOM after calling setData twice for the same key', function (assert) { var fixture = document.getElementById('qunit-fixture'); var done = assert.async(); - var origDataKeys = Object.keys(domDataCore._data); + var origDataKeys = Object.keys(domDataState._data); var div = document.createElement('div'); mutate.appendChild.call(fixture, div); domData.set.call(div, "div-data", { abc: "def" }); domData.set.call(div, "div-data", { ghi: "jkl" }); - var newDataKeys = Object.keys(domDataCore._data); + var newDataKeys = Object.keys(domDataState._data); assert.ok(diff(origDataKeys, newDataKeys).length > 0, "items added to domData._data for div"); mutate.removeChild.call(fixture, div); var checkRemoved = function() { - if (diff(Object.keys(domDataCore._data), origDataKeys).length === 0) { + if (diff(Object.keys(domDataState._data), origDataKeys).length === 0) { assert.ok(true, "domData._data returned to initial state"); done(); } diff --git a/dom/data/data.js b/dom/data/data.js index a09d8722..05a04378 100644 --- a/dom/data/data.js +++ b/dom/data/data.js @@ -1,10 +1,10 @@ 'use strict'; -var domDataCore = require("./core"); +var domDataState = require("can-dom-data-state"); var mutationDocument = require("../mutation-observer/document/document"); var deleteNode = function() { - return domDataCore.delete.call(this); + return domDataState.delete.call(this); }; // count of distinct elements that have domData set @@ -38,7 +38,7 @@ module.exports = { * * Return the previously set unique identifier for the dom node. */ - getCid: domDataCore.getCid, + getCid: domDataState.getCid, /** * @function can-util/dom/data/data.cid domData.cid * @signature `domData.cid.call(el)` @@ -53,14 +53,14 @@ module.exports = { * using the [can-util/dom/data/data.expando expando] property. Return the * unique cid whether or not it is newly set */ - cid: domDataCore.cid, + cid: domDataState.cid, /** * @property can-util/dom/data/data.expando domData.expando * @type {String} * * The key in which elements' cids are stored */ - expando: domDataCore.expando, + expando: domDataState.expando, /** * @function can-util/dom/data/data.clean domData.clean * @param {String} prop the property to remove from the element's data @@ -74,7 +74,7 @@ module.exports = { * domData.clean.call(el, "metadata"); * ``` */ - clean: domDataCore.clean, + clean: domDataState.clean, /** * @function can-util/dom/data/data.get domData.get * @signature `domData.get.call(el, key)` @@ -89,7 +89,7 @@ module.exports = { * * @param {String} key A string used as a unique key for storing data associated with this DOM Node. */ - get: domDataCore.get, + get: domDataState.get, /** * @function can-util/dom/data/data.set domData.set * @signature `domData.set.call(el, name, value)` @@ -114,7 +114,7 @@ module.exports = { mutationDocument.onAfterRemovedNodes(cleanupDomData); } // increment elementSetCount if set returns true - elementSetCount += domDataCore.set.call(this, name, value) ? 1 : 0; + elementSetCount += domDataState.set.call(this, name, value) ? 1 : 0; }, /** * @function can-util/dom/data/data.delete domData.delete diff --git a/dom/mutation-observer/document/document.js b/dom/mutation-observer/document/document.js index d6a58dbc..f23f1d44 100644 --- a/dom/mutation-observer/document/document.js +++ b/dom/mutation-observer/document/document.js @@ -1,7 +1,7 @@ 'use strict'; var getDocument = require('can-globals/document/document'); -var domDataCore = require("../../data/core"); +var domDataState = require("can-dom-data-state"); var getMutationObserver = require("can-globals/mutation-observer/mutation-observer"); var each = require("../../../js/each/each"); var CIDStore = require("../../../js/cid-set/cid-set"); @@ -34,7 +34,7 @@ var mutationObserverDocument = { var MO = getMutationObserver(); if (MO) { var documentElement = getDocument().documentElement; - var globalObserverData = domDataCore.get.call(documentElement, "globalObserverData"); + var globalObserverData = domDataState.get.call(documentElement, "globalObserverData"); if(!globalObserverData) { var observer = new MO(function (mutations) { globalObserverData.handlers.forEach(function(handler){ @@ -47,14 +47,14 @@ var mutationObserverDocument = { observer: observer, handlers: [] }; - domDataCore.set.call(documentElement, "globalObserverData", globalObserverData); + domDataState.set.call(documentElement, "globalObserverData", globalObserverData); } globalObserverData.handlers.push(handler); } }, remove: function(handler){ var documentElement = getDocument().documentElement; - var globalObserverData = domDataCore.get.call(documentElement, "globalObserverData"); + var globalObserverData = domDataState.get.call(documentElement, "globalObserverData"); if(globalObserverData) { var index = globalObserverData.handlers.indexOf(handler); if(index >= 0) { @@ -62,7 +62,7 @@ var mutationObserverDocument = { } if(globalObserverData.handlers.length === 0 ){ globalObserverData.observer.disconnect(); - domDataCore.clean.call(documentElement, "globalObserverData"); + domDataState.clean.call(documentElement, "globalObserverData"); } } } @@ -73,7 +73,7 @@ var makeMutationMethods = function(name) { var getMutationData = function() { var documentElement = getDocument().documentElement; - var mutationData = domDataCore.get.call(documentElement, mutationName + "MutationData"); + var mutationData = domDataState.get.call(documentElement, mutationName + "MutationData"); if(!mutationData) { mutationData = { @@ -83,7 +83,7 @@ var makeMutationMethods = function(name) { hander: null }; if (getMutationObserver()) { - domDataCore.set.call(documentElement, mutationName + "MutationData", mutationData); + domDataState.set.call(documentElement, mutationName + "MutationData", mutationData); } } return mutationData; @@ -120,7 +120,7 @@ var makeMutationMethods = function(name) { var mutationData = getMutationData(); if( mutationData.handlers.length === 0 && mutationData.afterHandlers.length === 0 ) { this.remove(mutationData.handler); - domDataCore.clean.call(documentElement, mutationName + "MutationData"); + domDataState.clean.call(documentElement, mutationName + "MutationData"); } }; diff --git a/js/cid/get-cid.js b/js/cid/get-cid.js index 332d977b..0cb6bbcf 100644 --- a/js/cid/get-cid.js +++ b/js/cid/get-cid.js @@ -1,11 +1,11 @@ 'use strict'; var CID = require("can-cid"); -var domDataCore = require("../../dom/data/core"); +var domDataState = require("can-dom-data-state"); module.exports = function(obj){ if(typeof obj.nodeType === "number") { - return domDataCore.cid.call(obj); + return domDataState.cid.call(obj); } else { var type = typeof obj; var isObject = type !== null && (type === "object" || type === "function"); diff --git a/package.json b/package.json index ab143a10..a0811212 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ "can-assign": "^1.0.0", "can-cid": "^1.0.0", "can-deparam": "^1.0.0", + "can-dom-data-state": "^0.1.0", "can-event-dom-enter": "^1.0.0", "can-event-dom-radiochange": "^1.0.0", "can-globals": "^0.1.0",