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

Unified Diff: node_modules/vulcanize/node_modules/whacko/lib/render.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/render.js
diff --git a/node_modules/vulcanize/node_modules/whacko/lib/render.js b/node_modules/vulcanize/node_modules/whacko/lib/render.js
new file mode 100644
index 0000000000000000000000000000000000000000..02809d10889333570892740609385d9c1a351d8f
--- /dev/null
+++ b/node_modules/vulcanize/node_modules/whacko/lib/render.js
@@ -0,0 +1,160 @@
+/*
+ Module dependencies
+ */
+var parse5 = require('parse5');
+var _ = require('lodash');
+var utils = require('./utils');
+
+var encode = utils.encode;
+
+var serializer = new parse5.TreeSerializer(parse5.TreeAdapters.htmlparser2);
+
+/*
+ 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 (output) {
+ output += ' ';
+ }
+
+ if (!value && (rboolean.test(key) || key === '/')) {
+ output += key;
+ } else {
+ output += key + '="' + encode(value) + '"';
+ }
+ }
+
+ return output;
+};
+
+/*
+ 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) {
+ opts = opts || {};
+
+ if (!Array.isArray(dom) && !dom.cheerio)
+ dom = dom.type === 'root' ? dom.children : [dom];
+
+ if (!opts.xmlMode) {
+ return serializer.serialize({
+ type: 'fake-root',
+ name: 'fake-root',
+ children: dom
+ });
+ }
+
+
+ var output = '',
+ xmlMode = opts.xmlMode;
+
+ _.each(dom, function (elem) {
+ var isTag = tagType[elem.type];
+
+ var pushVal;
+ if (isTag)
+ pushVal = renderTag(elem, xmlMode);
+ else if (elem.type === 'directive')
+ pushVal = renderDirective(elem);
+ else if (elem.type === 'comment')
+ pushVal = renderComment(elem);
+ else if (elem.type === 'cdata')
+ pushVal = renderCdata(elem);
+ else
+ pushVal = renderText(elem);
+
+ if (elem.children && elem.type !== 'cdata')
+ pushVal += render(elem.children, opts);
+
+ if (isTag && (!singleTag[elem.name] || xmlMode)) {
+ if (!isClosedTag(elem, xmlMode)) {
+ pushVal += '</' + elem.name + '>';
+ }
+ }
+
+ // Push rendered DOM node
+ output += pushVal;
+ });
+
+ return output;
+};
+
+var isClosedTag = function (elem, xmlMode) {
+ return (xmlMode && (!elem.children || elem.children.length === 0));
+};
+
+var renderTag = function (elem, xmlMode) {
+ var tag = '<' + elem.name,
+ attribs = formatAttrs(elem.attribs);
+
+ if (attribs) {
+ tag += ' ' + attribs;
+ }
+
+ if (isClosedTag(elem, xmlMode)) {
+ tag += '/';
+ }
+
+ return tag + '>';
+};
+
+var renderDirective = function (elem) {
+ return '<' + elem.data + '>';
+};
+
+var renderText = function (elem) {
+ return elem.data || '';
+};
+
+var renderCdata = function (elem) {
+ return '<![CDATA[' + elem.children[0].data + ']]>';
+};
+
+var renderComment = function (elem) {
+ return '<!--' + elem.data + '-->';
+};
+
+// module.exports = $.extend(exports);
« no previous file with comments | « node_modules/vulcanize/node_modules/whacko/lib/parse.js ('k') | node_modules/vulcanize/node_modules/whacko/lib/static.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698