jssoup
Advanced tools
Comparing version 0.0.11 to 0.0.12
@@ -81,2 +81,112 @@ 'use strict'; | ||
}, { | ||
key: 'insert', | ||
value: function insert(index, newElement) { | ||
var _this = this; | ||
if (newElement == null) { | ||
throw "Cannot insert null element!"; | ||
} | ||
if (newElement === this) { | ||
throw "Cannot add one itself!"; | ||
} | ||
if (!(this instanceof SoupTag)) { | ||
throw "insert is not support in " + this.constructor.name; | ||
} | ||
if (index < 0) { | ||
throw "index cannot be negative!"; | ||
} | ||
if (newElement instanceof JSSoup) { | ||
newElement.contents.forEach(function (element) { | ||
_this.insert(index, element); | ||
++index; | ||
}); | ||
return; | ||
} | ||
index = Math.min(index, this.contents.length); | ||
if (typeof newElement == 'string') { | ||
newElement = new SoupString(newElement); | ||
} | ||
if (newElement.parent) { | ||
if (newElement.parent === this) { | ||
var curIndex = this.contents.indexOf(newElement); | ||
if (index == curIndex) return; | ||
if (index > curIndex) { | ||
--index; | ||
} | ||
} | ||
newElement.extract(); | ||
} | ||
var count = this.contents.length; | ||
var descendantsOfNewElement = newElement.descendants; | ||
var lastElementOfNewElement = descendantsOfNewElement && descendantsOfNewElement.length > 0 ? descendantsOfNewElement[descendantsOfNewElement.length - 1] : newElement; | ||
// handle previous element of newElement | ||
if (index == 0) { | ||
newElement.previousElement = this; | ||
} else { | ||
var previousChild = this.contents[index - 1]; | ||
var previousDescendants = previousChild.descendants; | ||
newElement.previousElement = previousDescendants && previousDescendants.length > 0 ? previousDescendants[previousDescendants.length - 1] : previousChild; | ||
} | ||
if (newElement.previousElement) { | ||
newElement.previousElement.nextElement = newElement; | ||
} | ||
// handle next element of newElement | ||
if (index < count) { | ||
lastElementOfNewElement.nextElement = this.contents[index]; | ||
} else { | ||
var parent = this; | ||
var parentNextSibling = null; | ||
while (!parentNextSibling && parent) { | ||
parentNextSibling = parent.nextSibling; | ||
parent = parent.parent; | ||
} | ||
if (parentNextSibling) { | ||
lastElementOfNewElement.nextElement = parentNextSibling; | ||
} else { | ||
lastElementOfNewElement.nextElement = null; | ||
} | ||
} | ||
if (lastElementOfNewElement.nextElement) { | ||
lastElementOfNewElement.nextElement.previousElement = lastElementOfNewElement; | ||
} | ||
newElement.parent = this; | ||
this.contents.splice(index, 0, newElement); | ||
} | ||
}, { | ||
key: 'replaceWith', | ||
value: function replaceWith(newElement) { | ||
if (this.parent == null) { | ||
throw "Cannot replace element without parent!"; | ||
} | ||
if (newElement === this) { | ||
return; | ||
} | ||
if (newElement === this.parent) { | ||
throw "Cannot replace element with its parent!"; | ||
} | ||
var parent = this.parent; | ||
var index = this.parent.contents.indexOf(this); | ||
this.extract(); | ||
try { | ||
parent.insert(index, newElement); | ||
} catch (err) { | ||
throw 'Cannot replace this element!'; | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: 'nextSibling', | ||
@@ -112,6 +222,6 @@ get: function get() { | ||
var _this = _possibleConstructorReturn(this, (SoupComment.__proto__ || Object.getPrototypeOf(SoupComment)).call(this, parent, previousElement, nextElement)); | ||
var _this2 = _possibleConstructorReturn(this, (SoupComment.__proto__ || Object.getPrototypeOf(SoupComment)).call(this, parent, previousElement, nextElement)); | ||
_this._text = text; | ||
return _this; | ||
_this2._text = text; | ||
return _this2; | ||
} | ||
@@ -132,6 +242,6 @@ | ||
var _this2 = _possibleConstructorReturn(this, (SoupString.__proto__ || Object.getPrototypeOf(SoupString)).call(this, parent, previousElement, nextElement)); | ||
var _this3 = _possibleConstructorReturn(this, (SoupString.__proto__ || Object.getPrototypeOf(SoupString)).call(this, parent, previousElement, nextElement)); | ||
_this2._text = text; | ||
return _this2; | ||
_this3._text = text; | ||
return _this3; | ||
} | ||
@@ -156,6 +266,6 @@ | ||
var _this3 = _possibleConstructorReturn(this, (SoupDoctypeString.__proto__ || Object.getPrototypeOf(SoupDoctypeString)).call(this, text, parent, previousElement, nextElement)); | ||
var _this4 = _possibleConstructorReturn(this, (SoupDoctypeString.__proto__ || Object.getPrototypeOf(SoupDoctypeString)).call(this, text, parent, previousElement, nextElement)); | ||
_this3._text = text; | ||
return _this3; | ||
_this4._text = text; | ||
return _this4; | ||
} | ||
@@ -181,10 +291,10 @@ | ||
var _this4 = _possibleConstructorReturn(this, (SoupTag.__proto__ || Object.getPrototypeOf(SoupTag)).call(this, parent, previousElement, nextElement)); | ||
var _this5 = _possibleConstructorReturn(this, (SoupTag.__proto__ || Object.getPrototypeOf(SoupTag)).call(this, parent, previousElement, nextElement)); | ||
_this4.name = name; | ||
_this4.contents = []; | ||
_this4.attrs = attrs || {}; | ||
_this4.hidden = false; | ||
_this4.builder = builder; | ||
return _this4; | ||
_this5.name = name; | ||
_this5.contents = []; | ||
_this5.attrs = attrs || {}; | ||
_this5.hidden = false; | ||
_this5.builder = builder; | ||
return _this5; | ||
} | ||
@@ -530,3 +640,3 @@ | ||
var _this5 = _possibleConstructorReturn(this, (JSSoup.__proto__ || Object.getPrototypeOf(JSSoup)).call(this, ROOT_TAG_NAME, new _builder2.default(), null)); | ||
var _this6 = _possibleConstructorReturn(this, (JSSoup.__proto__ || Object.getPrototypeOf(JSSoup)).call(this, ROOT_TAG_NAME, new _builder2.default(), null)); | ||
@@ -543,9 +653,9 @@ var handler = new htmlparser.DefaultHandler(function (error, dom) { | ||
if (Array.isArray(handler.dom)) { | ||
_this5._build(handler.dom); | ||
_this6._build(handler.dom); | ||
} else { | ||
_this5._build([handler.dom]); | ||
_this6._build([handler.dom]); | ||
} | ||
_this5.hidden = true; | ||
return _this5; | ||
_this6.hidden = true; | ||
return _this6; | ||
} | ||
@@ -552,0 +662,0 @@ |
{ | ||
"name": "jssoup", | ||
"version": "0.0.11", | ||
"version": "0.0.12", | ||
"description": "JSSoup is a BeautifulSoup style HTML parser library.", | ||
@@ -41,7 +41,10 @@ "main": "./dist/lib/jssoup.js", | ||
"dependencies": { | ||
"braces": "^2.3.1", | ||
"chai": "^4.2.0", | ||
"debug": "^2.6.9", | ||
"growl": "^1.10.5", | ||
"htmlparser": "^1.7.7", | ||
"lodash": "^4.17.15" | ||
"lodash": "^4.17.19", | ||
"minimist": "^1.2.5" | ||
} | ||
} |
@@ -118,2 +118,23 @@ JSSoup | ||
``` | ||
#### .insert(position, new Element) | ||
```javascript | ||
d.prettify('', '') | ||
// <d>4</d> | ||
div.insert(1, d) | ||
div.contents | ||
// [<a>1</a>, <d>4</d>, <b>2</b>, <c>3</c>] | ||
``` | ||
#### .replaceWith(new Element) | ||
```javascript | ||
d.prettify('', '') | ||
// <d>4</d> | ||
b.replaceWith(d) | ||
div.contents | ||
// [<a>1</a>, <d>4</d>, <c>3</c>] | ||
c.string.replaceWith('new') | ||
div.contents | ||
// [<a>1</a>, <d>4</d>, <c>new</c>] | ||
``` | ||
### Search | ||
@@ -120,0 +141,0 @@ #### .findAll() |
32540
679
260
7
+ Addedbraces@^2.3.1
+ Addedchai@^4.2.0
+ Addedminimist@^1.2.5
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-unique@0.3.2(transitive)
+ Addedassertion-error@1.1.0(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbraces@2.3.2(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedchai@4.4.1(transitive)
+ Addedcheck-error@1.0.3(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddeep-eql@4.1.3(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedfill-range@4.0.0(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-func-name@2.0.2(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-number@3.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedkind-of@3.2.24.0.0(transitive)
+ Addedloupe@2.3.7(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedminimist@1.2.8(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedpathval@1.1.1(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-map@0.5.7(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.1(transitive)
+ Addedtype-detect@4.0.8(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedurix@0.1.0(transitive)
+ Addeduse@3.1.1(transitive)
Updatedlodash@^4.17.19