| Index: node_modules/vulcanize/node_modules/whacko/lib/api/css.js
|
| diff --git a/node_modules/vulcanize/node_modules/whacko/lib/api/css.js b/node_modules/vulcanize/node_modules/whacko/lib/api/css.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5febdd470f4ddd3825b7211825cbb101871f42c8
|
| --- /dev/null
|
| +++ b/node_modules/vulcanize/node_modules/whacko/lib/api/css.js
|
| @@ -0,0 +1,118 @@
|
| +var _ = require('lodash'),
|
| + domEach = require('../utils').domEach;
|
| +var toString = Object.prototype.toString;
|
| +
|
| +/**
|
| + * Set / Get css.
|
| + *
|
| + * @param {String|Object} prop
|
| + * @param {String} val
|
| + * @return {self}
|
| + * @api public
|
| + */
|
| +
|
| +exports.css = function(prop, val) {
|
| + if (arguments.length === 2 ||
|
| + // When `prop` is a "plain" object
|
| + (toString.call(prop) === '[object Object]')) {
|
| + return domEach(this, function(idx, el) {
|
| + setCss(el, prop, val, idx);
|
| + });
|
| + } else {
|
| + return getCss(this[0], prop);
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Set styles of all elements.
|
| + *
|
| + * @param {String|Object} prop
|
| + * @param {String} val
|
| + * @param {Number} idx - optional index within the selection
|
| + * @return {self}
|
| + * @api private
|
| + */
|
| +
|
| +function setCss(el, prop, val, idx) {
|
| + if ('string' == typeof prop) {
|
| + var styles = getCss(el);
|
| + if (typeof val === 'function') {
|
| + val = val.call(el, idx, el);
|
| + }
|
| +
|
| + if (val === '') {
|
| + delete styles[prop];
|
| + } else if (val != null) {
|
| + styles[prop] = val;
|
| + }
|
| +
|
| + el.attribs.style = stringify(styles);
|
| + } else if ('object' == typeof prop) {
|
| + Object.keys(prop).forEach(function(k){
|
| + setCss(el, k, prop[k]);
|
| + });
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Get parsed styles of the first element.
|
| + *
|
| + * @param {String} prop
|
| + * @return {Object}
|
| + * @api private
|
| + */
|
| +
|
| +function getCss(el, prop) {
|
| + var styles = parse(el.attribs.style);
|
| + if (typeof prop === 'string') {
|
| + return styles[prop];
|
| + } else if (Array.isArray(prop)) {
|
| + return _.pick(styles, prop);
|
| + } else {
|
| + return styles;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Stringify `obj` to styles.
|
| + *
|
| + * @param {Object} obj
|
| + * @return {Object}
|
| + * @api private
|
| + */
|
| +
|
| +function stringify(obj) {
|
| + return Object.keys(obj || {})
|
| + .reduce(function(str, prop){
|
| + return str += ''
|
| + + (str ? ' ' : '')
|
| + + prop
|
| + + ': '
|
| + + obj[prop]
|
| + + ';';
|
| + }, '');
|
| +}
|
| +
|
| +/**
|
| + * Parse `styles`.
|
| + *
|
| + * @param {String} styles
|
| + * @return {Object}
|
| + * @api private
|
| + */
|
| +
|
| +function parse(styles) {
|
| + styles = (styles || '').trim();
|
| +
|
| + if (!styles) return {};
|
| +
|
| + return styles
|
| + .split(';')
|
| + .reduce(function(obj, str){
|
| + var n = str.indexOf(':');
|
| + // skip if there is no :, or if it is the first/last character
|
| + if (n < 1 || n === str.length-1) return obj;
|
| + obj[str.slice(0,n).trim()] = str.slice(n+1).trim();
|
| + return obj;
|
| + }, {});
|
| +}
|
|
|