You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.3 KiB
78 lines
2.3 KiB
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
exports.update = exports.getParse = void 0; |
|
var domutils_1 = require("domutils"); |
|
var domhandler_1 = require("domhandler"); |
|
/** |
|
* Get the parse function with options. |
|
* |
|
* @param parser - The parser function. |
|
* @returns The parse function with options. |
|
*/ |
|
function getParse(parser) { |
|
/** |
|
* Parse a HTML string or a node. |
|
* |
|
* @param content - The HTML string or node. |
|
* @param options - The parser options. |
|
* @param isDocument - If `content` is a document. |
|
* @param context - The context node in the DOM tree. |
|
* @returns The parsed document node. |
|
*/ |
|
return function parse(content, options, isDocument, context) { |
|
if (typeof Buffer !== 'undefined' && Buffer.isBuffer(content)) { |
|
content = content.toString(); |
|
} |
|
if (typeof content === 'string') { |
|
return parser(content, options, isDocument, context); |
|
} |
|
var doc = content; |
|
if (!Array.isArray(doc) && (0, domhandler_1.isDocument)(doc)) { |
|
// If `doc` is already a root, just return it |
|
return doc; |
|
} |
|
// Add conent to new root element |
|
var root = new domhandler_1.Document([]); |
|
// Update the DOM using the root |
|
update(doc, root); |
|
return root; |
|
}; |
|
} |
|
exports.getParse = getParse; |
|
/** |
|
* Update the dom structure, for one changed layer. |
|
* |
|
* @param newChilds - The new children. |
|
* @param parent - The new parent. |
|
* @returns The parent node. |
|
*/ |
|
function update(newChilds, parent) { |
|
// Normalize |
|
var arr = Array.isArray(newChilds) ? newChilds : [newChilds]; |
|
// Update parent |
|
if (parent) { |
|
parent.children = arr; |
|
} |
|
else { |
|
parent = null; |
|
} |
|
// Update neighbors |
|
for (var i = 0; i < arr.length; i++) { |
|
var node = arr[i]; |
|
// Cleanly remove existing nodes from their previous structures. |
|
if (node.parent && node.parent.children !== arr) { |
|
(0, domutils_1.removeElement)(node); |
|
} |
|
if (parent) { |
|
node.prev = arr[i - 1] || null; |
|
node.next = arr[i + 1] || null; |
|
} |
|
else { |
|
node.prev = node.next = null; |
|
} |
|
node.parent = parent; |
|
} |
|
return parent; |
|
} |
|
exports.update = update; |
|
//# sourceMappingURL=parse.js.map
|