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

Unified Diff: node_modules/vulcanize/node_modules/whacko/lib/parse.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/parse.js
diff --git a/node_modules/vulcanize/node_modules/whacko/lib/parse.js b/node_modules/vulcanize/node_modules/whacko/lib/parse.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e1b57e73e3edb37dbf00e5d4c8cc193db9eceb5
--- /dev/null
+++ b/node_modules/vulcanize/node_modules/whacko/lib/parse.js
@@ -0,0 +1,101 @@
+/*
+ Module Dependencies
+ */
+var parse5 = require('parse5');
+
+var parser = new parse5.Parser(parse5.TreeAdapters.htmlparser2);
+
+/*
+ Parser
+ */
+exports = module.exports = function (content, options, isDocument) {
+ var dom = exports.evaluate(content, options, isDocument);
+
+ // Generic root element
+ var root = parse5.TreeAdapters.htmlparser2.createDocument();
+
+ // Update the dom using the root
+ exports.update(dom, root);
+
+ return root;
+};
+
+var shouldParseAsDocument = function (content) {
+ //NOTE: if evaluate was called in fragment parsing mode, but doctype or <html> tag was passed
+ //we should switch to document parsing mode. This is a pretty simple heuristic, e.g. we don't expect
+ //comments at the beginning of the content.
+ return /^\s*<!doctype/i.test(content) || /^\s*<html/i.test(content);
+};
+
+exports.evaluate = function (content, options, isDocument) {
+ var dom = null;
+
+ if (Buffer.isBuffer(content))
+ content = content.toString();
+
+ if (typeof content === 'string') {
+
+ if (isDocument || shouldParseAsDocument(content))
+ dom = parser.parse(content);
+ else
+ dom = parser.parseFragment(content);
+
+ dom = dom.children;
+
+ return dom;
+ }
+
+ return content;
+};
+
+/*
+ Update the dom structure, for one changed layer
+ */
+exports.update = function (arr, parent) {
+ // normalize
+ if (!Array.isArray(arr)) arr = [arr];
+
+ // Update parent
+ if (parent) {
+ parent.children = arr;
+ } else {
+ parent = null;
+ }
+
+ // Update neighbors
+ for (var i = 0; i < arr.length; i++) {
+ var node = arr[i];
+
+ // Cleanly remove existing nodes from their previous structures.
+ var oldParent = node.parent || node.root,
+ oldSiblings = oldParent && oldParent.children;
+ if (oldSiblings && oldSiblings !== arr) {
+ oldSiblings.splice(oldSiblings.indexOf(node), 1);
+ if (node.prev) {
+ node.prev.next = node.next;
+ }
+ if (node.next) {
+ node.next.prev = node.prev;
+ }
+ }
+
+ if (parent) {
+ node.prev = arr[i - 1] || null;
+ node.next = arr[i + 1] || null;
+ } else {
+ node.prev = node.next = null;
+ }
+
+ if (parent && parent.type === 'root') {
+ node.root = parent;
+ node.parent = null;
+ } else {
+ node.root = null;
+ node.parent = parent;
+ }
+ }
+
+ return parent;
+};
+
+// module.exports = $.extend(exports);
« no previous file with comments | « node_modules/vulcanize/node_modules/whacko/lib/cheerio.js ('k') | node_modules/vulcanize/node_modules/whacko/lib/render.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698