Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(685)

Unified Diff: node_modules/vulcanize/node_modules/whacko/lib/api/css.js

Issue 800513006: Added vulcanize under third_party/npm_modules (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+ }, {});
+}

Powered by Google App Engine
This is Rietveld 408576698