UNPKG

stew-select

Version:

CSS selectors that allow regular expressions. Stew is a meatier soup.

229 lines (212 loc) 6.98 kB
// Generated by CoffeeScript 1.6.3 (function() { var DOMUtil, exports; DOMUtil = (function() { function DOMUtil(params) { var _ref; if (params == null) { params = {}; } this.decode = (_ref = params.decode) != null ? _ref : function(str) { return str; }; } DOMUtil.prototype.parse_html = function(html, options, callback) { var err, handler, parser, _ref; if (typeof options === 'function' && typeof callback !== 'function') { _ref = [callback, options], options = _ref[0], callback = _ref[1]; } if (this.htmlparser == null) { try { this.htmlparser = require('htmlparser'); } catch (_error) { err = _error; callback(err, null); } } if (this.htmlparser != null) { handler = new this.htmlparser.DefaultHandler(function(err, domset) { if (err != null) { return callback(err, null); } else if (Array.isArray(domset) && domset.length <= 1) { return callback(null, domset[0]); } else { return callback(null, domset); } }); parser = new this.htmlparser.Parser(handler, options); return parser.parseComplete(html); } }; DOMUtil.prototype.as_node = function(nodeset) { if (Array.isArray(nodeset)) { return nodeset[0]; } else { return nodeset; } }; DOMUtil.prototype.as_nodeset = function(node) { if (Array.isArray(node)) { return node; } else if (node != null) { return [node]; } else { return []; } }; DOMUtil.prototype._kt = function() { return true; }; DOMUtil.prototype.to_text = function(elt, filter) { var buffer, _this = this; if (filter == null) { filter = this._kt; } buffer = ''; this.walk_dom(elt, { visit: function(node, node_metadata, all_metadata) { if (filter(node, node_metadata, all_metadata)) { if ((node != null ? node.type : void 0) === 'text' && ((node != null ? node.raw : void 0) != null)) { buffer += _this.decode(node.raw); } return { 'continue': true, 'visit_children': true }; } else { return { 'continue': true, 'visit_children': false }; } } }); return buffer; }; DOMUtil.prototype.inner_text = function(elt, filter) { return this.to_text(elt, filter); }; DOMUtil.prototype.to_html = function(elt) { var buffer; buffer = ''; this.walk_dom(elt, { visit: function(node) { var name, value, _ref; switch (node.type) { case 'text': buffer += node.raw; break; case 'tag': buffer += "<" + node.name; if (node.attribs != null) { _ref = node.attribs; for (name in _ref) { value = _ref[name]; buffer += " " + name + "=\"" + value + "\""; } } buffer += ">"; } return true; }, after_visit: function(node) { switch (node.type) { case 'tag': buffer += "</" + node.name + ">"; } return true; } }); return buffer; }; DOMUtil.prototype.inner_html = function(elt) { var buffer, node, _i, _len; buffer = null; if (Array.isArray(elt)) { buffer = ''; for (_i = 0, _len = elt.length; _i < _len; _i++) { node = elt[_i]; if (node.children != null) { buffer += this.to_html(node.children); } } } else if ((elt != null ? elt.children : void 0) != null) { buffer = this.to_html(elt.children); } return buffer; }; DOMUtil.prototype.walk_dom = function(dom, callbacks) { var dom_metadata, node, node_metadata, nodes, should_continue, sib_index, _i, _len, _results; if (typeof callbacks === 'function') { callbacks = { visit: callbacks }; } nodes = this.as_nodeset(dom); dom_metadata = []; _results = []; for (sib_index = _i = 0, _len = nodes.length; _i < _len; sib_index = ++_i) { node = nodes[sib_index]; node_metadata = { parent: null, path: [], siblings: nodes, sib_index: sib_index }; node._stew_node_id = dom_metadata.length; dom_metadata.push(node_metadata); should_continue = this._unguarded_walk_dom(node, node_metadata, dom_metadata, callbacks); if (!should_continue) { break; } else { _results.push(void 0); } } return _results; }; DOMUtil.prototype._unguarded_walk_dom = function(node, node_metadata, dom_metadata, callbacks) { var child, index, new_node_metadata, new_path, response, should_continue, _i, _len, _ref; response = { 'continue': true, 'visit_children': true }; if (callbacks.visit != null) { response = callbacks.visit(node, node_metadata, dom_metadata); } if (response === true || (response != null ? response['continue'] : void 0) === true || ((response != null ? response['continue'] : void 0) == null)) { if ((node.children != null) && (response === true || (response != null ? response['visit_children'] : void 0) === true || ((response != null ? response['visit_children'] : void 0) == null))) { new_path = [].concat(node_metadata.path); new_path.push(node); _ref = node.children; for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) { child = _ref[index]; new_node_metadata = { parent: node, path: new_path, siblings: node.children, sib_index: index }; child._stew_node_id = dom_metadata.length; dom_metadata.push(new_node_metadata); should_continue = this._unguarded_walk_dom(child, new_node_metadata, dom_metadata, callbacks); if (!should_continue) { return false; } } } if (callbacks['after_visit'] != null) { response = callbacks.after_visit(node, node_metadata, dom_metadata); return response === true || (response != null ? response['continue'] : void 0) === true || ((response != null ? response['continue'] : void 0) == null); } else { return true; } } else { return false; } }; return DOMUtil; })(); exports = exports != null ? exports : this; exports.DOMUtil = DOMUtil; }).call(this);