Tab layout, first commit with new third party packages
[openemr.git] / public / assets / knockout-3-4-0 / src / utils.domData.js
blob163e0cdf526b312cf8447b951fc8a8d21ae44b6d
2 ko.utils.domData = new (function () {
3     var uniqueId = 0;
4     var dataStoreKeyExpandoPropertyName = "__ko__" + (new Date).getTime();
5     var dataStore = {};
7     function getAll(node, createIfNotFound) {
8         var dataStoreKey = node[dataStoreKeyExpandoPropertyName];
9         var hasExistingDataStore = dataStoreKey && (dataStoreKey !== "null") && dataStore[dataStoreKey];
10         if (!hasExistingDataStore) {
11             if (!createIfNotFound)
12                 return undefined;
13             dataStoreKey = node[dataStoreKeyExpandoPropertyName] = "ko" + uniqueId++;
14             dataStore[dataStoreKey] = {};
15         }
16         return dataStore[dataStoreKey];
17     }
19     return {
20         get: function (node, key) {
21             var allDataForNode = getAll(node, false);
22             return allDataForNode === undefined ? undefined : allDataForNode[key];
23         },
24         set: function (node, key, value) {
25             if (value === undefined) {
26                 // Make sure we don't actually create a new domData key if we are actually deleting a value
27                 if (getAll(node, false) === undefined)
28                     return;
29             }
30             var allDataForNode = getAll(node, true);
31             allDataForNode[key] = value;
32         },
33         clear: function (node) {
34             var dataStoreKey = node[dataStoreKeyExpandoPropertyName];
35             if (dataStoreKey) {
36                 delete dataStore[dataStoreKey];
37                 node[dataStoreKeyExpandoPropertyName] = null;
38                 return true; // Exposing "did clean" flag purely so specs can infer whether things have been cleaned up as intended
39             }
40             return false;
41         },
43         nextKey: function () {
44             return (uniqueId++) + dataStoreKeyExpandoPropertyName;
45         }
46     };
47 })();
49 ko.exportSymbol('utils.domData', ko.utils.domData);
50 ko.exportSymbol('utils.domData.clear', ko.utils.domData.clear); // Exporting only so specs can clear up after themselves fully