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

Unified Diff: node_modules/vulcanize/node_modules/whacko/lib/cheerio.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/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';
+};

Powered by Google App Engine
This is Rietveld 408576698