UNPKG

domtastic

Version:

Small, fast, and modular DOM and event library for modern browsers.

65 lines (52 loc) 1.79 kB
/** * @module CSS */ import { each } from './util'; const isNumeric = value => !isNaN(parseFloat(value)) && isFinite(value); const camelize = value => value.replace(/-([\da-z])/gi, (matches, letter) => letter.toUpperCase()); const dasherize = value => value.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(); /** * Get the value of a style property for the first element, or set one or more style properties for each element in the collection. * * @param {String|Object} key The name of the style property to get or set. Or an object containing key-value pairs to set as style properties. * @param {String} [value] The value of the style property to set. * @return {Object} The wrapped collection * @chainable * @example * $('.item').css('padding-left'); // get * $('.item').css('color', '#f00'); // set * $('.item').css({'border-width': '1px', display: 'inline-block'}); // set multiple */ export const css = function(key, value) { let styleProps, prop, val; if(typeof key === 'string') { key = camelize(key); if(typeof value === 'undefined') { let element = this.nodeType ? this : this[0]; if(element) { val = element.style[key]; return isNumeric(val) ? parseFloat(val) : val; } return undefined; } styleProps = {}; styleProps[key] = value; } else { styleProps = key; for(prop in styleProps) { val = styleProps[prop]; delete styleProps[prop]; styleProps[camelize(prop)] = val; } } each(this, element => { for(prop in styleProps) { if(styleProps[prop] || styleProps[prop] === 0) { element.style[prop] = styleProps[prop]; } else { element.style.removeProperty(dasherize(prop)); } } }); return this; };