Index: node_modules/vulcanize/node_modules/whacko/node_modules/parse5/lib/tree_adapters/htmlparser2.js |
diff --git a/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/lib/tree_adapters/htmlparser2.js b/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/lib/tree_adapters/htmlparser2.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..287a8479097ea54cb8f6df245d2b919253e35625 |
--- /dev/null |
+++ b/node_modules/vulcanize/node_modules/whacko/node_modules/parse5/lib/tree_adapters/htmlparser2.js |
@@ -0,0 +1,325 @@ |
+'use strict'; |
+ |
+//Conversion tables for DOM Level1 structure emulation |
+var nodeTypes = { |
+ element: 1, |
+ text: 3, |
+ cdata: 4, |
+ comment: 8 |
+}; |
+ |
+var nodePropertyShorthands = { |
+ tagName: 'name', |
+ childNodes: 'children', |
+ parentNode: 'parent', |
+ previousSibling: 'prev', |
+ nextSibling: 'next', |
+ nodeValue: 'data' |
+}; |
+ |
+//Node |
+var Node = function (props) { |
+ for (var key in props) { |
+ if (props.hasOwnProperty(key)) |
+ this[key] = props[key]; |
+ } |
+}; |
+ |
+Node.prototype = { |
+ get firstChild() { |
+ var children = this.children; |
+ return children && children[0] || null; |
+ }, |
+ |
+ get lastChild() { |
+ var children = this.children; |
+ return children && children[children.length - 1] || null; |
+ }, |
+ |
+ get nodeType() { |
+ return nodeTypes[this.type] || nodeTypes.element; |
+ } |
+}; |
+ |
+Object.keys(nodePropertyShorthands).forEach(function (key) { |
+ var shorthand = nodePropertyShorthands[key]; |
+ |
+ Object.defineProperty(Node.prototype, key, { |
+ get: function () { |
+ return this[shorthand] || null; |
+ }, |
+ set: function (val) { |
+ this[shorthand] = val; |
+ return val; |
+ } |
+ }); |
+}); |
+ |
+ |
+//Node construction |
+exports.createDocument = |
+exports.createDocumentFragment = function () { |
+ return new Node({ |
+ type: 'root', |
+ name: 'root', |
+ parent: null, |
+ prev: null, |
+ next: null, |
+ children: [] |
+ }); |
+}; |
+ |
+exports.createElement = function (tagName, namespaceURI, attrs) { |
+ var attribs = {}, |
+ attribsNamespace = {}, |
+ attribsPrefix = {}; |
+ |
+ for (var i = 0; i < attrs.length; i++) { |
+ var attrName = attrs[i].name; |
+ |
+ attribs[attrName] = attrs[i].value; |
+ attribsNamespace[attrName] = attrs[i].namespace; |
+ attribsPrefix[attrName] = attrs[i].prefix; |
+ } |
+ |
+ return new Node({ |
+ type: tagName === 'script' || tagName === 'style' ? tagName : 'tag', |
+ name: tagName, |
+ namespace: namespaceURI, |
+ attribs: attribs, |
+ 'x-attribsNamespace': attribsNamespace, |
+ 'x-attribsPrefix': attribsPrefix, |
+ children: [], |
+ parent: null, |
+ prev: null, |
+ next: null |
+ }); |
+}; |
+ |
+exports.createCommentNode = function (data) { |
+ return new Node({ |
+ type: 'comment', |
+ data: data, |
+ parent: null, |
+ prev: null, |
+ next: null |
+ }); |
+}; |
+ |
+var createTextNode = function (value) { |
+ return new Node({ |
+ type: 'text', |
+ data: value, |
+ parent: null, |
+ prev: null, |
+ next: null |
+ }); |
+}; |
+ |
+ |
+//Tree mutation |
+exports.setDocumentType = function (document, name, publicId, systemId) { |
+ var data = '!DOCTYPE'; |
+ |
+ if (name) |
+ data += ' ' + name; |
+ |
+ if (publicId) |
+ data += ' PUBLIC "' + publicId + '"'; |
+ |
+ if (systemId) |
+ data += ' "' + systemId + '"'; |
+ |
+ var doctypeNode = null; |
+ |
+ for (var i = 0; i < document.children.length; i++) { |
+ if (document.children[i].type === 'directive' && document.children[i].name === '!doctype') { |
+ doctypeNode = document.children[i]; |
+ break; |
+ } |
+ } |
+ |
+ if (doctypeNode) { |
+ doctypeNode.data = data; |
+ doctypeNode['x-name'] = name; |
+ doctypeNode['x-publicId'] = publicId; |
+ doctypeNode['x-systemId'] = systemId; |
+ } |
+ |
+ else { |
+ appendChild(document, new Node({ |
+ type: 'directive', |
+ name: '!doctype', |
+ data: data, |
+ 'x-name': name, |
+ 'x-publicId': publicId, |
+ 'x-systemId': systemId |
+ })); |
+ } |
+ |
+}; |
+ |
+exports.setQuirksMode = function (document) { |
+ document.quirksMode = true; |
+}; |
+ |
+exports.isQuirksMode = function (document) { |
+ return document.quirksMode; |
+}; |
+ |
+var appendChild = exports.appendChild = function (parentNode, newNode) { |
+ var prev = parentNode.children[parentNode.children.length - 1]; |
+ |
+ if (prev) { |
+ prev.next = newNode; |
+ newNode.prev = prev; |
+ } |
+ |
+ parentNode.children.push(newNode); |
+ newNode.parent = parentNode; |
+}; |
+ |
+var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) { |
+ var insertionIdx = parentNode.children.indexOf(referenceNode), |
+ prev = referenceNode.prev; |
+ |
+ if (prev) { |
+ prev.next = newNode; |
+ newNode.prev = prev; |
+ } |
+ |
+ referenceNode.prev = newNode; |
+ newNode.next = referenceNode; |
+ |
+ parentNode.children.splice(insertionIdx, 0, newNode); |
+ newNode.parent = parentNode; |
+}; |
+ |
+exports.detachNode = function (node) { |
+ if (node.parent) { |
+ var idx = node.parent.children.indexOf(node), |
+ prev = node.prev, |
+ next = node.next; |
+ |
+ node.prev = null; |
+ node.next = null; |
+ |
+ if (prev) |
+ prev.next = next; |
+ |
+ if (next) |
+ next.prev = prev; |
+ |
+ node.parent.children.splice(idx, 1); |
+ node.parent = null; |
+ } |
+}; |
+ |
+exports.insertText = function (parentNode, text) { |
+ var lastChild = parentNode.children[parentNode.children.length - 1]; |
+ |
+ if (lastChild && lastChild.type === 'text') |
+ lastChild.data += text; |
+ else |
+ appendChild(parentNode, createTextNode(text)); |
+}; |
+ |
+exports.insertTextBefore = function (parentNode, text, referenceNode) { |
+ var prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1]; |
+ |
+ if (prevNode && prevNode.type === 'text') |
+ prevNode.data += text; |
+ else |
+ insertBefore(parentNode, createTextNode(text), referenceNode); |
+}; |
+ |
+exports.adoptAttributes = function (recipientNode, attrs) { |
+ for (var i = 0; i < attrs.length; i++) { |
+ var attrName = attrs[i].name; |
+ |
+ if (typeof recipientNode.attribs[attrName] === 'undefined') { |
+ recipientNode.attribs[attrName] = attrs[i].value; |
+ recipientNode['x-attribsNamespace'][attrName] = attrs[i].namespace; |
+ recipientNode['x-attribsPrefix'][attrName] = attrs[i].prefix; |
+ } |
+ } |
+}; |
+ |
+ |
+//Tree traversing |
+exports.getFirstChild = function (node) { |
+ return node.children[0]; |
+}; |
+ |
+exports.getChildNodes = function (node) { |
+ return node.children; |
+}; |
+ |
+exports.getParentNode = function (node) { |
+ return node.parent; |
+}; |
+ |
+exports.getAttrList = function (node) { |
+ var attrList = []; |
+ |
+ for (var name in node.attribs) { |
+ if (node.attribs.hasOwnProperty(name)) { |
+ attrList.push({ |
+ name: name, |
+ value: node.attribs[name], |
+ namespace: node['x-attribsNamespace'][name], |
+ prefix: node['x-attribsPrefix'][name] |
+ }); |
+ } |
+ } |
+ |
+ return attrList; |
+}; |
+ |
+ |
+//Node data |
+exports.getTagName = function (element) { |
+ return element.name; |
+}; |
+ |
+exports.getNamespaceURI = function (element) { |
+ return element.namespace; |
+}; |
+ |
+exports.getTextNodeContent = function (textNode) { |
+ return textNode.data; |
+}; |
+ |
+exports.getCommentNodeContent = function (commentNode) { |
+ return commentNode.data; |
+}; |
+ |
+exports.getDocumentTypeNodeName = function (doctypeNode) { |
+ return doctypeNode['x-name']; |
+}; |
+ |
+exports.getDocumentTypeNodePublicId = function (doctypeNode) { |
+ return doctypeNode['x-publicId']; |
+}; |
+ |
+exports.getDocumentTypeNodeSystemId = function (doctypeNode) { |
+ return doctypeNode['x-systemId']; |
+}; |
+ |
+ |
+//Node types |
+exports.isTextNode = function (node) { |
+ return node.type === 'text'; |
+}; |
+ |
+exports.isCommentNode = function (node) { |
+ return node.type === 'comment'; |
+}; |
+ |
+exports.isDocumentTypeNode = function (node) { |
+ return node.type === 'directive' && node.name === '!doctype'; |
+}; |
+ |
+exports.isElementNode = function (node) { |
+ return !!node.attribs; |
+}; |