ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
94 lines • 3.49 kB
JavaScript
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;