Index: node_modules/vulcanize/node_modules/whacko/lib/cheerio.js |
diff --git a/node_modules/vulcanize/node_modules/whacko/lib/cheerio.js b/node_modules/vulcanize/node_modules/whacko/lib/cheerio.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fc95e78c31bb284dc8d756f4e0c1551360d77f46 |
--- /dev/null |
+++ b/node_modules/vulcanize/node_modules/whacko/lib/cheerio.js |
@@ -0,0 +1,161 @@ |
+/* |
+ Module dependencies |
+*/ |
+ |
+var parse = require('./parse'), |
+ _ = require('lodash'); |
+ |
+/* |
+ * The API |
+ */ |
+ |
+var api = [ |
+ require('./api/attributes'), |
+ require('./api/traversing'), |
+ require('./api/manipulation'), |
+ require('./api/css') |
+]; |
+ |
+/* |
+ * A simple way to check for HTML strings or ID strings |
+ */ |
+ |
+var quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/; |
+ |
+/* |
+ * Instance of cheerio |
+ */ |
+ |
+var Cheerio = module.exports = function(selector, context, root, options) { |
+ if (!(this instanceof Cheerio)) return new Cheerio(selector, context, root, options); |
+ |
+ this.options = _.defaults(options || {}, this.options); |
+ |
+ // $(), $(null), $(undefined), $(false) |
+ if (!selector) return this; |
+ |
+ if (root) { |
+ if (typeof root === 'string') root = parse(root, this.options); |
+ this._root = Cheerio.call(this, root); |
+ } |
+ |
+ // $($) |
+ if (selector.cheerio) return selector; |
+ |
+ // $(dom) |
+ if (isNode(selector)) |
+ selector = [selector]; |
+ |
+ // $([dom]) |
+ if (Array.isArray(selector)) { |
+ _.forEach(selector, function(elem, idx) { |
+ this[idx] = elem; |
+ }, this); |
+ this.length = selector.length; |
+ return this; |
+ } |
+ |
+ // $(<html>) |
+ if (typeof selector === 'string' && isHtml(selector)) { |
+ return Cheerio.call(this, parse(selector, this.options).children); |
+ } |
+ |
+ // If we don't have a context, maybe we have a root, from loading |
+ if (!context) { |
+ context = this._root; |
+ } else if (typeof context === 'string') { |
+ if (isHtml(context)) { |
+ // $('li', '<ul>...</ul>') |
+ context = parse(context, this.options); |
+ context = Cheerio.call(this, context); |
+ } else { |
+ // $('li', 'ul') |
+ selector = [context, selector].join(' '); |
+ context = this._root; |
+ } |
+ // $('li', node), $('li', [nodes]) |
+ } else if (!context.cheerio) { |
+ context = Cheerio.call(this, context); |
+ } |
+ |
+ // If we still don't have a context, return |
+ if (!context) return this; |
+ |
+ // #id, .class, tag |
+ return context.find(selector); |
+}; |
+ |
+/** |
+ * Mix in `static` |
+ */ |
+ |
+_.extend(Cheerio, require('./static')); |
+ |
+/* |
+ * Set a signature of the object |
+ */ |
+ |
+Cheerio.prototype.cheerio = '[cheerio object]'; |
+ |
+/* |
+ * Cheerio default options |
+ */ |
+ |
+Cheerio.prototype.options = { |
+ withDomLvl1: true, |
+ normalizeWhitespace: false, |
+ xmlMode: false, |
+ decodeEntities: true |
+}; |
+ |
+/* |
+ * Make cheerio an array-like object |
+ */ |
+ |
+Cheerio.prototype.length = 0; |
+Cheerio.prototype.splice = Array.prototype.splice; |
+ |
+/* |
+ * Check if string is HTML |
+ */ |
+var isHtml = function(str) { |
+ // Faster than running regex, if str starts with `<` and ends with `>`, assume it's HTML |
+ if (str.charAt(0) === '<' && str.charAt(str.length - 1) === '>' && str.length >= 3) return true; |
+ |
+ // Run the regex |
+ var match = quickExpr.exec(str); |
+ return !!(match && match[1]); |
+}; |
+ |
+/* |
+ * Make a cheerio object |
+ * |
+ * @api private |
+ */ |
+ |
+Cheerio.prototype._make = function(dom, context) { |
+ var cheerio = new Cheerio(dom, context, this._root, this.options); |
+ cheerio.prevObject = this; |
+ return cheerio; |
+}; |
+ |
+/** |
+ * Turn a cheerio object into an array |
+ * |
+ * @deprecated |
+ */ |
+ |
+Cheerio.prototype.toArray = function() { |
+ return this.get(); |
+}; |
+ |
+/** |
+ * Plug in the API |
+ */ |
+api.forEach(function(mod) { |
+ _.extend(Cheerio.prototype, mod); |
+}); |
+ |
+var isNode = function(obj) { |
+ return obj.name || obj.type === 'text' || obj.type === 'comment'; |
+}; |