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

Unified Diff: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/render.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/render.js
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/render.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/render.js
new file mode 100644
index 0000000000000000000000000000000000000000..a8a80775bdd35e869e7b8fbba71c3a697daa660f
--- /dev/null
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/lib/render.js
@@ -0,0 +1,136 @@
+/*
+ Module dependencies
+*/
+var _ = require('underscore');
+var utils = require('./utils');
+
+var decode = utils.decode;
+var encode = utils.encode;
+
+/*
+ Boolean Attributes
+*/
+var rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;
+
+/*
+ Format attributes
+*/
+var formatAttrs = function(attributes) {
+ if (!attributes) return '';
+
+ var output = [],
+ value;
+
+ // Loop through the attributes
+ for (var key in attributes) {
+ value = attributes[key];
+ if (!value && (rboolean.test(key) || key === '/')) {
+ output.push(key);
+ } else {
+ output.push(key + '="' + encode(decode(value)) + '"');
+ }
+ }
+
+ return output.join(' ');
+};
+
+/*
+ Self-enclosing tags (stolen from node-htmlparser)
+*/
+var singleTag = {
+ area: 1,
+ base: 1,
+ basefont: 1,
+ br: 1,
+ col: 1,
+ frame: 1,
+ hr: 1,
+ img: 1,
+ input: 1,
+ isindex: 1,
+ link: 1,
+ meta: 1,
+ param: 1,
+ embed: 1,
+ include: 1,
+ 'yield': 1
+};
+
+/*
+ Tag types from htmlparser
+*/
+var tagType = {
+ tag: 1,
+ script: 1,
+ link: 1,
+ style: 1,
+ template: 1
+};
+
+var render = module.exports = function(dom, opts) {
+ if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];
+ opts = opts || {};
+
+ var output = [],
+ xmlMode = opts.xmlMode || false,
+ ignoreWhitespace = opts.ignoreWhitespace || false;
+
+ _.each(dom, function(elem) {
+ var pushVal;
+
+ if (tagType[elem.type])
+ pushVal = renderTag(elem, xmlMode);
+ else if (elem.type === 'directive')
+ pushVal = renderDirective(elem);
+ else if (elem.type === 'comment')
+ pushVal = renderComment(elem);
+ else
+ pushVal = renderText(elem);
+
+ // Push rendered DOM node
+ output.push(pushVal);
+
+ if (elem.children)
+ output.push(render(elem.children, opts));
+
+ if ((!singleTag[elem.name] || xmlMode) && tagType[elem.type]) {
+ if (!isClosedTag(elem, xmlMode)) {
+ output.push('</' + elem.name + '>');
+ }
+ }
+ });
+
+ return output.join('');
+};
+
+var isClosedTag = function(elem, xmlMode){
+ return (xmlMode && (!elem.children || elem.children.length === 0));
+};
+
+var renderTag = function(elem, xmlMode) {
+ var tag = '<' + elem.name;
+
+ if (elem.attribs && _.size(elem.attribs)) {
+ tag += ' ' + formatAttrs(elem.attribs);
+ }
+
+ if (isClosedTag(elem, xmlMode)) {
+ tag += '/';
+ }
+
+ return tag + '>';
+};
+
+var renderDirective = function(elem) {
+ return '<' + elem.data + '>';
+};
+
+var renderText = function(elem) {
+ return elem.data;
+};
+
+var renderComment = function(elem) {
+ return '<!--' + elem.data + '-->';
+};
+
+// module.exports = $.extend(exports);

Powered by Google App Engine
This is Rietveld 408576698