ddd-jquery
Version:
de-bowerified, de-amdified, de-gruntified... jQuery.
260 lines • 10.1 kB
JavaScript
var jQuery = require('./core'), pnum = require('./var/pnum'), access = require('./core/access'), rmargin = require('./css/var/rmargin'), rnumnonpx = require('./css/var/rnumnonpx'), cssExpand = require('./css/var/cssExpand'), isHidden = require('./css/var/isHidden'), getStyles = require('./css/var/getStyles'), curCSS = require('./css/curCSS'), defaultDisplay = require('./css/defaultDisplay'), addGetHookIf = require('./css/addGetHookIf'), support = require('./css/support'), data_priv = require('./data/var/data_priv'), __unnameddep__ = require('./core/init'), __unnameddep__ = require('./css/swap'), __unnameddep__ = require('./core/ready'), __unnameddep__ = require('./selector');
var rdisplayswap = /^(none|table(?!-c[ea]).+)/, rnumsplit = new RegExp('^(' + pnum + ')(.*)$', 'i'), rrelNum = new RegExp('^([+-])=(' + pnum + ')', 'i'), cssShow = {
position: 'absolute',
visibility: 'hidden',
display: 'block'
}, cssNormalTransform = {
letterSpacing: 0,
fontWeight: 400
}, cssPrefixes = [
'Webkit',
'O',
'Moz',
'ms'
];
function vendorPropName(style, name) {
if (name in style) {
return name;
}
var capName = name[0].toUpperCase() + name.slice(1), origName = name, i = cssPrefixes.length;
while (i--) {
name = cssPrefixes[i] + capName;
if (name in style) {
return name;
}
}
return origName;
}
function setPositiveNumber(elem, value, subtract) {
var matches = rnumsplit.exec(value);
return matches ? Math.max(0, matches[1] - (subtract || 0)) + (matches[2] || 'px') : value;
}
function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) {
var i = extra === (isBorderBox ? 'border' : 'content') ? 4 : name === 'width' ? 1 : 0, val = 0;
for (; i < 4; i += 2) {
if (extra === 'margin') {
val += jQuery.css(elem, extra + cssExpand[i], true, styles);
}
if (isBorderBox) {
if (extra === 'content') {
val -= jQuery.css(elem, 'padding' + cssExpand[i], true, styles);
}
if (extra !== 'margin') {
val -= jQuery.css(elem, 'border' + cssExpand[i] + 'Width', true, styles);
}
} else {
val += jQuery.css(elem, 'padding' + cssExpand[i], true, styles);
if (extra !== 'padding') {
val += jQuery.css(elem, 'border' + cssExpand[i] + 'Width', true, styles);
}
}
}
return val;
}
function getWidthOrHeight(elem, name, extra) {
var valueIsBorderBox = true, val = name === 'width' ? elem.offsetWidth : elem.offsetHeight, styles = getStyles(elem), isBorderBox = jQuery.css(elem, 'boxSizing', false, styles) === 'border-box';
if (val <= 0 || val == null) {
val = curCSS(elem, name, styles);
if (val < 0 || val == null) {
val = elem.style[name];
}
if (rnumnonpx.test(val)) {
return val;
}
valueIsBorderBox = isBorderBox && (support.boxSizingReliable() || val === elem.style[name]);
val = parseFloat(val) || 0;
}
return val + augmentWidthOrHeight(elem, name, extra || (isBorderBox ? 'border' : 'content'), valueIsBorderBox, styles) + 'px';
}
function showHide(elements, show) {
var display, elem, hidden, values = [], index = 0, length = elements.length;
for (; index < length; index++) {
elem = elements[index];
if (!elem.style) {
continue;
}
values[index] = data_priv.get(elem, 'olddisplay');
display = elem.style.display;
if (show) {
if (!values[index] && display === 'none') {
elem.style.display = '';
}
if (elem.style.display === '' && isHidden(elem)) {
values[index] = data_priv.access(elem, 'olddisplay', defaultDisplay(elem.nodeName));
}
} else {
if (!values[index]) {
hidden = isHidden(elem);
if (display && display !== 'none' || !hidden) {
data_priv.set(elem, 'olddisplay', hidden ? display : jQuery.css(elem, 'display'));
}
}
}
}
for (index = 0; index < length; index++) {
elem = elements[index];
if (!elem.style) {
continue;
}
if (!show || elem.style.display === 'none' || elem.style.display === '') {
elem.style.display = show ? values[index] || '' : 'none';
}
}
return elements;
}
jQuery.extend({
cssHooks: {
opacity: {
get: function (elem, computed) {
if (computed) {
var ret = curCSS(elem, 'opacity');
return ret === '' ? '1' : ret;
}
}
}
},
cssNumber: {
'columnCount': true,
'fillOpacity': true,
'fontWeight': true,
'lineHeight': true,
'opacity': true,
'order': true,
'orphans': true,
'widows': true,
'zIndex': true,
'zoom': true
},
cssProps: { 'float': 'cssFloat' },
style: function (elem, name, value, extra) {
if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
return;
}
var ret, type, hooks, origName = jQuery.camelCase(name), style = elem.style;
name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(style, origName));
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
if (value !== undefined) {
type = typeof value;
if (type === 'string' && (ret = rrelNum.exec(value))) {
value = (ret[1] + 1) * ret[2] + parseFloat(jQuery.css(elem, name));
type = 'number';
}
if (value == null || value !== value) {
return;
}
if (type === 'number' && !jQuery.cssNumber[origName]) {
value += 'px';
}
if (!support.clearCloneStyle && value === '' && name.indexOf('background') === 0) {
style[name] = 'inherit';
}
if (!hooks || !('set' in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
style[name] = '';
style[name] = value;
}
} else {
if (hooks && 'get' in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
return ret;
}
return style[name];
}
},
css: function (elem, name, extra, styles) {
var val, num, hooks, origName = jQuery.camelCase(name);
name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(elem.style, origName));
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
if (hooks && 'get' in hooks) {
val = hooks.get(elem, true, extra);
}
if (val === undefined) {
val = curCSS(elem, name, styles);
}
if (val === 'normal' && name in cssNormalTransform) {
val = cssNormalTransform[name];
}
if (extra === '' || extra) {
num = parseFloat(val);
return extra === true || jQuery.isNumeric(num) ? num || 0 : val;
}
return val;
}
});
jQuery.each([
'height',
'width'
], function (i, name) {
jQuery.cssHooks[name] = {
get: function (elem, computed, extra) {
if (computed) {
return elem.offsetWidth === 0 && rdisplayswap.test(jQuery.css(elem, 'display')) ? jQuery.swap(elem, cssShow, function () {
return getWidthOrHeight(elem, name, extra);
}) : getWidthOrHeight(elem, name, extra);
}
},
set: function (elem, value, extra) {
var styles = extra && getStyles(elem);
return setPositiveNumber(elem, value, extra ? augmentWidthOrHeight(elem, name, extra, jQuery.css(elem, 'boxSizing', false, styles) === 'border-box', styles) : 0);
}
};
});
jQuery.cssHooks.marginRight = addGetHookIf(support.reliableMarginRight, function (elem, computed) {
if (computed) {
return jQuery.swap(elem, { 'display': 'inline-block' }, curCSS, [
elem,
'marginRight'
]);
}
});
jQuery.each({
margin: '',
padding: '',
border: 'Width'
}, function (prefix, suffix) {
jQuery.cssHooks[prefix + suffix] = {
expand: function (value) {
var i = 0, expanded = {}, parts = typeof value === 'string' ? value.split(' ') : [value];
for (; i < 4; i++) {
expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
}
return expanded;
}
};
if (!rmargin.test(prefix)) {
jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
}
});
jQuery.fn.extend({
css: function (name, value) {
return access(this, function (elem, name, value) {
var styles, len, map = {}, i = 0;
if (jQuery.isArray(name)) {
styles = getStyles(elem);
len = name.length;
for (; i < len; i++) {
map[name[i]] = jQuery.css(elem, name[i], false, styles);
}
return map;
}
return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
}, name, value, arguments.length > 1);
},
show: function () {
return showHide(this, true);
},
hide: function () {
return showHide(this);
},
toggle: function (state) {
if (typeof state === 'boolean') {
return state ? this.show() : this.hide();
}
return this.each(function () {
if (isHidden(this)) {
jQuery(this).show();
} else {
jQuery(this).hide();
}
});
}
});
module.exports = jQuery;