jsdom_patches.js.map
13.6 KB
{"version":3,"sources":["dom/jsdom_patches.js"],"names":[],"mappings":"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","file":"jsdom_patches.js","sourcesContent":["// Fix things that JSDOM doesn't do quite right.\n\n\nconst DOM = require('./index');\nconst Fetch = require('../fetch');\nconst resourceLoader = require('jsdom/lib/jsdom/browser/resource-loader');\nconst Utils = require('jsdom/lib/jsdom/utils');\nconst URL = require('url');\nconst createHTMLCollection = require('jsdom/lib/jsdom/living/html-collection').create;\n\n\nDOM.HTMLDocument.prototype.__defineGetter__('scripts', function() {\n return createHTMLCollection(this, ()=> this.querySelectorAll('script'));\n});\n\n\n// Default behavior for clicking on links: navigate to new URL if specified.\nDOM.HTMLAnchorElement.prototype._eventDefaults =\n Object.assign({}, DOM.HTMLElement.prototype._eventDefaults);\nDOM.HTMLAnchorElement.prototype._eventDefaults.click = function(event) {\n const anchor = event.target;\n if (!anchor.href)\n return;\n\n const window = anchor.ownerDocument.defaultView;\n const { browser } = window;\n // Decide which window to open this link in\n switch (anchor.target || '_self') {\n case '_self': { // navigate same window\n window.location = anchor.href;\n break;\n }\n case '_parent': { // navigate parent window\n window.parent.location = anchor.href;\n break;\n }\n case '_top': { // navigate top window\n window.top.location = anchor.href;\n break;\n }\n default: { // open named window\n browser.tabs.open({ name: anchor.target, url: anchor.href });\n break;\n }\n }\n browser.emit('link', anchor.href, anchor.target || '_self');\n};\n\n\n// Attempt to load the image, this will trigger a 'load' event when succesful\n// jsdom seemed to only queue the 'load' event\nDOM.HTMLImageElement.prototype._attrModified = function(name, value, oldVal) {\n if (name === 'src' && value && value !== oldVal)\n resourceLoader.load(this, value);\n DOM.HTMLElement.prototype._attrModified.call(this, name, value, oldVal);\n};\n\n// Implement getClientRects\nDOM.HTMLElement.prototype.getClientRects = function () {\n const style = this.style;\n\n if (style && style.display === 'none') {\n return [];\n }\n\n return [{\n bottom: 0,\n height: 0,\n left: 0,\n right: 0,\n top: 0,\n width: 0\n }];\n};\n\nObject.defineProperty(DOM.HTMLElement.prototype, 'offsetHeight', {\n get: function () {\n return 0;\n }\n});\n\nObject.defineProperty(DOM.HTMLElement.prototype, 'offsetWidth', {\n get: function () {\n return 0;\n }\n});\n\n\n// Implement insertAdjacentHTML\nDOM.HTMLElement.prototype.insertAdjacentHTML = function(position, html) {\n const { parentNode } = this;\n const container = this.ownerDocument.createElementNS('http://www.w3.org/1999/xhtml', '_');\n container.innerHTML = html;\n\n switch (position.toLowerCase()) {\n case 'beforebegin': {\n while (container.firstChild)\n parentNode.insertBefore(container.firstChild, this);\n break;\n }\n case 'afterbegin': {\n let firstChild = this.firstChild;\n while (container.lastChild)\n firstChild = this.insertBefore(container.lastChild, firstChild);\n break;\n }\n case 'beforeend': {\n while (container.firstChild)\n this.appendChild(container.firstChild);\n break;\n }\n case 'afterend': {\n let nextSibling = this.nextSibling;\n while (container.lastChild)\n nextSibling = parentNode.insertBefore(container.lastChild, nextSibling);\n break;\n }\n }\n};\n\n\n// Implement documentElement.contains\n// e.g., if(document.body.contains(el)) { ... }\n// See https://developer.mozilla.org/en-US/docs/DOM/Node.contains\nDOM.Node.prototype.contains = function(otherNode) {\n // DDOPSON-2012-08-16 -- This implementation is stolen from Sizzle's\n // implementation of 'contains' (around line 1402).\n // We actually can't call Sizzle.contains directly:\n // * Because we define Node.contains, Sizzle will configure it's own\n // \"contains\" method to call us. (it thinks we are a native browser\n // implementation of \"contains\")\n // * Thus, if we called Sizzle.contains, it would form an infinite loop.\n // Instead we use Sizzle's fallback implementation of \"contains\" based on\n // \"compareDocumentPosition\".\n return !!(this.compareDocumentPosition(otherNode) & 16);\n};\n\n\n// Support for opacity style property.\nObject.defineProperty(DOM.CSSStyleDeclaration.prototype, 'opacity', {\n get() {\n const opacity = this.getPropertyValue('opacity');\n return Number.isFinite(opacity) ? opacity.toString() : '';\n },\n\n set(opacity) {\n if (opacity === null || opacity === undefined || opacity === '')\n this.removeProperty('opacity');\n else {\n const value = parseFloat(opacity);\n if (isFinite(value))\n this._setProperty('opacity', value);\n }\n }\n});\n\n\n// Wrap dispatchEvent to support _windowInScope and error handling.\nconst jsdomDispatchEvent = DOM.EventTarget.prototype.dispatchEvent;\nDOM.EventTarget.prototype.dispatchEvent = function(event) {\n // Could be node, window or document\n const document = this._ownerDocument || this.document || this;\n const window = document.defaultView;\n // Fail miserably on objects that don't have ownerDocument: nodes and XHR\n // request have those\n const { browser } = window;\n browser.emit('event', event, this);\n\n const originalInScope = browser._windowInScope;\n try {\n // The current window, postMessage and window.close need this\n browser._windowInScope = window;\n // Inline event handlers rely on window.event\n window.event = event;\n return jsdomDispatchEvent.call(this, event);\n } finally {\n delete window.event;\n browser._windowInScope = originalInScope;\n }\n};\n\n\n// Fix resource loading to keep track of in-progress requests. Need this to wait\n// for all resources (mainly JavaScript) to complete loading before terminating\n// browser.wait.\nresourceLoader.load = function(element, href, callback) {\n const document = element.ownerDocument;\n const window = document.defaultView;\n const tagName = element.tagName.toLowerCase();\n const loadResource = document.implementation._hasFeature('FetchExternalResources', tagName);\n const url = resourceLoader.resolveResourceUrl(document, href);\n\n if (loadResource) {\n // This guarantees that all scripts are executed in order, must add to the\n // JSDOM queue before we add to the Zombie event queue.\n const enqueued = this.enqueue(element, url, callback && callback.bind(element));\n const request = new Fetch.Request(url);\n window._eventQueue.http(request, (error, response)=> {\n // Since this is used by resourceLoader that doesn't check the response,\n // we're responsible to turn anything other than 2xx/3xx into an error\n if (error)\n enqueued(new Error('Network error'));\n else if (response.status >= 400)\n enqueued(new Error(`Server returned status code ${response.status} from ${url}`));\n else\n response._consume().then((buffer)=> {\n response.body = buffer;\n enqueued(null, buffer);\n });\n });\n }\n};\n\n// Fix residual Node bug. See https://github.com/joyent/node/pull/14146\nconst jsdomResolveHref = Utils.resolveHref;\nUtils.resolveHref = function (baseUrl, href) {\n const pattern = /file:?/;\n const protocol = URL.parse(baseUrl).protocol;\n const original = URL.parse(href);\n const resolved = URL.parse(jsdomResolveHref(baseUrl, href));\n\n if (!pattern.test(protocol) && pattern.test(original.protocol) && !original.host && resolved.host)\n return URL.format(original);\n else\n return URL.format(resolved);\n};\n"]}