Socket
Socket
Sign inDemoInstall

htmlparser2

Package Overview
Dependencies
0
Maintainers
1
Versions
76
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.2.4 to 2.2.5

218

lib/DomUtils.js

@@ -6,159 +6,135 @@ var ElementType = require("./ElementType.js"),

function filterArray(test, arr, recurse, limit){
var result = [], childs;
var result = [], childs;
for(var i = 0, j = arr.length; i < j; i++){
if(test(arr[i])){
result.push(arr[i]);
if(--limit <= 0) break;
}
for(var i = 0, j = arr.length; i < j; i++){
if(test(arr[i])){
result.push(arr[i]);
if(--limit <= 0) break;
}
childs = arr[i].children;
if(recurse && childs){
childs = filterArray(test, childs, recurse, limit);
arrayPush.apply(result, childs);
limit -= childs.length;
if(limit <= 0) break;
}
}
childs = arr[i].children;
if(recurse && childs){
childs = filterArray(test, childs, recurse, limit);
arrayPush.apply(result, childs);
limit -= childs.length;
if(limit <= 0) break;
}
}
return result;
return result;
}
function filter(test, element, recurse, limit){
if(recurse !== false) recurse = true;
if(isNaN(limit)) limit = Infinity;
if(!Array.isArray(element)) element = [element];
if(recurse !== false) recurse = true;
if(isNaN(limit)) limit = Infinity;
if(!Array.isArray(element)) element = [element];
return filterArray(test, element, recurse, limit);
return filterArray(test, element, recurse, limit);
}
DomUtils.testElement = function(options, element){
var type = element.type,
keys = Object.keys(options),
len = keys.length;
var type = element.type;
for(var key in options){
if(!options.hasOwnProperty(key));
else if(key === "tag_name"){
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style) return false;
if(!options.tag_name(element.name)) return false;
} else if(key === "tag_type"){
if(!options.tag_type(type)) return false;
} else if(key === "tag_contains"){
if(type !== ElementType.Text && type !== ElementType.Comment && type !== ElementType.Directive) return false;
if(!options.tag_contains(element.data)) return false;
} else if(!element.attribs || !options[key](element.attribs[key])) return false;
}
for(var i = 0; i < len; i++){
var key = keys[i];
return true;
};
switch(key){
case "tag_name":
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style) return false;
if(!options.tag_name(element.name)) return false;
break;
case "tag_type":
if(!options.tag_type(type)) return false;
break;
case "tag_contains":
if(type !== ElementType.Text && type !== ElementType.Comment && type !== ElementType.Directive) return false;
if(!options.tag_contains(element.data)) return false;
break;
default:
if(!element.attribs || !options[key](element.attribs[key])) return false;
break;
}
}
return true;
function getEqualityFunc(check){
return (function(val){ return val === check; });
}
DomUtils.getElements = function(options, element, recurse, limit){
var keys = Object.keys(options),
len = keys.length;
for(var key in options){
if(options.hasOwnProperty(key) && typeof options[key] !== "function"){
options[key] = getEqualityFunc(options[key]);
}
}
for(var i = 0; i < len; i++){
var key = keys[i];
return filter(function(elem){ return DomUtils.testElement(options, elem); }, element, recurse, limit);
};
if(typeof options[key] !== "function"){
var checker = options[key];
options[key] = function(val){ return val === checker };
}
}
return filter(this.testElement.bind(null, options), element, recurse, limit);
}
DomUtils.getElementById = function(id, element, recurse){
var result;
var result;
if(typeof id === "function"){
result = filter(function(elem){ return elem.attribs && id(elem.attribs) }, element, recurse, 1);
}else{
result = filter(function(elem){ return elem.attribs && elem.attribs.id === id }, element, recurse, 1);
}
if(typeof id === "function"){
result = filter(function(elem){ return elem.attribs && id(elem.attribs); }, element, recurse, 1);
} else {
result = filter(function(elem){ return elem.attribs && elem.attribs.id === id; }, element, recurse, 1);
}
return result.length ? result[0] : null;
}
return result.length ? result[0] : null;
};
DomUtils.getElementsByTagName = function(name, element, recurse, limit){
if(typeof name === "function") return filter(function(elem){
var type = elem.type;
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style)
return false;
return name(elem.name);
}, element, recurse, limit);
if(typeof name === "function"){
return filter(function(elem){
var type = elem.type;
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style)
return false;
return name(elem.name);
}, element, recurse, limit);
}
return filter(function(elem){
var type = elem.type;
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style)
return false;
return elem.name === name;
}, element, recurse, limit);
}
return filter(function(elem){
var type = elem.type;
if(type !== ElementType.Tag && type !== ElementType.Script && type !== ElementType.Style)
return false;
return elem.name === name;
}, element, recurse, limit);
};
DomUtils.getElementsByTagType = function(type, element, recurse, limit){
if(typeof type === "function")
return filter(function(elem){ return type(elem.type) }, element, recurse, limit);
else
return filter(function(elem){ return elem.type === type }, element, recurse, limit);
}
if(typeof type === "function"){
return filter(function(elem){ return type(elem.type); }, element, recurse, limit);
} else {
return filter(function(elem){ return elem.type === type; }, element, recurse, limit);
}
};
DomUtils.getInnerHTML = function(elem){
if(!elem.children) return "";
if(!elem.children) return "";
var childs = elem.children,
childNum = childs.length,
ret = "";
var childs = elem.children,
childNum = childs.length,
ret = "";
for(var i = 0; i < childNum; i++){
ret += this.getOuterHTML(childs[i]);
}
for(var i = 0; i < childNum; i++){
ret += this.getOuterHTML(childs[i]);
}
return ret;
}
return ret;
};
DomUtils.getOuterHTML = function(elem){
var type = elem.type,
name = elem.name;
var type = elem.type,
name = elem.name;
if(type === ElementType.Text) return elem.data;
if(type === ElementType.Comment) return "<!--" + elem.data + "-->";
if(type === ElementType.Text) return elem.data;
if(type === ElementType.Comment) return "<!--" + elem.data + "-->";
var attrStr = "";
if(elem.attribs){
var attrs = Object.keys(elem.attribs),
len = attrs.length;
var ret = "<" + name;
if(elem.hasOwnProperty("attribs")){
for(var attr in elem.attribs){
if(elem.attribs.hasOwnProperty(attr)){
ret += " " + attr + "=\"" + elem.attribs[attr] + "\"";
}
}
}
for(var i = 0; i < len; i++){
var attr = attrs[i],
val = elem.attribs[attr];
ret += ">";
attrStr += " " + attr + "=\"" + val + "\"";
if(type === ElementType.Directive) return ret;
/* Is this required? Method forgets quotes
if(/^[^\s"\'\`\=\<\>]+$/.test(val))
attrStr += val;
else if(val.indeOf("\"") !== -1)
attrStr += "'" + val + "'";
else
attrStr += "\"" + val + "\"";
*/
}
}
var ret = "<" + name + attrStr + ">";
if(type === ElementType.Directive) return ret;
ret += this.getInnerHTML(elem) + "</" + name + ">"
return ret;
}
return ret + this.getInnerHTML(elem) + "</" + name + ">";
};

