NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// ==UserLibrary==
// @name XPathLib
// @namespace https://openuserjs.org/users/Anakunda
// @version 1.3
// @author Anakunda
// @license GPL-3.0-or-later
// @copyright 2021, Anakunda (https://openuserjs.org/users/Anakunda)
// @exclude *
// ==/UserScript==
// ==/UserLibrary==
function evaluate(xpath, resultType = XPathResult.FIRST_ORDERED_NODE_TYPE, root = document, context = root.body) {
return root.evaluate(xpath, context, null, resultType, null);
}
function findNode(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.FIRST_ORDERED_NODE_TYPE, root, context);
return result.resultType == XPathResult.FIRST_ORDERED_NODE_TYPE ? result.singleNodeValue : null;
}
function findNodes(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.ORDERED_NODE_ITERATOR_TYPE, root, context);
return result.resultType == XPathResult.ORDERED_NODE_ITERATOR_TYPE ? result : null;
}
function findSnapshot(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, root, context);
return result.resultType == XPathResult.ORDERED_NODE_SNAPSHOT_TYPE ? result : null;
}
function findString(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.STRING_TYPE, root, context);
return result.resultType == XPathResult.STRING_TYPE ? result.stringValue : null;
}
function findNumber(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.NUMBER_TYPE, root, context);
return result.resultType == XPathResult.NUMBER_TYPE ? result.numberValue : null;
}
function findBoolean(xpath, root = document, context = root.body) {
var result = evaluate(xpath, XPathResult.BOOLEAN_TYPE, root, context);
return result.resultType == XPathResult.BOOLEAN_TYPE ? result.booleanValue : null;
}
function findAny(xpath, root = document, context = root.body) {
return evaluate(xpath, XPathResult.ANY_TYPE, root, context);
}
Document.prototype.findNode = function(xpath, root = this) {
var result = this.evaluate(xpath, root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
return result.resultType == XPathResult.FIRST_ORDERED_NODE_TYPE ? result.singleNodeValue : null;
};
Document.prototype.findNodes = function(xpath, root = this) {
var result = this.evaluate(xpath, root, null, XPathResult.ORDERED_NODE_ITERATOR_TYPEORDERED_NODE_ITERATOR_TYPE, null);
return result.resultType == XPathResult.ORDERED_NODE_ITERATOR_TYPEORDERED_NODE_ITERATOR_TYPE ? result : null;
};
Document.prototype.findSnapshot = function(xpath, root = this) {
var result = this.evaluate(xpath, root, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
return result.resultType == XPathResult.ORDERED_NODE_SNAPSHOT_TYPE ? result : null;
};
Document.prototype.findString = function(xpath, root = this) {
var result = this.evaluate(xpath, root, null, XPathResult.STRING_TYPE, null);
return result.resultType == XPathResult.STRING_TYPE ? result.stringValue : null;
};
Document.prototype.findNumber = function(xpath, root = this) {
var result = this.evaluate(xpath, root, null, XPathResult.NUMBER_TYPE, null);
return result.resultType == XPathResult.NUMBER_TYPE ? result.numberValue : null;
};
Document.prototype.findBoolean = function(xpath, root = null) {
var result = this.evaluate(xpath, root || this, null, XPathResult.BOOLEAN_TYPE, null);
return result.resultType == XPathResult.BOOLEAN_TYPE ? result.booleanValue : null;
};
Document.prototype.findAny = function(xpath, root = null) {
return this.evaluate(xpath, root || this, null, XPathResult.ANY_TYPE, null);
};
//////////////////////////////////////////////////////////////////////////
////////////////////////////// SAFE PADDING //////////////////////////////
//////////////////////////////////////////////////////////////////////////