Index: node_modules/vulcanize/node_modules/whacko/node_modules/domutils/lib/stringify.js |
diff --git a/node_modules/vulcanize/node_modules/whacko/node_modules/domutils/lib/stringify.js b/node_modules/vulcanize/node_modules/whacko/node_modules/domutils/lib/stringify.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..47a2ef93630379289a97e578b2a261a5f664900d |
--- /dev/null |
+++ b/node_modules/vulcanize/node_modules/whacko/node_modules/domutils/lib/stringify.js |
@@ -0,0 +1,93 @@ |
+var ElementType = require("domelementtype"), |
+ isTag = ElementType.isTag; |
+ |
+module.exports = { |
+ getInnerHTML: getInnerHTML, |
+ getOuterHTML: getOuterHTML, |
+ getText: getText |
+}; |
+ |
+function getInnerHTML(elem){ |
+ return elem.children ? elem.children.map(getOuterHTML).join("") : ""; |
+} |
+ |
+//boolean attributes without a value (taken from MatthewMueller/cheerio) |
+var booleanAttribs = { |
+ __proto__: null, |
+ async: true, |
+ autofocus: true, |
+ autoplay: true, |
+ checked: true, |
+ controls: true, |
+ defer: true, |
+ disabled: true, |
+ hidden: true, |
+ loop: true, |
+ multiple: true, |
+ open: true, |
+ readonly: true, |
+ required: true, |
+ scoped: true, |
+ selected: true |
+}; |
+ |
+var emptyTags = { |
+ __proto__: null, |
+ area: true, |
+ base: true, |
+ basefont: true, |
+ br: true, |
+ col: true, |
+ frame: true, |
+ hr: true, |
+ img: true, |
+ input: true, |
+ isindex: true, |
+ link: true, |
+ meta: true, |
+ param: true, |
+ embed: true |
+}; |
+ |
+function getOuterHTML(elem){ |
+ switch(elem.type){ |
+ case ElementType.Text: |
+ return elem.data; |
+ case ElementType.Comment: |
+ return "<!--" + elem.data + "-->"; |
+ case ElementType.Directive: |
+ return "<" + elem.data + ">"; |
+ case ElementType.CDATA: |
+ return "<!CDATA " + getInnerHTML(elem) + "]]>"; |
+ } |
+ |
+ var ret = "<" + elem.name; |
+ if("attribs" in elem){ |
+ for(var attr in elem.attribs){ |
+ if(elem.attribs.hasOwnProperty(attr)){ |
+ ret += " " + attr; |
+ var value = elem.attribs[attr]; |
+ if(value == null){ |
+ if( !(attr in booleanAttribs) ){ |
+ ret += "=\"\""; |
+ } |
+ } else { |
+ ret += "=\"" + value + "\""; |
+ } |
+ } |
+ } |
+ } |
+ |
+ if (elem.name in emptyTags && elem.children.length === 0) { |
+ return ret + " />"; |
+ } else { |
+ return ret + ">" + getInnerHTML(elem) + "</" + elem.name + ">"; |
+ } |
+} |
+ |
+function getText(elem){ |
+ if(Array.isArray(elem)) return elem.map(getText).join(""); |
+ if(isTag(elem) || elem.type === ElementType.CDATA) return getText(elem.children); |
+ if(elem.type === ElementType.Text) return elem.data; |
+ return ""; |
+} |