123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.xpath = void 0;
- exports.resolveNameSpace = resolveNameSpace;
- exports.evalXPath = evalXPath;
- exports.evaluateBoolean = evaluateBoolean;
- exports.evaluateString = evaluateString;
- exports.updateEvaluator = updateEvaluator;
- const engine_js_1 = require("./engine.js");
- const EngineConst = require("../common/engine_const.js");
- const system_external_js_1 = require("./system_external.js");
- function xpathSupported() {
- if (typeof XPathResult === 'undefined') {
- return false;
- }
- return true;
- }
- exports.xpath = {
- currentDocument: null,
- evaluate: xpathSupported()
- ? document.evaluate
- : system_external_js_1.SystemExternal.xpath.evaluate,
- result: xpathSupported() ? XPathResult : system_external_js_1.SystemExternal.xpath.XPathResult,
- createNSResolver: xpathSupported()
- ? document.createNSResolver
- : system_external_js_1.SystemExternal.xpath.createNSResolver
- };
- const nameSpaces = {
- xhtml: 'http://www.w3.org/1999/xhtml',
- mathml: 'http://www.w3.org/1998/Math/MathML',
- mml: 'http://www.w3.org/1998/Math/MathML',
- svg: 'http://www.w3.org/2000/svg'
- };
- function resolveNameSpace(prefix) {
- return nameSpaces[prefix] || null;
- }
- class Resolver {
- constructor() {
- this.lookupNamespaceURI = resolveNameSpace;
- }
- }
- function evaluateXpath(expression, rootNode, type) {
- return engine_js_1.Engine.getInstance().mode === EngineConst.Mode.HTTP &&
- !engine_js_1.Engine.getInstance().isIE &&
- !engine_js_1.Engine.getInstance().isEdge
- ? exports.xpath.currentDocument.evaluate(expression, rootNode, resolveNameSpace, type, null)
- : exports.xpath.evaluate(expression, rootNode, new Resolver(), type, null);
- }
- function evalXPath(expression, rootNode) {
- let iterator;
- try {
- iterator = evaluateXpath(expression, rootNode, exports.xpath.result.ORDERED_NODE_ITERATOR_TYPE);
- }
- catch (_err) {
- return [];
- }
- const results = [];
- for (let xpathNode = iterator.iterateNext(); xpathNode; xpathNode = iterator.iterateNext()) {
- results.push(xpathNode);
- }
- return results;
- }
- function evaluateBoolean(expression, rootNode) {
- let result;
- try {
- result = evaluateXpath(expression, rootNode, exports.xpath.result.BOOLEAN_TYPE);
- }
- catch (_err) {
- return false;
- }
- return result.booleanValue;
- }
- function evaluateString(expression, rootNode) {
- let result;
- try {
- result = evaluateXpath(expression, rootNode, exports.xpath.result.STRING_TYPE);
- }
- catch (_err) {
- return '';
- }
- return result.stringValue;
- }
- function updateEvaluator(node) {
- if (engine_js_1.Engine.getInstance().mode !== EngineConst.Mode.HTTP)
- return;
- let parent = node;
- while (parent && !parent.evaluate) {
- parent = parent.parentNode;
- }
- if (parent && parent.evaluate) {
- exports.xpath.currentDocument = parent;
- }
- else if (node.ownerDocument) {
- exports.xpath.currentDocument = node.ownerDocument;
- }
- }
|