node-html-parser
Advanced tools
Comparing version 3.3.3 to 3.3.4
@@ -229,3 +229,3 @@ import he from 'he'; | ||
else { | ||
let text = node.text; | ||
let text = node.trimmedText; | ||
if (currentBlock.prependWhitespace) { | ||
@@ -367,3 +367,3 @@ text = ` ${text}`; | ||
} | ||
node.rawText = node.rawText.trim(); | ||
node.rawText = node.trimmedText; | ||
} | ||
@@ -370,0 +370,0 @@ else if (node.nodeType === NodeType.ELEMENT_NODE) { |
@@ -18,2 +18,37 @@ import NodeType from './type'; | ||
/** | ||
* Returns text with all whitespace trimmed except single leading/trailing non-breaking space | ||
*/ | ||
get trimmedText() { | ||
if (this._trimmedText !== undefined) | ||
return this._trimmedText; | ||
const text = this.rawText; | ||
let i = 0; | ||
let startPos; | ||
let endPos; | ||
while (i >= 0 && i < text.length) { | ||
if (/\S/.test(text[i])) { | ||
if (startPos === undefined) { | ||
startPos = i; | ||
i = text.length; | ||
} | ||
else { | ||
endPos = i; | ||
i = void 0; | ||
} | ||
} | ||
if (startPos === undefined) | ||
i++; | ||
else | ||
i--; | ||
} | ||
if (startPos === undefined) | ||
startPos = 0; | ||
if (endPos === undefined) | ||
endPos = text.length - 1; | ||
const hasLeadingSpace = startPos > 0 && /[^\S\r\n]/.test(text[startPos - 1]); | ||
const hasTrailingSpace = endPos < (text.length - 1) && /[^\S\r\n]/.test(text[endPos + 1]); | ||
this._trimmedText = (hasLeadingSpace ? ' ' : '') + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? ' ' : ''); | ||
return this._trimmedText; | ||
} | ||
/** | ||
* Get unescaped text value of current node and its children. | ||
@@ -20,0 +55,0 @@ * @return {string} text content |
@@ -75,2 +75,41 @@ var __extends = (this && this.__extends) || (function () { | ||
} | ||
Object.defineProperty(TextNode.prototype, "trimmedText", { | ||
/** | ||
* Returns text with all whitespace trimmed except single leading/trailing non-breaking space | ||
*/ | ||
get: function () { | ||
if (this._trimmedText !== undefined) | ||
return this._trimmedText; | ||
var text = this.rawText; | ||
var i = 0; | ||
var startPos; | ||
var endPos; | ||
while (i >= 0 && i < text.length) { | ||
if (/\S/.test(text[i])) { | ||
if (startPos === undefined) { | ||
startPos = i; | ||
i = text.length; | ||
} | ||
else { | ||
endPos = i; | ||
i = void 0; | ||
} | ||
} | ||
if (startPos === undefined) | ||
i++; | ||
else | ||
i--; | ||
} | ||
if (startPos === undefined) | ||
startPos = 0; | ||
if (endPos === undefined) | ||
endPos = text.length - 1; | ||
var hasLeadingSpace = startPos > 0 && /[^\S\r\n]/.test(text[startPos - 1]); | ||
var hasTrailingSpace = endPos < (text.length - 1) && /[^\S\r\n]/.test(text[endPos + 1]); | ||
this._trimmedText = (hasLeadingSpace ? ' ' : '') + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? ' ' : ''); | ||
return this._trimmedText; | ||
}, | ||
enumerable: false, | ||
configurable: true | ||
}); | ||
Object.defineProperty(TextNode.prototype, "text", { | ||
@@ -477,3 +516,3 @@ /** | ||
else { | ||
var text = node.text; | ||
var text = node.trimmedText; | ||
if (currentBlock.prependWhitespace) { | ||
@@ -633,3 +672,3 @@ text = " " + text; | ||
} | ||
node.rawText = node.rawText.trim(); | ||
node.rawText = node.trimmedText; | ||
} | ||
@@ -636,0 +675,0 @@ else if (node.nodeType === type_3.default.ELEMENT_NODE) { |
@@ -302,3 +302,3 @@ "use strict"; | ||
else { | ||
var text = node.text; | ||
var text = node.trimmedText; | ||
if (currentBlock.prependWhitespace) { | ||
@@ -458,3 +458,3 @@ text = " " + text; | ||
} | ||
node.rawText = node.rawText.trim(); | ||
node.rawText = node.trimmedText; | ||
} | ||
@@ -461,0 +461,0 @@ else if (node.nodeType === type_1.default.ELEMENT_NODE) { |
@@ -16,3 +16,8 @@ import NodeType from './type'; | ||
nodeType: NodeType; | ||
private _trimmedText?; | ||
/** | ||
* Returns text with all whitespace trimmed except single leading/trailing non-breaking space | ||
*/ | ||
get trimmedText(): string; | ||
/** | ||
* Get unescaped text value of current node and its children. | ||
@@ -19,0 +24,0 @@ * @return {string} text content |
@@ -39,2 +39,41 @@ "use strict"; | ||
} | ||
Object.defineProperty(TextNode.prototype, "trimmedText", { | ||
/** | ||
* Returns text with all whitespace trimmed except single leading/trailing non-breaking space | ||
*/ | ||
get: function () { | ||
if (this._trimmedText !== undefined) | ||
return this._trimmedText; | ||
var text = this.rawText; | ||
var i = 0; | ||
var startPos; | ||
var endPos; | ||
while (i >= 0 && i < text.length) { | ||
if (/\S/.test(text[i])) { | ||
if (startPos === undefined) { | ||
startPos = i; | ||
i = text.length; | ||
} | ||
else { | ||
endPos = i; | ||
i = void 0; | ||
} | ||
} | ||
if (startPos === undefined) | ||
i++; | ||
else | ||
i--; | ||
} | ||
if (startPos === undefined) | ||
startPos = 0; | ||
if (endPos === undefined) | ||
endPos = text.length - 1; | ||
var hasLeadingSpace = startPos > 0 && /[^\S\r\n]/.test(text[startPos - 1]); | ||
var hasTrailingSpace = endPos < (text.length - 1) && /[^\S\r\n]/.test(text[endPos + 1]); | ||
this._trimmedText = (hasLeadingSpace ? ' ' : '') + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? ' ' : ''); | ||
return this._trimmedText; | ||
}, | ||
enumerable: false, | ||
configurable: true | ||
}); | ||
Object.defineProperty(TextNode.prototype, "text", { | ||
@@ -41,0 +80,0 @@ /** |
{ | ||
"name": "node-html-parser", | ||
"version": "3.3.3", | ||
"version": "3.3.4", | ||
"description": "A very fast HTML parser, generating a simplified DOM, with basic element query support.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
178554
4806