ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
95 lines • 3.09 kB
JavaScript
var jQuery = require('../core'), rnotwhite = require('../var/rnotwhite'), __unnameddep__ = require('./accepts');
function Data() {
Object.defineProperty(this.cache = {}, 0, {
get: function () {
return {};
}
});
this.expando = jQuery.expando + Math.random();
}
Data.uid = 1;
Data.accepts = jQuery.acceptData;
Data.prototype = {
key: function (owner) {
if (!Data.accepts(owner)) {
return 0;
}
var descriptor = {}, unlock = owner[this.expando];
if (!unlock) {
unlock = Data.uid++;
try {
descriptor[this.expando] = { value: unlock };
Object.defineProperties(owner, descriptor);
} catch (e) {
descriptor[this.expando] = unlock;
jQuery.extend(owner, descriptor);
}
}
if (!this.cache[unlock]) {
this.cache[unlock] = {};
}
return unlock;
},
set: function (owner, data, value) {
var prop, unlock = this.key(owner), cache = this.cache[unlock];
if (typeof data === 'string') {
cache[data] = value;
} else {
if (jQuery.isEmptyObject(cache)) {
jQuery.extend(this.cache[unlock], data);
} else {
for (prop in data) {
cache[prop] = data[prop];
}
}
}
return cache;
},
get: function (owner, key) {
var cache = this.cache[this.key(owner)];
return key === undefined ? cache : cache[key];
},
access: function (owner, key, value) {
var stored;
if (key === undefined || key && typeof key === 'string' && value === undefined) {
stored = this.get(owner, key);
return stored !== undefined ? stored : this.get(owner, jQuery.camelCase(key));
}
this.set(owner, key, value);
return value !== undefined ? value : key;
},
remove: function (owner, key) {
var i, name, camel, unlock = this.key(owner), cache = this.cache[unlock];
if (key === undefined) {
this.cache[unlock] = {};
} else {
if (jQuery.isArray(key)) {
name = key.concat(key.map(jQuery.camelCase));
} else {
camel = jQuery.camelCase(key);
if (key in cache) {
name = [
key,
camel
];
} else {
name = camel;
name = name in cache ? [name] : name.match(rnotwhite) || [];
}
}
i = name.length;
while (i--) {
delete cache[name[i]];
}
}
},
hasData: function (owner) {
return !jQuery.isEmptyObject(this.cache[owner[this.expando]] || {});
},
discard: function (owner) {
if (owner[this.expando]) {
delete this.cache[owner[this.expando]];
}
}
};
module.exports = Data;