diff options
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/parse.js')
-rw-r--r-- | bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/parse.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/parse.js b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/parse.js new file mode 100644 index 00000000..bf2ba6f0 --- /dev/null +++ b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/parse.js @@ -0,0 +1,100 @@ +/* + Module Dependencies +*/ +var htmlparser = require('htmlparser2'), + parse5 = require('parse5'); + +/* + Parser +*/ +exports = module.exports = function(content, options, isDocument) { + var dom = exports.evaluate(content, options, isDocument), + // Generic root element + root = exports.evaluate('<root></root>', options, false)[0]; + + root.type = 'root'; + root.parent = null; + + // Update the dom using the root + exports.update(dom, root); + + return root; +}; + +function parseWithParse5 (content, isDocument) { + var parse = isDocument ? parse5.parse : parse5.parseFragment, + root = parse(content, { treeAdapter: parse5.treeAdapters.htmlparser2 }); + + return root.children; +} + +exports.evaluate = function(content, options, isDocument) { + // options = options || $.fn.options; + + var dom; + + if (Buffer.isBuffer(content)) + content = content.toString(); + + if (typeof content === 'string') { + var useHtmlParser2 = options.xmlMode || options._useHtmlParser2; + + dom = useHtmlParser2 ? htmlparser.parseDOM(content, options) : parseWithParse5(content, isDocument); + } else { + dom = content; + } + + return dom; +}; + +/* + Update the dom structure, for one changed layer +*/ +exports.update = function(arr, parent) { + // normalize + if (!Array.isArray(arr)) arr = [arr]; + + // Update parent + if (parent) { + parent.children = arr; + } else { + parent = null; + } + + // Update neighbors + for (var i = 0; i < arr.length; i++) { + var node = arr[i]; + + // Cleanly remove existing nodes from their previous structures. + var oldParent = node.parent || node.root, + oldSiblings = oldParent && oldParent.children; + if (oldSiblings && oldSiblings !== arr) { + oldSiblings.splice(oldSiblings.indexOf(node), 1); + if (node.prev) { + node.prev.next = node.next; + } + if (node.next) { + node.next.prev = node.prev; + } + } + + if (parent) { + node.prev = arr[i - 1] || null; + node.next = arr[i + 1] || null; + } else { + node.prev = node.next = null; + } + + if (parent && parent.type === 'root') { + node.root = parent; + node.parent = null; + } else { + node.root = null; + node.parent = parent; + } + } + + return parent; +}; + +// module.exports = $.extend(exports); |