Comparing version 0.0.10 to 0.0.11
@@ -11,2 +11,8 @@ 'use strict'; | ||
var _builder = require('./builder.js'); | ||
var _builder2 = _interopRequireDefault(_builder); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } | ||
@@ -19,2 +25,4 @@ | ||
var htmlparser = require('htmlparser'); | ||
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { | ||
@@ -163,7 +171,7 @@ try { | ||
function SoupTag(name) { | ||
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; | ||
var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | ||
var previousElement = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; | ||
var nextElement = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; | ||
function SoupTag(name, builder) { | ||
var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; | ||
var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; | ||
var previousElement = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; | ||
var nextElement = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; | ||
@@ -178,2 +186,3 @@ _classCallCheck(this, SoupTag); | ||
_this4.hidden = false; | ||
_this4.builder = builder; | ||
return _this4; | ||
@@ -198,3 +207,3 @@ } | ||
for (var i = 0; i < children.length; ++i) { | ||
var ele = this._transfer(children[i]); | ||
var ele = this._transform(children[i]); | ||
last.nextElement = ele; | ||
@@ -218,4 +227,4 @@ ele.previousElement = last; | ||
}, { | ||
key: '_transfer', | ||
value: function _transfer(dom) { | ||
key: '_transform', | ||
value: function _transform(dom) { | ||
if (!dom) return null; | ||
@@ -232,3 +241,3 @@ if (dom.type === 'text') { | ||
} | ||
return new SoupTag(dom.name, dom.attribs, this); | ||
return new SoupTag(dom.name, this.builder, dom.attribs, this); | ||
} | ||
@@ -265,3 +274,5 @@ }, { | ||
var tag = strainer.match(descendants[i]); | ||
if (tag) results.push(tag); | ||
if (tag) { | ||
results.push(tag); | ||
} | ||
} | ||
@@ -273,2 +284,70 @@ } | ||
}, { | ||
key: 'findPreviousSibling', | ||
value: function findPreviousSibling() { | ||
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; | ||
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; | ||
var string = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; | ||
var results = this.findPreviousSiblings(name, attrs, string); | ||
if (results.length > 0) { | ||
return results[0]; | ||
} | ||
return undefined; | ||
} | ||
}, { | ||
key: 'findPreviousSiblings', | ||
value: function findPreviousSiblings() { | ||
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; | ||
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; | ||
var string = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; | ||
var results = []; | ||
var cur = this.previousSibling; | ||
var strainer = new SoupStrainer(name, attrs, string); | ||
while (cur) { | ||
if (cur instanceof SoupTag) { | ||
var tag = strainer.match(cur); | ||
if (tag) { | ||
results.push(tag); | ||
} | ||
} | ||
cur = cur.previousSibling; | ||
} | ||
return results; | ||
} | ||
}, { | ||
key: 'findNextSibling', | ||
value: function findNextSibling() { | ||
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; | ||
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; | ||
var string = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; | ||
var results = this.findNextSiblings(name, attrs, string); | ||
if (results.length > 0) { | ||
return results[0]; | ||
} | ||
return undefined; | ||
} | ||
}, { | ||
key: 'findNextSiblings', | ||
value: function findNextSiblings() { | ||
var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; | ||
var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; | ||
var string = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; | ||
var results = []; | ||
var cur = this.nextSibling; | ||
var strainer = new SoupStrainer(name, attrs, string); | ||
while (cur) { | ||
if (cur instanceof SoupTag) { | ||
var tag = strainer.match(cur); | ||
if (tag) { | ||
results.push(tag); | ||
} | ||
} | ||
cur = cur.nextSibling; | ||
} | ||
return results; | ||
} | ||
}, { | ||
key: 'getText', | ||
@@ -314,11 +393,29 @@ value: function getText() { | ||
if (attrs) { | ||
text += indent.repeat(level) + '<' + this.name + ' ' + attrs + '>' + breakline; | ||
text += indent.repeat(level) + '<' + this.name + ' ' + attrs; | ||
} else { | ||
text += indent.repeat(level) + '<' + this.name + '>' + breakline; | ||
text += indent.repeat(level) + '<' + this.name; | ||
} | ||
} | ||
// is an element doesn't have any contents, it's a self closing element | ||
if (!this.hidden) { | ||
if (this._isEmptyElement() && this.builder.canBeEmptyElement(this.name)) { | ||
text += ' />' + breakline; | ||
return text; | ||
} else { | ||
text += '>' + breakline; | ||
} | ||
} | ||
for (var i = 0; i < this.contents.length; ++i) { | ||
if (this.contents[i] instanceof SoupString) { | ||
text += indent.repeat(level + 1) + this.contents[i].toString() + breakline; | ||
var curText = this.contents[i].toString(); | ||
curText = curText.trim(); | ||
if (curText.length != 0) { | ||
if (curText.substring(curText.length - 1) == "\n") { | ||
text += indent.repeat(level + 1) + curText; | ||
} else { | ||
text += indent.repeat(level + 1) + curText + breakline; | ||
} | ||
} | ||
} else { | ||
@@ -332,5 +429,7 @@ if (this.contents[i] instanceof SoupComment) { | ||
} | ||
if (!this.hidden) { | ||
text += indent.repeat(level) + '</' + this.name + '>' + breakline; | ||
} | ||
return text; | ||
@@ -383,2 +482,7 @@ } | ||
}, { | ||
key: '_isEmptyElement', | ||
value: function _isEmptyElement() { | ||
return this.contents.length == 0; | ||
} | ||
}, { | ||
key: 'string', | ||
@@ -429,5 +533,7 @@ get: function get() { | ||
function JSSoup(text) { | ||
var ignoreWhitespace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; | ||
_classCallCheck(this, JSSoup); | ||
var _this5 = _possibleConstructorReturn(this, (JSSoup.__proto__ || Object.getPrototypeOf(JSSoup)).call(this, ROOT_TAG_NAME, null)); | ||
var _this5 = _possibleConstructorReturn(this, (JSSoup.__proto__ || Object.getPrototypeOf(JSSoup)).call(this, ROOT_TAG_NAME, new _builder2.default(), null)); | ||
@@ -438,3 +544,3 @@ var handler = new htmlparser.DefaultHandler(function (error, dom) { | ||
} else {} | ||
}, { verbose: false, ignoreWhitespace: true }); | ||
}, { verbose: false, ignoreWhitespace: ignoreWhitespace }); | ||
@@ -441,0 +547,0 @@ var parser = new htmlparser.Parser(handler); |
{ | ||
"name": "jssoup", | ||
"version": "0.0.10", | ||
"version": "0.0.11", | ||
"description": "JSSoup is a BeautifulSoup style HTML parser library.", | ||
@@ -15,3 +15,3 @@ "main": "./dist/lib/jssoup.js", | ||
"prebuild": "npm run clean && npm run init", | ||
"build": "babel ./lib/jssoup.js -d dist --presets es2015 " | ||
"build": "babel ./lib/*.js -d dist --presets es2015 " | ||
}, | ||
@@ -45,4 +45,4 @@ "repository": { | ||
"htmlparser": "^1.7.7", | ||
"lodash": "^4.17.5" | ||
"lodash": "^4.17.15" | ||
} | ||
} |
@@ -37,2 +37,8 @@ JSSoup | ||
``` | ||
> The text element only contains whitespace will be ignored by default. To disable this feature, set second parameter | ||
of JSSoup to false. This parameter is "ignoreWhitespace" and will be passed into htmlparser. | ||
```javascript | ||
var soup = new JSSoup('<html><head>hello</head></html>', false); | ||
``` | ||
### Name | ||
@@ -140,2 +146,64 @@ ```javascript | ||
``` | ||
#### .findNextSibling() | ||
```javascript | ||
var data = ` | ||
<div> | ||
<span> test </span> | ||
<div> div </div> | ||
<p> hello </p> | ||
<p> world </p> | ||
</div> | ||
` | ||
var soup = new JSSoup(data); | ||
var span = soup.find('span'); | ||
span.findNextSibling('p') | ||
// <p> hello </p> | ||
``` | ||
#### .findNextSiblings() | ||
```javascript | ||
var data = ` | ||
<div> | ||
<span> test </span> | ||
<div> div </div> | ||
<p> hello </p> | ||
<p> world </p> | ||
</div> | ||
` | ||
var soup = new JSSoup(data); | ||
var span = soup.find('span'); | ||
span.findNextSiblings('p') | ||
// <p> hello </p> | ||
// <p> world </p> | ||
``` | ||
#### .findPreviousSibling() | ||
```javascript | ||
var data = ` | ||
<div> | ||
<p> hello </p> | ||
<p> world </p> | ||
<div> div </div> | ||
<span> test </span> | ||
</div> | ||
` | ||
var soup = new JSSoup(data); | ||
var span = soup.find('span'); | ||
span.findPreviousSibling('p') | ||
// <p> world </p> | ||
``` | ||
#### .findPreviousSiblings() | ||
```javascript | ||
var data = ` | ||
<div> | ||
<p> hello </p> | ||
<p> world </p> | ||
<div> div </div> | ||
<span> test </span> | ||
</div> | ||
` | ||
var soup = new JSSoup(data); | ||
var span = soup.find('span'); | ||
span.findPreviousSiblings('p') | ||
// <p> hello </p> | ||
// <p> world </p> | ||
``` | ||
### Output | ||
@@ -142,0 +210,0 @@ #### .prettify() |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
28803
4
584
239
Updatedlodash@^4.17.15