UNPKG

fontoxpath

Version:

A minimalistic XPath 3.1 engine in JavaScript

37 lines (32 loc) 1.15 kB
import Selector from '../Selector'; import Sequence from '../dataTypes/Sequence'; import createNodeValue from '../dataTypes/createNodeValue'; /** * @extends {Selector} */ class AbsolutePathSelector extends Selector { /** * @param {Selector} relativePathSelector */ constructor (relativePathSelector) { super(relativePathSelector.specificity, { resultOrder: Selector.RESULT_ORDERINGS.SORTED, subtree: false, peer: false, canBeStaticallyEvaluated: false }); this._relativePathSelector = relativePathSelector; } evaluate (dynamicContext) { if (dynamicContext.contextItem === null) { throw new Error('XPDY0002: context is absent, it needs to be present to use paths.'); } var node = dynamicContext.contextItem.value; var documentNode = node.nodeType === node.DOCUMENT_NODE ? node : node.ownerDocument; // Assume this is the start, so only one node var contextSequence = Sequence.singleton(createNodeValue(documentNode)); return this._relativePathSelector.evaluateMaybeStatically( dynamicContext.scopeWithFocus(0, contextSequence.first(), contextSequence)); } } export default AbsolutePathSelector;