selenium-webdriver
Advanced tools
Comparing version 4.0.0-alpha.5 to 4.0.0-alpha.6
@@ -728,3 +728,3 @@ ## v4.0.0-alpha.4 | ||
options (e.g. mobile emulation and performance logging) documented on the | ||
ChromeDriver [project site](https://sites.google.com/a/chromium.org/chromedriver/capabilities). | ||
ChromeDriver [project site](https://chromedriver.chromium.org/capabilities). | ||
@@ -731,0 +731,0 @@ ## v2.45.0 |
547
chrome.js
@@ -121,6 +121,6 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
* | ||
* [ChromeDriver]: https://sites.google.com/a/chromium.org/chromedriver/ | ||
* [ChromeDriver]: https://chromedriver.chromium.org/ | ||
* [ChromeDriver release]: http://chromedriver.storage.googleapis.com/index.html | ||
* [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 | ||
* [android]: https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android | ||
* [android]: https://chromedriver.chromium.org/getting-started/getting-started---android | ||
* [webview]: https://developer.chrome.com/multidevice/webview/overview | ||
@@ -131,16 +131,7 @@ */ | ||
const fs = require('fs'); | ||
const util = require('util'); | ||
const http = require('./http'); | ||
const io = require('./io'); | ||
const {Browser, Capabilities, Capability} = require('./lib/capabilities'); | ||
const command = require('./lib/command'); | ||
const error = require('./lib/error'); | ||
const logging = require('./lib/logging'); | ||
const promise = require('./lib/promise'); | ||
const Symbols = require('./lib/symbols'); | ||
const webdriver = require('./lib/webdriver'); | ||
const portprober = require('./net/portprober'); | ||
const {Browser, Capabilities} = require('./lib/capabilities'); | ||
const remote = require('./remote'); | ||
const chromium = require('./chromium'); | ||
@@ -158,52 +149,2 @@ | ||
/** | ||
* Custom command names supported by ChromeDriver. | ||
* @enum {string} | ||
*/ | ||
const Command = { | ||
LAUNCH_APP: 'launchApp', | ||
GET_NETWORK_CONDITIONS: 'getNetworkConditions', | ||
SET_NETWORK_CONDITIONS: 'setNetworkConditions', | ||
SEND_DEVTOOLS_COMMAND: 'sendDevToolsCommand', | ||
}; | ||
/** | ||
* Creates a command executor with support for ChromeDriver's custom commands. | ||
* @param {!Promise<string>} url The server's URL. | ||
* @return {!command.Executor} The new command executor. | ||
*/ | ||
function createExecutor(url) { | ||
let agent = new http.Agent({ keepAlive: true }); | ||
let client = url.then(url => new http.HttpClient(url, agent)); | ||
let executor = new http.Executor(client); | ||
configureExecutor(executor); | ||
return executor; | ||
} | ||
/** | ||
* Configures the given executor with Chrome-specific commands. | ||
* @param {!http.Executor} executor the executor to configure. | ||
*/ | ||
function configureExecutor(executor) { | ||
executor.defineCommand( | ||
Command.LAUNCH_APP, | ||
'POST', | ||
'/session/:sessionId/chromium/launch_app'); | ||
executor.defineCommand( | ||
Command.GET_NETWORK_CONDITIONS, | ||
'GET', | ||
'/session/:sessionId/chromium/network_conditions'); | ||
executor.defineCommand( | ||
Command.SET_NETWORK_CONDITIONS, | ||
'POST', | ||
'/session/:sessionId/chromium/network_conditions'); | ||
executor.defineCommand( | ||
Command.SEND_DEVTOOLS_COMMAND, | ||
'POST', | ||
'/session/:sessionId/chromium/send_command'); | ||
} | ||
/** | ||
* _Synchronously_ attempts to locate the chromedriver executable on the current | ||
@@ -221,6 +162,6 @@ * system. | ||
* Creates {@link selenium-webdriver/remote.DriverService} instances that manage | ||
* a [ChromeDriver](https://sites.google.com/a/chromium.org/chromedriver/) | ||
* a [ChromeDriver](https://chromedriver.chromium.org/) | ||
* server in a child process. | ||
*/ | ||
class ServiceBuilder extends remote.DriverService.Builder { | ||
class ServiceBuilder extends chromium.ServiceBuilder { | ||
/** | ||
@@ -244,56 +185,6 @@ * @param {string=} opt_exe Path to the server executable to use. If omitted, | ||
super(exe); | ||
this.setLoopback(true); // Required | ||
} | ||
/** | ||
* Sets which port adb is listening to. _The ChromeDriver will connect to adb | ||
* if an {@linkplain Options#androidPackage Android session} is requested, but | ||
* adb **must** be started beforehand._ | ||
* | ||
* @param {number} port Which port adb is running on. | ||
* @return {!ServiceBuilder} A self reference. | ||
*/ | ||
setAdbPort(port) { | ||
return this.addArguments('--adb-port=' + port); | ||
} | ||
/** | ||
* Sets the path of the log file the driver should log to. If a log file is | ||
* not specified, the driver will log to stderr. | ||
* @param {string} path Path of the log file to use. | ||
* @return {!ServiceBuilder} A self reference. | ||
*/ | ||
loggingTo(path) { | ||
return this.addArguments('--log-path=' + path); | ||
} | ||
/** | ||
* Enables verbose logging. | ||
* @return {!ServiceBuilder} A self reference. | ||
*/ | ||
enableVerboseLogging() { | ||
return this.addArguments('--verbose'); | ||
} | ||
/** | ||
* Sets the number of threads the driver should use to manage HTTP requests. | ||
* By default, the driver will use 4 threads. | ||
* @param {number} n The number of threads to use. | ||
* @return {!ServiceBuilder} A self reference. | ||
*/ | ||
setNumHttpThreads(n) { | ||
return this.addArguments('--http-threads=' + n); | ||
} | ||
/** | ||
* @override | ||
*/ | ||
setPath(path) { | ||
super.setPath(path); | ||
return this.addArguments('--url-base=' + path); | ||
} | ||
} | ||
/** @type {remote.DriverService} */ | ||
@@ -332,108 +223,7 @@ let defaultService = null; | ||
const OPTIONS_CAPABILITY_KEY = 'goog:chromeOptions'; | ||
/** | ||
* Class for managing ChromeDriver specific options. | ||
*/ | ||
class Options extends Capabilities { | ||
class Options extends chromium.Options { | ||
/** | ||
* @param {(Capabilities|Map<string, ?>|Object)=} other Another set of | ||
* capabilities to initialize this instance from. | ||
*/ | ||
constructor(other = undefined) { | ||
super(other); | ||
/** @private {!Object} */ | ||
this.options_ = this.get(OPTIONS_CAPABILITY_KEY) || {}; | ||
this.setBrowserName(Browser.CHROME); | ||
this.set(OPTIONS_CAPABILITY_KEY, this.options_); | ||
} | ||
/** | ||
* Add additional command line arguments to use when launching the Chrome | ||
* browser. Each argument may be specified with or without the "--" prefix | ||
* (e.g. "--foo" and "foo"). Arguments with an associated value should be | ||
* delimited by an "=": "foo=bar". | ||
* | ||
* @param {...(string|!Array<string>)} args The arguments to add. | ||
* @return {!Options} A self reference. | ||
*/ | ||
addArguments(...args) { | ||
let newArgs = (this.options_.args || []).concat(...args); | ||
if (newArgs.length) { | ||
this.options_.args = newArgs; | ||
} | ||
return this; | ||
} | ||
/** | ||
* Configures the chromedriver to start Chrome in headless mode. | ||
* | ||
* > __NOTE:__ Resizing the browser window in headless mode is only supported | ||
* > in Chrome 60. Users are encouraged to set an initial window size with | ||
* > the {@link #windowSize windowSize({width, height})} option. | ||
* | ||
* > __NOTE__: For security, Chrome disables downloads by default when | ||
* > in headless mode (to prevent sites from silently downloading files to | ||
* > your machine). After creating a session, you may call | ||
* > {@link ./chrome.Driver#setDownloadPath setDownloadPath} to re-enable | ||
* > downloads, saving files in the specified directory. | ||
* | ||
* @return {!Options} A self reference. | ||
*/ | ||
headless() { | ||
return this.addArguments('headless'); | ||
} | ||
/** | ||
* Sets the initial window size. | ||
* | ||
* @param {{width: number, height: number}} size The desired window size. | ||
* @return {!Options} A self reference. | ||
* @throws {TypeError} if width or height is unspecified, not a number, or | ||
* less than or equal to 0. | ||
*/ | ||
windowSize({width, height}) { | ||
function checkArg(arg) { | ||
if (typeof arg !== 'number' || arg <= 0) { | ||
throw TypeError('Arguments must be {width, height} with numbers > 0'); | ||
} | ||
} | ||
checkArg(width); | ||
checkArg(height); | ||
return this.addArguments(`window-size=${width},${height}`); | ||
} | ||
/** | ||
* List of Chrome command line switches to exclude that ChromeDriver by default | ||
* passes when starting Chrome. Do not prefix switches with "--". | ||
* | ||
* @param {...(string|!Array<string>)} args The switches to exclude. | ||
* @return {!Options} A self reference. | ||
*/ | ||
excludeSwitches(...args) { | ||
let switches = (this.options_.excludeSwitches || []).concat(...args); | ||
if (switches.length) { | ||
this.options_.excludeSwitches = switches; | ||
} | ||
return this; | ||
} | ||
/** | ||
* Add additional extensions to install when launching Chrome. Each extension | ||
* should be specified as the path to the packed CRX file, or a Buffer for an | ||
* extension. | ||
* @param {...(string|!Buffer|!Array<(string|!Buffer)>)} args The | ||
* extensions to add. | ||
* @return {!Options} A self reference. | ||
*/ | ||
addExtensions(...args) { | ||
let current = this.options_.extensions || []; | ||
this.options_.extensions = current.concat(...args); | ||
return this; | ||
} | ||
/** | ||
* Sets the path to the Chrome binary to use. On Mac OS X, this path should | ||
@@ -450,97 +240,6 @@ * reference the actual Chrome executable, not just the application binary | ||
setChromeBinaryPath(path) { | ||
this.options_.binary = path; | ||
return this; | ||
return this.setBinaryPath(path); | ||
} | ||
/** | ||
* Sets whether to leave the started Chrome browser running if the controlling | ||
* ChromeDriver service is killed before {@link webdriver.WebDriver#quit()} is | ||
* called. | ||
* @param {boolean} detach Whether to leave the browser running if the | ||
* chromedriver service is killed before the session. | ||
* @return {!Options} A self reference. | ||
*/ | ||
detachDriver(detach) { | ||
this.options_.detach = detach; | ||
return this; | ||
} | ||
/** | ||
* Sets the user preferences for Chrome's user profile. See the "Preferences" | ||
* file in Chrome's user data directory for examples. | ||
* @param {!Object} prefs Dictionary of user preferences to use. | ||
* @return {!Options} A self reference. | ||
*/ | ||
setUserPreferences(prefs) { | ||
this.options_.prefs = prefs; | ||
return this; | ||
} | ||
/** | ||
* Sets the performance logging preferences. Options include: | ||
* | ||
* - `enableNetwork`: Whether or not to collect events from Network domain. | ||
* - `enablePage`: Whether or not to collect events from Page domain. | ||
* - `enableTimeline`: Whether or not to collect events from Timeline domain. | ||
* Note: when tracing is enabled, Timeline domain is implicitly disabled, | ||
* unless `enableTimeline` is explicitly set to true. | ||
* - `tracingCategories`: A comma-separated string of Chrome tracing | ||
* categories for which trace events should be collected. An unspecified | ||
* or empty string disables tracing. | ||
* - `bufferUsageReportingInterval`: The requested number of milliseconds | ||
* between DevTools trace buffer usage events. For example, if 1000, then | ||
* once per second, DevTools will report how full the trace buffer is. If | ||
* a report indicates the buffer usage is 100%, a warning will be issued. | ||
* | ||
* @param {{enableNetwork: boolean, | ||
* enablePage: boolean, | ||
* enableTimeline: boolean, | ||
* tracingCategories: string, | ||
* bufferUsageReportingInterval: number}} prefs The performance | ||
* logging preferences. | ||
* @return {!Options} A self reference. | ||
*/ | ||
setPerfLoggingPrefs(prefs) { | ||
this.options_.perfLoggingPrefs = prefs; | ||
return this; | ||
} | ||
/** | ||
* Sets preferences for the "Local State" file in Chrome's user data | ||
* directory. | ||
* @param {!Object} state Dictionary of local state preferences. | ||
* @return {!Options} A self reference. | ||
*/ | ||
setLocalState(state) { | ||
this.options_.localState = state; | ||
return this; | ||
} | ||
/** | ||
* Sets the name of the activity hosting a Chrome-based Android WebView. This | ||
* option must be set to connect to an [Android WebView]( | ||
* https://sites.google.com/a/chromium.org/chromedriver/getting-started/getting-started---android) | ||
* | ||
* @param {string} name The activity name. | ||
* @return {!Options} A self reference. | ||
*/ | ||
androidActivity(name) { | ||
this.options_.androidActivity = name; | ||
return this; | ||
} | ||
/** | ||
* Sets the device serial number to connect to via ADB. If not specified, the | ||
* ChromeDriver will select an unused device at random. An error will be | ||
* returned if all devices already have active sessions. | ||
* | ||
* @param {string} serial The device serial number to connect to. | ||
* @return {!Options} A self reference. | ||
*/ | ||
androidDeviceSerial(serial) { | ||
this.options_.androidDeviceSerial = serial; | ||
return this; | ||
} | ||
/** | ||
* Configures the ChromeDriver to launch Chrome on Android via adb. This | ||
@@ -556,40 +255,2 @@ * function is shorthand for | ||
/** | ||
* Sets the package name of the Chrome or WebView app. | ||
* | ||
* @param {?string} pkg The package to connect to, or `null` to disable Android | ||
* and switch back to using desktop Chrome. | ||
* @return {!Options} A self reference. | ||
*/ | ||
androidPackage(pkg) { | ||
this.options_.androidPackage = pkg; | ||
return this; | ||
} | ||
/** | ||
* Sets the process name of the Activity hosting the WebView (as given by | ||
* `ps`). If not specified, the process name is assumed to be the same as | ||
* {@link #androidPackage}. | ||
* | ||
* @param {string} processName The main activity name. | ||
* @return {!Options} A self reference. | ||
*/ | ||
androidProcess(processName) { | ||
this.options_.androidProcess = processName; | ||
return this; | ||
} | ||
/** | ||
* Sets whether to connect to an already-running instead of the specified | ||
* {@linkplain #androidProcess app} instead of launching the app with a clean | ||
* data directory. | ||
* | ||
* @param {boolean} useRunning Whether to connect to a running instance. | ||
* @return {!Options} A self reference. | ||
*/ | ||
androidUseRunningApp(useRunning) { | ||
this.options_.androidUseRunningApp = useRunning; | ||
return this; | ||
} | ||
/** | ||
* Sets the path to Chrome's log file. This path should exist on the machine | ||
@@ -601,4 +262,3 @@ * that will launch Chrome. | ||
setChromeLogFile(path) { | ||
this.options_.logPath = path; | ||
return this; | ||
return this.setBrowserLogFile(path); | ||
} | ||
@@ -613,75 +273,14 @@ | ||
setChromeMinidumpPath(path) { | ||
this.options_.minidumpPath = path; | ||
return this; | ||
return this.setBrowserMinidumpPath(path); | ||
} | ||
} | ||
/** | ||
* Configures Chrome to emulate a mobile device. For more information, refer | ||
* to the ChromeDriver project page on [mobile emulation][em]. Configuration | ||
* options include: | ||
* | ||
* - `deviceName`: The name of a pre-configured [emulated device][devem] | ||
* - `width`: screen width, in pixels | ||
* - `height`: screen height, in pixels | ||
* - `pixelRatio`: screen pixel ratio | ||
* | ||
* __Example 1: Using a Pre-configured Device__ | ||
* | ||
* let options = new chrome.Options().setMobileEmulation( | ||
* {deviceName: 'Google Nexus 5'}); | ||
* | ||
* let driver = chrome.Driver.createSession(options); | ||
* | ||
* __Example 2: Using Custom Screen Configuration__ | ||
* | ||
* let options = new chrome.Options().setMobileEmulation({ | ||
* width: 360, | ||
* height: 640, | ||
* pixelRatio: 3.0 | ||
* }); | ||
* | ||
* let driver = chrome.Driver.createSession(options); | ||
* | ||
* | ||
* [em]: https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation | ||
* [devem]: https://developer.chrome.com/devtools/docs/device-mode | ||
* | ||
* @param {?({deviceName: string}| | ||
* {width: number, height: number, pixelRatio: number})} config The | ||
* mobile emulation configuration, or `null` to disable emulation. | ||
* @return {!Options} A self reference. | ||
*/ | ||
setMobileEmulation(config) { | ||
this.options_.mobileEmulation = config; | ||
return this; | ||
} | ||
Options.prototype.CAPABILITY_KEY = 'goog:chromeOptions'; | ||
Options.prototype.BROWSER_NAME_VALUE = Browser.CHROME; | ||
/** | ||
* Converts this instance to its JSON wire protocol representation. Note this | ||
* function is an implementation not intended for general use. | ||
* | ||
* @return {!Object} The JSON wire protocol representation of this instance. | ||
* @suppress {checkTypes} Suppress [] access on a struct. | ||
*/ | ||
[Symbols.serialize]() { | ||
if (this.options_.extensions && this.options_.extensions.length) { | ||
this.options_.extensions = | ||
this.options_.extensions.map(function(extension) { | ||
if (Buffer.isBuffer(extension)) { | ||
return extension.toString('base64'); | ||
} | ||
return io.read(/** @type {string} */(extension)) | ||
.then(buffer => buffer.toString('base64')); | ||
}); | ||
} | ||
return super[Symbols.serialize](); | ||
} | ||
} | ||
/** | ||
* Creates a new WebDriver client for Chrome. | ||
*/ | ||
class Driver extends webdriver.WebDriver { | ||
class Driver extends chromium.Driver { | ||
/** | ||
@@ -699,120 +298,12 @@ * Creates a new session with the ChromeDriver. | ||
static createSession(opt_config, opt_serviceExecutor) { | ||
let executor; | ||
let onQuit; | ||
if (opt_serviceExecutor instanceof http.Executor) { | ||
executor = opt_serviceExecutor; | ||
configureExecutor(executor); | ||
} else { | ||
let service = opt_serviceExecutor || getDefaultService(); | ||
executor = createExecutor(service.start()); | ||
onQuit = () => service.kill(); | ||
} | ||
let caps = opt_config || Capabilities.chrome(); | ||
// W3C spec requires noProxy value to be an array of strings, but Chrome | ||
// expects a single host as a string. | ||
let proxy = caps.get(Capability.PROXY); | ||
if (proxy && Array.isArray(proxy.noProxy)) { | ||
proxy.noProxy = proxy.noProxy[0]; | ||
if (!proxy.noProxy) { | ||
proxy.noProxy = undefined; | ||
} | ||
} | ||
return /** @type {!Driver} */(super.createSession(executor, caps, onQuit)); | ||
let caps = opt_config || new Options(); | ||
return /** @type {!Driver} */(super.createSession(caps, opt_serviceExecutor)); | ||
} | ||
/** | ||
* This function is a no-op as file detectors are not supported by this | ||
* implementation. | ||
* @override | ||
*/ | ||
setFileDetector() {} | ||
static getDefaultService = getDefaultService; | ||
} | ||
/** | ||
* Schedules a command to launch Chrome App with given ID. | ||
* @param {string} id ID of the App to launch. | ||
* @return {!Promise<void>} A promise that will be resolved | ||
* when app is launched. | ||
*/ | ||
launchApp(id) { | ||
return this.execute( | ||
new command.Command(Command.LAUNCH_APP).setParameter('id', id)); | ||
} | ||
Driver.prototype.VENDOR_COMMAND_PREFIX = "goog"; | ||
/** | ||
* Schedules a command to get Chrome network emulation settings. | ||
* @return {!Promise} A promise that will be resolved when network | ||
* emulation settings are retrievied. | ||
*/ | ||
getNetworkConditions() { | ||
return this.execute(new command.Command(Command.GET_NETWORK_CONDITIONS)); | ||
} | ||
/** | ||
* Schedules a command to set Chrome network emulation settings. | ||
* | ||
* __Sample Usage:__ | ||
* | ||
* driver.setNetworkConditions({ | ||
* offline: false, | ||
* latency: 5, // Additional latency (ms). | ||
* download_throughput: 500 * 1024, // Maximal aggregated download throughput. | ||
* upload_throughput: 500 * 1024 // Maximal aggregated upload throughput. | ||
* }); | ||
* | ||
* @param {Object} spec Defines the network conditions to set | ||
* @return {!Promise<void>} A promise that will be resolved when network | ||
* emulation settings are set. | ||
*/ | ||
setNetworkConditions(spec) { | ||
if (!spec || typeof spec !== 'object') { | ||
throw TypeError('setNetworkConditions called with non-network-conditions parameter'); | ||
} | ||
return this.execute( | ||
new command.Command(Command.SET_NETWORK_CONDITIONS) | ||
.setParameter('network_conditions', spec)); | ||
} | ||
/** | ||
* Sends an arbitrary devtools command to the browser. | ||
* | ||
* @param {string} cmd The name of the command to send. | ||
* @param {Object=} params The command parameters. | ||
* @return {!Promise<void>} A promise that will be resolved when the command | ||
* has finished. | ||
* @see <https://chromedevtools.github.io/devtools-protocol/> | ||
*/ | ||
sendDevToolsCommand(cmd, params = {}) { | ||
return this.execute( | ||
new command.Command(Command.SEND_DEVTOOLS_COMMAND) | ||
.setParameter('cmd', cmd) | ||
.setParameter('params', params)); | ||
} | ||
/** | ||
* Sends a DevTools command to change Chrome's download directory. | ||
* | ||
* @param {string} path The desired download directory. | ||
* @return {!Promise<void>} A promise that will be resolved when the command | ||
* has finished. | ||
* @see #sendDevToolsCommand | ||
*/ | ||
async setDownloadPath(path) { | ||
if (!path || typeof path !== 'string') { | ||
throw new error.InvalidArgumentError('invalid download path'); | ||
} | ||
const stat = await io.stat(path); | ||
if (!stat.isDirectory()) { | ||
throw new error.InvalidArgumentError('not a directory: ' + path); | ||
} | ||
return this.sendDevToolsCommand('Page.setDownloadBehavior', { | ||
'behavior': 'allow', | ||
'downloadPath': path | ||
}); | ||
} | ||
} | ||
// PUBLIC API | ||
@@ -819,0 +310,0 @@ |
155
edge.js
@@ -20,8 +20,19 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
* @fileoverview Defines a {@linkplain Driver WebDriver} client for | ||
* Microsoft's Edge web browser. Before using this module, | ||
* you must download and install the latest | ||
* [MicrosoftEdgeDriver](http://go.microsoft.com/fwlink/?LinkId=619687) server. | ||
* Ensure that the MicrosoftEdgeDriver is on your | ||
* [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). | ||
* Microsoft's Edge web browser. Both Edge (Chromium), and Edge Legacy (EdgeHTML) are | ||
* supported. Before using this module, you must download and install the correct | ||
* [WebDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) | ||
* server. | ||
* | ||
* Ensure that the either MicrosoftWebDriver (EdgeHTML) or msedgedriver (Chromium) | ||
* is on your [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29). MicrosoftWebDriver | ||
* and Edge Legacy (EdgeHTML) will be used by default. | ||
* | ||
* You may use {@link Options} to specify whether Edge Chromium should be used: | ||
* var options = new edge.Options(); | ||
* options.useEdgeChromium(true); | ||
* // configure browser options ... | ||
* Note that Chromium-specific {@link Options} will be ignored when using Edge Legacy. | ||
* | ||
* There are three primary classes exported by this module: | ||
@@ -31,6 +42,6 @@ * | ||
* {@link ./remote.DriverService remote.DriverService} | ||
* that manages the [MicrosoftEdgeDriver] child process. | ||
* that manages the [WebDriver] child process. | ||
* | ||
* 2. {@linkplain Options}: defines configuration options for each new | ||
* MicrosoftEdgeDriver session, such as which | ||
* WebDriver session, such as which | ||
* {@linkplain Options#setProxy proxy} to use when starting the browser. | ||
@@ -41,3 +52,3 @@ * | ||
* | ||
* __Customizing the MicrosoftEdgeDriver Server__ <a id="custom-server"></a> | ||
* __Customizing the WebDriver Server__ <a id="custom-server"></a> | ||
* | ||
@@ -71,3 +82,4 @@ * By default, every MicrosoftEdge session will use a single driver service, | ||
* | ||
* [MicrosoftEdgeDriver]: https://msdn.microsoft.com/en-us/library/mt188085(v=vs.85).aspx | ||
* [WebDriver (EdgeHTML)]: https://docs.microsoft.com/en-us/microsoft-edge/webdriver | ||
* [WebDriver (Chromium)]: https://docs.microsoft.com/en-us/microsoft-edge/webdriver-chromium | ||
*/ | ||
@@ -77,26 +89,32 @@ | ||
const fs = require('fs'); | ||
const util = require('util'); | ||
const http = require('./http'); | ||
const io = require('./io'); | ||
const portprober = require('./net/portprober'); | ||
const promise = require('./lib/promise'); | ||
const remote = require('./remote'); | ||
const Symbols = require('./lib/symbols'); | ||
const webdriver = require('./lib/webdriver'); | ||
const {Browser, Capabilities} = require('./lib/capabilities'); | ||
const chromium = require('./chromium'); | ||
const EDGEDRIVER_EXE = 'MicrosoftWebDriver.exe'; | ||
const EDGE_CHROMIUM_BROWSER_NAME = "msedge"; | ||
const EDGEDRIVER_LEGACY_EXE = 'MicrosoftWebDriver.exe'; | ||
const EDGEDRIVER_CHROMIUM_EXE = | ||
process.platform === 'win32' ? 'msedgedriver.exe' : 'msedgedriver'; | ||
/** | ||
* _Synchronously_ attempts to locate the edge driver executable on the current | ||
* system. | ||
* _Synchronously_ attempts to locate the Edge driver executable | ||
* on the current system. Searches for the legacy MicrosoftWebDriver by default. | ||
* | ||
* @param {string=} browserName Name of the Edge driver executable to locate. | ||
* May be either 'msedge' to locate the Edge Chromium driver, or 'MicrosoftEdge' to | ||
* locate the Edge Legacy driver. If omitted, will attempt to locate Edge Legacy. | ||
* @return {?string} the located executable, or `null`. | ||
*/ | ||
function locateSynchronously() { | ||
function locateSynchronously(browserName) { | ||
browserName = browserName || Browser.EDGE; | ||
if (browserName === EDGE_CHROMIUM_BROWSER_NAME) { | ||
return io.findInPath(EDGEDRIVER_CHROMIUM_EXE, true); | ||
} | ||
return process.platform === 'win32' | ||
? io.findInPath(EDGEDRIVER_EXE, true) : null; | ||
? io.findInPath(EDGEDRIVER_LEGACY_EXE, true) : null; | ||
} | ||
@@ -106,27 +124,55 @@ | ||
/** | ||
* Class for managing MicrosoftEdgeDriver specific options. | ||
* Class for managing Edge specific options. | ||
*/ | ||
class Options extends Capabilities { | ||
class Options extends chromium.Options { | ||
static USE_EDGE_CHROMIUM = 'ms:edgeChromium'; | ||
/** | ||
* @param {(Capabilities|Map<string, ?>|Object)=} other Another set of | ||
* capabilities to initialize this instance from. | ||
* Instruct the EdgeDriver to use Edge Chromium if true. | ||
* Otherwise, use Edge Legacy (EdgeHTML). Defaults to using Edge Legacy. | ||
* | ||
* @param {boolean} useEdgeChromium | ||
* @return {!Options} A self reference. | ||
*/ | ||
constructor(other = undefined) { | ||
super(other); | ||
this.setBrowserName(Browser.EDGE); | ||
setEdgeChromium(useEdgeChromium) { | ||
this.set(Options.USE_EDGE_CHROMIUM, !!useEdgeChromium); | ||
return this; | ||
} | ||
} | ||
Options.prototype.BROWSER_NAME_VALUE = Browser.EDGE; | ||
Options.prototype.CAPABILITY_KEY = 'ms:edgeOptions'; | ||
Options.prototype.VENDOR_CAPABILITY_PREFIX = 'ms'; | ||
/** | ||
* @param {(Capabilities|Object<string, *>)=} o The options object | ||
* @return {boolean} | ||
*/ | ||
function useEdgeChromium(o) { | ||
if (o instanceof Capabilities) { | ||
return !!o.get(Options.USE_EDGE_CHROMIUM); | ||
} | ||
if (o && typeof o === 'object') { | ||
return !!o[Options.USE_EDGE_CHROMIUM]; | ||
} | ||
return false; | ||
} | ||
/** | ||
* Creates {@link remote.DriverService} instances that manage a | ||
* MicrosoftEdgeDriver server in a child process. | ||
* WebDriver server in a child process. Used for driving both | ||
* Microsoft Edge Legacy and Chromium. A ServiceBuilder constructed | ||
* with default parameters will launch a MicrosoftWebDriver child | ||
* process for driving Edge Legacy. You may pass in a path to | ||
* msedgedriver.exe to use Edge Chromium instead. | ||
*/ | ||
class ServiceBuilder extends remote.DriverService.Builder { | ||
class ServiceBuilder extends chromium.ServiceBuilder { | ||
/** | ||
* @param {string=} opt_exe Path to the server executable to use. If omitted, | ||
* the builder will attempt to locate the MicrosoftEdgeDriver on the current | ||
* the builder will attempt to locate MicrosoftWebDriver on the current | ||
* PATH. | ||
* @throws {Error} If provided executable does not exist, or the | ||
* MicrosoftEdgeDriver cannot be found on the PATH. | ||
* MicrosoftWebDriver cannot be found on the PATH. | ||
*/ | ||
@@ -136,24 +182,10 @@ constructor(opt_exe) { | ||
if (!exe) { | ||
throw Error( | ||
'The ' + EDGEDRIVER_EXE + ' could not be found on the current PATH. ' + | ||
'Please download the latest version of the MicrosoftEdgeDriver from ' + | ||
'https://www.microsoft.com/en-us/download/details.aspx?id=48212 and ' + | ||
'ensure it can be found on your PATH.'); | ||
throw Error('The WebDriver for Edge could not be found on the current PATH. Please ' + | ||
'download the latest version of ' + EDGEDRIVER_LEGACY_EXE + ' from ' + | ||
'https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ and ' + | ||
'ensure it can be found on your PATH.'); | ||
} | ||
super(exe); | ||
// Binding to the loopback address will fail if not running with | ||
// administrator privileges. Since we cannot test for that in script | ||
// (or can we?), force the DriverService to use "localhost". | ||
this.setHostname('localhost'); | ||
} | ||
/** | ||
* Enables verbose logging. | ||
* @return {!ServiceBuilder} A self reference. | ||
*/ | ||
enableVerboseLogging() { | ||
return this.addArguments('--verbose'); | ||
} | ||
} | ||
@@ -167,3 +199,3 @@ | ||
/** | ||
* Sets the default service to use for new MicrosoftEdgeDriver instances. | ||
* Sets the default service to use for new Edge instances. | ||
* @param {!remote.DriverService} service The service to use. | ||
@@ -183,6 +215,6 @@ * @throws {Error} If the default service is currently running. | ||
/** | ||
* Returns the default MicrosoftEdgeDriver service. If such a service has | ||
* Returns the default Microsoft Edge driver service. If such a service has | ||
* not been configured, one will be constructed using the default configuration | ||
* for an MicrosoftEdgeDriver executable found on the system PATH. | ||
* @return {!remote.DriverService} The default MicrosoftEdgeDriver service. | ||
* for a MicrosoftWebDriver executable found on the system PATH. | ||
* @return {!remote.DriverService} The default Microsoft Edge driver service. | ||
*/ | ||
@@ -196,2 +228,9 @@ function getDefaultService() { | ||
function createServiceFromCapabilities(options) { | ||
let exe; | ||
if (useEdgeChromium(options)) { | ||
exe = locateSynchronously(EDGE_CHROMIUM_BROWSER_NAME); | ||
} | ||
return new ServiceBuilder(exe).build(); | ||
} | ||
@@ -206,12 +245,12 @@ /** | ||
* @param {(Capabilities|Options)=} options The configuration options. | ||
* @param {remote.DriverService=} service The session to use; will use | ||
* the {@linkplain #getDefaultService default service} by default. | ||
* @param {remote.DriverService=} service The service to use; will create | ||
* a new Legacy or Chromium service based on {@linkplain Options} by default. | ||
* @return {!Driver} A new driver instance. | ||
*/ | ||
static createSession(options, opt_service) { | ||
let service = opt_service || getDefaultService(); | ||
options = options || new Options(); | ||
let service = opt_service || createServiceFromCapabilities(options); | ||
let client = service.start().then(url => new http.HttpClient(url)); | ||
let executor = new http.Executor(client); | ||
options = options || new Options(); | ||
return /** @type {!Driver} */(super.createSession( | ||
@@ -218,0 +257,0 @@ executor, options, () => service.kill())); |
@@ -159,4 +159,5 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
async function installExtension(extension, dir) { | ||
if (extension.slice(-4) !== '.xpi') { | ||
throw Error('Path ath is not a xpi file: ' + extension); | ||
const ext = extension.slice(-4); | ||
if (ext !== '.xpi' && ext !== '.zip') { | ||
throw Error('File name does not end in ".zip" or ".xpi": ' + ext); | ||
} | ||
@@ -163,0 +164,0 @@ |
@@ -190,2 +190,6 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
// Update the protocol to avoid EPROTO errors when the webdriver proxy | ||
// uses a different protocol from the remote selenium server. | ||
options.protocol = opt_proxy.protocol; | ||
if (proxy.auth) { | ||
@@ -192,0 +196,0 @@ options.headers['Proxy-Authorization'] = |
@@ -206,3 +206,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
exports.tmpDir = function() { | ||
return checkedCall(tmp.dir); | ||
return checkedCall(callback => tmp.dir({ unsafeCleanup : true }, callback)); | ||
}; | ||
@@ -209,0 +209,0 @@ |
@@ -258,3 +258,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
/** | ||
* Convenience function for performing a "drag and drop" manuever. The target | ||
* Convenience function for performing a "drag and drop" maneuver. The target | ||
* element may be moved to the location of another element, or by an offset (in | ||
@@ -261,0 +261,0 @@ * pixels). |
@@ -33,49 +33,49 @@ // GENERATED CODE - DO NOT EDIT | ||
function(a,b){return Array.prototype.every.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=n(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&!b.call(void 0,d[e],e,a))return!1;return!0};function na(a,b){a:{for(var c=a.length,d=n(a)?a.split(""):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:n(a)?a.charAt(b):a[b]}function oa(a){return Array.prototype.concat.apply([],arguments)} | ||
function pa(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var qa=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};function ra(a,b){return a<b?-1:a>b?1:0};var v;a:{var sa=k.navigator;if(sa){var ta=sa.userAgent;if(ta){v=ta;break a}}v=""}function y(a){return-1!=v.indexOf(a)};function ua(){return y("Firefox")||y("FxiOS")}function va(){return(y("Chrome")||y("CriOS"))&&!y("Edge")};function wa(a){return String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()})}function xa(a){isFinite(a)&&(a=String(a));return n(a)?/^\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};function ya(){return y("iPhone")&&!y("iPod")&&!y("iPad")};function za(a,b){var c=Aa;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var Ba=y("Opera"),z=y("Trident")||y("MSIE"),Ca=y("Edge"),Da=y("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!y("Edge"))&&!(y("Trident")||y("MSIE"))&&!y("Edge"),Ea=-1!=v.toLowerCase().indexOf("webkit")&&!y("Edge");function Fa(){var a=k.document;return a?a.documentMode:void 0}var Ga; | ||
a:{var Ha="",Ia=function(){var a=v;if(Da)return/rv:([^\);]+)(\)|;)/.exec(a);if(Ca)return/Edge\/([\d\.]+)/.exec(a);if(z)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Ea)return/WebKit\/(\S+)/.exec(a);if(Ba)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Ia&&(Ha=Ia?Ia[1]:"");if(z){var Ja=Fa();if(null!=Ja&&Ja>parseFloat(Ha)){Ga=String(Ja);break a}}Ga=Ha}var Aa={}; | ||
function Ka(a){return za(a,function(){for(var b=0,c=qa(String(Ga)).split("."),d=qa(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||"",h=d[f]||"";do{g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];h=/(\d*)(\D*)(.*)/.exec(h)||["","","",""];if(0==g[0].length&&0==h[0].length)break;b=ra(0==g[1].length?0:parseInt(g[1],10),0==h[1].length?0:parseInt(h[1],10))||ra(0==g[2].length,0==h[2].length)||ra(g[2],h[2]);g=g[3];h=h[3]}while(0==b)}return 0<=b})}var La;var Ma=k.document; | ||
La=Ma&&z?Fa()||("CSS1Compat"==Ma.compatMode?parseInt(Ga,10):5):void 0;var A=z&&!(9<=Number(La)),Na=z&&!(8<=Number(La));function Oa(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeType=2;this.parentNode=this.ownerElement=b}function Pa(a,b){var c=Na&&"href"==b.nodeName?a.getAttribute(b.nodeName,2):b.nodeValue;return new Oa(b,a,b.nodeName,c)};function Qa(a){this.b=a;this.a=0}function Ra(a){a=a.match(Sa);for(var b=0;b<a.length;b++)Ta.test(a[b])&&a.splice(b,1);return new Qa(a)}var Sa=/\$?(?:(?![0-9-\.])(?:\*|[\w-\.]+):)?(?![0-9-\.])(?:\*|[\w-\.]+)|\/\/|\.\.|::|\d+(?:\.\d*)?|\.\d+|"[^"]*"|'[^']*'|[!<>]=|\s+|./g,Ta=/^\s/;function B(a,b){return a.b[a.a+(b||0)]}function C(a){return a.b[a.a++]}function Ua(a){return a.b.length<=a.a};function Va(a,b){this.x=l(a)?a:0;this.y=l(b)?b:0}Va.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};Va.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};Va.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};function Wa(a,b){this.width=a;this.height=b}Wa.prototype.aspectRatio=function(){return this.width/this.height};Wa.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};Wa.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};Wa.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function Xa(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a} | ||
function Ya(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(z&&!(9<=Number(La))){if(9==a.nodeType)return-1;if(9==b.nodeType)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=1==a.nodeType,d=1==b.nodeType;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,f=b.parentNode;return e==f?Za(a,b):!c&&Xa(e,b)?-1*$a(a,b):!d&&Xa(f,a)?$a(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=D(a);c=d.createRange(); | ||
c.selectNode(a);c.collapse(!0);a=d.createRange();a.selectNode(b);a.collapse(!0);return c.compareBoundaryPoints(k.Range.START_TO_END,a)}function $a(a,b){var c=a.parentNode;if(c==b)return-1;for(;b.parentNode!=c;)b=b.parentNode;return Za(b,a)}function Za(a,b){for(;b=b.previousSibling;)if(b==a)return-1;return 1}function D(a){return 9==a.nodeType?a:a.ownerDocument||a.document}function ab(a,b){a&&(a=a.parentNode);for(var c=0;a;){if(b(a))return a;a=a.parentNode;c++}return null} | ||
function bb(a){this.a=a||k.document||document}bb.prototype.getElementsByTagName=function(a,b){return(b||this.a).getElementsByTagName(String(a))};function E(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b||null==b?a.innerText:b,b=void 0==b||null==b?"":b);if("string"!=typeof b)if(A&&"title"==a.nodeName.toLowerCase()&&1==c)b=a.text;else if(9==c||1==c){a=9==c?a.documentElement:a.firstChild;c=0;var d=[];for(b="";a;){do 1!=a.nodeType&&(b+=a.nodeValue),A&&"title"==a.nodeName.toLowerCase()&&(b+=a.text),d[c++]=a;while(a=a.firstChild);for(;c&&!(a=d[--c].nextSibling););}}else b=a.nodeValue;return b} | ||
function H(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}catch(d){return!1}Na&&"class"==b&&(b="className");return null==c?!!a.getAttribute(b):a.getAttribute(b,2)==c}function cb(a,b,c,d,e){return(A?db:eb).call(null,a,b,n(c)?c:null,n(d)?d:null,e||new I)} | ||
function db(a,b,c,d,e){if(a instanceof fb||8==a.b||c&&null===a.b){var f=b.all;if(!f)return e;a=gb(a);if("*"!=a&&(f=b.getElementsByTagName(a),!f))return e;if(c){for(var g=[],h=0;b=f[h++];)H(b,c,d)&&g.push(b);f=g}for(h=0;b=f[h++];)"*"==a&&"!"==b.tagName||e.add(b);return e}hb(a,b,c,d,e);return e} | ||
function eb(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!z?(b=b.getElementsByName(d),u(b,function(f){a.a(f)&&e.add(f)})):b.getElementsByClassName&&d&&"class"==c?(b=b.getElementsByClassName(d),u(b,function(f){f.className==d&&a.a(f)&&e.add(f)})):a instanceof J?hb(a,b,c,d,e):b.getElementsByTagName&&(b=b.getElementsByTagName(a.f()),u(b,function(f){H(f,c,d)&&e.add(f)}));return e} | ||
function ib(a,b,c,d,e){var f;if((a instanceof fb||8==a.b||c&&null===a.b)&&(f=b.childNodes)){var g=gb(a);if("*"!=g&&(f=ja(f,function(h){return h.tagName&&h.tagName.toLowerCase()==g}),!f))return e;c&&(f=ja(f,function(h){return H(h,c,d)}));u(f,function(h){"*"==g&&("!"==h.tagName||"*"==g&&1!=h.nodeType)||e.add(h)});return e}return jb(a,b,c,d,e)}function jb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)H(b,c,d)&&a.a(b)&&e.add(b);return e} | ||
function hb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)H(b,c,d)&&a.a(b)&&e.add(b),hb(a,b,c,d,e)}function gb(a){if(a instanceof J){if(8==a.b)return"!";if(null===a.b)return"*"}return a.f()};function I(){this.b=this.a=null;this.l=0}function lb(a){this.f=a;this.a=this.b=null}function mb(a,b){if(!a.a)return b;if(!b.a)return a;var c=a.a;b=b.a;for(var d=null,e,f=0;c&&b;){e=c.f;var g=b.f;e==g||e instanceof Oa&&g instanceof Oa&&e.a==g.a?(e=c,c=c.a,b=b.a):0<Ya(c.f,b.f)?(e=b,b=b.a):(e=c,c=c.a);(e.b=d)?d.a=e:a.a=e;d=e;f++}for(e=c||b;e;)e.b=d,d=d.a=e,f++,e=e.a;a.b=d;a.l=f;return a}function nb(a,b){b=new lb(b);b.a=a.a;a.b?a.a.b=b:a.a=a.b=b;a.a=b;a.l++} | ||
I.prototype.add=function(a){a=new lb(a);a.b=this.b;this.a?this.b.a=a:this.a=this.b=a;this.b=a;this.l++};function ob(a){return(a=a.a)?a.f:null}function pb(a){return(a=ob(a))?E(a):""}function K(a,b){return new qb(a,!!b)}function qb(a,b){this.f=a;this.b=(this.s=b)?a.b:a.a;this.a=null}function L(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.s?b.b:b.a;return c.f};function M(a){this.i=a;this.b=this.g=!1;this.f=null}function N(a){return"\n "+a.toString().split("\n").join("\n ")}function rb(a,b){a.g=b}function sb(a,b){a.b=b}function O(a,b){a=a.a(b);return a instanceof I?+pb(a):+a}function P(a,b){a=a.a(b);return a instanceof I?pb(a):""+a}function tb(a,b){a=a.a(b);return a instanceof I?!!a.l:!!a};function ub(a,b,c){M.call(this,a.i);this.c=a;this.h=b;this.o=c;this.g=b.g||c.g;this.b=b.b||c.b;this.c==vb&&(c.b||c.g||4==c.i||0==c.i||!b.f?b.b||b.g||4==b.i||0==b.i||!c.f||(this.f={name:c.f.name,u:b}):this.f={name:b.f.name,u:c})}t(ub,M); | ||
function wb(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof I&&c instanceof I){b=K(b);for(d=L(b);d;d=L(b))for(e=K(c),f=L(e);f;f=L(e))if(a(E(d),E(f)))return!0;return!1}if(b instanceof I||c instanceof I){b instanceof I?(e=b,d=c):(e=c,d=b);f=K(e);for(var g=typeof d,h=L(f);h;h=L(f)){switch(g){case "number":h=+E(h);break;case "boolean":h=!!E(h);break;case "string":h=E(h);break;default:throw Error("Illegal primitive type for comparison.");}if(e==b&&a(h,d)||e==c&&a(d,h))return!0}return!1}return e?"boolean"== | ||
typeof b||"boolean"==typeof c?a(!!b,!!c):"number"==typeof b||"number"==typeof c?a(+b,+c):a(b,c):a(+b,+c)}ub.prototype.a=function(a){return this.c.m(this.h,this.o,a)};ub.prototype.toString=function(){var a="Binary Expression: "+this.c;a+=N(this.h);return a+=N(this.o)};function xb(a,b,c,d){this.H=a;this.C=b;this.i=c;this.m=d}xb.prototype.toString=function(){return this.H};var yb={}; | ||
function Q(a,b,c,d){if(yb.hasOwnProperty(a))throw Error("Binary operator already created: "+a);a=new xb(a,b,c,d);return yb[a.toString()]=a}Q("div",6,1,function(a,b,c){return O(a,c)/O(b,c)});Q("mod",6,1,function(a,b,c){return O(a,c)%O(b,c)});Q("*",6,1,function(a,b,c){return O(a,c)*O(b,c)});Q("+",5,1,function(a,b,c){return O(a,c)+O(b,c)});Q("-",5,1,function(a,b,c){return O(a,c)-O(b,c)});Q("<",4,2,function(a,b,c){return wb(function(d,e){return d<e},a,b,c)}); | ||
Q(">",4,2,function(a,b,c){return wb(function(d,e){return d>e},a,b,c)});Q("<=",4,2,function(a,b,c){return wb(function(d,e){return d<=e},a,b,c)});Q(">=",4,2,function(a,b,c){return wb(function(d,e){return d>=e},a,b,c)});var vb=Q("=",3,2,function(a,b,c){return wb(function(d,e){return d==e},a,b,c,!0)});Q("!=",3,2,function(a,b,c){return wb(function(d,e){return d!=e},a,b,c,!0)});Q("and",2,2,function(a,b,c){return tb(a,c)&&tb(b,c)});Q("or",1,2,function(a,b,c){return tb(a,c)||tb(b,c)});function zb(a,b){if(b.a.length&&4!=a.i)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");M.call(this,a.i);this.c=a;this.h=b;this.g=a.g;this.b=a.b}t(zb,M);zb.prototype.a=function(a){a=this.c.a(a);return Ab(this.h,a)};zb.prototype.toString=function(){var a="Filter:"+N(this.c);return a+=N(this.h)};function Bb(a,b){if(b.length<a.B)throw Error("Function "+a.j+" expects at least"+a.B+" arguments, "+b.length+" given");if(null!==a.A&&b.length>a.A)throw Error("Function "+a.j+" expects at most "+a.A+" arguments, "+b.length+" given");a.G&&u(b,function(c,d){if(4!=c.i)throw Error("Argument "+d+" to function "+a.j+" is not of type Nodeset: "+c);});M.call(this,a.i);this.v=a;this.c=b;rb(this,a.g||la(b,function(c){return c.g}));sb(this,a.F&&!b.length||a.D&&!!b.length||la(b,function(c){return c.b}))} | ||
t(Bb,M);Bb.prototype.a=function(a){return this.v.m.apply(null,oa(a,this.c))};Bb.prototype.toString=function(){var a="Function: "+this.v;if(this.c.length){var b=ka(this.c,function(c,d){return c+N(d)},"Arguments:");a+=N(b)}return a};function Cb(a,b,c,d,e,f,g,h){this.j=a;this.i=b;this.g=c;this.F=d;this.D=!1;this.m=e;this.B=f;this.A=l(g)?g:f;this.G=!!h}Cb.prototype.toString=function(){return this.j};var Db={}; | ||
function R(a,b,c,d,e,f,g,h){if(Db.hasOwnProperty(a))throw Error("Function already created: "+a+".");Db[a]=new Cb(a,b,c,d,e,f,g,h)}R("boolean",2,!1,!1,function(a,b){return tb(b,a)},1);R("ceiling",1,!1,!1,function(a,b){return Math.ceil(O(b,a))},1);R("concat",3,!1,!1,function(a,b){return ka(pa(arguments,1),function(c,d){return c+P(d,a)},"")},2,null);R("contains",2,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);return-1!=b.indexOf(a)},2);R("count",1,!1,!1,function(a,b){return b.a(a).l},1,1,!0); | ||
R("false",2,!1,!1,function(){return!1},0);R("floor",1,!1,!1,function(a,b){return Math.floor(O(b,a))},1);R("id",4,!1,!1,function(a,b){function c(h){if(A){var m=e.all[h];if(m){if(m.nodeType&&h==m.id)return m;if(m.length)return na(m,function(w){return h==w.id})}return null}return e.getElementById(h)}var d=a.a,e=9==d.nodeType?d:d.ownerDocument;a=P(b,a).split(/\s+/);var f=[];u(a,function(h){h=c(h);!h||0<=ia(f,h)||f.push(h)});f.sort(Ya);var g=new I;u(f,function(h){g.add(h)});return g},1); | ||
R("lang",2,!1,!1,function(){return!1},1);R("last",1,!0,!1,function(a){if(1!=arguments.length)throw Error("Function last expects ()");return a.f},0);R("local-name",3,!1,!0,function(a,b){return(a=b?ob(b.a(a)):a.a)?a.localName||a.nodeName.toLowerCase():""},0,1,!0);R("name",3,!1,!0,function(a,b){return(a=b?ob(b.a(a)):a.a)?a.nodeName.toLowerCase():""},0,1,!0);R("namespace-uri",3,!0,!1,function(){return""},0,1,!0); | ||
R("normalize-space",3,!1,!0,function(a,b){return(b?P(b,a):E(a.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")},0,1);R("not",2,!1,!1,function(a,b){return!tb(b,a)},1);R("number",1,!1,!0,function(a,b){return b?O(b,a):+E(a.a)},0,1);R("position",1,!0,!1,function(a){return a.b},0);R("round",1,!1,!1,function(a,b){return Math.round(O(b,a))},1);R("starts-with",2,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);return 0==b.lastIndexOf(a,0)},2);R("string",3,!1,!0,function(a,b){return b?P(b,a):E(a.a)},0,1); | ||
function pa(a,b,c){return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};var qa=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};function ra(a,b){return a<b?-1:a>b?1:0};var v;a:{var sa=k.navigator;if(sa){var ta=sa.userAgent;if(ta){v=ta;break a}}v=""}function x(a){return-1!=v.indexOf(a)};function ua(){return x("Firefox")||x("FxiOS")}function va(){return(x("Chrome")||x("CriOS"))&&!x("Edge")};function wa(a){return String(a).replace(/\-([a-z])/g,function(b,c){return c.toUpperCase()})};function xa(){return x("iPhone")&&!x("iPod")&&!x("iPad")};function ya(a,b){var c=za;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var Aa=x("Opera"),y=x("Trident")||x("MSIE"),Ba=x("Edge"),Ca=x("Gecko")&&!(-1!=v.toLowerCase().indexOf("webkit")&&!x("Edge"))&&!(x("Trident")||x("MSIE"))&&!x("Edge"),Da=-1!=v.toLowerCase().indexOf("webkit")&&!x("Edge");function Ea(){var a=k.document;return a?a.documentMode:void 0}var Fa; | ||
a:{var Ga="",Ha=function(){var a=v;if(Ca)return/rv:([^\);]+)(\)|;)/.exec(a);if(Ba)return/Edge\/([\d\.]+)/.exec(a);if(y)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Da)return/WebKit\/(\S+)/.exec(a);if(Aa)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Ha&&(Ga=Ha?Ha[1]:"");if(y){var Ia=Ea();if(null!=Ia&&Ia>parseFloat(Ga)){Fa=String(Ia);break a}}Fa=Ga}var za={}; | ||
function Ja(a){return ya(a,function(){for(var b=0,c=qa(String(Fa)).split("."),d=qa(String(a)).split("."),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||"",h=d[f]||"";do{g=/(\d*)(\D*)(.*)/.exec(g)||["","","",""];h=/(\d*)(\D*)(.*)/.exec(h)||["","","",""];if(0==g[0].length&&0==h[0].length)break;b=ra(0==g[1].length?0:parseInt(g[1],10),0==h[1].length?0:parseInt(h[1],10))||ra(0==g[2].length,0==h[2].length)||ra(g[2],h[2]);g=g[3];h=h[3]}while(0==b)}return 0<=b})}var Ka;var La=k.document; | ||
Ka=La&&y?Ea()||("CSS1Compat"==La.compatMode?parseInt(Fa,10):5):void 0;var z=y&&!(9<=Number(Ka)),Ma=y&&!(8<=Number(Ka));function Na(a,b,c,d){this.a=a;this.nodeName=c;this.nodeValue=d;this.nodeType=2;this.parentNode=this.ownerElement=b}function Oa(a,b){var c=Ma&&"href"==b.nodeName?a.getAttribute(b.nodeName,2):b.nodeValue;return new Na(b,a,b.nodeName,c)};function Pa(a){this.b=a;this.a=0}function Qa(a){a=a.match(Ra);for(var b=0;b<a.length;b++)Sa.test(a[b])&&a.splice(b,1);return new Pa(a)}var Ra=/\$?(?:(?![0-9-\.])(?:\*|[\w-\.]+):)?(?![0-9-\.])(?:\*|[\w-\.]+)|\/\/|\.\.|::|\d+(?:\.\d*)?|\.\d+|"[^"]*"|'[^']*'|[!<>]=|\s+|./g,Sa=/^\s/;function A(a,b){return a.b[a.a+(b||0)]}function B(a){return a.b[a.a++]}function Ta(a){return a.b.length<=a.a};function Ua(a,b){this.x=l(a)?a:0;this.y=l(b)?b:0}Ua.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};Ua.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};Ua.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};function Va(a,b){this.width=a;this.height=b}Va.prototype.aspectRatio=function(){return this.width/this.height};Va.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};Va.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};Va.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};function Wa(a,b){if(!a||!b)return!1;if(a.contains&&1==b.nodeType)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||!!(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a} | ||
function Xa(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(y&&!(9<=Number(Ka))){if(9==a.nodeType)return-1;if(9==b.nodeType)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=1==a.nodeType,d=1==b.nodeType;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,f=b.parentNode;return e==f?Ya(a,b):!c&&Wa(e,b)?-1*Za(a,b):!d&&Wa(f,a)?Za(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=C(a);c=d.createRange(); | ||
c.selectNode(a);c.collapse(!0);a=d.createRange();a.selectNode(b);a.collapse(!0);return c.compareBoundaryPoints(k.Range.START_TO_END,a)}function Za(a,b){var c=a.parentNode;if(c==b)return-1;for(;b.parentNode!=c;)b=b.parentNode;return Ya(b,a)}function Ya(a,b){for(;b=b.previousSibling;)if(b==a)return-1;return 1}function C(a){return 9==a.nodeType?a:a.ownerDocument||a.document}function $a(a,b){a&&(a=a.parentNode);for(var c=0;a;){if(b(a))return a;a=a.parentNode;c++}return null} | ||
function ab(a){this.a=a||k.document||document}ab.prototype.getElementsByTagName=function(a,b){return(b||this.a).getElementsByTagName(String(a))};function E(a){var b=null,c=a.nodeType;1==c&&(b=a.textContent,b=void 0==b||null==b?a.innerText:b,b=void 0==b||null==b?"":b);if("string"!=typeof b)if(z&&"title"==a.nodeName.toLowerCase()&&1==c)b=a.text;else if(9==c||1==c){a=9==c?a.documentElement:a.firstChild;c=0;var d=[];for(b="";a;){do 1!=a.nodeType&&(b+=a.nodeValue),z&&"title"==a.nodeName.toLowerCase()&&(b+=a.text),d[c++]=a;while(a=a.firstChild);for(;c&&!(a=d[--c].nextSibling););}}else b=a.nodeValue;return b} | ||
function F(a,b,c){if(null===b)return!0;try{if(!a.getAttribute)return!1}catch(d){return!1}Ma&&"class"==b&&(b="className");return null==c?!!a.getAttribute(b):a.getAttribute(b,2)==c}function bb(a,b,c,d,e){return(z?cb:db).call(null,a,b,n(c)?c:null,n(d)?d:null,e||new G)} | ||
function cb(a,b,c,d,e){if(a instanceof eb||8==a.b||c&&null===a.b){var f=b.all;if(!f)return e;a=fb(a);if("*"!=a&&(f=b.getElementsByTagName(a),!f))return e;if(c){for(var g=[],h=0;b=f[h++];)F(b,c,d)&&g.push(b);f=g}for(h=0;b=f[h++];)"*"==a&&"!"==b.tagName||e.add(b);return e}gb(a,b,c,d,e);return e} | ||
function db(a,b,c,d,e){b.getElementsByName&&d&&"name"==c&&!y?(b=b.getElementsByName(d),u(b,function(f){a.a(f)&&e.add(f)})):b.getElementsByClassName&&d&&"class"==c?(b=b.getElementsByClassName(d),u(b,function(f){f.className==d&&a.a(f)&&e.add(f)})):a instanceof H?gb(a,b,c,d,e):b.getElementsByTagName&&(b=b.getElementsByTagName(a.f()),u(b,function(f){F(f,c,d)&&e.add(f)}));return e} | ||
function hb(a,b,c,d,e){var f;if((a instanceof eb||8==a.b||c&&null===a.b)&&(f=b.childNodes)){var g=fb(a);if("*"!=g&&(f=ja(f,function(h){return h.tagName&&h.tagName.toLowerCase()==g}),!f))return e;c&&(f=ja(f,function(h){return F(h,c,d)}));u(f,function(h){"*"==g&&("!"==h.tagName||"*"==g&&1!=h.nodeType)||e.add(h)});return e}return ib(a,b,c,d,e)}function ib(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)F(b,c,d)&&a.a(b)&&e.add(b);return e} | ||
function gb(a,b,c,d,e){for(b=b.firstChild;b;b=b.nextSibling)F(b,c,d)&&a.a(b)&&e.add(b),gb(a,b,c,d,e)}function fb(a){if(a instanceof H){if(8==a.b)return"!";if(null===a.b)return"*"}return a.f()};function G(){this.b=this.a=null;this.l=0}function jb(a){this.f=a;this.a=this.b=null}function lb(a,b){if(!a.a)return b;if(!b.a)return a;var c=a.a;b=b.a;for(var d=null,e,f=0;c&&b;){e=c.f;var g=b.f;e==g||e instanceof Na&&g instanceof Na&&e.a==g.a?(e=c,c=c.a,b=b.a):0<Xa(c.f,b.f)?(e=b,b=b.a):(e=c,c=c.a);(e.b=d)?d.a=e:a.a=e;d=e;f++}for(e=c||b;e;)e.b=d,d=d.a=e,f++,e=e.a;a.b=d;a.l=f;return a}function mb(a,b){b=new jb(b);b.a=a.a;a.b?a.a.b=b:a.a=a.b=b;a.a=b;a.l++} | ||
G.prototype.add=function(a){a=new jb(a);a.b=this.b;this.a?this.b.a=a:this.a=this.b=a;this.b=a;this.l++};function nb(a){return(a=a.a)?a.f:null}function ob(a){return(a=nb(a))?E(a):""}function I(a,b){return new pb(a,!!b)}function pb(a,b){this.f=a;this.b=(this.s=b)?a.b:a.a;this.a=null}function J(a){var b=a.b;if(null==b)return null;var c=a.a=b;a.b=a.s?b.b:b.a;return c.f};function K(a){this.i=a;this.b=this.g=!1;this.f=null}function L(a){return"\n "+a.toString().split("\n").join("\n ")}function qb(a,b){a.g=b}function rb(a,b){a.b=b}function O(a,b){a=a.a(b);return a instanceof G?+ob(a):+a}function P(a,b){a=a.a(b);return a instanceof G?ob(a):""+a}function sb(a,b){a=a.a(b);return a instanceof G?!!a.l:!!a};function tb(a,b,c){K.call(this,a.i);this.c=a;this.h=b;this.o=c;this.g=b.g||c.g;this.b=b.b||c.b;this.c==ub&&(c.b||c.g||4==c.i||0==c.i||!b.f?b.b||b.g||4==b.i||0==b.i||!c.f||(this.f={name:c.f.name,u:b}):this.f={name:b.f.name,u:c})}t(tb,K); | ||
function vb(a,b,c,d,e){b=b.a(d);c=c.a(d);var f;if(b instanceof G&&c instanceof G){b=I(b);for(d=J(b);d;d=J(b))for(e=I(c),f=J(e);f;f=J(e))if(a(E(d),E(f)))return!0;return!1}if(b instanceof G||c instanceof G){b instanceof G?(e=b,d=c):(e=c,d=b);f=I(e);for(var g=typeof d,h=J(f);h;h=J(f)){switch(g){case "number":h=+E(h);break;case "boolean":h=!!E(h);break;case "string":h=E(h);break;default:throw Error("Illegal primitive type for comparison.");}if(e==b&&a(h,d)||e==c&&a(d,h))return!0}return!1}return e?"boolean"== | ||
typeof b||"boolean"==typeof c?a(!!b,!!c):"number"==typeof b||"number"==typeof c?a(+b,+c):a(b,c):a(+b,+c)}tb.prototype.a=function(a){return this.c.m(this.h,this.o,a)};tb.prototype.toString=function(){var a="Binary Expression: "+this.c;a+=L(this.h);return a+=L(this.o)};function wb(a,b,c,d){this.H=a;this.C=b;this.i=c;this.m=d}wb.prototype.toString=function(){return this.H};var xb={}; | ||
function Q(a,b,c,d){if(xb.hasOwnProperty(a))throw Error("Binary operator already created: "+a);a=new wb(a,b,c,d);return xb[a.toString()]=a}Q("div",6,1,function(a,b,c){return O(a,c)/O(b,c)});Q("mod",6,1,function(a,b,c){return O(a,c)%O(b,c)});Q("*",6,1,function(a,b,c){return O(a,c)*O(b,c)});Q("+",5,1,function(a,b,c){return O(a,c)+O(b,c)});Q("-",5,1,function(a,b,c){return O(a,c)-O(b,c)});Q("<",4,2,function(a,b,c){return vb(function(d,e){return d<e},a,b,c)}); | ||
Q(">",4,2,function(a,b,c){return vb(function(d,e){return d>e},a,b,c)});Q("<=",4,2,function(a,b,c){return vb(function(d,e){return d<=e},a,b,c)});Q(">=",4,2,function(a,b,c){return vb(function(d,e){return d>=e},a,b,c)});var ub=Q("=",3,2,function(a,b,c){return vb(function(d,e){return d==e},a,b,c,!0)});Q("!=",3,2,function(a,b,c){return vb(function(d,e){return d!=e},a,b,c,!0)});Q("and",2,2,function(a,b,c){return sb(a,c)&&sb(b,c)});Q("or",1,2,function(a,b,c){return sb(a,c)||sb(b,c)});function yb(a,b){if(b.a.length&&4!=a.i)throw Error("Primary expression must evaluate to nodeset if filter has predicate(s).");K.call(this,a.i);this.c=a;this.h=b;this.g=a.g;this.b=a.b}t(yb,K);yb.prototype.a=function(a){a=this.c.a(a);return zb(this.h,a)};yb.prototype.toString=function(){var a="Filter:"+L(this.c);return a+=L(this.h)};function Ab(a,b){if(b.length<a.B)throw Error("Function "+a.j+" expects at least"+a.B+" arguments, "+b.length+" given");if(null!==a.A&&b.length>a.A)throw Error("Function "+a.j+" expects at most "+a.A+" arguments, "+b.length+" given");a.G&&u(b,function(c,d){if(4!=c.i)throw Error("Argument "+d+" to function "+a.j+" is not of type Nodeset: "+c);});K.call(this,a.i);this.v=a;this.c=b;qb(this,a.g||la(b,function(c){return c.g}));rb(this,a.F&&!b.length||a.D&&!!b.length||la(b,function(c){return c.b}))} | ||
t(Ab,K);Ab.prototype.a=function(a){return this.v.m.apply(null,oa(a,this.c))};Ab.prototype.toString=function(){var a="Function: "+this.v;if(this.c.length){var b=ka(this.c,function(c,d){return c+L(d)},"Arguments:");a+=L(b)}return a};function Bb(a,b,c,d,e,f,g,h){this.j=a;this.i=b;this.g=c;this.F=d;this.D=!1;this.m=e;this.B=f;this.A=l(g)?g:f;this.G=!!h}Bb.prototype.toString=function(){return this.j};var Cb={}; | ||
function R(a,b,c,d,e,f,g,h){if(Cb.hasOwnProperty(a))throw Error("Function already created: "+a+".");Cb[a]=new Bb(a,b,c,d,e,f,g,h)}R("boolean",2,!1,!1,function(a,b){return sb(b,a)},1);R("ceiling",1,!1,!1,function(a,b){return Math.ceil(O(b,a))},1);R("concat",3,!1,!1,function(a,b){return ka(pa(arguments,1),function(c,d){return c+P(d,a)},"")},2,null);R("contains",2,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);return-1!=b.indexOf(a)},2);R("count",1,!1,!1,function(a,b){return b.a(a).l},1,1,!0); | ||
R("false",2,!1,!1,function(){return!1},0);R("floor",1,!1,!1,function(a,b){return Math.floor(O(b,a))},1);R("id",4,!1,!1,function(a,b){function c(h){if(z){var m=e.all[h];if(m){if(m.nodeType&&h==m.id)return m;if(m.length)return na(m,function(w){return h==w.id})}return null}return e.getElementById(h)}var d=a.a,e=9==d.nodeType?d:d.ownerDocument;a=P(b,a).split(/\s+/);var f=[];u(a,function(h){h=c(h);!h||0<=ia(f,h)||f.push(h)});f.sort(Xa);var g=new G;u(f,function(h){g.add(h)});return g},1); | ||
R("lang",2,!1,!1,function(){return!1},1);R("last",1,!0,!1,function(a){if(1!=arguments.length)throw Error("Function last expects ()");return a.f},0);R("local-name",3,!1,!0,function(a,b){return(a=b?nb(b.a(a)):a.a)?a.localName||a.nodeName.toLowerCase():""},0,1,!0);R("name",3,!1,!0,function(a,b){return(a=b?nb(b.a(a)):a.a)?a.nodeName.toLowerCase():""},0,1,!0);R("namespace-uri",3,!0,!1,function(){return""},0,1,!0); | ||
R("normalize-space",3,!1,!0,function(a,b){return(b?P(b,a):E(a.a)).replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")},0,1);R("not",2,!1,!1,function(a,b){return!sb(b,a)},1);R("number",1,!1,!0,function(a,b){return b?O(b,a):+E(a.a)},0,1);R("position",1,!0,!1,function(a){return a.b},0);R("round",1,!1,!1,function(a,b){return Math.round(O(b,a))},1);R("starts-with",2,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);return 0==b.lastIndexOf(a,0)},2);R("string",3,!1,!0,function(a,b){return b?P(b,a):E(a.a)},0,1); | ||
R("string-length",1,!1,!0,function(a,b){return(b?P(b,a):E(a.a)).length},0,1);R("substring",3,!1,!1,function(a,b,c,d){c=O(c,a);if(isNaN(c)||Infinity==c||-Infinity==c)return"";d=d?O(d,a):Infinity;if(isNaN(d)||-Infinity===d)return"";c=Math.round(c)-1;var e=Math.max(c,0);a=P(b,a);return Infinity==d?a.substring(e):a.substring(e,c+Math.round(d))},2,3);R("substring-after",3,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);c=b.indexOf(a);return-1==c?"":b.substring(c+a.length)},2); | ||
R("substring-before",3,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);a=b.indexOf(a);return-1==a?"":b.substring(0,a)},2);R("sum",1,!1,!1,function(a,b){a=K(b.a(a));b=0;for(var c=L(a);c;c=L(a))b+=+E(c);return b},1,1,!0);R("translate",3,!1,!1,function(a,b,c,d){b=P(b,a);c=P(c,a);var e=P(d,a);a={};for(d=0;d<c.length;d++){var f=c.charAt(d);f in a||(a[f]=e.charAt(d))}c="";for(d=0;d<b.length;d++)f=b.charAt(d),c+=f in a?a[f]:f;return c},3);R("true",2,!1,!1,function(){return!0},0);function J(a,b){this.h=a;this.c=l(b)?b:null;this.b=null;switch(a){case "comment":this.b=8;break;case "text":this.b=3;break;case "processing-instruction":this.b=7;break;case "node":break;default:throw Error("Unexpected argument");}}function Eb(a){return"comment"==a||"text"==a||"processing-instruction"==a||"node"==a}J.prototype.a=function(a){return null===this.b||this.b==a.nodeType};J.prototype.f=function(){return this.h}; | ||
J.prototype.toString=function(){var a="Kind Test: "+this.h;null===this.c||(a+=N(this.c));return a};function Fb(a){M.call(this,3);this.c=a.substring(1,a.length-1)}t(Fb,M);Fb.prototype.a=function(){return this.c};Fb.prototype.toString=function(){return"Literal: "+this.c};function fb(a,b){this.j=a.toLowerCase();a="*"==this.j?"*":"http://www.w3.org/1999/xhtml";this.c=b?b.toLowerCase():a}fb.prototype.a=function(a){var b=a.nodeType;if(1!=b&&2!=b)return!1;b=l(a.localName)?a.localName:a.nodeName;return"*"!=this.j&&this.j!=b.toLowerCase()?!1:"*"==this.c?!0:this.c==(a.namespaceURI?a.namespaceURI.toLowerCase():"http://www.w3.org/1999/xhtml")};fb.prototype.f=function(){return this.j}; | ||
fb.prototype.toString=function(){return"Name Test: "+("http://www.w3.org/1999/xhtml"==this.c?"":this.c+":")+this.j};function Gb(a){M.call(this,1);this.c=a}t(Gb,M);Gb.prototype.a=function(){return this.c};Gb.prototype.toString=function(){return"Number: "+this.c};function Hb(a,b){M.call(this,a.i);this.h=a;this.c=b;this.g=a.g;this.b=a.b;1==this.c.length&&(a=this.c[0],a.w||a.c!=Ib||(a=a.o,"*"!=a.f()&&(this.f={name:a.f(),u:null})))}t(Hb,M);function Jb(){M.call(this,4)}t(Jb,M);Jb.prototype.a=function(a){var b=new I;a=a.a;9==a.nodeType?b.add(a):b.add(a.ownerDocument);return b};Jb.prototype.toString=function(){return"Root Helper Expression"};function Kb(){M.call(this,4)}t(Kb,M);Kb.prototype.a=function(a){var b=new I;b.add(a.a);return b};Kb.prototype.toString=function(){return"Context Helper Expression"}; | ||
function Lb(a){return"/"==a||"//"==a}Hb.prototype.a=function(a){var b=this.h.a(a);if(!(b instanceof I))throw Error("Filter expression must evaluate to nodeset.");a=this.c;for(var c=0,d=a.length;c<d&&b.l;c++){var e=a[c],f=K(b,e.c.s);if(e.g||e.c!=Mb)if(e.g||e.c!=Nb){var g=L(f);for(b=e.a(new ha(g));null!=(g=L(f));)g=e.a(new ha(g)),b=mb(b,g)}else g=L(f),b=e.a(new ha(g));else{for(g=L(f);(b=L(f))&&(!g.contains||g.contains(b))&&b.compareDocumentPosition(g)&8;g=b);b=e.a(new ha(g))}}return b}; | ||
Hb.prototype.toString=function(){var a="Path Expression:"+N(this.h);if(this.c.length){var b=ka(this.c,function(c,d){return c+N(d)},"Steps:");a+=N(b)}return a};function Ob(a,b){this.a=a;this.s=!!b} | ||
function Ab(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=K(b),f=b.l,g,h=0;g=L(e);h++){var m=a.s?f-h:h+1;g=d.a(new ha(g,m,f));if("number"==typeof g)m=m==g;else if("string"==typeof g||"boolean"==typeof g)m=!!g;else if(g instanceof I)m=0<g.l;else throw Error("Predicate.evaluate returned an unexpected type.");if(!m){m=e;g=m.f;var w=m.a;if(!w)throw Error("Next must be called at least once before remove.");var r=w.b;w=w.a;r?r.a=w:g.a=w;w?w.b=r:g.b=r;g.l--;m.a=null}}return b} | ||
Ob.prototype.toString=function(){return ka(this.a,function(a,b){return a+N(b)},"Predicates:")};function Pb(a,b,c,d){M.call(this,4);this.c=a;this.o=b;this.h=c||new Ob([]);this.w=!!d;b=this.h;b=0<b.a.length?b.a[0].f:null;a.I&&b&&(a=b.name,a=A?a.toLowerCase():a,this.f={name:a,u:b.u});a:{a=this.h;for(b=0;b<a.a.length;b++)if(c=a.a[b],c.g||1==c.i||0==c.i){a=!0;break a}a=!1}this.g=a}t(Pb,M); | ||
Pb.prototype.a=function(a){var b=a.a,c=this.f,d=null,e=null,f=0;c&&(d=c.name,e=c.u?P(c.u,a):null,f=1);if(this.w)if(this.g||this.c!=Qb)if(b=K((new Pb(Rb,new J("node"))).a(a)),c=L(b))for(a=this.m(c,d,e,f);null!=(c=L(b));)a=mb(a,this.m(c,d,e,f));else a=new I;else a=cb(this.o,b,d,e),a=Ab(this.h,a,f);else a=this.m(a.a,d,e,f);return a};Pb.prototype.m=function(a,b,c,d){a=this.c.v(this.o,a,b,c);return a=Ab(this.h,a,d)}; | ||
Pb.prototype.toString=function(){var a="Step:"+N("Operator: "+(this.w?"//":"/"));this.c.j&&(a+=N("Axis: "+this.c));a+=N(this.o);if(this.h.a.length){var b=ka(this.h.a,function(c,d){return c+N(d)},"Predicates:");a+=N(b)}return a};function Sb(a,b,c,d){this.j=a;this.v=b;this.s=c;this.I=d}Sb.prototype.toString=function(){return this.j};var Tb={};function S(a,b,c,d){if(Tb.hasOwnProperty(a))throw Error("Axis already created: "+a);b=new Sb(a,b,c,!!d);return Tb[a]=b} | ||
S("ancestor",function(a,b){for(var c=new I;b=b.parentNode;)a.a(b)&&nb(c,b);return c},!0);S("ancestor-or-self",function(a,b){var c=new I;do a.a(b)&&nb(c,b);while(b=b.parentNode);return c},!0); | ||
var Ib=S("attribute",function(a,b){var c=new I,d=a.f();if("style"==d&&A&&b.style)return c.add(new Oa(b.style,b,"style",b.style.cssText)),c;var e=b.attributes;if(e)if(a instanceof J&&null===a.b||"*"==d)for(a=0;d=e[a];a++)A?d.nodeValue&&c.add(Pa(b,d)):c.add(d);else(d=e.getNamedItem(d))&&(A?d.nodeValue&&c.add(Pa(b,d)):c.add(d));return c},!1),Qb=S("child",function(a,b,c,d,e){return(A?ib:jb).call(null,a,b,n(c)?c:null,n(d)?d:null,e||new I)},!1,!0);S("descendant",cb,!1,!0); | ||
var Rb=S("descendant-or-self",function(a,b,c,d){var e=new I;H(b,c,d)&&a.a(b)&&e.add(b);return cb(a,b,c,d,e)},!1,!0),Mb=S("following",function(a,b,c,d){var e=new I;do for(var f=b;f=f.nextSibling;)H(f,c,d)&&a.a(f)&&e.add(f),e=cb(a,f,c,d,e);while(b=b.parentNode);return e},!1,!0);S("following-sibling",function(a,b){for(var c=new I;b=b.nextSibling;)a.a(b)&&c.add(b);return c},!1);S("namespace",function(){return new I},!1); | ||
var Ub=S("parent",function(a,b){var c=new I;if(9==b.nodeType)return c;if(2==b.nodeType)return c.add(b.ownerElement),c;b=b.parentNode;a.a(b)&&c.add(b);return c},!1),Nb=S("preceding",function(a,b,c,d){var e=new I,f=[];do f.unshift(b);while(b=b.parentNode);for(var g=1,h=f.length;g<h;g++){var m=[];for(b=f[g];b=b.previousSibling;)m.unshift(b);for(var w=0,r=m.length;w<r;w++)b=m[w],H(b,c,d)&&a.a(b)&&e.add(b),e=cb(a,b,c,d,e)}return e},!0,!0); | ||
S("preceding-sibling",function(a,b){for(var c=new I;b=b.previousSibling;)a.a(b)&&nb(c,b);return c},!0);var Vb=S("self",function(a,b){var c=new I;a.a(b)&&c.add(b);return c},!1);function Wb(a){M.call(this,1);this.c=a;this.g=a.g;this.b=a.b}t(Wb,M);Wb.prototype.a=function(a){return-O(this.c,a)};Wb.prototype.toString=function(){return"Unary Expression: -"+N(this.c)};function Xb(a){M.call(this,4);this.c=a;rb(this,la(this.c,function(b){return b.g}));sb(this,la(this.c,function(b){return b.b}))}t(Xb,M);Xb.prototype.a=function(a){var b=new I;u(this.c,function(c){c=c.a(a);if(!(c instanceof I))throw Error("Path expression must evaluate to NodeSet.");b=mb(b,c)});return b};Xb.prototype.toString=function(){return ka(this.c,function(a,b){return a+N(b)},"Union Expression:")};function Yb(a,b){this.a=a;this.b=b}function Zb(a){for(var b,c=[];;){T(a,"Missing right hand side of binary expression.");b=$b(a);var d=C(a.a);if(!d)break;var e=(d=yb[d]||null)&&d.C;if(!e){a.a.a--;break}for(;c.length&&e<=c[c.length-1].C;)b=new ub(c.pop(),c.pop(),b);c.push(b,d)}for(;c.length;)b=new ub(c.pop(),c.pop(),b);return b}function T(a,b){if(Ua(a.a))throw Error(b);}function ac(a,b){a=C(a.a);if(a!=b)throw Error("Bad token, expected: "+b+" got: "+a);} | ||
function dc(a){a=C(a.a);if(")"!=a)throw Error("Bad token: "+a);}function ec(a){a=C(a.a);if(2>a.length)throw Error("Unclosed literal string");return new Fb(a)} | ||
function fc(a){var b=[];if(Lb(B(a.a))){var c=C(a.a);var d=B(a.a);if("/"==c&&(Ua(a.a)||"."!=d&&".."!=d&&"@"!=d&&"*"!=d&&!/(?![0-9])[\w]/.test(d)))return new Jb;d=new Jb;T(a,"Missing next location step.");c=gc(a,c);b.push(c)}else{a:{c=B(a.a);d=c.charAt(0);switch(d){case "$":throw Error("Variable reference not allowed in HTML XPath");case "(":C(a.a);c=Zb(a);T(a,'unclosed "("');ac(a,")");break;case '"':case "'":c=ec(a);break;default:if(isNaN(+c))if(!Eb(c)&&/(?![0-9])[\w]/.test(d)&&"("==B(a.a,1)){c=C(a.a); | ||
c=Db[c]||null;C(a.a);for(d=[];")"!=B(a.a);){T(a,"Missing function argument list.");d.push(Zb(a));if(","!=B(a.a))break;C(a.a)}T(a,"Unclosed function argument list.");dc(a);c=new Bb(c,d)}else{c=null;break a}else c=new Gb(+C(a.a))}"["==B(a.a)&&(d=new Ob(hc(a)),c=new zb(c,d))}if(c)if(Lb(B(a.a)))d=c;else return c;else c=gc(a,"/"),d=new Kb,b.push(c)}for(;Lb(B(a.a));)c=C(a.a),T(a,"Missing next location step."),c=gc(a,c),b.push(c);return new Hb(d,b)} | ||
function gc(a,b){if("/"!=b&&"//"!=b)throw Error('Step op should be "/" or "//"');if("."==B(a.a)){var c=new Pb(Vb,new J("node"));C(a.a);return c}if(".."==B(a.a))return c=new Pb(Ub,new J("node")),C(a.a),c;if("@"==B(a.a)){var d=Ib;C(a.a);T(a,"Missing attribute name")}else if("::"==B(a.a,1)){if(!/(?![0-9])[\w]/.test(B(a.a).charAt(0)))throw Error("Bad token: "+C(a.a));var e=C(a.a);d=Tb[e]||null;if(!d)throw Error("No axis with name: "+e);C(a.a);T(a,"Missing node name")}else d=Qb;e=B(a.a);if(/(?![0-9])[\w\*]/.test(e.charAt(0)))if("("== | ||
B(a.a,1)){if(!Eb(e))throw Error("Invalid node type: "+e);e=C(a.a);if(!Eb(e))throw Error("Invalid type name: "+e);ac(a,"(");T(a,"Bad nodetype");var f=B(a.a).charAt(0),g=null;if('"'==f||"'"==f)g=ec(a);T(a,"Bad nodetype");dc(a);e=new J(e,g)}else if(e=C(a.a),f=e.indexOf(":"),-1==f)e=new fb(e);else{g=e.substring(0,f);if("*"==g)var h="*";else if(h=a.b(g),!h)throw Error("Namespace prefix not declared: "+g);e=e.substr(f+1);e=new fb(e,h)}else throw Error("Bad token: "+C(a.a));a=new Ob(hc(a),d.s);return c|| | ||
new Pb(d,e,a,"//"==b)}function hc(a){for(var b=[];"["==B(a.a);){C(a.a);T(a,"Missing predicate expression.");var c=Zb(a);b.push(c);T(a,"Unclosed predicate expression.");ac(a,"]")}return b}function $b(a){if("-"==B(a.a))return C(a.a),new Wb($b(a));var b=fc(a);if("|"!=B(a.a))a=b;else{for(b=[b];"|"==C(a.a);)T(a,"Missing next union location path."),b.push(fc(a));a.a.a--;a=new Xb(b)}return a};function ic(a){switch(a.nodeType){case 1:return fa(jc,a);case 9:return ic(a.documentElement);case 11:case 10:case 6:case 12:return kc;default:return a.parentNode?ic(a.parentNode):kc}}function kc(){return null}function jc(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.org/1999/xhtml";var c=a.getAttributeNode("xmlns:"+b);return c&&c.specified?c.value||null:a.parentNode&&9!=a.parentNode.nodeType?jc(a.parentNode,b):null};function lc(a,b){if(!a.length)throw Error("Empty XPath expression.");a=Ra(a);if(Ua(a))throw Error("Invalid XPath expression.");b?"function"==ba(b)||(b=ea(b.lookupNamespaceURI,b)):b=function(){return null};var c=Zb(new Yb(a,b));if(!Ua(a))throw Error("Bad token: "+C(a));this.evaluate=function(d,e){d=c.a(new ha(d));return new U(d,e)}} | ||
function U(a,b){if(0==b)if(a instanceof I)b=4;else if("string"==typeof a)b=2;else if("number"==typeof a)b=1;else if("boolean"==typeof a)b=3;else throw Error("Unexpected evaluation result.");if(2!=b&&1!=b&&3!=b&&!(a instanceof I))throw Error("value could not be converted to the specified type");this.resultType=b;switch(b){case 2:this.stringValue=a instanceof I?pb(a):""+a;break;case 1:this.numberValue=a instanceof I?+pb(a):+a;break;case 3:this.booleanValue=a instanceof I?0<a.l:!!a;break;case 4:case 5:case 6:case 7:var c= | ||
K(a);var d=[];for(var e=L(c);e;e=L(c))d.push(e instanceof Oa?e.a:e);this.snapshotLength=a.l;this.invalidIteratorState=!1;break;case 8:case 9:a=ob(a);this.singleNodeValue=a instanceof Oa?a.a:a;break;default:throw Error("Unknown XPathResult type.");}var f=0;this.iterateNext=function(){if(4!=b&&5!=b)throw Error("iterateNext called with wrong result type");return f>=d.length?null:d[f++]};this.snapshotItem=function(g){if(6!=b&&7!=b)throw Error("snapshotItem called with wrong result type");return g>=d.length|| | ||
0>g?null:d[g]}}U.ANY_TYPE=0;U.NUMBER_TYPE=1;U.STRING_TYPE=2;U.BOOLEAN_TYPE=3;U.UNORDERED_NODE_ITERATOR_TYPE=4;U.ORDERED_NODE_ITERATOR_TYPE=5;U.UNORDERED_NODE_SNAPSHOT_TYPE=6;U.ORDERED_NODE_SNAPSHOT_TYPE=7;U.ANY_UNORDERED_NODE_TYPE=8;U.FIRST_ORDERED_NODE_TYPE=9;function mc(a){this.lookupNamespaceURI=ic(a)} | ||
function nc(a,b){a=a||k;var c=a.Document&&a.Document.prototype||a.document;if(!c.evaluate||b)a.XPathResult=U,c.evaluate=function(d,e,f,g){return(new lc(d,f)).evaluate(e,g)},c.createExpression=function(d,e){return new lc(d,e)},c.createNSResolver=function(d){return new mc(d)}}aa("wgxpath.install",nc);aa("wgxpath.install",nc);var oc={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400", | ||
R("substring-before",3,!1,!1,function(a,b,c){b=P(b,a);a=P(c,a);a=b.indexOf(a);return-1==a?"":b.substring(0,a)},2);R("sum",1,!1,!1,function(a,b){a=I(b.a(a));b=0;for(var c=J(a);c;c=J(a))b+=+E(c);return b},1,1,!0);R("translate",3,!1,!1,function(a,b,c,d){b=P(b,a);c=P(c,a);var e=P(d,a);a={};for(d=0;d<c.length;d++){var f=c.charAt(d);f in a||(a[f]=e.charAt(d))}c="";for(d=0;d<b.length;d++)f=b.charAt(d),c+=f in a?a[f]:f;return c},3);R("true",2,!1,!1,function(){return!0},0);function H(a,b){this.h=a;this.c=l(b)?b:null;this.b=null;switch(a){case "comment":this.b=8;break;case "text":this.b=3;break;case "processing-instruction":this.b=7;break;case "node":break;default:throw Error("Unexpected argument");}}function Db(a){return"comment"==a||"text"==a||"processing-instruction"==a||"node"==a}H.prototype.a=function(a){return null===this.b||this.b==a.nodeType};H.prototype.f=function(){return this.h}; | ||
H.prototype.toString=function(){var a="Kind Test: "+this.h;null===this.c||(a+=L(this.c));return a};function Eb(a){K.call(this,3);this.c=a.substring(1,a.length-1)}t(Eb,K);Eb.prototype.a=function(){return this.c};Eb.prototype.toString=function(){return"Literal: "+this.c};function eb(a,b){this.j=a.toLowerCase();a="*"==this.j?"*":"http://www.w3.org/1999/xhtml";this.c=b?b.toLowerCase():a}eb.prototype.a=function(a){var b=a.nodeType;if(1!=b&&2!=b)return!1;b=l(a.localName)?a.localName:a.nodeName;return"*"!=this.j&&this.j!=b.toLowerCase()?!1:"*"==this.c?!0:this.c==(a.namespaceURI?a.namespaceURI.toLowerCase():"http://www.w3.org/1999/xhtml")};eb.prototype.f=function(){return this.j}; | ||
eb.prototype.toString=function(){return"Name Test: "+("http://www.w3.org/1999/xhtml"==this.c?"":this.c+":")+this.j};function Fb(a){K.call(this,1);this.c=a}t(Fb,K);Fb.prototype.a=function(){return this.c};Fb.prototype.toString=function(){return"Number: "+this.c};function Gb(a,b){K.call(this,a.i);this.h=a;this.c=b;this.g=a.g;this.b=a.b;1==this.c.length&&(a=this.c[0],a.w||a.c!=Hb||(a=a.o,"*"!=a.f()&&(this.f={name:a.f(),u:null})))}t(Gb,K);function Ib(){K.call(this,4)}t(Ib,K);Ib.prototype.a=function(a){var b=new G;a=a.a;9==a.nodeType?b.add(a):b.add(a.ownerDocument);return b};Ib.prototype.toString=function(){return"Root Helper Expression"};function Jb(){K.call(this,4)}t(Jb,K);Jb.prototype.a=function(a){var b=new G;b.add(a.a);return b};Jb.prototype.toString=function(){return"Context Helper Expression"}; | ||
function Kb(a){return"/"==a||"//"==a}Gb.prototype.a=function(a){var b=this.h.a(a);if(!(b instanceof G))throw Error("Filter expression must evaluate to nodeset.");a=this.c;for(var c=0,d=a.length;c<d&&b.l;c++){var e=a[c],f=I(b,e.c.s);if(e.g||e.c!=Lb)if(e.g||e.c!=Mb){var g=J(f);for(b=e.a(new ha(g));null!=(g=J(f));)g=e.a(new ha(g)),b=lb(b,g)}else g=J(f),b=e.a(new ha(g));else{for(g=J(f);(b=J(f))&&(!g.contains||g.contains(b))&&b.compareDocumentPosition(g)&8;g=b);b=e.a(new ha(g))}}return b}; | ||
Gb.prototype.toString=function(){var a="Path Expression:"+L(this.h);if(this.c.length){var b=ka(this.c,function(c,d){return c+L(d)},"Steps:");a+=L(b)}return a};function Nb(a,b){this.a=a;this.s=!!b} | ||
function zb(a,b,c){for(c=c||0;c<a.a.length;c++)for(var d=a.a[c],e=I(b),f=b.l,g,h=0;g=J(e);h++){var m=a.s?f-h:h+1;g=d.a(new ha(g,m,f));if("number"==typeof g)m=m==g;else if("string"==typeof g||"boolean"==typeof g)m=!!g;else if(g instanceof G)m=0<g.l;else throw Error("Predicate.evaluate returned an unexpected type.");if(!m){m=e;g=m.f;var w=m.a;if(!w)throw Error("Next must be called at least once before remove.");var r=w.b;w=w.a;r?r.a=w:g.a=w;w?w.b=r:g.b=r;g.l--;m.a=null}}return b} | ||
Nb.prototype.toString=function(){return ka(this.a,function(a,b){return a+L(b)},"Predicates:")};function Ob(a,b,c,d){K.call(this,4);this.c=a;this.o=b;this.h=c||new Nb([]);this.w=!!d;b=this.h;b=0<b.a.length?b.a[0].f:null;a.I&&b&&(a=b.name,a=z?a.toLowerCase():a,this.f={name:a,u:b.u});a:{a=this.h;for(b=0;b<a.a.length;b++)if(c=a.a[b],c.g||1==c.i||0==c.i){a=!0;break a}a=!1}this.g=a}t(Ob,K); | ||
Ob.prototype.a=function(a){var b=a.a,c=this.f,d=null,e=null,f=0;c&&(d=c.name,e=c.u?P(c.u,a):null,f=1);if(this.w)if(this.g||this.c!=Pb)if(b=I((new Ob(Qb,new H("node"))).a(a)),c=J(b))for(a=this.m(c,d,e,f);null!=(c=J(b));)a=lb(a,this.m(c,d,e,f));else a=new G;else a=bb(this.o,b,d,e),a=zb(this.h,a,f);else a=this.m(a.a,d,e,f);return a};Ob.prototype.m=function(a,b,c,d){a=this.c.v(this.o,a,b,c);return a=zb(this.h,a,d)}; | ||
Ob.prototype.toString=function(){var a="Step:"+L("Operator: "+(this.w?"//":"/"));this.c.j&&(a+=L("Axis: "+this.c));a+=L(this.o);if(this.h.a.length){var b=ka(this.h.a,function(c,d){return c+L(d)},"Predicates:");a+=L(b)}return a};function Rb(a,b,c,d){this.j=a;this.v=b;this.s=c;this.I=d}Rb.prototype.toString=function(){return this.j};var Sb={};function S(a,b,c,d){if(Sb.hasOwnProperty(a))throw Error("Axis already created: "+a);b=new Rb(a,b,c,!!d);return Sb[a]=b} | ||
S("ancestor",function(a,b){for(var c=new G;b=b.parentNode;)a.a(b)&&mb(c,b);return c},!0);S("ancestor-or-self",function(a,b){var c=new G;do a.a(b)&&mb(c,b);while(b=b.parentNode);return c},!0); | ||
var Hb=S("attribute",function(a,b){var c=new G,d=a.f();if("style"==d&&z&&b.style)return c.add(new Na(b.style,b,"style",b.style.cssText)),c;var e=b.attributes;if(e)if(a instanceof H&&null===a.b||"*"==d)for(a=0;d=e[a];a++)z?d.nodeValue&&c.add(Oa(b,d)):c.add(d);else(d=e.getNamedItem(d))&&(z?d.nodeValue&&c.add(Oa(b,d)):c.add(d));return c},!1),Pb=S("child",function(a,b,c,d,e){return(z?hb:ib).call(null,a,b,n(c)?c:null,n(d)?d:null,e||new G)},!1,!0);S("descendant",bb,!1,!0); | ||
var Qb=S("descendant-or-self",function(a,b,c,d){var e=new G;F(b,c,d)&&a.a(b)&&e.add(b);return bb(a,b,c,d,e)},!1,!0),Lb=S("following",function(a,b,c,d){var e=new G;do for(var f=b;f=f.nextSibling;)F(f,c,d)&&a.a(f)&&e.add(f),e=bb(a,f,c,d,e);while(b=b.parentNode);return e},!1,!0);S("following-sibling",function(a,b){for(var c=new G;b=b.nextSibling;)a.a(b)&&c.add(b);return c},!1);S("namespace",function(){return new G},!1); | ||
var Tb=S("parent",function(a,b){var c=new G;if(9==b.nodeType)return c;if(2==b.nodeType)return c.add(b.ownerElement),c;b=b.parentNode;a.a(b)&&c.add(b);return c},!1),Mb=S("preceding",function(a,b,c,d){var e=new G,f=[];do f.unshift(b);while(b=b.parentNode);for(var g=1,h=f.length;g<h;g++){var m=[];for(b=f[g];b=b.previousSibling;)m.unshift(b);for(var w=0,r=m.length;w<r;w++)b=m[w],F(b,c,d)&&a.a(b)&&e.add(b),e=bb(a,b,c,d,e)}return e},!0,!0); | ||
S("preceding-sibling",function(a,b){for(var c=new G;b=b.previousSibling;)a.a(b)&&mb(c,b);return c},!0);var Ub=S("self",function(a,b){var c=new G;a.a(b)&&c.add(b);return c},!1);function Vb(a){K.call(this,1);this.c=a;this.g=a.g;this.b=a.b}t(Vb,K);Vb.prototype.a=function(a){return-O(this.c,a)};Vb.prototype.toString=function(){return"Unary Expression: -"+L(this.c)};function Wb(a){K.call(this,4);this.c=a;qb(this,la(this.c,function(b){return b.g}));rb(this,la(this.c,function(b){return b.b}))}t(Wb,K);Wb.prototype.a=function(a){var b=new G;u(this.c,function(c){c=c.a(a);if(!(c instanceof G))throw Error("Path expression must evaluate to NodeSet.");b=lb(b,c)});return b};Wb.prototype.toString=function(){return ka(this.c,function(a,b){return a+L(b)},"Union Expression:")};function Xb(a,b){this.a=a;this.b=b}function Yb(a){for(var b,c=[];;){T(a,"Missing right hand side of binary expression.");b=Zb(a);var d=B(a.a);if(!d)break;var e=(d=xb[d]||null)&&d.C;if(!e){a.a.a--;break}for(;c.length&&e<=c[c.length-1].C;)b=new tb(c.pop(),c.pop(),b);c.push(b,d)}for(;c.length;)b=new tb(c.pop(),c.pop(),b);return b}function T(a,b){if(Ta(a.a))throw Error(b);}function $b(a,b){a=B(a.a);if(a!=b)throw Error("Bad token, expected: "+b+" got: "+a);} | ||
function cc(a){a=B(a.a);if(")"!=a)throw Error("Bad token: "+a);}function dc(a){a=B(a.a);if(2>a.length)throw Error("Unclosed literal string");return new Eb(a)} | ||
function ec(a){var b=[];if(Kb(A(a.a))){var c=B(a.a);var d=A(a.a);if("/"==c&&(Ta(a.a)||"."!=d&&".."!=d&&"@"!=d&&"*"!=d&&!/(?![0-9])[\w]/.test(d)))return new Ib;d=new Ib;T(a,"Missing next location step.");c=fc(a,c);b.push(c)}else{a:{c=A(a.a);d=c.charAt(0);switch(d){case "$":throw Error("Variable reference not allowed in HTML XPath");case "(":B(a.a);c=Yb(a);T(a,'unclosed "("');$b(a,")");break;case '"':case "'":c=dc(a);break;default:if(isNaN(+c))if(!Db(c)&&/(?![0-9])[\w]/.test(d)&&"("==A(a.a,1)){c=B(a.a); | ||
c=Cb[c]||null;B(a.a);for(d=[];")"!=A(a.a);){T(a,"Missing function argument list.");d.push(Yb(a));if(","!=A(a.a))break;B(a.a)}T(a,"Unclosed function argument list.");cc(a);c=new Ab(c,d)}else{c=null;break a}else c=new Fb(+B(a.a))}"["==A(a.a)&&(d=new Nb(gc(a)),c=new yb(c,d))}if(c)if(Kb(A(a.a)))d=c;else return c;else c=fc(a,"/"),d=new Jb,b.push(c)}for(;Kb(A(a.a));)c=B(a.a),T(a,"Missing next location step."),c=fc(a,c),b.push(c);return new Gb(d,b)} | ||
function fc(a,b){if("/"!=b&&"//"!=b)throw Error('Step op should be "/" or "//"');if("."==A(a.a)){var c=new Ob(Ub,new H("node"));B(a.a);return c}if(".."==A(a.a))return c=new Ob(Tb,new H("node")),B(a.a),c;if("@"==A(a.a)){var d=Hb;B(a.a);T(a,"Missing attribute name")}else if("::"==A(a.a,1)){if(!/(?![0-9])[\w]/.test(A(a.a).charAt(0)))throw Error("Bad token: "+B(a.a));var e=B(a.a);d=Sb[e]||null;if(!d)throw Error("No axis with name: "+e);B(a.a);T(a,"Missing node name")}else d=Pb;e=A(a.a);if(/(?![0-9])[\w\*]/.test(e.charAt(0)))if("("== | ||
A(a.a,1)){if(!Db(e))throw Error("Invalid node type: "+e);e=B(a.a);if(!Db(e))throw Error("Invalid type name: "+e);$b(a,"(");T(a,"Bad nodetype");var f=A(a.a).charAt(0),g=null;if('"'==f||"'"==f)g=dc(a);T(a,"Bad nodetype");cc(a);e=new H(e,g)}else if(e=B(a.a),f=e.indexOf(":"),-1==f)e=new eb(e);else{g=e.substring(0,f);if("*"==g)var h="*";else if(h=a.b(g),!h)throw Error("Namespace prefix not declared: "+g);e=e.substr(f+1);e=new eb(e,h)}else throw Error("Bad token: "+B(a.a));a=new Nb(gc(a),d.s);return c|| | ||
new Ob(d,e,a,"//"==b)}function gc(a){for(var b=[];"["==A(a.a);){B(a.a);T(a,"Missing predicate expression.");var c=Yb(a);b.push(c);T(a,"Unclosed predicate expression.");$b(a,"]")}return b}function Zb(a){if("-"==A(a.a))return B(a.a),new Vb(Zb(a));var b=ec(a);if("|"!=A(a.a))a=b;else{for(b=[b];"|"==B(a.a);)T(a,"Missing next union location path."),b.push(ec(a));a.a.a--;a=new Wb(b)}return a};function hc(a){switch(a.nodeType){case 1:return fa(ic,a);case 9:return hc(a.documentElement);case 11:case 10:case 6:case 12:return jc;default:return a.parentNode?hc(a.parentNode):jc}}function jc(){return null}function ic(a,b){if(a.prefix==b)return a.namespaceURI||"http://www.w3.org/1999/xhtml";var c=a.getAttributeNode("xmlns:"+b);return c&&c.specified?c.value||null:a.parentNode&&9!=a.parentNode.nodeType?ic(a.parentNode,b):null};function kc(a,b){if(!a.length)throw Error("Empty XPath expression.");a=Qa(a);if(Ta(a))throw Error("Invalid XPath expression.");b?"function"==ba(b)||(b=ea(b.lookupNamespaceURI,b)):b=function(){return null};var c=Yb(new Xb(a,b));if(!Ta(a))throw Error("Bad token: "+B(a));this.evaluate=function(d,e){d=c.a(new ha(d));return new U(d,e)}} | ||
function U(a,b){if(0==b)if(a instanceof G)b=4;else if("string"==typeof a)b=2;else if("number"==typeof a)b=1;else if("boolean"==typeof a)b=3;else throw Error("Unexpected evaluation result.");if(2!=b&&1!=b&&3!=b&&!(a instanceof G))throw Error("value could not be converted to the specified type");this.resultType=b;switch(b){case 2:this.stringValue=a instanceof G?ob(a):""+a;break;case 1:this.numberValue=a instanceof G?+ob(a):+a;break;case 3:this.booleanValue=a instanceof G?0<a.l:!!a;break;case 4:case 5:case 6:case 7:var c= | ||
I(a);var d=[];for(var e=J(c);e;e=J(c))d.push(e instanceof Na?e.a:e);this.snapshotLength=a.l;this.invalidIteratorState=!1;break;case 8:case 9:a=nb(a);this.singleNodeValue=a instanceof Na?a.a:a;break;default:throw Error("Unknown XPathResult type.");}var f=0;this.iterateNext=function(){if(4!=b&&5!=b)throw Error("iterateNext called with wrong result type");return f>=d.length?null:d[f++]};this.snapshotItem=function(g){if(6!=b&&7!=b)throw Error("snapshotItem called with wrong result type");return g>=d.length|| | ||
0>g?null:d[g]}}U.ANY_TYPE=0;U.NUMBER_TYPE=1;U.STRING_TYPE=2;U.BOOLEAN_TYPE=3;U.UNORDERED_NODE_ITERATOR_TYPE=4;U.ORDERED_NODE_ITERATOR_TYPE=5;U.UNORDERED_NODE_SNAPSHOT_TYPE=6;U.ORDERED_NODE_SNAPSHOT_TYPE=7;U.ANY_UNORDERED_NODE_TYPE=8;U.FIRST_ORDERED_NODE_TYPE=9;function lc(a){this.lookupNamespaceURI=hc(a)} | ||
function mc(a,b){a=a||k;var c=a.Document&&a.Document.prototype||a.document;if(!c.evaluate||b)a.XPathResult=U,c.evaluate=function(d,e,f,g){return(new kc(d,f)).evaluate(e,g)},c.createExpression=function(d,e){return new kc(d,e)},c.createNSResolver=function(d){return new lc(d)}}aa("wgxpath.install",mc);aa("wgxpath.install",mc);var nc={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400", | ||
darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc", | ||
@@ -85,20 +85,19 @@ ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a", | ||
moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57", | ||
seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var pc="backgroundColor borderTopColor borderRightColor borderBottomColor borderLeftColor color outlineColor".split(" "),qc=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/,rc=/^#(?:[0-9a-f]{3}){1,2}$/i,sc=/^(?:rgba)?\((\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3}),\s?(0|1|0\.\d*)\)$/i,tc=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;function uc(a,b){this.code=a;this.a=V[a]||vc;this.message=b||"";a=this.a.replace(/((?:^|\s+)[a-z])/g,function(c){return c.toUpperCase().replace(/^[\s\xa0]+/g,"")});b=a.length-5;if(0>b||a.indexOf("Error",b)!=b)a+="Error";this.name=a;a=Error(this.message);a.name=this.name;this.stack=a.stack||""}t(uc,Error);var vc="unknown error",V={15:"element not selectable",11:"element not visible"};V[31]=vc;V[30]=vc;V[24]="invalid cookie domain";V[29]="invalid element coordinates";V[12]="invalid element state"; | ||
V[32]="invalid selector";V[51]="invalid selector";V[52]="invalid selector";V[17]="javascript error";V[405]="unsupported operation";V[34]="move target out of bounds";V[27]="no such alert";V[7]="no such element";V[8]="no such frame";V[23]="no such window";V[28]="script timeout";V[33]="session not created";V[10]="stale element reference";V[21]="timeout";V[25]="unable to set cookie";V[26]="unexpected alert open";V[13]=vc;V[9]="unknown command";var wc=ua(),xc=ya()||y("iPod"),yc=y("iPad"),zc=y("Android")&&!(va()||ua()||y("Opera")||y("Silk")),Ac=va(),Bc=y("Safari")&&!(va()||y("Coast")||y("Opera")||y("Edge")||ua()||y("Silk")||y("Android"))&&!(ya()||y("iPad")||y("iPod"));function Cc(a){return(a=a.exec(v))?a[1]:""}(function(){if(wc)return Cc(/Firefox\/([0-9.]+)/);if(z||Ca||Ba)return Ga;if(Ac)return ya()||y("iPad")||y("iPod")?Cc(/CriOS\/([0-9.]+)/):Cc(/Chrome\/([0-9.]+)/);if(Bc&&!(ya()||y("iPad")||y("iPod")))return Cc(/Version\/([0-9.]+)/);if(xc||yc){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(v);if(a)return a[1]+"."+a[2]}else if(zc)return(a=Cc(/Android\s+([0-9.]+)/))?a:Cc(/Version\/([0-9.]+)/);return""})();var Dc,Ec=function(){if(!Da)return!1;var a=k.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(e){return!1}var b=a.classes;a=a.interfaces;var c=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator),d=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo).version;Dc=function(e){c.compare(d,""+e)};return!0}(),Fc=z&&!(9<=Number(La));zc&&Ec&&Dc(2.3);zc&&Ec&&Dc(4);Bc&&Ec&&Dc(6);function W(a,b){b&&"string"!==typeof b&&(b=b.toString());return!!a&&1==a.nodeType&&(!b||a.tagName.toUpperCase()==b)};var Gc=function(){var a={J:"http://www.w3.org/2000/svg"};return function(b){return a[b]||null}}(); | ||
function Hc(a,b){var c=D(a);if(!c.documentElement)return null;(z||zc)&&nc(c?c.parentWindow||c.defaultView:window);try{var d=c.createNSResolver?c.createNSResolver(c.documentElement):Gc;if(z&&!Ka(7))return c.evaluate.call(c,b,a,d,9,null);if(!z||9<=Number(La)){for(var e={},f=c.getElementsByTagName("*"),g=0;g<f.length;++g){var h=f[g],m=h.namespaceURI;if(m&&!e[m]){var w=h.lookupPrefix(m);if(!w){var r=m.match(".*/(\\w+)/?$");w=r?r[1]:"xhtml"}e[m]=w}}var x={},F;for(F in e)x[e[F]]=F;d=function(G){return x[G]|| | ||
null}}try{return c.evaluate(b,a,d,9,null)}catch(G){if("TypeError"===G.name)return d=c.createNSResolver?c.createNSResolver(c.documentElement):Gc,c.evaluate(b,a,d,9,null);throw G;}}catch(G){if(!Da||"NS_ERROR_ILLEGAL_VALUE"!=G.name)throw new uc(32,"Unable to locate an element with the xpath expression "+b+" because of the following error:\n"+G);}} | ||
function Ic(a,b){var c=function(){var d=Hc(b,a);return d?d.singleNodeValue||null:b.selectSingleNode?(d=D(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectSingleNode(a)):null}();if(null!==c&&(!c||1!=c.nodeType))throw new uc(32,'The result of the xpath expression "'+a+'" is: '+c+". It should be an element.");return c};function Jc(a,b,c,d){this.c=a;this.a=b;this.b=c;this.f=d}Jc.prototype.ceil=function(){this.c=Math.ceil(this.c);this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.f=Math.ceil(this.f);return this};Jc.prototype.floor=function(){this.c=Math.floor(this.c);this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.f=Math.floor(this.f);return this};Jc.prototype.round=function(){this.c=Math.round(this.c);this.a=Math.round(this.a);this.b=Math.round(this.b);this.f=Math.round(this.f);return this};function X(a,b,c,d){this.a=a;this.b=b;this.width=c;this.height=d}X.prototype.ceil=function(){this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};X.prototype.floor=function(){this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this}; | ||
X.prototype.round=function(){this.a=Math.round(this.a);this.b=Math.round(this.b);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Kc="function"===typeof ShadowRoot;function Lc(a){for(a=a.parentNode;a&&1!=a.nodeType&&9!=a.nodeType&&11!=a.nodeType;)a=a.parentNode;return W(a)?a:null} | ||
function Y(a,b){b=wa(b);if("float"==b||"cssFloat"==b||"styleFloat"==b)b=Fc?"styleFloat":"cssFloat";a:{var c=b;var d=D(a);if(d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(a,null))){c=d[c]||d.getPropertyValue(c)||"";break a}c=""}a=c||Mc(a,b);if(null===a)a=null;else if(0<=ia(pc,b)){b:{var e=a.match(sc);if(e&&(b=Number(e[1]),c=Number(e[2]),d=Number(e[3]),e=Number(e[4]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d&&0<=e&&1>=e)){b=[b,c,d,e];break b}b=null}if(!b)b:{if(d=a.match(tc))if(b= | ||
Number(d[1]),c=Number(d[2]),d=Number(d[3]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d){b=[b,c,d,1];break b}b=null}if(!b)b:{b=a.toLowerCase();c=oc[b.toLowerCase()];if(!c&&(c="#"==b.charAt(0)?b:"#"+b,4==c.length&&(c=c.replace(qc,"#$1$1$2$2$3$3")),!rc.test(c))){b=null;break b}b=[parseInt(c.substr(1,2),16),parseInt(c.substr(3,2),16),parseInt(c.substr(5,2),16),1]}a=b?"rgba("+b.join(", ")+")":a}return a} | ||
function Mc(a,b){var c=a.currentStyle||a.style,d=c[b];!l(d)&&"function"==ba(c.getPropertyValue)&&(d=c.getPropertyValue(b));return"inherit"!=d?l(d)?d:null:(a=Lc(a))?Mc(a,b):null} | ||
function Nc(a,b,c){function d(g){var h=Oc(g);return 0<h.height&&0<h.width?!0:W(g,"PATH")&&(0<h.height||0<h.width)?(g=Y(g,"stroke-width"),!!g&&0<parseInt(g,10)):"hidden"!=Y(g,"overflow")&&la(g.childNodes,function(m){return 3==m.nodeType||W(m)&&d(m)})}function e(g){return Pc(g)==Z&&ma(g.childNodes,function(h){return!W(h)||e(h)||!d(h)})}if(!W(a))throw Error("Argument to isShown must be of type Element");if(W(a,"BODY"))return!0;var f=Lc(a);if(f&&W(f,"DETAILS")&&!f.open&&!W(a,"SUMMARY"))return!1;if(W(a, | ||
"OPTION")||W(a,"OPTGROUP"))return a=ab(a,function(g){return W(g,"SELECT")}),!!a&&Nc(a,!0,c);if(f=Qc(a))return!!f.image&&0<f.rect.width&&0<f.rect.height&&Nc(f.image,b,c);if(W(a,"INPUT")&&"hidden"==a.type.toLowerCase()||W(a,"NOSCRIPT"))return!1;f=Y(a,"visibility");return"collapse"!=f&&"hidden"!=f&&c(a)&&(b||0!=Rc(a))&&d(a)?!e(a):!1}var Z="hidden"; | ||
function Pc(a){function b(p){function q(kb){if(kb==g)return!0;var bc=Y(kb,"display");return 0==bc.lastIndexOf("inline",0)||"contents"==bc||"absolute"==cc&&"static"==Y(kb,"position")?!1:!0}var cc=Y(p,"position");if("fixed"==cc)return w=!0,p==g?null:g;for(p=Lc(p);p&&!q(p);)p=Lc(p);return p}function c(p){var q=p;if("visible"==m)if(p==g&&h)q=h;else if(p==h)return{x:"visible",y:"visible"};q={x:Y(q,"overflow-x"),y:Y(q,"overflow-y")};p==g&&(q.x="visible"==q.x?"auto":q.x,q.y="visible"==q.y?"auto":q.y);return q} | ||
function d(p){if(p==g){var q=(new bb(f)).a;p=q.scrollingElement?q.scrollingElement:Ea||"CSS1Compat"!=q.compatMode?q.body||q.documentElement:q.documentElement;q=q.parentWindow||q.defaultView;p=z&&Ka("10")&&q.pageYOffset!=p.scrollTop?new Va(p.scrollLeft,p.scrollTop):new Va(q.pageXOffset||p.scrollLeft,q.pageYOffset||p.scrollTop)}else p=new Va(p.scrollLeft,p.scrollTop);return p}var e=Sc(a),f=D(a),g=f.documentElement,h=f.body,m=Y(g,"overflow"),w;for(a=b(a);a;a=b(a)){var r=c(a);if("visible"!=r.x||"visible"!= | ||
r.y){var x=Oc(a);if(0==x.width||0==x.height)return Z;if(z){var F=xa(Y(a,"width")),G=xa(Y(a,"height"));if(F!=x.width||G!=x.height)x=new X(x.a,x.b,F,G)}F=e.a<x.a;G=e.b<x.b;if(F&&"hidden"==r.x||G&&"hidden"==r.y)return Z;if(F&&"visible"!=r.x||G&&"visible"!=r.y){F=d(a);G=e.b<x.b-F.y;if(e.a<x.a-F.x&&"visible"!=r.x||G&&"visible"!=r.x)return Z;e=Pc(a);return e==Z?Z:"scroll"}F=e.f>=x.a+x.width;x=e.c>=x.b+x.height;if(F&&"hidden"==r.x||x&&"hidden"==r.y)return Z;if(F&&"visible"!=r.x||x&&"visible"!=r.y){if(w&& | ||
(r=d(a),e.f>=g.scrollWidth-r.x||e.a>=g.scrollHeight-r.y))return Z;e=Pc(a);return e==Z?Z:"scroll"}}}return"none"} | ||
function Oc(a){var b=Qc(a);if(b)return b.rect;if(W(a,"HTML"))return a=D(a),a=((a?a.parentWindow||a.defaultView:window)||window).document,a="CSS1Compat"==a.compatMode?a.documentElement:a.body,a=new Wa(a.clientWidth,a.clientHeight),new X(0,0,a.width,a.height);try{var c=a.getBoundingClientRect()}catch(d){return new X(0,0,0,0)}b=new X(c.left,c.top,c.right-c.left,c.bottom-c.top);z&&a.ownerDocument.body&&(a=D(a),b.a-=a.documentElement.clientLeft+a.body.clientLeft,b.b-=a.documentElement.clientTop+a.body.clientTop); | ||
return b}function Qc(a){var b=W(a,"MAP");if(!b&&!W(a,"AREA"))return null;var c=b?a:W(a.parentNode,"MAP")?a.parentNode:null,d=null,e=null;c&&c.name&&(d=Ic('/descendant::*[@usemap = "#'+c.name+'"]',D(c)))&&(e=Oc(d),b||"default"==a.shape.toLowerCase()||(a=Tc(a),b=Math.min(Math.max(a.a,0),e.width),c=Math.min(Math.max(a.b,0),e.height),e=new X(b+e.a,c+e.b,Math.min(a.width,e.width-b),Math.min(a.height,e.height-c))));return{image:d,rect:e||new X(0,0,0,0)}} | ||
function Tc(a){var b=a.shape.toLowerCase();a=a.coords.split(",");if("rect"==b&&4==a.length){b=a[0];var c=a[1];return new X(b,c,a[2]-b,a[3]-c)}if("circle"==b&&3==a.length)return b=a[2],new X(a[0]-b,a[1]-b,2*b,2*b);if("poly"==b&&2<a.length){b=a[0];c=a[1];for(var d=b,e=c,f=2;f+1<a.length;f+=2)b=Math.min(b,a[f]),d=Math.max(d,a[f]),c=Math.min(c,a[f+1]),e=Math.max(e,a[f+1]);return new X(b,c,d-b,e-c)}return new X(0,0,0,0)}function Sc(a){a=Oc(a);return new Jc(a.b,a.a+a.width,a.b+a.height,a.a)} | ||
function Rc(a){if(Fc){if("relative"==Y(a,"position"))return 1;a=Y(a,"filter");return(a=a.match(/^alpha\(opacity=(\d*)\)/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\(Opacity=(\d*)\)/))?Number(a[1])/100:1}return Uc(a)}function Uc(a){var b=1,c=Y(a,"opacity");c&&(b=Number(c));(a=Lc(a))&&(b*=Uc(a));return b};aa("_",function(a,b){function c(d){if(W(d)&&"none"==Y(d,"display"))return!1;var e;(e=d.parentNode)&&e.shadowRoot&&void 0!==d.assignedSlot?e=d.assignedSlot?d.assignedSlot.parentNode:null:d.getDestinationInsertionPoints&&(d=d.getDestinationInsertionPoints(),0<d.length&&(e=d[d.length-1]));if(Kc&&e instanceof ShadowRoot){if(e.host.shadowRoot!==e)return!1;e=e.host}return!e||9!=e.nodeType&&11!=e.nodeType?e&&c(e):!0}return Nc(a,!!b,c)});; return this._.apply(null,arguments);}).apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}; | ||
seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};var oc="backgroundColor borderTopColor borderRightColor borderBottomColor borderLeftColor color outlineColor".split(" "),pc=/#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/,qc=/^#(?:[0-9a-f]{3}){1,2}$/i,rc=/^(?:rgba)?\((\d{1,3}),\s?(\d{1,3}),\s?(\d{1,3}),\s?(0|1|0\.\d*)\)$/i,sc=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;function tc(a,b){this.code=a;this.a=V[a]||uc;this.message=b||"";a=this.a.replace(/((?:^|\s+)[a-z])/g,function(c){return c.toUpperCase().replace(/^[\s\xa0]+/g,"")});b=a.length-5;if(0>b||a.indexOf("Error",b)!=b)a+="Error";this.name=a;a=Error(this.message);a.name=this.name;this.stack=a.stack||""}t(tc,Error);var uc="unknown error",V={15:"element not selectable",11:"element not visible"};V[31]=uc;V[30]=uc;V[24]="invalid cookie domain";V[29]="invalid element coordinates";V[12]="invalid element state"; | ||
V[32]="invalid selector";V[51]="invalid selector";V[52]="invalid selector";V[17]="javascript error";V[405]="unsupported operation";V[34]="move target out of bounds";V[27]="no such alert";V[7]="no such element";V[8]="no such frame";V[23]="no such window";V[28]="script timeout";V[33]="session not created";V[10]="stale element reference";V[21]="timeout";V[25]="unable to set cookie";V[26]="unexpected alert open";V[13]=uc;V[9]="unknown command";var vc=ua(),wc=xa()||x("iPod"),xc=x("iPad"),yc=x("Android")&&!(va()||ua()||x("Opera")||x("Silk")),zc=va(),Ac=x("Safari")&&!(va()||x("Coast")||x("Opera")||x("Edge")||ua()||x("Silk")||x("Android"))&&!(xa()||x("iPad")||x("iPod"));function Bc(a){return(a=a.exec(v))?a[1]:""}(function(){if(vc)return Bc(/Firefox\/([0-9.]+)/);if(y||Ba||Aa)return Fa;if(zc)return xa()||x("iPad")||x("iPod")?Bc(/CriOS\/([0-9.]+)/):Bc(/Chrome\/([0-9.]+)/);if(Ac&&!(xa()||x("iPad")||x("iPod")))return Bc(/Version\/([0-9.]+)/);if(wc||xc){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(v);if(a)return a[1]+"."+a[2]}else if(yc)return(a=Bc(/Android\s+([0-9.]+)/))?a:Bc(/Version\/([0-9.]+)/);return""})();var Cc,Dc=function(){if(!Ca)return!1;var a=k.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(e){return!1}var b=a.classes;a=a.interfaces;var c=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator),d=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo).version;Cc=function(e){c.compare(d,""+e)};return!0}(),Ec=y&&!(9<=Number(Ka));yc&&Dc&&Cc(2.3);yc&&Dc&&Cc(4);Ac&&Dc&&Cc(6);function W(a,b){b&&"string"!==typeof b&&(b=b.toString());return!!a&&1==a.nodeType&&(!b||a.tagName.toUpperCase()==b)};var Fc=function(){var a={J:"http://www.w3.org/2000/svg"};return function(b){return a[b]||null}}(); | ||
function Gc(a,b){var c=C(a);if(!c.documentElement)return null;(y||yc)&&mc(c?c.parentWindow||c.defaultView:window);try{var d=c.createNSResolver?c.createNSResolver(c.documentElement):Fc;if(y&&!Ja(7))return c.evaluate.call(c,b,a,d,9,null);if(!y||9<=Number(Ka)){for(var e={},f=c.getElementsByTagName("*"),g=0;g<f.length;++g){var h=f[g],m=h.namespaceURI;if(m&&!e[m]){var w=h.lookupPrefix(m);if(!w){var r=m.match(".*/(\\w+)/?$");w=r?r[1]:"xhtml"}e[m]=w}}var D={},M;for(M in e)D[e[M]]=M;d=function(N){return D[N]|| | ||
null}}try{return c.evaluate(b,a,d,9,null)}catch(N){if("TypeError"===N.name)return d=c.createNSResolver?c.createNSResolver(c.documentElement):Fc,c.evaluate(b,a,d,9,null);throw N;}}catch(N){if(!Ca||"NS_ERROR_ILLEGAL_VALUE"!=N.name)throw new tc(32,"Unable to locate an element with the xpath expression "+b+" because of the following error:\n"+N);}} | ||
function Hc(a,b){var c=function(){var d=Gc(b,a);return d?d.singleNodeValue||null:b.selectSingleNode?(d=C(b),d.setProperty&&d.setProperty("SelectionLanguage","XPath"),b.selectSingleNode(a)):null}();if(null!==c&&(!c||1!=c.nodeType))throw new tc(32,'The result of the xpath expression "'+a+'" is: '+c+". It should be an element.");return c};function Ic(a,b,c,d){this.c=a;this.a=b;this.b=c;this.f=d}Ic.prototype.ceil=function(){this.c=Math.ceil(this.c);this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.f=Math.ceil(this.f);return this};Ic.prototype.floor=function(){this.c=Math.floor(this.c);this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.f=Math.floor(this.f);return this};Ic.prototype.round=function(){this.c=Math.round(this.c);this.a=Math.round(this.a);this.b=Math.round(this.b);this.f=Math.round(this.f);return this};function X(a,b,c,d){this.a=a;this.b=b;this.width=c;this.height=d}X.prototype.ceil=function(){this.a=Math.ceil(this.a);this.b=Math.ceil(this.b);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};X.prototype.floor=function(){this.a=Math.floor(this.a);this.b=Math.floor(this.b);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this}; | ||
X.prototype.round=function(){this.a=Math.round(this.a);this.b=Math.round(this.b);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};var Jc="function"===typeof ShadowRoot;function Kc(a){for(a=a.parentNode;a&&1!=a.nodeType&&9!=a.nodeType&&11!=a.nodeType;)a=a.parentNode;return W(a)?a:null} | ||
function Y(a,b){b=wa(b);if("float"==b||"cssFloat"==b||"styleFloat"==b)b=Ec?"styleFloat":"cssFloat";a:{var c=b;var d=C(a);if(d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(a,null))){c=d[c]||d.getPropertyValue(c)||"";break a}c=""}a=c||Lc(a,b);if(null===a)a=null;else if(0<=ia(oc,b)){b:{var e=a.match(rc);if(e&&(b=Number(e[1]),c=Number(e[2]),d=Number(e[3]),e=Number(e[4]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d&&0<=e&&1>=e)){b=[b,c,d,e];break b}b=null}if(!b)b:{if(d=a.match(sc))if(b= | ||
Number(d[1]),c=Number(d[2]),d=Number(d[3]),0<=b&&255>=b&&0<=c&&255>=c&&0<=d&&255>=d){b=[b,c,d,1];break b}b=null}if(!b)b:{b=a.toLowerCase();c=nc[b.toLowerCase()];if(!c&&(c="#"==b.charAt(0)?b:"#"+b,4==c.length&&(c=c.replace(pc,"#$1$1$2$2$3$3")),!qc.test(c))){b=null;break b}b=[parseInt(c.substr(1,2),16),parseInt(c.substr(3,2),16),parseInt(c.substr(5,2),16),1]}a=b?"rgba("+b.join(", ")+")":a}return a} | ||
function Lc(a,b){var c=a.currentStyle||a.style,d=c[b];!l(d)&&"function"==ba(c.getPropertyValue)&&(d=c.getPropertyValue(b));return"inherit"!=d?l(d)?d:null:(a=Kc(a))?Lc(a,b):null} | ||
function Mc(a,b,c){function d(g){var h=Nc(g);return 0<h.height&&0<h.width?!0:W(g,"PATH")&&(0<h.height||0<h.width)?(g=Y(g,"stroke-width"),!!g&&0<parseInt(g,10)):"hidden"!=Y(g,"overflow")&&la(g.childNodes,function(m){return 3==m.nodeType||W(m)&&d(m)})}function e(g){return Oc(g)==Z&&ma(g.childNodes,function(h){return!W(h)||e(h)||!d(h)})}if(!W(a))throw Error("Argument to isShown must be of type Element");if(W(a,"BODY"))return!0;if(W(a,"OPTION")||W(a,"OPTGROUP"))return a=$a(a,function(g){return W(g,"SELECT")}), | ||
!!a&&Mc(a,!0,c);var f=Pc(a);if(f)return!!f.image&&0<f.rect.width&&0<f.rect.height&&Mc(f.image,b,c);if(W(a,"INPUT")&&"hidden"==a.type.toLowerCase()||W(a,"NOSCRIPT"))return!1;f=Y(a,"visibility");return"collapse"!=f&&"hidden"!=f&&c(a)&&(b||0!=Qc(a))&&d(a)?!e(a):!1}var Z="hidden"; | ||
function Oc(a){function b(p){function q(kb){if(kb==g)return!0;var ac=Y(kb,"display");return 0==ac.lastIndexOf("inline",0)||"contents"==ac||"absolute"==bc&&"static"==Y(kb,"position")?!1:!0}var bc=Y(p,"position");if("fixed"==bc)return w=!0,p==g?null:g;for(p=Kc(p);p&&!q(p);)p=Kc(p);return p}function c(p){var q=p;if("visible"==m)if(p==g&&h)q=h;else if(p==h)return{x:"visible",y:"visible"};q={x:Y(q,"overflow-x"),y:Y(q,"overflow-y")};p==g&&(q.x="visible"==q.x?"auto":q.x,q.y="visible"==q.y?"auto":q.y);return q} | ||
function d(p){if(p==g){var q=(new ab(f)).a;p=q.scrollingElement?q.scrollingElement:Da||"CSS1Compat"!=q.compatMode?q.body||q.documentElement:q.documentElement;q=q.parentWindow||q.defaultView;p=y&&Ja("10")&&q.pageYOffset!=p.scrollTop?new Ua(p.scrollLeft,p.scrollTop):new Ua(q.pageXOffset||p.scrollLeft,q.pageYOffset||p.scrollTop)}else p=new Ua(p.scrollLeft,p.scrollTop);return p}var e=Rc(a),f=C(a),g=f.documentElement,h=f.body,m=Y(g,"overflow"),w;for(a=b(a);a;a=b(a)){var r=c(a);if("visible"!=r.x||"visible"!= | ||
r.y){var D=Nc(a);if(0==D.width||0==D.height)return Z;var M=e.a<D.a,N=e.b<D.b;if(M&&"hidden"==r.x||N&&"hidden"==r.y)return Z;if(M&&"visible"!=r.x||N&&"visible"!=r.y){M=d(a);N=e.b<D.b-M.y;if(e.a<D.a-M.x&&"visible"!=r.x||N&&"visible"!=r.x)return Z;e=Oc(a);return e==Z?Z:"scroll"}M=e.f>=D.a+D.width;D=e.c>=D.b+D.height;if(M&&"hidden"==r.x||D&&"hidden"==r.y)return Z;if(M&&"visible"!=r.x||D&&"visible"!=r.y){if(w&&(r=d(a),e.f>=g.scrollWidth-r.x||e.a>=g.scrollHeight-r.y))return Z;e=Oc(a);return e==Z?Z:"scroll"}}}return"none"} | ||
function Nc(a){var b=Pc(a);if(b)return b.rect;if(W(a,"HTML"))return a=C(a),a=((a?a.parentWindow||a.defaultView:window)||window).document,a="CSS1Compat"==a.compatMode?a.documentElement:a.body,a=new Va(a.clientWidth,a.clientHeight),new X(0,0,a.width,a.height);try{var c=a.getBoundingClientRect()}catch(d){return new X(0,0,0,0)}b=new X(c.left,c.top,c.right-c.left,c.bottom-c.top);y&&a.ownerDocument.body&&(a=C(a),b.a-=a.documentElement.clientLeft+a.body.clientLeft,b.b-=a.documentElement.clientTop+a.body.clientTop); | ||
return b}function Pc(a){var b=W(a,"MAP");if(!b&&!W(a,"AREA"))return null;var c=b?a:W(a.parentNode,"MAP")?a.parentNode:null,d=null,e=null;c&&c.name&&(d=Hc('/descendant::*[@usemap = "#'+c.name+'"]',C(c)))&&(e=Nc(d),b||"default"==a.shape.toLowerCase()||(a=Sc(a),b=Math.min(Math.max(a.a,0),e.width),c=Math.min(Math.max(a.b,0),e.height),e=new X(b+e.a,c+e.b,Math.min(a.width,e.width-b),Math.min(a.height,e.height-c))));return{image:d,rect:e||new X(0,0,0,0)}} | ||
function Sc(a){var b=a.shape.toLowerCase();a=a.coords.split(",");if("rect"==b&&4==a.length){b=a[0];var c=a[1];return new X(b,c,a[2]-b,a[3]-c)}if("circle"==b&&3==a.length)return b=a[2],new X(a[0]-b,a[1]-b,2*b,2*b);if("poly"==b&&2<a.length){b=a[0];c=a[1];for(var d=b,e=c,f=2;f+1<a.length;f+=2)b=Math.min(b,a[f]),d=Math.max(d,a[f]),c=Math.min(c,a[f+1]),e=Math.max(e,a[f+1]);return new X(b,c,d-b,e-c)}return new X(0,0,0,0)}function Rc(a){a=Nc(a);return new Ic(a.b,a.a+a.width,a.b+a.height,a.a)} | ||
function Qc(a){if(Ec){if("relative"==Y(a,"position"))return 1;a=Y(a,"filter");return(a=a.match(/^alpha\(opacity=(\d*)\)/)||a.match(/^progid:DXImageTransform.Microsoft.Alpha\(Opacity=(\d*)\)/))?Number(a[1])/100:1}return Tc(a)}function Tc(a){var b=1,c=Y(a,"opacity");c&&(b=Number(c));(a=Kc(a))&&(b*=Tc(a));return b};aa("_",function(a,b){function c(d){if(W(d)&&"none"==Y(d,"display"))return!1;var e;if((e=d.parentNode)&&e.shadowRoot&&void 0!==d.assignedSlot)e=d.assignedSlot?d.assignedSlot.parentNode:null;else if(d.getDestinationInsertionPoints){var f=d.getDestinationInsertionPoints();0<f.length&&(e=f[f.length-1])}if(Jc&&e instanceof ShadowRoot){if(e.host.shadowRoot!==e)return!1;e=e.host}return!e||9!=e.nodeType&&11!=e.nodeType?e&&W(e,"DETAILS")&&!e.open&&!W(d,"SUMMARY")?!1:e&&c(e):!0}return Mc(a,!!b,c)});; return this._.apply(null,arguments);}).apply({navigator:typeof window!='undefined'?window.navigator:null,document:typeof window!='undefined'?window.document:null}, arguments);}; |
@@ -94,3 +94,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
/** | ||
* Defines when, in milliseconds, to interupt a script that is being | ||
* Defines when, in milliseconds, to interrupt a script that is being | ||
* {@linkplain ./webdriver.IWebDriver#executeScript evaluated}. | ||
@@ -109,3 +109,3 @@ * @type {number} | ||
/** | ||
* The maximimum amount of time, in milliseconds, to spend attempting to | ||
* The maximum amount of time, in milliseconds, to spend attempting to | ||
* {@linkplain ./webdriver.IWebDriver#findElement locate} an element on the | ||
@@ -154,3 +154,3 @@ * current page. | ||
/** | ||
* Indicates whether a WebDriver session implicity trusts otherwise untrusted | ||
* Indicates whether a WebDriver session implicitly trusts otherwise untrusted | ||
* and self-signed TLS certificates during navigation. | ||
@@ -218,2 +218,8 @@ */ | ||
UNHANDLED_PROMPT_BEHAVIOR: 'unhandledPromptBehavior', | ||
/** | ||
* Defines the current session’s strict file interactability. | ||
* Used to upload a file when strict file interactability is on | ||
*/ | ||
STRICT_FILE_INTERACTABILITY: 'strictFileInteractability', | ||
}; | ||
@@ -519,2 +525,9 @@ | ||
} | ||
/** | ||
* Sets the boolean flag configuration for this instance. | ||
*/ | ||
setStrictFileInteractability(strictFileInteractability) { | ||
return this.set(Capability.STRICT_FILE_INTERACTABILITY, strictFileInteractability); | ||
} | ||
} | ||
@@ -521,0 +534,0 @@ |
@@ -153,2 +153,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
GET_ELEMENT_VALUE_OF_CSS_PROPERTY: 'getElementValueOfCssProperty', | ||
GET_ELEMENT_PROPERTY: 'getElementProperty', | ||
@@ -155,0 +156,0 @@ SCREENSHOT: 'screenshot', |
@@ -36,6 +36,6 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
const getAttribute = requireAtom( | ||
'./atoms/get-attribute.js', | ||
'get-attribute.js', | ||
'//javascript/node/selenium-webdriver/lib/atoms:get-attribute.js'); | ||
const isDisplayed = requireAtom( | ||
'./atoms/is-displayed.js', | ||
'is-displayed.js', | ||
'//javascript/node/selenium-webdriver/lib/atoms:is-displayed.js'); | ||
@@ -50,3 +50,3 @@ | ||
try { | ||
return require(module); | ||
return require('./atoms/' + module); | ||
} catch (ex) { | ||
@@ -226,2 +226,3 @@ try { | ||
[cmd.Name.GET_ELEMENT_ATTRIBUTE, get('/session/:sessionId/element/:id/attribute/:name')], | ||
[cmd.Name.GET_ELEMENT_PROPERTY, get('/session/:sessionId/element/:id/property/:name')], | ||
[cmd.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY, get('/session/:sessionId/element/:id/css/:propertyName')], | ||
@@ -315,2 +316,3 @@ [cmd.Name.TAKE_ELEMENT_SCREENSHOT, get('/session/:sessionId/element/:id/screenshot')], | ||
[cmd.Name.GET_ELEMENT_TAG_NAME, get('/session/:sessionId/element/:id/name')], | ||
[cmd.Name.GET_ELEMENT_PROPERTY, get('/session/:sessionId/element/:id/property/:name')], | ||
[cmd.Name.GET_ELEMENT_VALUE_OF_CSS_PROPERTY, get('/session/:sessionId/element/:id/css/:propertyName')], | ||
@@ -317,0 +319,0 @@ [cmd.Name.GET_ELEMENT_RECT, get('/session/:sessionId/element/:id/rect')], |
@@ -155,3 +155,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
* running against a remote | ||
* [Selenium Server](http://docs.seleniumhq.org/download/). | ||
* [Selenium Server](https://selenium.dev/downloads/). | ||
*/ | ||
@@ -482,3 +482,3 @@ class FileDetector { | ||
* execute the actions for every device in that tick. Most actions are | ||
* "instaneous", however, {@linkplain #pause pause} and | ||
* "instantaneous", however, {@linkplain #pause pause} and | ||
* {@linkplain #move pointer move} actions allow you to specify a duration for | ||
@@ -500,3 +500,3 @@ * how long that action should take. The remote end will always wait for all | ||
* the keyboard only defines a pause of 100 ms, the remote end will wait an | ||
* additional 200 ms for the mouse mmove to finish before moving to Tick 2. | ||
* additional 200 ms for the mouse move to finish before moving to Tick 2. | ||
* | ||
@@ -560,3 +560,3 @@ * | Device | Tick 1 | Tick 2 | | ||
* 6. For W3C actions, move offsets relative to a | ||
* {@linkplain ./webdriver.WebElement WebElement} are interpretted relative | ||
* {@linkplain ./webdriver.WebElement WebElement} are interpreted relative | ||
* to the center of an element's _first_ [client rect] in the viewport. For | ||
@@ -567,3 +567,3 @@ * legacy actions, element offsets are relative to the top-left corner of | ||
* translate move offsets from one frame of reference to the other. This | ||
* extra command conributes to the overall latency issue outlined in | ||
* extra command contributes to the overall latency issue outlined in | ||
* point 1. | ||
@@ -700,3 +700,3 @@ * | ||
* | ||
* When device synchroniation is enabled (the default for new {@link Actions} | ||
* When device synchronization is enabled (the default for new {@link Actions} | ||
* objects), there is no need to specify devices as pausing one automatically | ||
@@ -703,0 +703,0 @@ * pauses the others for the same duration. In other words, the following are |
@@ -59,3 +59,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
* Chrome exposes robust | ||
* [performance logging](https://sites.google.com/a/chromium.org/chromedriver/logging) | ||
* [performance logging](https://chromedriver.chromium.org/logging) | ||
* options. Remote logging is still considered a non-standard feature, and the | ||
@@ -62,0 +62,0 @@ * APIs exposed by this module for it are non-frozen. This module will be |
@@ -152,3 +152,3 @@ // Licensed to the Software Freedom Conservancy (SFC) under one | ||
let server = net.createServer().on('error', function(e) { | ||
if (e.code === 'EADDRINUSE') { | ||
if (e.code === 'EADDRINUSE' || e.code === 'EACCES') { | ||
resolve(false); | ||
@@ -155,0 +155,0 @@ } else { |
{ | ||
"name": "selenium-webdriver", | ||
"version": "4.0.0-alpha.5", | ||
"version": "4.0.0-alpha.6", | ||
"description": "The official WebDriver JavaScript bindings from the Selenium project", | ||
@@ -26,14 +26,13 @@ "license": "Apache-2.0", | ||
"dependencies": { | ||
"jszip": "^3.1.5", | ||
"rimraf": "^2.6.3", | ||
"tmp": "0.0.30", | ||
"xml2js": "^0.4.19" | ||
"jszip": "^3.2.2", | ||
"rimraf": "^2.7.1", | ||
"tmp": "0.0.30" | ||
}, | ||
"devDependencies": { | ||
"express": "^4.16.4", | ||
"jasmine": "^3.3.1", | ||
"express": "^4.17.1", | ||
"jasmine": "^3.5.0", | ||
"mocha": "^5.2.0", | ||
"multer": "^1.4.1", | ||
"multer": "^1.4.2", | ||
"serve-index": "^1.9.1", | ||
"sinon": "^7.2.3" | ||
"sinon": "^7.5.0" | ||
}, | ||
@@ -40,0 +39,0 @@ "scripts": { |
@@ -120,3 +120,3 @@ # selenium-webdriver | ||
- the [selenium-users@googlegroups.com][users] list | ||
- [SeleniumHQ](http://www.seleniumhq.org/docs/) documentation | ||
- [SeleniumHQ](https://selenium.dev/documentation/) documentation | ||
@@ -126,4 +126,3 @@ ## Contributing | ||
Contributions are accepted either through [GitHub][gh] pull requests or patches | ||
via the [Selenium issue tracker][issues]. You must sign our | ||
[Contributor License Agreement][cla] before your changes will be accepted. | ||
via the [Selenium issue tracker][issues]. | ||
@@ -222,3 +221,2 @@ ## Node Support Policy | ||
[api]: http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/ | ||
[cla]: http://goo.gl/qC50R | ||
[chrome]: http://chromedriver.storage.googleapis.com/index.html | ||
@@ -225,0 +223,0 @@ [gh]: https://github.com/SeleniumHQ/selenium/ |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Unidentified License
License(Experimental) Something that seems like a license was found, but its contents could not be matched with a known license.
Found 1 instance in 1 package
3
0
100
23
5
573557
37
12875
228
- Removedxml2js@^0.4.19
- Removedsax@1.4.1(transitive)
- Removedxml2js@0.4.23(transitive)
- Removedxmlbuilder@11.0.1(transitive)
Updatedjszip@^3.2.2
Updatedrimraf@^2.7.1