UNPKG

ddd-jquery

Version:

de-bowerified, de-amdified, de-gruntified... jQuery.

95 lines 3.09 kB
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;