UNPKG

granula

Version:

i18n tool for angular.js applications

146 lines (137 loc) 4.2 kB
(function() { var emptyIsUndefined, htmlparser2, nodeEnd, nodeStart, nodeToHtml, _; htmlparser2 = require('htmlparser2'); _ = require('underscore'); emptyIsUndefined = function(str) { if ((str != null ? str.length : void 0) === 0) { return void 0; } else { return str; } }; module.exports.htmlDocument = function(html) { var dom, handler, parser; dom = null; handler = new htmlparser2.DomHandler((function(e, adom) { return dom = adom; }), { normalizeWhitespace: true }); parser = new htmlparser2.Parser(handler); parser.write(html); parser.done(); return { processWithChildren: function(element, cb) { var _ref, _this = this; cb(element); return ((_ref = element.children) != null ? _ref : []).forEach(function(ch) { return _this.processWithChildren(ch, cb); }); }, forEach: function(action) { var _this = this; return dom.forEach(function(el) { return _this.processWithChildren(el, action); }); }, root: function() { return dom; }, getText: function(element) { var nodeToText; nodeToText = function(parts, element) { var child, _i, _len, _ref, _ref1; if (element.type === 'text') { parts.push(element.data); } _ref1 = (_ref = element.children) != null ? _ref : []; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { child = _ref1[_i]; nodeToText(parts, child); } return parts; }; return nodeToText([], element).join(""); }, getChildNodes: function(element) { var _ref, _ref1; return (_ref = (_ref1 = element.children) != null ? _ref1.filter(function(ch) { return ch.type !== 'text'; }) : void 0) != null ? _ref : []; }, hasAttribute: function(element, attribute) { var _ref; return ((_ref = element.attribs) != null ? _ref[attribute] : void 0) !== void 0; }, getAttribute: function(element, attribute) { var _ref; return emptyIsUndefined((_ref = element.attribs) != null ? _ref[attribute] : void 0); }, getPath: function(element) { var args, parts; parts = []; while (element) { parts.unshift(element); element = element.parent; } args = function(element) { return _.pairs(_.pick(element.attribs, "id", "class")).map(function(_arg) { var name, val; name = _arg[0], val = _arg[1]; return "" + name + "=\"" + val + "\""; }).join(" "); }; return parts.map(function(e) { return "<" + e.name + " " + (args(e)) + ">"; }).join(" / "); }, getInnerHtml: function(element) { var child, parts, _i, _len, _ref; parts = []; _ref = element.children; for (_i = 0, _len = _ref.length; _i < _len; _i++) { child = _ref[_i]; nodeToHtml(parts, child); } return parts.join(""); }, getHtml: function(element) { return nodeToHtml([], element).join(""); } }; }; nodeStart = function(parts, element) { var attr, val, _ref; parts.push("<" + element.name); _ref = element.attribs; for (attr in _ref) { val = _ref[attr]; parts.push(" " + attr); if (attr !== val && !_.isEmpty(val)) { parts.push("=\"" + val + "\""); } } return parts.push(">"); }; nodeEnd = function(parts, element) { return parts.push("</" + element.name + ">"); }; nodeToHtml = function(parts, element) { var child, _i, _len, _ref, _ref1; if (element.type === 'text') { parts.push(element.data); } if (element.type !== 'tag') { return; } nodeStart(parts, element); _ref1 = (_ref = element.children) != null ? _ref : []; for (_i = 0, _len = _ref1.length; _i < _len; _i++) { child = _ref1[_i]; nodeToHtml(parts, child); } nodeEnd(parts, element); return parts; }; }).call(this);