|
|
"use strict"; |
|
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
|
exports.findAll = findAll; |
|
|
exports.findOne = findOne; |
|
|
exports.getNextSiblings = getNextSiblings; |
|
|
exports.getElementParent = getElementParent; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function findAll(query, elems, options) { |
|
|
var adapter = options.adapter, _a = options.xmlMode, xmlMode = _a === void 0 ? false : _a; |
|
|
var result = []; |
|
|
|
|
|
var nodeStack = [elems]; |
|
|
|
|
|
var indexStack = [0]; |
|
|
for (;;) { |
|
|
|
|
|
if (indexStack[0] >= nodeStack[0].length) { |
|
|
|
|
|
if (nodeStack.length === 1) { |
|
|
return result; |
|
|
} |
|
|
nodeStack.shift(); |
|
|
indexStack.shift(); |
|
|
|
|
|
continue; |
|
|
} |
|
|
var elem = nodeStack[0][indexStack[0]++]; |
|
|
if (!adapter.isTag(elem)) |
|
|
continue; |
|
|
if (query(elem)) |
|
|
result.push(elem); |
|
|
if (xmlMode || adapter.getName(elem) !== "template") { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var children = adapter.getChildren(elem); |
|
|
if (children.length > 0) { |
|
|
nodeStack.unshift(children); |
|
|
indexStack.unshift(0); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function findOne(query, elems, options) { |
|
|
var adapter = options.adapter, _a = options.xmlMode, xmlMode = _a === void 0 ? false : _a; |
|
|
|
|
|
var nodeStack = [elems]; |
|
|
|
|
|
var indexStack = [0]; |
|
|
for (;;) { |
|
|
|
|
|
if (indexStack[0] >= nodeStack[0].length) { |
|
|
|
|
|
if (nodeStack.length === 1) { |
|
|
return null; |
|
|
} |
|
|
nodeStack.shift(); |
|
|
indexStack.shift(); |
|
|
|
|
|
continue; |
|
|
} |
|
|
var elem = nodeStack[0][indexStack[0]++]; |
|
|
if (!adapter.isTag(elem)) |
|
|
continue; |
|
|
if (query(elem)) |
|
|
return elem; |
|
|
if (xmlMode || adapter.getName(elem) !== "template") { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var children = adapter.getChildren(elem); |
|
|
if (children.length > 0) { |
|
|
nodeStack.unshift(children); |
|
|
indexStack.unshift(0); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
function getNextSiblings(elem, adapter) { |
|
|
var siblings = adapter.getSiblings(elem); |
|
|
if (siblings.length <= 1) |
|
|
return []; |
|
|
var elemIndex = siblings.indexOf(elem); |
|
|
if (elemIndex < 0 || elemIndex === siblings.length - 1) |
|
|
return []; |
|
|
return siblings.slice(elemIndex + 1).filter(adapter.isTag); |
|
|
} |
|
|
function getElementParent(node, adapter) { |
|
|
var parent = adapter.getParent(node); |
|
|
return parent != null && adapter.isTag(parent) ? parent : null; |
|
|
} |
|
|
|