domutils
Advanced tools
Comparing version 1.3.0 to 1.4.0
@@ -1,13 +0,33 @@ | ||
exports.find = function(test, arr, recurse, limit){ | ||
var isTag = require("domelementtype").isTag; | ||
module.exports = { | ||
filter: filter, | ||
find: find, | ||
findOneChild: findOneChild, | ||
findOne: findOne, | ||
existsOne: existsOne, | ||
findAll: findAll | ||
}; | ||
function filter(test, element, recurse, limit){ | ||
if(!Array.isArray(element)) element = [element]; | ||
if(typeof limit !== "number" || !isFinite(limit)){ | ||
limit = Infinity; | ||
} | ||
return find(test, element, recurse !== false, limit); | ||
} | ||
function find(test, elems, recurse, limit){ | ||
var result = [], childs; | ||
for(var i = 0, j = arr.length; i < j; i++){ | ||
if(test(arr[i])){ | ||
result.push(arr[i]); | ||
for(var i = 0, j = elems.length; i < j; i++){ | ||
if(test(elems[i])){ | ||
result.push(elems[i]); | ||
if(--limit <= 0) break; | ||
} | ||
childs = this.getChildren(arr[i]); | ||
childs = elems[i].children; | ||
if(recurse && childs && childs.length > 0){ | ||
childs = this.find(test, childs, recurse, limit); | ||
childs = find(test, childs, recurse, limit); | ||
result = result.concat(childs); | ||
@@ -20,20 +40,22 @@ limit -= childs.length; | ||
return result; | ||
}; | ||
} | ||
exports.findOneChild = function(test, arr){ | ||
for(var i = 0, l = arr.length; i < l; i++){ | ||
if(test(arr[i])) return arr[i]; | ||
function findOneChild(test, elems){ | ||
for(var i = 0, l = elems.length; i < l; i++){ | ||
if(test(elems[i])) return elems[i]; | ||
} | ||
return null; | ||
}; | ||
} | ||
exports.findOne = function(test, arr){ | ||
function findOne(test, elems){ | ||
var elem = null; | ||
for(var i = 0, l = arr.length; i < l && !elem; i++){ | ||
if(test(arr[i])){ | ||
elem = arr[i]; | ||
} else if(arr[i].children && arr[i].children.length > 0){ | ||
elem = this.findOne(test, arr[i].children); | ||
for(var i = 0, l = elems.length; i < l && !elem; i++){ | ||
if(!isTag(elems[i])){ | ||
continue; | ||
} else if(test(elems[i])){ | ||
elem = elems[i]; | ||
} else if(elems[i].children.length > 0){ | ||
elem = findOne(test, elems[i].children); | ||
} | ||
@@ -43,36 +65,32 @@ } | ||
return elem; | ||
}; | ||
} | ||
exports.findAll = function(test, elems){ | ||
function existsOne(test, elems){ | ||
for(var i = 0, l = elems.length; i < l; i++){ | ||
if( | ||
isTag(elems[i]) && ( | ||
test(elems[i]) || ( | ||
elems[i].children.length > 0 && | ||
existsOne(test, elems[i].children) | ||
) | ||
) | ||
){ | ||
return true; | ||
} | ||
} | ||
return false; | ||
} | ||
function findAll(test, elems){ | ||
var result = []; | ||
for(var i = 0, j = elems.length; i < j; i++){ | ||
if(!isTag(elems[i])) continue; | ||
if(test(elems[i])) result.push(elems[i]); | ||
var childs = this.getChildren(elems[i]); | ||
if(childs && childs.length){ | ||
result = result.concat(this.findAll(test, childs)); | ||
if(elems[i].children.length > 0){ | ||
result = result.concat(findAll(test, elems[i].children)); | ||
} | ||
} | ||
return result; | ||
}; | ||
exports.filter = function(test, element, recurse, limit){ | ||
if(!Array.isArray(element)) element = [element]; | ||
if(typeof limit !== "number" || !isFinite(limit)){ | ||
if(recurse === false){ | ||
return element.filter(test); | ||
} else { | ||
return this.findAll(test, element); | ||
} | ||
} else if(limit === 1){ | ||
if(recurse === false){ | ||
element = this.findOneChild(test, element); | ||
} else { | ||
element = this.findOne(test, element); | ||
} | ||
return element ? [element] : []; | ||
} else { | ||
return this.find(test, element, recurse !== false, limit); | ||
} | ||
}; | ||
} |
{ | ||
"name": "domutils", | ||
"version": "1.3.0", | ||
"version": "1.4.0", | ||
"description": "utilities for working with htmlparser2's dom", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
15928
503
0