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

Unified Diff: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/parse.js

Issue 125733002: Add vulcanize to tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months 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: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/parse.js
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/parse.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/parse.js
new file mode 100644
index 0000000000000000000000000000000000000000..7add78f5fca43e659d3e19ee801ae6029241368f
--- /dev/null
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/parse.js
@@ -0,0 +1,124 @@
+/*
+ Module Dependencies
+*/
+var htmlparser = require('htmlparser2'),
+ _ = require('underscore'),
+ isTag = require('./utils').isTag,
+ camelCase = require('./utils').camelCase;
+
+/*
+ Parser
+*/
+exports = module.exports = function(content, options) {
+ var dom = evaluate(content, options);
+
+ // Generic root element
+ var root = {
+ type: 'root',
+ name: 'root',
+ parent: null,
+ prev: null,
+ next: null,
+ children: []
+ };
+
+ // Update the dom using the root
+ update(dom, root);
+
+ return root;
+};
+
+var evaluate = exports.evaluate = function(content, options) {
+ // options = options || $.fn.options;
+
+ var handler = new htmlparser.DomHandler(options),
+ parser = new htmlparser.Parser(handler, options);
+
+ parser.write(content);
+ parser.done();
+
+ return connect(handler.dom);
+};
+
+var connect = exports.connect = function(dom, parent) {
+ parent = parent || null;
+
+ var prevElem = null;
+
+ _.each(dom, function(elem) {
+
+ if (isTag(elem.type)) {
+ // If tag and no attributes, add empty object
+ if (elem.attribs === undefined) {
+ elem.attribs = {};
+ } else {
+ // If there are already attributes, add them to the data list.
+ elem.data = parseData(elem);
+ }
+ }
+
+ // Set parent
+ elem.parent = parent;
+
+ // Previous Sibling
+ elem.prev = prevElem;
+
+ // Next sibling
+ elem.next = null;
+ if (prevElem) prevElem.next = elem;
+
+ // Run through the children
+ if (elem.children)
+ connect(elem.children, elem);
+ else if (isTag(elem.type))
+ elem.children = [];
+
+ // Get ready for next element
+ prevElem = elem;
+ });
+
+ return dom;
+};
+
+/*
+ Update the dom structure, for one changed layer
+
+ * Much faster than reconnecting
+*/
+var update = exports.update = function(arr, parent) {
+ // normalize
+ if (!Array.isArray(arr)) arr = [arr];
+
+ // Update neighbors
+ for (var i = 0; i < arr.length; i++) {
+ arr[i].prev = arr[i - 1] || null;
+ arr[i].next = arr[i + 1] || null;
+ arr[i].parent = parent || null;
+ }
+
+ // Update parent
+ parent.children = arr;
+
+ return parent;
+};
+
+/**
+ * Extract data by using element attributes.
+ * @param {Object} elem Element
+ * @return {Object} `element.data` object
+ */
+var parseData = exports.parseData = function(elem) {
+ if (elem.data === undefined) elem.data = {};
+ var value;
+ for (var key in elem.attribs) {
+ if (key.substr(0, 5) === 'data-') {
+ value = elem.attribs[key];
+ key = key.slice(5);
+ key = camelCase(key);
+ elem.data[key] = value;
+ }
+ }
+ return elem.data;
+};
+
+// module.exports = $.extend(exports);

Powered by Google App Engine
This is Rietveld 408576698