forked from daren.hsu/line_push
update
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
||||
import Node from './node';
|
||||
import NodeType from './type';
|
||||
export default class CommentNode extends Node {
|
||||
constructor(rawText, parentNode) {
|
||||
super(parentNode);
|
||||
this.rawText = rawText;
|
||||
/**
|
||||
* Node Type declaration.
|
||||
* @type {Number}
|
||||
*/
|
||||
this.nodeType = NodeType.COMMENT_NODE;
|
||||
}
|
||||
/**
|
||||
* Get unescaped text value of current node and its children.
|
||||
* @return {string} text content
|
||||
*/
|
||||
get text() {
|
||||
return this.rawText;
|
||||
}
|
||||
toString() {
|
||||
return `<!--${this.rawText}-->`;
|
||||
}
|
||||
}
|
||||
+1092
File diff suppressed because it is too large
Load Diff
+18
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Node Class as base class for TextNode and HTMLElement.
|
||||
*/
|
||||
export default class Node {
|
||||
constructor(parentNode = null) {
|
||||
this.parentNode = parentNode;
|
||||
this.childNodes = [];
|
||||
}
|
||||
get innerText() {
|
||||
return this.rawText;
|
||||
}
|
||||
get textContent() {
|
||||
return this.rawText;
|
||||
}
|
||||
set textContent(val) {
|
||||
this.rawText = val;
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
import NodeType from './type';
|
||||
import Node from './node';
|
||||
/**
|
||||
* TextNode to contain a text element in DOM tree.
|
||||
* @param {string} value [description]
|
||||
*/
|
||||
export default class TextNode extends Node {
|
||||
constructor(rawText, parentNode) {
|
||||
super(parentNode);
|
||||
this.rawText = rawText;
|
||||
/**
|
||||
* Node Type declaration.
|
||||
* @type {Number}
|
||||
*/
|
||||
this.nodeType = NodeType.TEXT_NODE;
|
||||
}
|
||||
/**
|
||||
* 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.
|
||||
* @return {string} text content
|
||||
*/
|
||||
get text() {
|
||||
return this.rawText;
|
||||
}
|
||||
/**
|
||||
* Detect if the node contains only white space.
|
||||
* @return {bool}
|
||||
*/
|
||||
get isWhitespace() {
|
||||
return /^(\s| )*$/.test(this.rawText);
|
||||
}
|
||||
toString() {
|
||||
return this.text;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
var NodeType;
|
||||
(function (NodeType) {
|
||||
NodeType[NodeType["ELEMENT_NODE"] = 1] = "ELEMENT_NODE";
|
||||
NodeType[NodeType["TEXT_NODE"] = 3] = "TEXT_NODE";
|
||||
NodeType[NodeType["COMMENT_NODE"] = 8] = "COMMENT_NODE";
|
||||
})(NodeType || (NodeType = {}));
|
||||
export default NodeType;
|
||||
Reference in New Issue
Block a user