@@ -109,7 +109,7 @@ var ElementType = require("./ElementType.js");

var SpecialTags = {};
//SpecialTags[ElementType.Tag] = 0;
SpecialTags[ElementType.Style] = 1; //2^0
SpecialTags[ElementType.Script] = 2; //2^1
SpecialTags[ElementType.Comment] = 4; //2^2
SpecialTags[ElementType.CDATA] = 8; //2^3
//SpecialTags[ElementType.Tag] = 0x0;
SpecialTags[ElementType.Style] = 0x1; //2^0
SpecialTags[ElementType.Script] = 0x2; //2^1
SpecialTags[ElementType.Comment] = 0x4; //2^2
SpecialTags[ElementType.CDATA] = 0x8; //2^3

@@ -167,5 +167,5 @@ var TagValues = {

//if it's a closing tag, remove the flag
if(this._contentFlags >= TagValues[elementData]){
if(this._contentFlags & TagValues[elementData]){
//remove the flag
this._contentFlags -= TagValues[elementData];
this._contentFlags ^= TagValues[elementData];
}

@@ -182,7 +182,7 @@ else {

//This tag is a comment
this._contentFlags += SpecialTags[ElementType.Comment];
this._contentFlags |= SpecialTags[ElementType.Comment];
this._writeComment(rawData.substr(3));
}
else if(elementData.substr(1, 7) === "[CDATA["){
this._contentFlags += SpecialTags[ElementType.CDATA];
this._contentFlags |= SpecialTags[ElementType.CDATA];
if(this._cbs.oncdatastart) this._cbs.oncdatastart();

@@ -231,3 +231,3 @@ this._writeCDATA(elementData.substr(8));

}
this._contentFlags -= SpecialTags[ElementType.CDATA];
this._contentFlags ^= SpecialTags[ElementType.CDATA];
if(this._cbs.oncdataend) this._cbs.oncdataend();

@@ -241,3 +241,3 @@ }

//remove the written flag (also removes the comment flag)
this._contentFlags -= SpecialTags[ElementType.Comment];
this._contentFlags ^= SpecialTags[ElementType.Comment];
this._wroteSpecial = false;

@@ -326,3 +326,3 @@ if(this._cbs.oncomment) this._cbs.oncomment(rawData.slice(0, -2));

if(type !== ElementType.Tag){
this._contentFlags += SpecialTags[type];
this._contentFlags |= SpecialTags[type];
this._wroteSpecial = false;

@@ -329,0 +329,0 @@ }

@@ -8,11 +8,13 @@ var ProxyHandler = function(cbs){

Object.keys(require("./").EVENTS).forEach(function(name){
ProxyHandler.prototype.__defineGetter__(name, function(){
return this._cbs[name];
name = "on" + name;
Object.defineProperty(ProxyHandler.prototype, name, {
enumerable:true, configurable:true,
get: function(){ return this._cbs[name]; },
set: function(value){
//allow functions to be overwritten
Object.defineProperty(this, name, {value: value});
}
});
ProxyHandler.prototype.__defineSetter__(name, function(value){
//allow functions to be overwritten
Object.defineProperty(this, name, {value: value});
});
});
module.exports = ProxyHandler;
{
"name": "htmlparser2",
"description": "Performance-optimized forgiving HTML/XML/RSS parser",
"version": "2.2.4",
"version": "2.2.5",
"author": "Felix Boehm <me@feedic.com>",

@@ -6,0 +6,0 @@ "keywords": ["html", "parser", "streams", "xml", "dom", "rss", "feed", "atom"],

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc