UNPKG

ddd-jquery

Version:

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

94 lines 3.49 kB
var jQuery = require('./core'), rnotwhite = require('./var/rnotwhite'), access = require('./core/access'), data_priv = require('./data/var/data_priv'), data_user = require('./data/var/data_user'); var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr(elem, key, data) { var name; if (data === undefined && elem.nodeType === 1) { name = 'data-' + key.replace(rmultiDash, '-$1').toLowerCase(); data = elem.getAttribute(name); if (typeof data === 'string') { try { data = data === 'true' ? true : data === 'false' ? false : data === 'null' ? null : +data + '' === data ? +data : rbrace.test(data) ? jQuery.parseJSON(data) : data; } catch (e) { } data_user.set(elem, key, data); } else { data = undefined; } } return data; } jQuery.extend({ hasData: function (elem) { return data_user.hasData(elem) || data_priv.hasData(elem); }, data: function (elem, name, data) { return data_user.access(elem, name, data); }, removeData: function (elem, name) { data_user.remove(elem, name); }, _data: function (elem, name, data) { return data_priv.access(elem, name, data); }, _removeData: function (elem, name) { data_priv.remove(elem, name); } }); jQuery.fn.extend({ data: function (key, value) { var i, name, data, elem = this[0], attrs = elem && elem.attributes; if (key === undefined) { if (this.length) { data = data_user.get(elem); if (elem.nodeType === 1 && !data_priv.get(elem, 'hasDataAttrs')) { i = attrs.length; while (i--) { name = attrs[i].name; if (name.indexOf('data-') === 0) { name = jQuery.camelCase(name.slice(5)); dataAttr(elem, name, data[name]); } } data_priv.set(elem, 'hasDataAttrs', true); } } return data; } if (typeof key === 'object') { return this.each(function () { data_user.set(this, key); }); } return access(this, function (value) { var data, camelKey = jQuery.camelCase(key); if (elem && value === undefined) { data = data_user.get(elem, key); if (data !== undefined) { return data; } data = data_user.get(elem, camelKey); if (data !== undefined) { return data; } data = dataAttr(elem, camelKey, undefined); if (data !== undefined) { return data; } return; } this.each(function () { var data = data_user.get(this, camelKey); data_user.set(this, camelKey, value); if (key.indexOf('-') !== -1 && data !== undefined) { data_user.set(this, key, value); } }); }, null, value, arguments.length > 1, null, true); }, removeData: function (key) { return this.each(function () { data_user.remove(this, key); }); } }); module.exports = jQuery;