commit f45b899f7d0e58485928715b89339b28494c8044 Author: Peter Snyder Date: Tue Sep 12 17:34:25 2017 -0500 init commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3216262 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.DS_Store +*.swp diff --git a/background_scripts/bootstrap.js b/background_scripts/bootstrap.js new file mode 100644 index 0000000..727057d --- /dev/null +++ b/background_scripts/bootstrap.js @@ -0,0 +1,25 @@ +/*jslint es6: true*/ +/*global chrome*/ +(function () { + "use strict"; + let onMsgHandler; + + onMsgHandler = function (request, ignore, sendResponse) { + + let requestingDoman = request.domain; + + if (request.request !== "rules") { + sendResponse(null); + return false; + } + + sendResponse({ + rules: ["fetch"] + }); + return false; + }; + + chrome.runtime.peteStuff = "P"; + + chrome.runtime.onMessage.addListener(onMsgHandler); +}()); \ No newline at end of file diff --git a/content_scripts/defaults.js b/content_scripts/defaults.js new file mode 100644 index 0000000..b0042c2 --- /dev/null +++ b/content_scripts/defaults.js @@ -0,0 +1,8 @@ +/** + * This file defines default blocking rules for domains that haven't been + * overwritten, either by the extension user, or by a subscribed policy + * list. + */ +window.WEB_API_MANAGER.defaults = [ + "MediaStream Recording", +]; \ No newline at end of file diff --git a/content_scripts/init.js b/content_scripts/init.js new file mode 100644 index 0000000..8585f2b --- /dev/null +++ b/content_scripts/init.js @@ -0,0 +1,3 @@ +// Initial content script for the Web API manager extension, that creates +// the "namespace" we'll use for all the content scripts in the extension. +window.WEB_API_MANAGER = {}; \ No newline at end of file diff --git a/content_scripts/injected.js b/content_scripts/injected.js new file mode 100644 index 0000000..79cef0c --- /dev/null +++ b/content_scripts/injected.js @@ -0,0 +1,137 @@ +/*jslint es6: true, browser: true*/ +/*global window*/ +(function () { + "use strict"; + + const settings = window.WEB_API_MANAGER_PAGE; + const shouldLog = settings.shouldLog; + const standardsToBlock = settings.toBlock; + const standardDefinitions = settings.standards; + + const defaultFunction = function () {}; + const funcPropNames = Object.getOwnPropertyNames(defaultFunction); + const unconfigurablePropNames = funcPropNames.filter(function (propName) { + const possiblePropDesc = Object.getOwnPropertyDescriptor(defaultFunction, propName); + return (possiblePropDesc && !possiblePropDesc.configurable); + }); + + const featuresToBlock = standardsToBlock.reduce(function (prev, cur) { + return prev.concat(standardDefinitions[cur].features); + }, []); + + const toPrimitiveFunc = function (hint) { + if (hint === "number" || hint === "default") { + return 0; + } + if (hint === "string") { + return ""; + } + return undefined; + }; + + const keyPathToRefPath = function (keyPath) { + const keyParts = keyPath.split("."); + return keyParts.reduce(function (prev, cur) { + + if (prev === undefined) { + return undefined; + } + + const numNodes = prev.length; + const currentLeaf = (numNodes === 0) + ? window + : prev[numNodes - 1]; + const nextLeaf = currentLeaf[cur]; + + if (nextLeaf === undefined) { + return undefined; + } + + return prev.concat([nextLeaf]); + }, []); + }; + + const createBlockingProxy = function (keyPath) { + + let hasBeenLogged = false; + + const logKeyPath = function () { + if (keyPath !== undefined && hasBeenLogged === false) { + hasBeenLogged = true; + console.info(keyPath); + } + }; + + let blockingProxy; + blockingProxy = new Proxy(defaultFunction, { + get: function (ignore, property) { + logKeyPath(); + + if (property === Symbol.toPrimitive) { + return toPrimitiveFunc; + } + + if (property === "valueOf") { + return toPrimitiveFunc; + } + + return blockingProxy; + }, + set: function () { + logKeyPath(); + return blockingProxy; + }, + apply: function () { + logKeyPath(); + return blockingProxy; + }, + ownKeys: function (ignore) { + return unconfigurablePropNames; + }, + has: function (ignore, property) { + return (unconfigurablePropNames.indexOf(property) > -1); + }, + getOwnPropertyDescriptor: function (ignore, property) { + if (unconfigurablePropNames.indexOf(property) === -1) { + return undefined; + } + return Object.getOwnPropertyDescriptor(defaultFunction, property); + } + }); + + return blockingProxy; + }; + + const defaultBlockingProxy = createBlockingProxy(); + + const blockFeatureAtKeyPath = function (keyPath) { + const propertyRefs = keyPathToRefPath(keyPath); + + // If we weren't able to turn the key path into an array of references, + // then it means that the property doesn't exist in this DOM / + // environment, so there is nothing to block. + if (propertyRefs === undefined) { + return false; + } + + const keyPathSegments = keyPath.split("."); + const lastPropertyName = keyPathSegments[keyPathSegments.length - 1]; + const leafRef = propertyRefs[propertyRefs.length - 1]; + const parentRef = propertyRefs[propertyRefs.length - 2]; + + // At least for now, only interpose on methods. + if (typeof leafRef !== "function") { + return false; + } + + if (shouldLog === true) { + parentRef[lastPropertyName] = createBlockingProxy(keyPath); + return true; + } + + parentRef[lastPropertyName] = defaultBlockingProxy; + return true; + }; + + featuresToBlock.forEach(blockFeatureAtKeyPath); +}()); \ No newline at end of file diff --git a/content_scripts/standards.js b/content_scripts/standards.js new file mode 100644 index 0000000..f80e37e --- /dev/null +++ b/content_scripts/standards.js @@ -0,0 +1 @@ +window.WEB_API_MANAGER.standards = {"XMLHttpRequest":{"info":{"name":"XMLHttpRequest","subsection_number":null,"subsection_name":null,"url":"https://xhr.spec.whatwg.org/"},"features":["FormData.prototype.append","FormData.prototype.delete","FormData.prototype.get","FormData.prototype.getAll","FormData.prototype.has","FormData.prototype.set","XMLHttpRequest.prototype.abort","XMLHttpRequest.prototype.getAllResponseHeaders","XMLHttpRequest.prototype.getResponseHeader","XMLHttpRequest.prototype.open","XMLHttpRequest.prototype.overrideMimeType","XMLHttpRequest.prototype.send","XMLHttpRequest.prototype.setRequestHeader"]},"Ambient Light Sensor API":{"info":{"name":"Ambient Light Sensor API","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/ambient-light/"},"features":["window.ondevicelight"]},"Battery Status API":{"info":{"name":"Battery Status API","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/battery-status/"},"features":["navigator.battery","Navigator.prototype.getBattery"]},"Beacon":{"info":{"name":"Beacon","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/beacon/"},"features":["Navigator.prototype.sendBeacon"]},"Console API":{"info":{"name":"Console API","subsection_number":null,"subsection_name":null,"url":"https://github.com/DeveloperToolsWG/console-object"},"features":["Console.prototype.assert","Console.prototype.clear","Console.prototype.count","Console.prototype.debug","Console.prototype.dir","Console.prototype.dirxml","Console.prototype.error","Console.prototype.group","Console.prototype.groupCollapsed","Console.prototype.groupEnd","Console.prototype.info","Console.prototype.log","Console.prototype.markTimeline","Console.prototype.profile","Console.prototype.profileEnd","Console.prototype.table","Console.prototype.time","Console.prototype.timeEnd","Console.prototype.timeline","Console.prototype.timelineEnd","Console.prototype.timeStamp","Console.prototype.trace","Console.prototype.warn"]},"CSS Conditional Rules Module Level 3":{"info":{"name":"CSS Conditional Rules Module Level 3","subsection_number":null,"subsection_name":null,"url":"https://drafts.csswg.org/css-conditional-3/"},"features":["CSS.supports"]},"CSS Font Loading Module Level 3":{"info":{"name":"CSS Font Loading Module Level 3","subsection_number":null,"subsection_name":null,"url":"https://drafts.csswg.org/css-font-loading/"},"features":["document.fonts","FontFace.prototype.load","FontFaceSet.prototype.add","FontFaceSet.prototype.check","FontFaceSet.prototype.clear","FontFaceSet.prototype.delete","FontFaceSet.prototype.entries","FontFaceSet.prototype.forEach","FontFaceSet.prototype.has","FontFaceSet.prototype.keys","FontFaceSet.prototype.load","FontFaceSet.prototype.values"]},"CSS Object Model (CSSOM)":{"info":{"name":"CSS Object Model (CSSOM)","subsection_number":null,"subsection_name":null,"url":"https://drafts.csswg.org/cssom/"},"features":["CSS.escape","Document.prototype.caretPositionFromPoint","Document.prototype.elementFromPoint","Element.prototype.getBoundingClientRect","Element.prototype.getClientRects","Element.prototype.scroll","Element.prototype.scrollBy","Element.prototype.scrollIntoView","Element.prototype.scrollTo","MediaList.prototype.appendMedium","MediaList.prototype.deleteMedium","MediaList.prototype.item","MediaQueryList.prototype.addListener","MediaQueryList.prototype.removeListener","StyleSheetList.prototype.item"]},"CSSOM View Module":{"info":{"name":"CSSOM View Module","subsection_number":null,"subsection_name":null,"url":"https://drafts.csswg.org/cssom-view/"},"features":["CaretPosition.prototype.getClientRect","screen.availHeight","screen.availWidth","screen.colorDepth","screen.height","screen.left","screen.pixelDepth","screen.width","window.devicePixelRatio","window.innerHeight","window.innerWidth","window.matchMedia","window.moveBy","window.moveTo","window.outerHeight","window.outerWidth","window.pageXOffset","window.pageYOffset","window.resizeBy","window.resizeTo","window.screen","window.screenX","window.screenY","window.scroll","window.scrollBy","window.scrollTo","window.scrollX","window.scrollY"]},"DeviceOrientation Event Specification":{"info":{"name":"DeviceOrientation Event Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/orientation-event/"},"features":["DeviceMotionEvent.prototype.initDeviceMotionEvent","DeviceOrientationEvent.prototype.initDeviceOrientationEvent"]},"DOM Parsing and Serialization":{"info":{"name":"DOM Parsing and Serialization","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/DOM-Parsing/"},"features":["DOMParser.prototype.parseFromString","Element.prototype.insertAdjacentHTML","XMLSerializer.prototype.serializeToString"]},"DOM":{"info":{"name":"DOM","subsection_number":null,"subsection_name":null,"url":"https://dom.spec.whatwg.org/"},"features":["CharacterData.prototype.appendData","CharacterData.prototype.deleteData","CharacterData.prototype.insertData","CharacterData.prototype.remove","CharacterData.prototype.replaceData","CharacterData.prototype.substringData","CustomEvent.prototype.initCustomEvent","document.characterSet","document.childElementCount","document.children","document.close","document.compatMode","document.contentType","document.firstElementChild","document.inputEncoding","document.lastElementChild","Document.prototype.createAttribute","Document.prototype.createElement","Document.prototype.createProcessingInstruction","Document.prototype.getElementsByClassName","document.scripts","DocumentFragment.prototype.getElementById","DocumentType.prototype.remove","DOMImplementation.prototype.createHTMLDocument","DOMTokenList.prototype.add","DOMTokenList.prototype.contains","DOMTokenList.prototype.item","DOMTokenList.prototype.remove","DOMTokenList.prototype.toggle","Element.prototype.closest","Element.prototype.getElementsByClassName","Element.prototype.matches","Element.prototype.mozMatchesSelector","Element.prototype.remove","window.clearInterval","window.clearTimeout"]},"Document Object Model (DOM) Level 1 Specification":{"info":{"name":"Document Object Model (DOM) Level 1 Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/REC-DOM-Level-1/"},"features":["Document.prototype.getElementById","Document.prototype.getElementsByTagName","Element.prototype.getAttribute","Element.prototype.getAttributeNode","Element.prototype.getElementsByTagName","Element.prototype.removeAttribute","Element.prototype.removeAttributeNode","Element.prototype.setAttribute","Element.prototype.setAttributeNode","HTMLCollection.prototype.item","HTMLCollection.prototype.namedItem","HTMLDocument.prototype.close","HTMLDocument.prototype.open","HTMLDocument.prototype.write","HTMLDocument.prototype.writeln","HTMLElement.prototype.click","HTMLElement.prototype.focus","HTMLFormElement.prototype.reset","HTMLFormElement.prototype.submit","HTMLInputElement.prototype.select","HTMLSelectElement.prototype.add","HTMLSelectElement.prototype.item","HTMLSelectElement.prototype.namedItem","HTMLSelectElement.prototype.remove","HTMLTableElement.prototype.createCaption","HTMLTableElement.prototype.createTBody","HTMLTableElement.prototype.createTFoot","HTMLTableElement.prototype.createTHead","HTMLTableElement.prototype.deleteCaption","HTMLTableElement.prototype.deleteRow","HTMLTableElement.prototype.deleteTFoot","HTMLTableElement.prototype.deleteTHead","HTMLTableElement.prototype.insertRow","HTMLTableRowElement.prototype.deleteCell","HTMLTableRowElement.prototype.insertCell","HTMLTableSectionElement.prototype.deleteRow","HTMLTableSectionElement.prototype.insertRow","HTMLTextAreaElement.prototype.select","Node.prototype.appendChild","Node.prototype.cloneNode","Node.prototype.hasChildNodes","Node.prototype.insertBefore","Node.prototype.normalize","Node.prototype.removeChild","Node.prototype.replaceChild","NodeList.prototype.item","Text.prototype.splitText"]},"Document Object Model (DOM) Level 2 Core Specification":{"info":{"name":"Document Object Model (DOM) Level 2 Core Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-2-Core/"},"features":["document.doctype","document.documentElement","document.domain","document.implementation","Document.prototype.createAttributeNS","Document.prototype.createCDATASection","Document.prototype.createComment","Document.prototype.createDocumentFragment","Document.prototype.createElementNS","Document.prototype.createTextNode","Document.prototype.getElementsByTagNameNS","Document.prototype.importNode","DOMImplementation.prototype.createDocument","DOMImplementation.prototype.createDocumentType","DOMImplementation.prototype.hasFeature","Element.prototype.getAttributeNodeNS","Element.prototype.getAttributeNS","Element.prototype.getElementsByTagNameNS","Element.prototype.hasAttribute","Element.prototype.hasAttributeNS","Element.prototype.hasAttributes","Element.prototype.removeAttributeNS","Element.prototype.setAttributeNodeNS","Element.prototype.setAttributeNS","NamedNodeMap.prototype.getNamedItem","NamedNodeMap.prototype.getNamedItemNS","NamedNodeMap.prototype.item","NamedNodeMap.prototype.removeNamedItem","NamedNodeMap.prototype.removeNamedItemNS","NamedNodeMap.prototype.setNamedItem","NamedNodeMap.prototype.setNamedItemNS"]},"Document Object Model (DOM) Level 2 Events Specification":{"info":{"name":"Document Object Model (DOM) Level 2 Events Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-2-Events/"},"features":["Document.prototype.createEvent","Event.prototype.initEvent","Event.prototype.preventDefault","Event.prototype.stopPropagation","EventTarget.prototype.addEventListener","EventTarget.prototype.dispatchEvent","EventTarget.prototype.removeEventListener"]},"Document Object Model (DOM) Level 2 HTML Specification":{"info":{"name":"Document Object Model (DOM) Level 2 HTML Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-2-HTML/"},"features":["document.cookie","document.forms","document.getElementsByName","document.open","document.referrer","document.title","document.URL","document.write","document.writeln","HTMLDocument.prototype.getElementsByName","HTMLElement.prototype.blur"]},"Document Object Model (DOM) Level 2 Style Specification":{"info":{"name":"Document Object Model (DOM) Level 2 Style Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-2-Style/"},"features":["CSSPrimitiveValue.prototype.getCounterValue","CSSPrimitiveValue.prototype.getFloatValue","CSSPrimitiveValue.prototype.getRectValue","CSSPrimitiveValue.prototype.getRGBColorValue","CSSPrimitiveValue.prototype.getStringValue","CSSPrimitiveValue.prototype.setFloatValue","CSSPrimitiveValue.prototype.setStringValue","CSSRuleList.prototype.item","CSSStyleDeclaration.prototype.getPropertyCSSValue","CSSStyleDeclaration.prototype.getPropertyPriority","CSSStyleDeclaration.prototype.getPropertyValue","CSSStyleDeclaration.prototype.item","CSSStyleDeclaration.prototype.removeProperty","CSSStyleDeclaration.prototype.setProperty","CSSStyleSheet.prototype.deleteRule","CSSStyleSheet.prototype.insertRule","CSSValueList.prototype.item","document.styleSheets","window.getComputedStyle"]},"Document Object Model (DOM) Level 2 Traversal and Range Specification":{"info":{"name":"Document Object Model (DOM) Level 2 Traversal and Range Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-2-Traversal-Range/"},"features":["Document.prototype.createNodeIterator","Document.prototype.createRange","Document.prototype.createTreeWalker","NodeIterator.prototype.detach","NodeIterator.prototype.nextNode","NodeIterator.prototype.previousNode","Range.prototype.cloneContents","Range.prototype.cloneRange","Range.prototype.collapse","Range.prototype.compareBoundaryPoints","Range.prototype.comparePoint","Range.prototype.createContextualFragment","Range.prototype.deleteContents","Range.prototype.detach","Range.prototype.extractContents","Range.prototype.getBoundingClientRect","Range.prototype.getClientRects","Range.prototype.insertNode","Range.prototype.intersectsNode","Range.prototype.isPointInRange","Range.prototype.selectNode","Range.prototype.selectNodeContents","Range.prototype.setEnd","Range.prototype.setEndAfter","Range.prototype.setEndBefore","Range.prototype.setStart","Range.prototype.setStartAfter","Range.prototype.setStartBefore","Range.prototype.surroundContents","TreeWalker.prototype.firstChild","TreeWalker.prototype.lastChild","TreeWalker.prototype.nextNode","TreeWalker.prototype.nextSibling","TreeWalker.prototype.parentNode","TreeWalker.prototype.previousNode","TreeWalker.prototype.previousSibling"]},"Document Object Model (DOM) Level 3 Core Specification":{"info":{"name":"Document Object Model (DOM) Level 3 Core Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-3-Core/"},"features":["document.documentURI","Document.prototype.adoptNode","DOMStringList.prototype.contains","DOMStringList.prototype.item","Node.prototype.compareDocumentPosition","Node.prototype.contains","Node.prototype.isDefaultNamespace","Node.prototype.isEqualNode","Node.prototype.lookupNamespaceURI","Node.prototype.lookupPrefix"]},"Document Object Model (DOM) Level 3 XPath Specification":{"info":{"name":"Document Object Model (DOM) Level 3 XPath Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/DOM-Level-3-XPath/"},"features":["Document.prototype.createExpression","Document.prototype.createNSResolver","Document.prototype.evaluate","XPathEvaluator.prototype.createExpression","XPathEvaluator.prototype.createNSResolver","XPathEvaluator.prototype.evaluate","XPathExpression.prototype.evaluate","XPathResult.prototype.iterateNext","XPathResult.prototype.snapshotItem"]},"W3C DOM4":{"info":{"name":"W3C DOM4","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/dom/"},"features":["MutationObserver.prototype.disconnect","MutationObserver.prototype.observe","MutationObserver.prototype.takeRecords"]},"Directory Upload":{"info":{"name":"Directory Upload","subsection_number":null,"subsection_name":null,"url":"https://wicg.github.io/directory-upload/proposal.html"},"features":["Directory.prototype.getFilesAndDirectories"]},"Encoding":{"info":{"name":"Encoding","subsection_number":null,"subsection_name":null,"url":"https://encoding.spec.whatwg.org/"},"features":["TextDecoder.prototype.decode","TextEncoder.prototype.encode"]},"execCommand":{"info":{"name":"execCommand","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/editing/execCommand.html"},"features":["document.execCommand","document.queryCommandEnabled","document.queryCommandIndeterm","document.queryCommandState","document.queryCommandSupported","document.queryCommandValue","HTMLDocument.prototype.execCommand","HTMLDocument.prototype.queryCommandEnabled","HTMLDocument.prototype.queryCommandIndeterm","HTMLDocument.prototype.queryCommandState","HTMLDocument.prototype.queryCommandSupported","HTMLDocument.prototype.queryCommandValue"]},"Encrypted Media Extensions":{"info":{"name":"Encrypted Media Extensions","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/encrypted-media/"},"features":["MediaKeys.prototype.createSession","MediaKeys.prototype.setServerCertificate","MediaKeySession.prototype.close","MediaKeySession.prototype.generateRequest","MediaKeySession.prototype.load","MediaKeySession.prototype.remove","MediaKeySession.prototype.update","MediaKeyStatusMap.prototype.entries","MediaKeyStatusMap.prototype.keys","MediaKeyStatusMap.prototype.values","MediaKeySystemAccess.prototype.createMediaKeys","MediaKeySystemAccess.prototype.getConfiguration","Navigator.prototype.requestMediaKeySystemAccess"]},"Fetch":{"info":{"name":"Fetch","subsection_number":null,"subsection_name":null,"url":"https://fetch.spec.whatwg.org/"},"features":["Headers.prototype.append","Headers.prototype.delete","Headers.prototype.get","Headers.prototype.getAll","Headers.prototype.has","Headers.prototype.set","Request.prototype.arrayBuffer","Request.prototype.blob","Request.prototype.clone","Request.prototype.formData","Request.prototype.json","Request.prototype.text","Response.error","Response.prototype.arrayBuffer","Response.prototype.blob","Response.prototype.clone","Response.prototype.formData","Response.prototype.json","Response.prototype.text","Response.redirect","window.fetch"]},"File API":{"info":{"name":"File API","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/FileAPI/"},"features":["Blob.prototype.slice","FileList.prototype.item","FileReader.prototype.abort","FileReader.prototype.readAsArrayBuffer","FileReader.prototype.readAsBinaryString","FileReader.prototype.readAsDataURL","FileReader.prototype.readAsText","URL.createObjectURL","URL.revokeObjectURL"]},"Fullscreen API":{"info":{"name":"Fullscreen API","subsection_number":null,"subsection_name":null,"url":"https://fullscreen.spec.whatwg.org/"},"features":["document.mozFullScreen","document.mozFullScreenElement","document.mozFullScreenEnabled","document.onmozfullscreenchange","document.onmozfullscreenerror","Document.prototype.mozCancelFullScreen","Element.prototype.mozRequestFullScreen","window.onmozfullscreenchange","window.onmozfullscreenerror"]},"Geolocation API Specification":{"info":{"name":"Geolocation API Specification","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/geolocation-API/"},"features":["navigator.geolocation","navigator.geolocation.getCurrentPosition","navigator.geolocation.watchPosition","navigator.geolocation.clearWatch"]},"Geometry Interfaces Module Level 1":{"info":{"name":"Geometry Interfaces Module Level 1","subsection_number":null,"subsection_name":null,"url":"https://drafts.fxtf.org/geometry/"},"features":["DOMMatrix.prototype.invertSelf","DOMMatrix.prototype.multiplySelf","DOMMatrix.prototype.preMultiplySelf","DOMMatrix.prototype.rotateAxisAngleSelf","DOMMatrix.prototype.rotateFromVectorSelf","DOMMatrix.prototype.rotateSelf","DOMMatrix.prototype.scale3dSelf","DOMMatrix.prototype.scaleNonUniformSelf","DOMMatrix.prototype.scaleSelf","DOMMatrix.prototype.setMatrixValue","DOMMatrix.prototype.skewXSelf","DOMMatrix.prototype.skewYSelf","DOMMatrix.prototype.translateSelf","DOMMatrixReadOnly.prototype.flipX","DOMMatrixReadOnly.prototype.flipY","DOMMatrixReadOnly.prototype.inverse","DOMMatrixReadOnly.prototype.multiply","DOMMatrixReadOnly.prototype.rotate","DOMMatrixReadOnly.prototype.rotateAxisAngle","DOMMatrixReadOnly.prototype.rotateFromVector","DOMMatrixReadOnly.prototype.scale","DOMMatrixReadOnly.prototype.scale3d","DOMMatrixReadOnly.prototype.scaleNonUniform","DOMMatrixReadOnly.prototype.skewX","DOMMatrixReadOnly.prototype.skewY","DOMMatrixReadOnly.prototype.toFloat32Array","DOMMatrixReadOnly.prototype.toFloat64Array","DOMMatrixReadOnly.prototype.transformPoint","DOMMatrixReadOnly.prototype.translate","DOMRectList.prototype.item"]},"Gamepad":{"info":{"name":"Gamepad","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/gamepad/"},"features":["Navigator.prototype.getGamepads"]},"HTML":{"info":{"name":"HTML","subsection_number":null,"subsection_name":null,"url":"https://html.spec.whatwg.org"},"features":["DataTransfer.prototype.addElement","DataTransfer.prototype.clearData","DataTransfer.prototype.getData","DataTransfer.prototype.mozClearDataAt","DataTransfer.prototype.mozGetDataAt","DataTransfer.prototype.mozSetDataAt","DataTransfer.prototype.mozTypesAt","DataTransfer.prototype.setData","DataTransfer.prototype.setDragImage","document.activeElement","document.body","document.currentScript","document.designMode","document.dir","document.getItems","document.head","document.images","document.lastModified","document.lastStyleSheetSet","document.links","document.onabort","document.onblur","document.oncanplay","document.oncanplaythrough","document.onchange","document.onclick","document.oncontextmenu","document.oncopy","document.oncut","document.ondblclick","document.ondrag","document.ondragend","document.ondragenter","document.ondragleave","document.ondragover","document.ondragstart","document.ondrop","document.ondurationchange","document.onemptied","document.onended","document.onerror","document.onfocus","document.oninput","document.oninvalid","document.onkeydown","document.onkeypress","document.onkeyup","document.onload","document.onloadeddata","document.onloadedmetadata","document.onloadstart","document.onmousedown","document.onmouseenter","document.onmouseleave","document.onmousemove","document.onmouseout","document.onmouseover","document.onmouseup","document.onpaste","document.onpause","document.onplay","document.onplaying","document.onprogress","document.onratechange","document.onreadystatechange","document.onreset","document.onresize","document.onscroll","document.onseeked","document.onseeking","document.onselect","document.onshow","document.onstalled","document.onsubmit","document.onsuspend","document.ontimeupdate","document.onvolumechange","document.onwaiting","document.onwheel","Document.prototype.enableStyleSheetsForSet","Document.prototype.hasFocus","document.selectedStyleSheetSet","document.styleSheetSets","EventSource.prototype.close","HashChangeEvent.prototype.initHashChangeEvent","HTMLAllCollection.prototype.item","HTMLAllCollection.prototype.namedItem","HTMLDocument.prototype.clear","HTMLDocument.prototype.getItems","navigator.appCodeName","navigator.appName","navigator.appVersion","navigator.cookieEnabled","navigator.onLine","navigator.platform","navigator.product","navigator.productSub","Navigator.prototype.registerContentHandler","Navigator.prototype.registerProtocolHandler","navigator.userAgent","navigator.vendor","navigator.vendorSub","PropertyNodeList.prototype.getValues","TimeRanges.prototype.end","TimeRanges.prototype.start","window.blur","window.close","window.closed","window.console","window.createImageBitmap","window.document","window.focus","window.frameElement","window.frames","window.length","window.location","window.name","window.navigator","window.onabort","window.onafterprint","window.onbeforeprint","window.onbeforeunload","window.onblur","window.oncanplay","window.oncanplaythrough","window.onchange","window.onclick","window.oncontextmenu","window.ondblclick","window.ondrag","window.ondragend","window.ondragenter","window.ondragleave","window.ondragover","window.ondragstart","window.ondurationchange","window.onemptied","window.onended","window.onerror","window.onfocus","window.onhashchange","window.oninput","window.oninvalid","window.onkeydown","window.onkeypress","window.onkeyup","window.onlanguagechange","window.onloadeddata","window.onloadedmetadata","window.onloadstart","window.onmessage","window.onmousedown","window.onmouseenter","window.onmouseleave","window.onmousemove","window.onmouseout","window.onmouseover","window.onmouseup","window.onoffline","window.ononline","window.onpagehide","window.onpageshow","window.onpause","window.onplay","window.onplaying","window.onpopstate","window.onprogress","window.onratechange","window.onreset","window.onresize","window.onscroll","window.onseeked","window.onseeking","window.onselect","window.onshow","window.onstalled","window.onsubmit","window.onsuspend","window.ontimeupdate","window.onunload","window.onvolumechange","window.onwaiting","window.onwheel","window.open","window.opener","window.parent","window.self","window.setInterval","window.setResizable","window.setTimeout","window.showModalDialog","window.stop","window.top","window.window","XMLDocument.prototype.load"]},"High Resolution Time Level 2":{"info":{"name":"High Resolution Time Level 2","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/hr-time/"},"features":["Performance.prototype.now"]},"HTML 5":{"info":{"name":"HTML 5","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/html5/"},"features":["document.defaultView","document.location","document.onafterscriptexecute","document.onbeforescriptexecute","document.preferredStyleSheetSet","document.readyState","HTMLButtonElement.prototype.checkValidity","HTMLButtonElement.prototype.setCustomValidity","HTMLFieldSetElement.prototype.checkValidity","HTMLFieldSetElement.prototype.setCustomValidity","HTMLFormControlsCollection.prototype.item","HTMLFormElement.prototype.checkValidity","HTMLInputElement.prototype.checkValidity","HTMLInputElement.prototype.setCustomValidity","HTMLInputElement.prototype.setRangeText","HTMLInputElement.prototype.setSelectionRange","HTMLInputElement.prototype.stepDown","HTMLInputElement.prototype.stepUp","HTMLMediaElement.prototype.addTextTrack","HTMLMediaElement.prototype.canPlayType","HTMLMediaElement.prototype.fastSeek","HTMLMediaElement.prototype.load","HTMLMediaElement.prototype.mozCaptureStream","HTMLMediaElement.prototype.mozCaptureStreamUntilEnded","HTMLMediaElement.prototype.mozGetMetadata","HTMLMediaElement.prototype.pause","HTMLMediaElement.prototype.play","HTMLMediaElement.prototype.setMediaKeys","HTMLObjectElement.prototype.checkValidity","HTMLObjectElement.prototype.setCustomValidity","HTMLOptionsCollection.prototype.add","HTMLOptionsCollection.prototype.remove","HTMLOutputElement.prototype.checkValidity","HTMLOutputElement.prototype.setCustomValidity","HTMLSelectElement.prototype.checkValidity","HTMLSelectElement.prototype.setCustomValidity","HTMLTextAreaElement.prototype.checkValidity","HTMLTextAreaElement.prototype.setCustomValidity","HTMLTextAreaElement.prototype.setRangeText","HTMLTextAreaElement.prototype.setSelectionRange","location.assign","location.reload","location.replace","OfflineResourceList.prototype.mozAdd","OfflineResourceList.prototype.mozHasItem","OfflineResourceList.prototype.mozItem","OfflineResourceList.prototype.mozRemove","OfflineResourceList.prototype.swapCache","OfflineResourceList.prototype.update","TextTrack.prototype.addCue","TextTrack.prototype.removeCue","TextTrackCueList.prototype.getCueById","TextTrackList.prototype.getTrackById","TimeEvent.prototype.initTimeEvent","window.alert","window.applicationCache","window.atob","window.btoa","window.confirm","window.locationbar","window.menubar","window.personalbar","window.print","window.prompt","window.scrollbars","window.status","window.statusbar","window.toolbar","location.href"]},"HTML 5.1":{"info":{"name":"HTML 5.1","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/html51/"},"features":["DragEvent.prototype.initDragEvent","External.prototype.addSearchEngine","External.prototype.AddSearchProvider","External.prototype.IsSearchProviderInstalled","navigator.language","navigator.languages"]},"Indexed Database API":{"info":{"name":"Indexed Database API","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/IndexedDB/"},"features":["IDBCursor.prototype.advance","IDBCursor.prototype.continue","IDBCursor.prototype.delete","IDBCursor.prototype.update","IDBDatabase.prototype.close","IDBDatabase.prototype.createMutableFile","IDBDatabase.prototype.createObjectStore","IDBDatabase.prototype.deleteObjectStore","IDBDatabase.prototype.mozCreateFileHandle","IDBDatabase.prototype.transaction","IDBFactory.prototype.cmp","IDBFactory.prototype.deleteDatabase","IDBFactory.prototype.open","IDBFileHandle.prototype.abort","IDBFileHandle.prototype.append","IDBFileHandle.prototype.flush","IDBFileHandle.prototype.getMetadata","IDBFileHandle.prototype.readAsArrayBuffer","IDBFileHandle.prototype.readAsText","IDBFileHandle.prototype.truncate","IDBFileHandle.prototype.write","IDBIndex.prototype.count","IDBIndex.prototype.get","IDBIndex.prototype.getKey","IDBIndex.prototype.mozGetAll","IDBIndex.prototype.mozGetAllKeys","IDBIndex.prototype.openCursor","IDBIndex.prototype.openKeyCursor","IDBKeyRange.bound","IDBKeyRange.lowerBound","IDBKeyRange.only","IDBKeyRange.upperBound","IDBMutableFile.prototype.getFile","IDBMutableFile.prototype.open","IDBObjectStore.prototype.add","IDBObjectStore.prototype.clear","IDBObjectStore.prototype.count","IDBObjectStore.prototype.createIndex","IDBObjectStore.prototype.delete","IDBObjectStore.prototype.deleteIndex","IDBObjectStore.prototype.get","IDBObjectStore.prototype.index","IDBObjectStore.prototype.mozGetAll","IDBObjectStore.prototype.openCursor","IDBObjectStore.prototype.put","IDBTransaction.prototype.abort","IDBTransaction.prototype.objectStore","window.indexedDB"]},"Media Capture from DOM Elements":{"info":{"name":"Media Capture from DOM Elements","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/mediacapture-fromelement/"},"features":["CanvasCaptureMediaStream.prototype.requestFrame","HTMLCanvasElement.prototype.captureStream"]},"Media Capture and Streams":{"info":{"name":"Media Capture and Streams","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/mediacapture-streams/"},"features":["LocalMediaStream.prototype.stop","MediaDevices.prototype.enumerateDevices","MediaDevices.prototype.getUserMedia","navigator.mediaDevices"]},"Media Source Extensions":{"info":{"name":"Media Source Extensions","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/media-source/"},"features":["HTMLVideoElement.prototype.getVideoPlaybackQuality","MediaSource.isTypeSupported","MediaSource.prototype.addSourceBuffer","MediaSource.prototype.endOfStream","MediaSource.prototype.removeSourceBuffer","SourceBuffer.prototype.abort","SourceBuffer.prototype.appendBuffer","SourceBuffer.prototype.remove"]},"MediaStream Recording":{"info":{"name":"MediaStream Recording","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/mediastream-recording/"},"features":["MediaRecorder.prototype.pause","MediaRecorder.prototype.requestData","MediaRecorder.prototype.resume","MediaRecorder.prototype.start","MediaRecorder.prototype.stop","MediaStream.prototype.getAudioTracks","MediaStream.prototype.getTracks","MediaStream.prototype.getVideoTracks","MediaStreamTrack.prototype.applyConstraints","MediaStreamTrack.prototype.stop"]},"Non-Standard":{"info":{"name":"Non-Standard","subsection_number":null,"subsection_name":null,"url":null},"features":["AnonymousContent.prototype.getAttributeForElement","AnonymousContent.prototype.getTextContentForElement","AnonymousContent.prototype.removeAttributeForElement","AnonymousContent.prototype.setAttributeForElement","AnonymousContent.prototype.setTextContentForElement","CommandEvent.prototype.initCommandEvent","document.embeds","Document.prototype.mozSetImageElement","Document.prototype.releaseCapture","DOMCursor.prototype.continue","DOMRequest.prototype.then","Element.prototype.releaseCapture","Element.prototype.setCapture","Event.prototype.getPreventDefault","HTMLDocument.prototype.captureEvents","HTMLDocument.prototype.releaseEvents","HTMLInputElement.prototype.mozIsTextField","HTMLPropertiesCollection.prototype.item","HTMLPropertiesCollection.prototype.namedItem","window.captureEvents","MouseEvent.prototype.initNSMouseEvent","MouseScrollEvent.prototype.initMouseScrollEvent","mozContact.prototype.init","MozPowerManager.prototype.addWakeLockListener","MozPowerManager.prototype.factoryReset","MozPowerManager.prototype.getWakeLockState","MozPowerManager.prototype.powerOff","MozPowerManager.prototype.reboot","MozPowerManager.prototype.removeWakeLockListener","navigator.buildID","navigator.oscpu","Navigator.prototype.javaEnabled","PaintRequestList.prototype.item","screen.availLeft","screen.availTop","screen.top","ScrollAreaEvent.prototype.initScrollAreaEvent","SimpleGestureEvent.prototype.initSimpleGestureEvent","window.content","window.controllers","window.dump","window.external","window.find","window.fullScreen","window.getDefaultComputedStyle","window.mozInnerScreenX","window.mozInnerScreenY","window.mozPaintCount","window.ondrop","window.releaseEvents","window.scrollByLines","window.scrollByPages","window.scrollMaxX","window.scrollMaxY","window.sidebar","window.sizeToContent","window.updateCommands","XSLTProcessor.prototype.clearParameters","XSLTProcessor.prototype.getParameter","XSLTProcessor.prototype.importStylesheet","XSLTProcessor.prototype.removeParameter","XSLTProcessor.prototype.reset","XSLTProcessor.prototype.setParameter","XSLTProcessor.prototype.transformToDocument","XSLTProcessor.prototype.transformToFragment"]},"Navigation Timing":{"info":{"name":"Navigation Timing","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/navigation-timing/"},"features":["performance.navigation","performance.navigation.redirectCount","performance.navigation.type","performance.timing","performance.timing.connectEnd","performance.timing.connectStart","performance.timing.domainLookupEnd","performance.timing.domainLookupStart","performance.timing.domComplete","performance.timing.domContentLoadedEventEnd","performance.timing.domContentLoadedEventStart","performance.timing.domInteractive","performance.timing.domLoading","performance.timing.fetchStart","performance.timing.loadEventEnd","performance.timing.loadEventStart","performance.timing.navigationStart","performance.timing.redirectEnd","performance.timing.redirectStart","performance.timing.requestStart","performance.timing.responseEnd","performance.timing.responseStart","performance.timing.unloadEventEnd","performance.timing.unloadEventStart","window.performance"]},"Proximity Events":{"info":{"name":"Proximity Events","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/proximity/"},"features":["window.ondeviceproximity","window.onuserproximity"]},"Pointer Lock":{"info":{"name":"Pointer Lock","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/pointerlock/"},"features":["document.mozPointerLockElement","document.onmozpointerlockchange","document.onmozpointerlockerror","Document.prototype.mozExitPointerLock","Element.prototype.mozRequestPointerLock","window.onmozpointerlockchange","window.onmozpointerlockerror"]},"Performance Timeline":{"info":{"name":"Performance Timeline","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/performance-timeline"},"features":["Performance.prototype.getEntriesByName","Performance.prototype.getEntriesByType"]},"Performance Timeline Level 2":{"info":{"name":"Performance Timeline Level 2","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/performance-timeline"},"features":["Performance.prototype.getEntries"]},"Page Visibility (Second Edition)":{"info":{"name":"Page Visibility (Second Edition)","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/page-visibility/"},"features":["document.hidden","document.mozHidden","document.mozVisibilityState","document.visibilityState"]},"Resource Timing":{"info":{"name":"Resource Timing","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/resource-timing/"},"features":["performance.onresourcetimingbufferfull","Performance.prototype.clearResourceTimings","Performance.prototype.setResourceTimingBufferSize"]},"Shadow DOM":{"info":{"name":"Shadow DOM","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/shadow-dom/"},"features":["HTMLContentElement.prototype.getDistributedNodes"]},"Selection API":{"info":{"name":"Selection API","subsection_number":null,"subsection_name":null,"url":"http://w3c.github.io/selection-api/"},"features":["HTMLDocument.prototype.getSelection","Selection.prototype.addRange","Selection.prototype.collapse","Selection.prototype.collapseToEnd","Selection.prototype.collapseToStart","Selection.prototype.containsNode","Selection.prototype.deleteFromDocument","Selection.prototype.extend","Selection.prototype.getRangeAt","Selection.prototype.modify","Selection.prototype.removeAllRanges","Selection.prototype.removeRange","Selection.prototype.selectAllChildren","window.getSelection"]},"Selectors API Level 1":{"info":{"name":"Selectors API Level 1","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/selectors-api"},"features":["Document.prototype.querySelector","Document.prototype.querySelectorAll","DocumentFragment.prototype.querySelector","DocumentFragment.prototype.querySelectorAll","Element.prototype.querySelector","Element.prototype.querySelectorAll"]},"The Screen Orientation API":{"info":{"name":"The Screen Orientation API","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/screen-orientation/"},"features":["screen.mozOrientation","screen.onmozorientationchange","screen.orientation","Screen.prototype.mozLockOrientation","Screen.prototype.mozUnlockOrientation","ScreenOrientation.prototype.lock","ScreenOrientation.prototype.unlock","window.ondevicemotion","window.ondeviceorientation"]},"Scalable Vector Graphics (SVG) 1.1 (Second Edition)":{"info":{"name":"Scalable Vector Graphics (SVG) 1.1 (Second Edition)","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/SVG/"},"features":["HTMLEmbedElement.prototype.getSVGDocument","HTMLIFrameElement.prototype.getSVGDocument","HTMLObjectElement.prototype.getSVGDocument","SVGAngle.prototype.convertToSpecifiedUnits","SVGAngle.prototype.newValueSpecifiedUnits","SVGAnimationElement.prototype.beginElement","SVGAnimationElement.prototype.beginElementAt","SVGAnimationElement.prototype.endElement","SVGAnimationElement.prototype.endElementAt","SVGAnimationElement.prototype.getCurrentTime","SVGAnimationElement.prototype.getSimpleDuration","SVGAnimationElement.prototype.getStartTime","SVGAnimationElement.prototype.hasExtension","SVGFEDropShadowElement.prototype.setStdDeviation","SVGFEGaussianBlurElement.prototype.setStdDeviation","SVGFilterElement.apply","SVGGraphicsElement.prototype.getBBox","SVGGraphicsElement.prototype.getCTM","SVGGraphicsElement.prototype.getScreenCTM","SVGGraphicsElement.prototype.getTransformToElement","SVGGraphicsElement.prototype.hasExtension","SVGLength.prototype.convertToSpecifiedUnits","SVGLength.prototype.newValueSpecifiedUnits","SVGLengthList.prototype.appendItem","SVGLengthList.prototype.clear","SVGLengthList.prototype.getItem","SVGLengthList.prototype.initialize","SVGLengthList.prototype.insertItemBefore","SVGLengthList.prototype.removeItem","SVGLengthList.prototype.replaceItem","SVGMarkerElement.prototype.setOrientToAngle","SVGMarkerElement.prototype.setOrientToAuto","SVGMatrix.prototype.flipX","SVGMatrix.prototype.flipY","SVGMatrix.prototype.inverse","SVGMatrix.prototype.multiply","SVGMatrix.prototype.rotate","SVGMatrix.prototype.rotateFromVector","SVGMatrix.prototype.scale","SVGMatrix.prototype.scaleNonUniform","SVGMatrix.prototype.skewX","SVGMatrix.prototype.skewY","SVGMatrix.prototype.translate","SVGNumberList.prototype.appendItem","SVGNumberList.prototype.clear","SVGNumberList.prototype.getItem","SVGNumberList.prototype.initialize","SVGNumberList.prototype.insertItemBefore","SVGNumberList.prototype.removeItem","SVGNumberList.prototype.replaceItem","SVGPathElement.prototype.createSVGPathSegArcAbs","SVGPathElement.prototype.createSVGPathSegArcRel","SVGPathElement.prototype.createSVGPathSegClosePath","SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs","SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel","SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs","SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel","SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs","SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel","SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs","SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement.prototype.createSVGPathSegLinetoAbs","SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs","SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel","SVGPathElement.prototype.createSVGPathSegLinetoRel","SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs","SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel","SVGPathElement.prototype.createSVGPathSegMovetoAbs","SVGPathElement.prototype.createSVGPathSegMovetoRel","SVGPathElement.prototype.getPathSegAtLength","SVGPathElement.prototype.getPointAtLength","SVGPathElement.prototype.getTotalLength","SVGPathSegList.prototype.appendItem","SVGPathSegList.prototype.clear","SVGPathSegList.prototype.getItem","SVGPathSegList.prototype.initialize","SVGPathSegList.prototype.insertItemBefore","SVGPathSegList.prototype.removeItem","SVGPathSegList.prototype.replaceItem","SVGPoint.prototype.matrixTransform","SVGPointList.prototype.appendItem","SVGPointList.prototype.clear","SVGPointList.prototype.getItem","SVGPointList.prototype.initialize","SVGPointList.prototype.insertItemBefore","SVGPointList.prototype.removeItem","SVGPointList.prototype.replaceItem","SVGStringList.prototype.appendItem","SVGStringList.prototype.clear","SVGStringList.prototype.getItem","SVGStringList.prototype.initialize","SVGStringList.prototype.insertItemBefore","SVGStringList.prototype.removeItem","SVGStringList.prototype.replaceItem","SVGSVGElement.prototype.animationsPaused","SVGSVGElement.prototype.createSVGAngle","SVGSVGElement.prototype.createSVGLength","SVGSVGElement.prototype.createSVGMatrix","SVGSVGElement.prototype.createSVGNumber","SVGSVGElement.prototype.createSVGPoint","SVGSVGElement.prototype.createSVGRect","SVGSVGElement.prototype.createSVGTransform","SVGSVGElement.prototype.createSVGTransformFromMatrix","SVGSVGElement.prototype.deselectAll","SVGSVGElement.prototype.forceRedraw","SVGSVGElement.prototype.getCurrentTime","SVGSVGElement.prototype.getElementById","SVGSVGElement.prototype.pauseAnimations","SVGSVGElement.prototype.setCurrentTime","SVGSVGElement.prototype.suspendRedraw","SVGSVGElement.prototype.unpauseAnimations","SVGSVGElement.prototype.unsuspendRedraw","SVGSVGElement.prototype.unsuspendRedrawAll","SVGSymbolElement.prototype.hasExtension","SVGTextContentElement.prototype.getCharNumAtPosition","SVGTextContentElement.prototype.getComputedTextLength","SVGTextContentElement.prototype.getEndPositionOfChar","SVGTextContentElement.prototype.getExtentOfChar","SVGTextContentElement.prototype.getNumberOfChars","SVGTextContentElement.prototype.getRotationOfChar","SVGTextContentElement.prototype.getStartPositionOfChar","SVGTextContentElement.prototype.getSubStringLength","SVGTextContentElement.prototype.selectSubString","SVGTransform.prototype.setMatrix","SVGTransform.prototype.setRotate","SVGTransform.prototype.setScale","SVGTransform.prototype.setSkewX","SVGTransform.prototype.setSkewY","SVGTransform.prototype.setTranslate","SVGTransformList.prototype.appendItem","SVGTransformList.prototype.clear","SVGTransformList.prototype.consolidate","SVGTransformList.prototype.createSVGTransformFromMatrix","SVGTransformList.prototype.getItem","SVGTransformList.prototype.initialize","SVGTransformList.prototype.insertItemBefore","SVGTransformList.prototype.removeItem","SVGTransformList.prototype.replaceItem"]},"Service Workers":{"info":{"name":"Service Workers","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/service-workers/"},"features":["Cache.prototype.add","Cache.prototype.addAll","Cache.prototype.delete","Cache.prototype.keys","Cache.prototype.match","Cache.prototype.matchAll","Cache.prototype.put","CacheStorage.prototype.delete","CacheStorage.prototype.has","CacheStorage.prototype.keys","CacheStorage.prototype.match","CacheStorage.prototype.open","window.caches"]},"Timing control for script-based animations":{"info":{"name":"Timing control for script-based animations","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/animation-timing"},"features":["window.cancelAnimationFrame"]},"Tracking Preference Expression (DNT)":{"info":{"name":"Tracking Preference Expression (DNT)","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/tracking-dnt/"},"features":["navigator.doNotTrack"]},"UI Events Specification":{"info":{"name":"UI Events Specification","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/uievents/"},"features":["CompositionEvent.prototype.initCompositionEvent","Event.prototype.stopImmediatePropagation","KeyboardEvent.prototype.getModifierState","KeyboardEvent.prototype.initKeyEvent","MouseEvent.prototype.getModifierState","MouseEvent.prototype.initMouseEvent","MutationEvent.prototype.initMutationEvent","UIEvent.prototype.initUIEvent"]},"URL":{"info":{"name":"URL","subsection_number":null,"subsection_name":null,"url":"https://url.spec.whatwg.org/"},"features":["URLSearchParams.prototype.append","URLSearchParams.prototype.delete","URLSearchParams.prototype.get","URLSearchParams.prototype.getAll","URLSearchParams.prototype.has","URLSearchParams.prototype.set"]},"User Timing Level 2":{"info":{"name":"User Timing Level 2","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/user-timing/"},"features":["Performance.prototype.clearMarks","Performance.prototype.clearMeasures","Performance.prototype.mark","Performance.prototype.measure"]},"Vibration API":{"info":{"name":"Vibration API","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/vibration/"},"features":["Navigator.prototype.vibrate"]},"Web Cryptography API":{"info":{"name":"Web Cryptography API","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/WebCryptoAPI/"},"features":["Crypto.prototype.getRandomValues","SubtleCrypto.prototype.decrypt","SubtleCrypto.prototype.deriveBits","SubtleCrypto.prototype.deriveKey","SubtleCrypto.prototype.digest","SubtleCrypto.prototype.encrypt","SubtleCrypto.prototype.exportKey","SubtleCrypto.prototype.generateKey","SubtleCrypto.prototype.importKey","SubtleCrypto.prototype.sign","SubtleCrypto.prototype.unwrapKey","SubtleCrypto.prototype.verify","SubtleCrypto.prototype.wrapKey","window.crypto"]},"Web Audio API":{"info":{"name":"Web Audio API","subsection_number":null,"subsection_name":null,"url":"https://webaudio.github.io/web-audio-api"},"features":["AnalyserNode.prototype.getByteFrequencyData","AnalyserNode.prototype.getByteTimeDomainData","AnalyserNode.prototype.getFloatFrequencyData","AnalyserNode.prototype.getFloatTimeDomainData","AudioBuffer.prototype.copyFromChannel","AudioBuffer.prototype.copyToChannel","AudioBuffer.prototype.getChannelData","AudioBufferSourceNode.prototype.start","AudioBufferSourceNode.prototype.stop","AudioContext.prototype.close","AudioContext.prototype.createAnalyser","AudioContext.prototype.createBiquadFilter","AudioContext.prototype.createBuffer","AudioContext.prototype.createBufferSource","AudioContext.prototype.createChannelMerger","AudioContext.prototype.createChannelSplitter","AudioContext.prototype.createConvolver","AudioContext.prototype.createDelay","AudioContext.prototype.createDynamicsCompressor","AudioContext.prototype.createGain","AudioContext.prototype.createMediaElementSource","AudioContext.prototype.createMediaStreamDestination","AudioContext.prototype.createMediaStreamSource","AudioContext.prototype.createOscillator","AudioContext.prototype.createPanner","AudioContext.prototype.createPeriodicWave","AudioContext.prototype.createScriptProcessor","AudioContext.prototype.createStereoPanner","AudioContext.prototype.createWaveShaper","AudioContext.prototype.decodeAudioData","AudioContext.prototype.resume","AudioContext.prototype.suspend","AudioListener.prototype.setOrientation","AudioListener.prototype.setPosition","AudioListener.prototype.setVelocity","AudioNode.prototype.connect","AudioNode.prototype.disconnect","AudioParam.prototype.cancelScheduledValues","AudioParam.prototype.exponentialRampToValueAtTime","AudioParam.prototype.linearRampToValueAtTime","AudioParam.prototype.setValueAtTime","AudioParam.prototype.setValueCurveAtTime","BiquadFilterNode.prototype.getFrequencyResponse","OfflineAudioContext.prototype.resume","OfflineAudioContext.prototype.startRendering","OfflineAudioContext.prototype.suspend","OscillatorNode.prototype.setPeriodicWave","OscillatorNode.prototype.start","OscillatorNode.prototype.stop","PannerNode.prototype.setOrientation","PannerNode.prototype.setPosition","PannerNode.prototype.setVelocity"]},"WebGL Specification":{"info":{"name":"WebGL Specification","subsection_number":null,"subsection_name":null,"url":"https://www.khronos.org/registry/webgl/specs/latest/1.0/"},"features":["WebGLRenderingContext.prototype.activeTexture","WebGLRenderingContext.prototype.attachShader","WebGLRenderingContext.prototype.bindAttribLocation","WebGLRenderingContext.prototype.bindBuffer","WebGLRenderingContext.prototype.bindFramebuffer","WebGLRenderingContext.prototype.bindRenderbuffer","WebGLRenderingContext.prototype.bindTexture","WebGLRenderingContext.prototype.blendColor","WebGLRenderingContext.prototype.blendEquation","WebGLRenderingContext.prototype.blendEquationSeparate","WebGLRenderingContext.prototype.blendFunc","WebGLRenderingContext.prototype.blendFuncSeparate","WebGLRenderingContext.prototype.bufferData","WebGLRenderingContext.prototype.bufferSubData","WebGLRenderingContext.prototype.checkFramebufferStatus","WebGLRenderingContext.prototype.clear","WebGLRenderingContext.prototype.clearColor","WebGLRenderingContext.prototype.clearDepth","WebGLRenderingContext.prototype.clearStencil","WebGLRenderingContext.prototype.colorMask","WebGLRenderingContext.prototype.compileShader","WebGLRenderingContext.prototype.compressedTexImage2D","WebGLRenderingContext.prototype.compressedTexSubImage2D","WebGLRenderingContext.prototype.copyTexImage2D","WebGLRenderingContext.prototype.copyTexSubImage2D","WebGLRenderingContext.prototype.createBuffer","WebGLRenderingContext.prototype.createFramebuffer","WebGLRenderingContext.prototype.createProgram","WebGLRenderingContext.prototype.createRenderbuffer","WebGLRenderingContext.prototype.createShader","WebGLRenderingContext.prototype.createTexture","WebGLRenderingContext.prototype.cullFace","WebGLRenderingContext.prototype.deleteBuffer","WebGLRenderingContext.prototype.deleteFramebuffer","WebGLRenderingContext.prototype.deleteProgram","WebGLRenderingContext.prototype.deleteRenderbuffer","WebGLRenderingContext.prototype.deleteShader","WebGLRenderingContext.prototype.deleteTexture","WebGLRenderingContext.prototype.depthFunc","WebGLRenderingContext.prototype.depthMask","WebGLRenderingContext.prototype.depthRange","WebGLRenderingContext.prototype.detachShader","WebGLRenderingContext.prototype.disable","WebGLRenderingContext.prototype.disableVertexAttribArray","WebGLRenderingContext.prototype.drawArrays","WebGLRenderingContext.prototype.drawElements","WebGLRenderingContext.prototype.enable","WebGLRenderingContext.prototype.enableVertexAttribArray","WebGLRenderingContext.prototype.finish","WebGLRenderingContext.prototype.flush","WebGLRenderingContext.prototype.framebufferRenderbuffer","WebGLRenderingContext.prototype.framebufferTexture2D","WebGLRenderingContext.prototype.frontFace","WebGLRenderingContext.prototype.generateMipmap","WebGLRenderingContext.prototype.getActiveAttrib","WebGLRenderingContext.prototype.getActiveUniform","WebGLRenderingContext.prototype.getAttachedShaders","WebGLRenderingContext.prototype.getAttribLocation","WebGLRenderingContext.prototype.getBufferParameter","WebGLRenderingContext.prototype.getContextAttributes","WebGLRenderingContext.prototype.getError","WebGLRenderingContext.prototype.getExtension","WebGLRenderingContext.prototype.getFramebufferAttachmentParameter","WebGLRenderingContext.prototype.getParameter","WebGLRenderingContext.prototype.getProgramInfoLog","WebGLRenderingContext.prototype.getProgramParameter","WebGLRenderingContext.prototype.getRenderbufferParameter","WebGLRenderingContext.prototype.getShaderInfoLog","WebGLRenderingContext.prototype.getShaderParameter","WebGLRenderingContext.prototype.getShaderPrecisionFormat","WebGLRenderingContext.prototype.getShaderSource","WebGLRenderingContext.prototype.getSupportedExtensions","WebGLRenderingContext.prototype.getTexParameter","WebGLRenderingContext.prototype.getUniform","WebGLRenderingContext.prototype.getUniformLocation","WebGLRenderingContext.prototype.getVertexAttrib","WebGLRenderingContext.prototype.getVertexAttribOffset","WebGLRenderingContext.prototype.hint","WebGLRenderingContext.prototype.isBuffer","WebGLRenderingContext.prototype.isContextLost","WebGLRenderingContext.prototype.isEnabled","WebGLRenderingContext.prototype.isFramebuffer","WebGLRenderingContext.prototype.isProgram","WebGLRenderingContext.prototype.isRenderbuffer","WebGLRenderingContext.prototype.isShader","WebGLRenderingContext.prototype.isTexture","WebGLRenderingContext.prototype.lineWidth","WebGLRenderingContext.prototype.linkProgram","WebGLRenderingContext.prototype.pixelStorei","WebGLRenderingContext.prototype.polygonOffset","WebGLRenderingContext.prototype.readPixels","WebGLRenderingContext.prototype.renderbufferStorage","WebGLRenderingContext.prototype.sampleCoverage","WebGLRenderingContext.prototype.scissor","WebGLRenderingContext.prototype.shaderSource","WebGLRenderingContext.prototype.stencilFunc","WebGLRenderingContext.prototype.stencilFuncSeparate","WebGLRenderingContext.prototype.stencilMask","WebGLRenderingContext.prototype.stencilMaskSeparate","WebGLRenderingContext.prototype.stencilOp","WebGLRenderingContext.prototype.stencilOpSeparate","WebGLRenderingContext.prototype.texImage2D","WebGLRenderingContext.prototype.texParameterf","WebGLRenderingContext.prototype.texParameteri","WebGLRenderingContext.prototype.texSubImage2D","WebGLRenderingContext.prototype.uniform1f","WebGLRenderingContext.prototype.uniform1fv","WebGLRenderingContext.prototype.uniform1i","WebGLRenderingContext.prototype.uniform1iv","WebGLRenderingContext.prototype.uniform2f","WebGLRenderingContext.prototype.uniform2fv","WebGLRenderingContext.prototype.uniform2i","WebGLRenderingContext.prototype.uniform2iv","WebGLRenderingContext.prototype.uniform3f","WebGLRenderingContext.prototype.uniform3fv","WebGLRenderingContext.prototype.uniform3i","WebGLRenderingContext.prototype.uniform3iv","WebGLRenderingContext.prototype.uniform4f","WebGLRenderingContext.prototype.uniform4fv","WebGLRenderingContext.prototype.uniform4i","WebGLRenderingContext.prototype.uniform4iv","WebGLRenderingContext.prototype.uniformMatrix2fv","WebGLRenderingContext.prototype.uniformMatrix3fv","WebGLRenderingContext.prototype.uniformMatrix4fv","WebGLRenderingContext.prototype.useProgram","WebGLRenderingContext.prototype.validateProgram","WebGLRenderingContext.prototype.vertexAttrib1f","WebGLRenderingContext.prototype.vertexAttrib1fv","WebGLRenderingContext.prototype.vertexAttrib2f","WebGLRenderingContext.prototype.vertexAttrib2fv","WebGLRenderingContext.prototype.vertexAttrib3f","WebGLRenderingContext.prototype.vertexAttrib3fv","WebGLRenderingContext.prototype.vertexAttrib4f","WebGLRenderingContext.prototype.vertexAttrib4fv","WebGLRenderingContext.prototype.vertexAttribPointer","WebGLRenderingContext.prototype.viewport"]},"WebVTT: The Web Video Text Tracks Format":{"info":{"name":"WebVTT: The Web Video Text Tracks Format","subsection_number":null,"subsection_name":null,"url":"https://w3c.github.io/webvtt/"},"features":["VTTCue.prototype.getCueAsHTML"]},"Web Notifications":{"info":{"name":"Web Notifications","subsection_number":null,"subsection_name":null,"url":"https://notifications.spec.whatwg.org/"},"features":["DesktopNotification.prototype.show","DesktopNotificationCenter.prototype.createNotification","Notification.get","Notification.prototype.close","Notification.requestPermission"]},"WebRTC 1.0: Real-time Communication Between Browser":{"info":{"name":"WebRTC 1.0: Real-time Communication Between Browser","subsection_number":null,"subsection_name":null,"url":"https://www.w3.org/TR/webrtc/"},"features":["DataChannel.prototype.close","DataChannel.prototype.send","mozRTCPeerConnection.generateCertificate","mozRTCPeerConnection.prototype.addIceCandidate","mozRTCPeerConnection.prototype.addStream","mozRTCPeerConnection.prototype.addTrack","mozRTCPeerConnection.prototype.close","mozRTCPeerConnection.prototype.createAnswer","mozRTCPeerConnection.prototype.createDataChannel","mozRTCPeerConnection.prototype.createOffer","mozRTCPeerConnection.prototype.getConfiguration","mozRTCPeerConnection.prototype.getIdentityAssertion","mozRTCPeerConnection.prototype.getLocalStreams","mozRTCPeerConnection.prototype.getReceivers","mozRTCPeerConnection.prototype.getRemoteStreams","mozRTCPeerConnection.prototype.getSenders","mozRTCPeerConnection.prototype.getStats","mozRTCPeerConnection.prototype.getStreamById","mozRTCPeerConnection.prototype.removeStream","mozRTCPeerConnection.prototype.removeTrack","mozRTCPeerConnection.prototype.setIdentityProvider","mozRTCPeerConnection.prototype.setLocalDescription","mozRTCPeerConnection.prototype.setRemoteDescription","mozRTCPeerConnection.prototype.updateIce","RTCRtpSender.prototype.replaceTrack","RTCStatsReport.prototype.forEach","RTCStatsReport.prototype.get","RTCStatsReport.prototype.has"]}}; \ No newline at end of file diff --git a/content_scripts/stub.js b/content_scripts/stub.js new file mode 100644 index 0000000..9877257 --- /dev/null +++ b/content_scripts/stub.js @@ -0,0 +1,155 @@ +/*jslint es6: true, browser: true*/ +/*global chrome, window*/ +(function () { + "use strict"; + + let script = document.createElement('script'); + let rootElm = document.head || document.documentElement; + let code = ` + window.WEB_API_MANAGER_PAGE = { + standards: ${JSON.stringify(window.WEB_API_MANAGER.standards)}, + toBlock: ${JSON.stringify(window.WEB_API_MANAGER.defaults)}, + shouldLog: true + }; + /*jslint es6: true, browser: true*/ + /*global window*/ + (function () { + "use strict"; + + const settings = window.WEB_API_MANAGER_PAGE; + const shouldLog = settings.shouldLog; + const standardsToBlock = settings.toBlock; + const standardDefinitions = settings.standards; + + const defaultFunction = function () {}; + const funcPropNames = Object.getOwnPropertyNames(defaultFunction); + const unconfigurablePropNames = funcPropNames.filter(function (propName) { + const possiblePropDesc = Object.getOwnPropertyDescriptor(defaultFunction, propName); + return (possiblePropDesc && !possiblePropDesc.configurable); + }); + + const featuresToBlock = standardsToBlock.reduce(function (prev, cur) { + return prev.concat(standardDefinitions[cur].features); + }, []); + + const toPrimitiveFunc = function (hint) { + if (hint === "number" || hint === "default") { + return 0; + } + if (hint === "string") { + return ""; + } + return undefined; + }; + + const keyPathToRefPath = function (keyPath) { + const keyParts = keyPath.split("."); + return keyParts.reduce(function (prev, cur) { + + if (prev === undefined) { + return undefined; + } + + const numNodes = prev.length; + const currentLeaf = (numNodes === 0) + ? window + : prev[numNodes - 1]; + const nextLeaf = currentLeaf[cur]; + + if (nextLeaf === undefined) { + return undefined; + } + + return prev.concat([nextLeaf]); + }, []); + }; + + const createBlockingProxy = function (keyPath) { + + let hasBeenLogged = false; + + const logKeyPath = function () { + if (keyPath !== undefined && hasBeenLogged === false) { + hasBeenLogged = true; + console.info(keyPath); + } + }; + + let blockingProxy; + blockingProxy = new Proxy(defaultFunction, { + get: function (ignore, property) { + logKeyPath(); + + if (property === Symbol.toPrimitive) { + return toPrimitiveFunc; + } + + if (property === "valueOf") { + return toPrimitiveFunc; + } + + return blockingProxy; + }, + set: function () { + logKeyPath(); + return blockingProxy; + }, + apply: function () { + logKeyPath(); + return blockingProxy; + }, + ownKeys: function (ignore) { + return unconfigurablePropNames; + }, + has: function (ignore, property) { + return (unconfigurablePropNames.indexOf(property) > -1); + }, + getOwnPropertyDescriptor: function (ignore, property) { + if (unconfigurablePropNames.indexOf(property) === -1) { + return undefined; + } + return Object.getOwnPropertyDescriptor(defaultFunction, property); + } + }); + + return blockingProxy; + }; + + const defaultBlockingProxy = createBlockingProxy(); + + const blockFeatureAtKeyPath = function (keyPath) { + const propertyRefs = keyPathToRefPath(keyPath); + + // If we weren't able to turn the key path into an array of references, + // then it means that the property doesn't exist in this DOM / + // environment, so there is nothing to block. + if (propertyRefs === undefined) { + return false; + } + + const keyPathSegments = keyPath.split("."); + const lastPropertyName = keyPathSegments[keyPathSegments.length - 1]; + const leafRef = propertyRefs[propertyRefs.length - 1]; + const parentRef = propertyRefs[propertyRefs.length - 2]; + + // At least for now, only interpose on methods. + if (typeof leafRef !== "function") { + return false; + } + + if (shouldLog === true) { + parentRef[lastPropertyName] = createBlockingProxy(keyPath); + return true; + } + + parentRef[lastPropertyName] = defaultBlockingProxy; + return true; + }; + + featuresToBlock.forEach(blockFeatureAtKeyPath); + }()); + `; + + script.appendChild(document.createTextNode(code)); + rootElm.appendChild(script); +}()); \ No newline at end of file diff --git a/data/standards/AJAX.json b/data/standards/AJAX.json new file mode 100644 index 0000000..f4218d9 --- /dev/null +++ b/data/standards/AJAX.json @@ -0,0 +1 @@ +{"info": {"name": "XMLHttpRequest", "subsection_number": null, "subsection_name": null, "url": "https://xhr.spec.whatwg.org/"}, "features": ["FormData.prototype.append", "FormData.prototype.delete", "FormData.prototype.get", "FormData.prototype.getAll", "FormData.prototype.has", "FormData.prototype.set", "XMLHttpRequest.prototype.abort", "XMLHttpRequest.prototype.getAllResponseHeaders", "XMLHttpRequest.prototype.getResponseHeader", "XMLHttpRequest.prototype.open", "XMLHttpRequest.prototype.overrideMimeType", "XMLHttpRequest.prototype.send", "XMLHttpRequest.prototype.setRequestHeader"]} \ No newline at end of file diff --git a/data/standards/ALS.json b/data/standards/ALS.json new file mode 100644 index 0000000..928ed7b --- /dev/null +++ b/data/standards/ALS.json @@ -0,0 +1 @@ +{"info": {"name": "Ambient Light Sensor API", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/ambient-light/"}, "features": ["window.ondevicelight"]} \ No newline at end of file diff --git a/data/standards/BA.json b/data/standards/BA.json new file mode 100644 index 0000000..9ffca67 --- /dev/null +++ b/data/standards/BA.json @@ -0,0 +1 @@ +{"info": {"name": "Battery Status API", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/battery-status/"}, "features": ["navigator.battery", "Navigator.prototype.getBattery"]} \ No newline at end of file diff --git a/data/standards/BE.json b/data/standards/BE.json new file mode 100644 index 0000000..66bef86 --- /dev/null +++ b/data/standards/BE.json @@ -0,0 +1 @@ +{"info": {"name": "Beacon", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/beacon/"}, "features": ["Navigator.prototype.sendBeacon"]} \ No newline at end of file diff --git a/data/standards/CO.json b/data/standards/CO.json new file mode 100644 index 0000000..fde55a0 --- /dev/null +++ b/data/standards/CO.json @@ -0,0 +1 @@ +{"info": {"name": "Console API", "subsection_number": null, "subsection_name": null, "url": "https://github.com/DeveloperToolsWG/console-object"}, "features": ["Console.prototype.assert", "Console.prototype.clear", "Console.prototype.count", "Console.prototype.debug", "Console.prototype.dir", "Console.prototype.dirxml", "Console.prototype.error", "Console.prototype.group", "Console.prototype.groupCollapsed", "Console.prototype.groupEnd", "Console.prototype.info", "Console.prototype.log", "Console.prototype.markTimeline", "Console.prototype.profile", "Console.prototype.profileEnd", "Console.prototype.table", "Console.prototype.time", "Console.prototype.timeEnd", "Console.prototype.timeline", "Console.prototype.timelineEnd", "Console.prototype.timeStamp", "Console.prototype.trace", "Console.prototype.warn"]} \ No newline at end of file diff --git a/data/standards/CSS-CR.json b/data/standards/CSS-CR.json new file mode 100644 index 0000000..e0992e2 --- /dev/null +++ b/data/standards/CSS-CR.json @@ -0,0 +1 @@ +{"info": {"name": "CSS Conditional Rules Module Level 3", "subsection_number": null, "subsection_name": null, "url": "https://drafts.csswg.org/css-conditional-3/"}, "features": ["CSS.supports"]} \ No newline at end of file diff --git a/data/standards/CSS-FO.json b/data/standards/CSS-FO.json new file mode 100644 index 0000000..cb265ba --- /dev/null +++ b/data/standards/CSS-FO.json @@ -0,0 +1 @@ +{"info": {"name": "CSS Font Loading Module Level 3", "subsection_number": null, "subsection_name": null, "url": "https://drafts.csswg.org/css-font-loading/"}, "features": ["document.fonts", "FontFace.prototype.load", "FontFaceSet.prototype.add", "FontFaceSet.prototype.check", "FontFaceSet.prototype.clear", "FontFaceSet.prototype.delete", "FontFaceSet.prototype.entries", "FontFaceSet.prototype.forEach", "FontFaceSet.prototype.has", "FontFaceSet.prototype.keys", "FontFaceSet.prototype.load", "FontFaceSet.prototype.values"]} \ No newline at end of file diff --git a/data/standards/CSS-OM.json b/data/standards/CSS-OM.json new file mode 100644 index 0000000..f120230 --- /dev/null +++ b/data/standards/CSS-OM.json @@ -0,0 +1 @@ +{"info": {"name": "CSS Object Model (CSSOM)", "subsection_number": null, "subsection_name": null, "url": "https://drafts.csswg.org/cssom/"}, "features": ["CSS.escape", "Document.prototype.caretPositionFromPoint", "Document.prototype.elementFromPoint", "Element.prototype.getBoundingClientRect", "Element.prototype.getClientRects", "Element.prototype.scroll", "Element.prototype.scrollBy", "Element.prototype.scrollIntoView", "Element.prototype.scrollTo", "MediaList.prototype.appendMedium", "MediaList.prototype.deleteMedium", "MediaList.prototype.item", "MediaQueryList.prototype.addListener", "MediaQueryList.prototype.removeListener", "StyleSheetList.prototype.item"]} \ No newline at end of file diff --git a/data/standards/CSS-VM.json b/data/standards/CSS-VM.json new file mode 100644 index 0000000..d15c59f --- /dev/null +++ b/data/standards/CSS-VM.json @@ -0,0 +1 @@ +{"info": {"name": "CSSOM View Module", "subsection_number": null, "subsection_name": null, "url": "https://drafts.csswg.org/cssom-view/"}, "features": ["CaretPosition.prototype.getClientRect", "screen.availHeight", "screen.availWidth", "screen.colorDepth", "screen.height", "screen.left", "screen.pixelDepth", "screen.width", "window.devicePixelRatio", "window.innerHeight", "window.innerWidth", "window.matchMedia", "window.moveBy", "window.moveTo", "window.outerHeight", "window.outerWidth", "window.pageXOffset", "window.pageYOffset", "window.resizeBy", "window.resizeTo", "window.screen", "window.screenX", "window.screenY", "window.scroll", "window.scrollBy", "window.scrollTo", "window.scrollX", "window.scrollY"]} \ No newline at end of file diff --git a/data/standards/DO.json b/data/standards/DO.json new file mode 100644 index 0000000..c468078 --- /dev/null +++ b/data/standards/DO.json @@ -0,0 +1 @@ +{"info": {"name": "DeviceOrientation Event Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/orientation-event/"}, "features": ["DeviceMotionEvent.prototype.initDeviceMotionEvent", "DeviceOrientationEvent.prototype.initDeviceOrientationEvent"]} \ No newline at end of file diff --git a/data/standards/DOM-PS.json b/data/standards/DOM-PS.json new file mode 100644 index 0000000..1d3afdc --- /dev/null +++ b/data/standards/DOM-PS.json @@ -0,0 +1 @@ +{"info": {"name": "DOM Parsing and Serialization", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/DOM-Parsing/"}, "features": ["DOMParser.prototype.parseFromString", "Element.prototype.insertAdjacentHTML", "XMLSerializer.prototype.serializeToString"]} \ No newline at end of file diff --git a/data/standards/DOM.json b/data/standards/DOM.json new file mode 100644 index 0000000..af3e0d7 --- /dev/null +++ b/data/standards/DOM.json @@ -0,0 +1 @@ +{"info": {"name": "DOM", "subsection_number": null, "subsection_name": null, "url": "https://dom.spec.whatwg.org/"}, "features": ["CharacterData.prototype.appendData", "CharacterData.prototype.deleteData", "CharacterData.prototype.insertData", "CharacterData.prototype.remove", "CharacterData.prototype.replaceData", "CharacterData.prototype.substringData", "CustomEvent.prototype.initCustomEvent", "document.characterSet", "document.childElementCount", "document.children", "document.close", "document.compatMode", "document.contentType", "document.firstElementChild", "document.inputEncoding", "document.lastElementChild", "Document.prototype.createAttribute", "Document.prototype.createElement", "Document.prototype.createProcessingInstruction", "Document.prototype.getElementsByClassName", "document.scripts", "DocumentFragment.prototype.getElementById", "DocumentType.prototype.remove", "DOMImplementation.prototype.createHTMLDocument", "DOMTokenList.prototype.add", "DOMTokenList.prototype.contains", "DOMTokenList.prototype.item", "DOMTokenList.prototype.remove", "DOMTokenList.prototype.toggle", "Element.prototype.closest", "Element.prototype.getElementsByClassName", "Element.prototype.matches", "Element.prototype.mozMatchesSelector", "Element.prototype.remove", "window.clearInterval", "window.clearTimeout"]} \ No newline at end of file diff --git a/data/standards/DOM1.json b/data/standards/DOM1.json new file mode 100644 index 0000000..94d7c33 --- /dev/null +++ b/data/standards/DOM1.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 1 Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/REC-DOM-Level-1/"}, "features": ["Document.prototype.getElementById", "Document.prototype.getElementsByTagName", "Element.prototype.getAttribute", "Element.prototype.getAttributeNode", "Element.prototype.getElementsByTagName", "Element.prototype.removeAttribute", "Element.prototype.removeAttributeNode", "Element.prototype.setAttribute", "Element.prototype.setAttributeNode", "HTMLCollection.prototype.item", "HTMLCollection.prototype.namedItem", "HTMLDocument.prototype.close", "HTMLDocument.prototype.open", "HTMLDocument.prototype.write", "HTMLDocument.prototype.writeln", "HTMLElement.prototype.click", "HTMLElement.prototype.focus", "HTMLFormElement.prototype.reset", "HTMLFormElement.prototype.submit", "HTMLInputElement.prototype.select", "HTMLSelectElement.prototype.add", "HTMLSelectElement.prototype.item", "HTMLSelectElement.prototype.namedItem", "HTMLSelectElement.prototype.remove", "HTMLTableElement.prototype.createCaption", "HTMLTableElement.prototype.createTBody", "HTMLTableElement.prototype.createTFoot", "HTMLTableElement.prototype.createTHead", "HTMLTableElement.prototype.deleteCaption", "HTMLTableElement.prototype.deleteRow", "HTMLTableElement.prototype.deleteTFoot", "HTMLTableElement.prototype.deleteTHead", "HTMLTableElement.prototype.insertRow", "HTMLTableRowElement.prototype.deleteCell", "HTMLTableRowElement.prototype.insertCell", "HTMLTableSectionElement.prototype.deleteRow", "HTMLTableSectionElement.prototype.insertRow", "HTMLTextAreaElement.prototype.select", "Node.prototype.appendChild", "Node.prototype.cloneNode", "Node.prototype.hasChildNodes", "Node.prototype.insertBefore", "Node.prototype.normalize", "Node.prototype.removeChild", "Node.prototype.replaceChild", "NodeList.prototype.item", "Text.prototype.splitText"]} \ No newline at end of file diff --git a/data/standards/DOM2-C.json b/data/standards/DOM2-C.json new file mode 100644 index 0000000..82456fd --- /dev/null +++ b/data/standards/DOM2-C.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 2 Core Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-2-Core/"}, "features": ["document.doctype", "document.documentElement", "document.domain", "document.implementation", "Document.prototype.createAttributeNS", "Document.prototype.createCDATASection", "Document.prototype.createComment", "Document.prototype.createDocumentFragment", "Document.prototype.createElementNS", "Document.prototype.createTextNode", "Document.prototype.getElementsByTagNameNS", "Document.prototype.importNode", "DOMImplementation.prototype.createDocument", "DOMImplementation.prototype.createDocumentType", "DOMImplementation.prototype.hasFeature", "Element.prototype.getAttributeNodeNS", "Element.prototype.getAttributeNS", "Element.prototype.getElementsByTagNameNS", "Element.prototype.hasAttribute", "Element.prototype.hasAttributeNS", "Element.prototype.hasAttributes", "Element.prototype.removeAttributeNS", "Element.prototype.setAttributeNodeNS", "Element.prototype.setAttributeNS", "NamedNodeMap.prototype.getNamedItem", "NamedNodeMap.prototype.getNamedItemNS", "NamedNodeMap.prototype.item", "NamedNodeMap.prototype.removeNamedItem", "NamedNodeMap.prototype.removeNamedItemNS", "NamedNodeMap.prototype.setNamedItem", "NamedNodeMap.prototype.setNamedItemNS"]} \ No newline at end of file diff --git a/data/standards/DOM2-E.json b/data/standards/DOM2-E.json new file mode 100644 index 0000000..fdd6598 --- /dev/null +++ b/data/standards/DOM2-E.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 2 Events Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-2-Events/"}, "features": ["Document.prototype.createEvent", "Event.prototype.initEvent", "Event.prototype.preventDefault", "Event.prototype.stopPropagation", "EventTarget.prototype.addEventListener", "EventTarget.prototype.dispatchEvent", "EventTarget.prototype.removeEventListener"]} \ No newline at end of file diff --git a/data/standards/DOM2-H.json b/data/standards/DOM2-H.json new file mode 100644 index 0000000..b61b286 --- /dev/null +++ b/data/standards/DOM2-H.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 2 HTML Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-2-HTML/"}, "features": ["document.cookie", "document.forms", "document.getElementsByName", "document.open", "document.referrer", "document.title", "document.URL", "document.write", "document.writeln", "HTMLDocument.prototype.getElementsByName", "HTMLElement.prototype.blur"]} \ No newline at end of file diff --git a/data/standards/DOM2-S.json b/data/standards/DOM2-S.json new file mode 100644 index 0000000..886d1ab --- /dev/null +++ b/data/standards/DOM2-S.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 2 Style Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-2-Style/"}, "features": ["CSSPrimitiveValue.prototype.getCounterValue", "CSSPrimitiveValue.prototype.getFloatValue", "CSSPrimitiveValue.prototype.getRectValue", "CSSPrimitiveValue.prototype.getRGBColorValue", "CSSPrimitiveValue.prototype.getStringValue", "CSSPrimitiveValue.prototype.setFloatValue", "CSSPrimitiveValue.prototype.setStringValue", "CSSRuleList.prototype.item", "CSSStyleDeclaration.prototype.getPropertyCSSValue", "CSSStyleDeclaration.prototype.getPropertyPriority", "CSSStyleDeclaration.prototype.getPropertyValue", "CSSStyleDeclaration.prototype.item", "CSSStyleDeclaration.prototype.removeProperty", "CSSStyleDeclaration.prototype.setProperty", "CSSStyleSheet.prototype.deleteRule", "CSSStyleSheet.prototype.insertRule", "CSSValueList.prototype.item", "document.styleSheets", "window.getComputedStyle"]} \ No newline at end of file diff --git a/data/standards/DOM2-T.json b/data/standards/DOM2-T.json new file mode 100644 index 0000000..4aa9f2c --- /dev/null +++ b/data/standards/DOM2-T.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 2 Traversal and Range Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-2-Traversal-Range/"}, "features": ["Document.prototype.createNodeIterator", "Document.prototype.createRange", "Document.prototype.createTreeWalker", "NodeIterator.prototype.detach", "NodeIterator.prototype.nextNode", "NodeIterator.prototype.previousNode", "Range.prototype.cloneContents", "Range.prototype.cloneRange", "Range.prototype.collapse", "Range.prototype.compareBoundaryPoints", "Range.prototype.comparePoint", "Range.prototype.createContextualFragment", "Range.prototype.deleteContents", "Range.prototype.detach", "Range.prototype.extractContents", "Range.prototype.getBoundingClientRect", "Range.prototype.getClientRects", "Range.prototype.insertNode", "Range.prototype.intersectsNode", "Range.prototype.isPointInRange", "Range.prototype.selectNode", "Range.prototype.selectNodeContents", "Range.prototype.setEnd", "Range.prototype.setEndAfter", "Range.prototype.setEndBefore", "Range.prototype.setStart", "Range.prototype.setStartAfter", "Range.prototype.setStartBefore", "Range.prototype.surroundContents", "TreeWalker.prototype.firstChild", "TreeWalker.prototype.lastChild", "TreeWalker.prototype.nextNode", "TreeWalker.prototype.nextSibling", "TreeWalker.prototype.parentNode", "TreeWalker.prototype.previousNode", "TreeWalker.prototype.previousSibling"]} \ No newline at end of file diff --git a/data/standards/DOM3-C.json b/data/standards/DOM3-C.json new file mode 100644 index 0000000..bb21c4b --- /dev/null +++ b/data/standards/DOM3-C.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 3 Core Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-3-Core/"}, "features": ["document.documentURI", "Document.prototype.adoptNode", "DOMStringList.prototype.contains", "DOMStringList.prototype.item", "Node.prototype.compareDocumentPosition", "Node.prototype.contains", "Node.prototype.isDefaultNamespace", "Node.prototype.isEqualNode", "Node.prototype.lookupNamespaceURI", "Node.prototype.lookupPrefix"]} \ No newline at end of file diff --git a/data/standards/DOM3-X.json b/data/standards/DOM3-X.json new file mode 100644 index 0000000..6709224 --- /dev/null +++ b/data/standards/DOM3-X.json @@ -0,0 +1 @@ +{"info": {"name": "Document Object Model (DOM) Level 3 XPath Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/DOM-Level-3-XPath/"}, "features": ["Document.prototype.createExpression", "Document.prototype.createNSResolver", "Document.prototype.evaluate", "XPathEvaluator.prototype.createExpression", "XPathEvaluator.prototype.createNSResolver", "XPathEvaluator.prototype.evaluate", "XPathExpression.prototype.evaluate", "XPathResult.prototype.iterateNext", "XPathResult.prototype.snapshotItem"]} \ No newline at end of file diff --git a/data/standards/DOM4.json b/data/standards/DOM4.json new file mode 100644 index 0000000..6ddf514 --- /dev/null +++ b/data/standards/DOM4.json @@ -0,0 +1 @@ +{"info": {"name": "W3C DOM4", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/dom/"}, "features": ["MutationObserver.prototype.disconnect", "MutationObserver.prototype.observe", "MutationObserver.prototype.takeRecords"]} \ No newline at end of file diff --git a/data/standards/DU.json b/data/standards/DU.json new file mode 100644 index 0000000..cbe4950 --- /dev/null +++ b/data/standards/DU.json @@ -0,0 +1 @@ +{"info": {"name": "Directory Upload", "subsection_number": null, "subsection_name": null, "url": "https://wicg.github.io/directory-upload/proposal.html"}, "features": ["Directory.prototype.getFilesAndDirectories"]} \ No newline at end of file diff --git a/data/standards/E.json b/data/standards/E.json new file mode 100644 index 0000000..6407817 --- /dev/null +++ b/data/standards/E.json @@ -0,0 +1 @@ +{"info": {"name": "Encoding", "subsection_number": null, "subsection_name": null, "url": "https://encoding.spec.whatwg.org/"}, "features": ["TextDecoder.prototype.decode", "TextEncoder.prototype.encode"]} \ No newline at end of file diff --git a/data/standards/EC.json b/data/standards/EC.json new file mode 100644 index 0000000..8258802 --- /dev/null +++ b/data/standards/EC.json @@ -0,0 +1 @@ +{"info": {"name": "execCommand", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/editing/execCommand.html"}, "features": ["document.execCommand", "document.queryCommandEnabled", "document.queryCommandIndeterm", "document.queryCommandState", "document.queryCommandSupported", "document.queryCommandValue", "HTMLDocument.prototype.execCommand", "HTMLDocument.prototype.queryCommandEnabled", "HTMLDocument.prototype.queryCommandIndeterm", "HTMLDocument.prototype.queryCommandState", "HTMLDocument.prototype.queryCommandSupported", "HTMLDocument.prototype.queryCommandValue"]} \ No newline at end of file diff --git a/data/standards/EME.json b/data/standards/EME.json new file mode 100644 index 0000000..529221b --- /dev/null +++ b/data/standards/EME.json @@ -0,0 +1 @@ +{"info": {"name": "Encrypted Media Extensions", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/encrypted-media/"}, "features": ["MediaKeys.prototype.createSession", "MediaKeys.prototype.setServerCertificate", "MediaKeySession.prototype.close", "MediaKeySession.prototype.generateRequest", "MediaKeySession.prototype.load", "MediaKeySession.prototype.remove", "MediaKeySession.prototype.update", "MediaKeyStatusMap.prototype.entries", "MediaKeyStatusMap.prototype.keys", "MediaKeyStatusMap.prototype.values", "MediaKeySystemAccess.prototype.createMediaKeys", "MediaKeySystemAccess.prototype.getConfiguration", "Navigator.prototype.requestMediaKeySystemAccess"]} \ No newline at end of file diff --git a/data/standards/F.json b/data/standards/F.json new file mode 100644 index 0000000..0275f26 --- /dev/null +++ b/data/standards/F.json @@ -0,0 +1 @@ +{"info": {"name": "Fetch", "subsection_number": null, "subsection_name": null, "url": "https://fetch.spec.whatwg.org/"}, "features": ["Headers.prototype.append", "Headers.prototype.delete", "Headers.prototype.get", "Headers.prototype.getAll", "Headers.prototype.has", "Headers.prototype.set", "Request.prototype.arrayBuffer", "Request.prototype.blob", "Request.prototype.clone", "Request.prototype.formData", "Request.prototype.json", "Request.prototype.text", "Response.error", "Response.prototype.arrayBuffer", "Response.prototype.blob", "Response.prototype.clone", "Response.prototype.formData", "Response.prototype.json", "Response.prototype.text", "Response.redirect", "window.fetch"]} \ No newline at end of file diff --git a/data/standards/FA.json b/data/standards/FA.json new file mode 100644 index 0000000..22773fe --- /dev/null +++ b/data/standards/FA.json @@ -0,0 +1 @@ +{"info": {"name": "File API", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/FileAPI/"}, "features": ["Blob.prototype.slice", "FileList.prototype.item", "FileReader.prototype.abort", "FileReader.prototype.readAsArrayBuffer", "FileReader.prototype.readAsBinaryString", "FileReader.prototype.readAsDataURL", "FileReader.prototype.readAsText", "URL.createObjectURL", "URL.revokeObjectURL"]} \ No newline at end of file diff --git a/data/standards/FULL.json b/data/standards/FULL.json new file mode 100644 index 0000000..53f313f --- /dev/null +++ b/data/standards/FULL.json @@ -0,0 +1 @@ +{"info": {"name": "Fullscreen API", "subsection_number": null, "subsection_name": null, "url": "https://fullscreen.spec.whatwg.org/"}, "features": ["document.mozFullScreen", "document.mozFullScreenElement", "document.mozFullScreenEnabled", "document.onmozfullscreenchange", "document.onmozfullscreenerror", "Document.prototype.mozCancelFullScreen", "Element.prototype.mozRequestFullScreen", "window.onmozfullscreenchange", "window.onmozfullscreenerror"]} \ No newline at end of file diff --git a/data/standards/GEO.json b/data/standards/GEO.json new file mode 100644 index 0000000..c9b691a --- /dev/null +++ b/data/standards/GEO.json @@ -0,0 +1 @@ +{"info": {"name": "Geolocation API Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/geolocation-API/"}, "features": ["navigator.geolocation", "navigator.geolocation.getCurrentPosition", "navigator.geolocation.watchPosition", "navigator.geolocation.clearWatch"]} \ No newline at end of file diff --git a/data/standards/GIM.json b/data/standards/GIM.json new file mode 100644 index 0000000..a8459d0 --- /dev/null +++ b/data/standards/GIM.json @@ -0,0 +1 @@ +{"info": {"name": "Geometry Interfaces Module Level 1", "subsection_number": null, "subsection_name": null, "url": "https://drafts.fxtf.org/geometry/"}, "features": ["DOMMatrix.prototype.invertSelf", "DOMMatrix.prototype.multiplySelf", "DOMMatrix.prototype.preMultiplySelf", "DOMMatrix.prototype.rotateAxisAngleSelf", "DOMMatrix.prototype.rotateFromVectorSelf", "DOMMatrix.prototype.rotateSelf", "DOMMatrix.prototype.scale3dSelf", "DOMMatrix.prototype.scaleNonUniformSelf", "DOMMatrix.prototype.scaleSelf", "DOMMatrix.prototype.setMatrixValue", "DOMMatrix.prototype.skewXSelf", "DOMMatrix.prototype.skewYSelf", "DOMMatrix.prototype.translateSelf", "DOMMatrixReadOnly.prototype.flipX", "DOMMatrixReadOnly.prototype.flipY", "DOMMatrixReadOnly.prototype.inverse", "DOMMatrixReadOnly.prototype.multiply", "DOMMatrixReadOnly.prototype.rotate", "DOMMatrixReadOnly.prototype.rotateAxisAngle", "DOMMatrixReadOnly.prototype.rotateFromVector", "DOMMatrixReadOnly.prototype.scale", "DOMMatrixReadOnly.prototype.scale3d", "DOMMatrixReadOnly.prototype.scaleNonUniform", "DOMMatrixReadOnly.prototype.skewX", "DOMMatrixReadOnly.prototype.skewY", "DOMMatrixReadOnly.prototype.toFloat32Array", "DOMMatrixReadOnly.prototype.toFloat64Array", "DOMMatrixReadOnly.prototype.transformPoint", "DOMMatrixReadOnly.prototype.translate", "DOMRectList.prototype.item"]} \ No newline at end of file diff --git a/data/standards/GP.json b/data/standards/GP.json new file mode 100644 index 0000000..3ff07c6 --- /dev/null +++ b/data/standards/GP.json @@ -0,0 +1 @@ +{"info": {"name": "Gamepad", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/gamepad/"}, "features": ["Navigator.prototype.getGamepads"]} \ No newline at end of file diff --git a/data/standards/H-B.json b/data/standards/H-B.json new file mode 100644 index 0000000..a9edd6c --- /dev/null +++ b/data/standards/H-B.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "9.6", "subsection_name": "Broadcasting to other browsing contexts", "url": "https://html.spec.whatwg.org/multipage/comms.html#dom-broadcastchannel-postmessage"}, "features": ["BroadcastChannel.prototype.close", "BroadcastChannel.prototype.postMessage"]} \ No newline at end of file diff --git a/data/standards/H-C.json b/data/standards/H-C.json new file mode 100644 index 0000000..81a29af --- /dev/null +++ b/data/standards/H-C.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "4.12.4", "subsection_name": "The canvas element", "url": "https://html.spec.whatwg.org/multipage/scripting.html#the-canvas-element"}, "features": ["CanvasGradient.prototype.addColorStop", "CanvasPattern.prototype.setTransform", "CanvasRenderingContext2D.prototype.arc", "CanvasRenderingContext2D.prototype.arcTo", "CanvasRenderingContext2D.prototype.beginPath", "CanvasRenderingContext2D.prototype.bezierCurveTo", "CanvasRenderingContext2D.prototype.clearRect", "CanvasRenderingContext2D.prototype.clip", "CanvasRenderingContext2D.prototype.closePath", "CanvasRenderingContext2D.prototype.createImageData", "CanvasRenderingContext2D.prototype.createLinearGradient", "CanvasRenderingContext2D.prototype.createPattern", "CanvasRenderingContext2D.prototype.createRadialGradient", "CanvasRenderingContext2D.prototype.drawFocusIfNeeded", "CanvasRenderingContext2D.prototype.drawImage", "CanvasRenderingContext2D.prototype.fill", "CanvasRenderingContext2D.prototype.fillRect", "CanvasRenderingContext2D.prototype.fillText", "CanvasRenderingContext2D.prototype.getImageData", "CanvasRenderingContext2D.prototype.getLineDash", "CanvasRenderingContext2D.prototype.isPointInPath", "CanvasRenderingContext2D.prototype.isPointInStroke", "CanvasRenderingContext2D.prototype.lineTo", "CanvasRenderingContext2D.prototype.measureText", "CanvasRenderingContext2D.prototype.moveTo", "CanvasRenderingContext2D.prototype.putImageData", "CanvasRenderingContext2D.prototype.quadraticCurveTo", "CanvasRenderingContext2D.prototype.rect", "CanvasRenderingContext2D.prototype.resetTransform", "CanvasRenderingContext2D.prototype.restore", "CanvasRenderingContext2D.prototype.rotate", "CanvasRenderingContext2D.prototype.save", "CanvasRenderingContext2D.prototype.scale", "CanvasRenderingContext2D.prototype.setLineDash", "CanvasRenderingContext2D.prototype.setTransform", "CanvasRenderingContext2D.prototype.stroke", "CanvasRenderingContext2D.prototype.strokeRect", "CanvasRenderingContext2D.prototype.strokeText", "CanvasRenderingContext2D.prototype.transform", "CanvasRenderingContext2D.prototype.translate", "HTMLCanvasElement.prototype.getContext", "HTMLCanvasElement.prototype.mozGetAsFile", "HTMLCanvasElement.prototype.toBlob", "HTMLCanvasElement.prototype.toDataURL", "Path2D.prototype.addPath", "Path2D.prototype.arc", "Path2D.prototype.arcTo", "Path2D.prototype.bezierCurveTo", "Path2D.prototype.closePath", "Path2D.prototype.lineTo", "Path2D.prototype.moveTo", "Path2D.prototype.quadraticCurveTo", "Path2D.prototype.rect", "window.requestAnimationFrame"]} \ No newline at end of file diff --git a/data/standards/H-CM.json b/data/standards/H-CM.json new file mode 100644 index 0000000..08739cb --- /dev/null +++ b/data/standards/H-CM.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "9.5", "subsection_name": "Channel Messaging", "url": "https://html.spec.whatwg.org/multipage/comms.html#channel-messaging"}, "features": ["MessagePort.prototype.close", "MessagePort.prototype.postMessage", "MessagePort.prototype.start", "window.postMessage"]} \ No newline at end of file diff --git a/data/standards/H-HI.json b/data/standards/H-HI.json new file mode 100644 index 0000000..d956249 --- /dev/null +++ b/data/standards/H-HI.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "7.5.2", "subsection_name": "History Interface", "url": "https://html.spec.whatwg.org/multipage/browsers.html#the-history-interface"}, "features": ["History.prototype.back", "History.prototype.forward", "History.prototype.go", "History.prototype.pushState", "History.prototype.replaceState", "window.history"]} \ No newline at end of file diff --git a/data/standards/H-P.json b/data/standards/H-P.json new file mode 100644 index 0000000..cb64296 --- /dev/null +++ b/data/standards/H-P.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "8.6.1.5", "subsection_name": "Plugins", "url": "https://html.spec.whatwg.org/multipage/webappapis.html#plugins-2"}, "features": ["document.plugins", "MimeTypeArray.prototype.item", "MimeTypeArray.prototype.namedItem", "navigator.mimeTypes", "navigator.plugins", "Plugin.prototype.item", "Plugin.prototype.namedItem", "PluginArray.prototype.item", "PluginArray.prototype.namedItem", "PluginArray.prototype.refresh"]} \ No newline at end of file diff --git a/data/standards/H-WB.json b/data/standards/H-WB.json new file mode 100644 index 0000000..6b31db1 --- /dev/null +++ b/data/standards/H-WB.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "11", "subsection_name": "Web Storage", "url": "https://html.spec.whatwg.org/multipage/webstorage.html"}, "features": ["Storage.prototype.clear", "Storage.prototype.getItem", "Storage.prototype.key", "Storage.prototype.removeItem", "Storage.prototype.setItem", "StorageEvent.prototype.initStorageEvent", "window.localStorage", "window.sessionStorage"]} \ No newline at end of file diff --git a/data/standards/H-WS.json b/data/standards/H-WS.json new file mode 100644 index 0000000..0b5c49e --- /dev/null +++ b/data/standards/H-WS.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "9.3", "subsection_name": "Web Sockets", "url": "https://html.spec.whatwg.org/multipage/comms.html#network"}, "features": ["WebSocket.prototype.close", "WebSocket.prototype.send"]} \ No newline at end of file diff --git a/data/standards/H-WW.json b/data/standards/H-WW.json new file mode 100644 index 0000000..6ba188d --- /dev/null +++ b/data/standards/H-WW.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": "10", "subsection_name": "Web Workers", "url": "https://html.spec.whatwg.org/multipage/workers.html"}, "features": ["Worker.prototype.postMessage", "Worker.prototype.terminate"]} \ No newline at end of file diff --git a/data/standards/HRT.json b/data/standards/HRT.json new file mode 100644 index 0000000..5b499fa --- /dev/null +++ b/data/standards/HRT.json @@ -0,0 +1 @@ +{"info": {"name": "High Resolution Time Level 2", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/hr-time/"}, "features": ["Performance.prototype.now"]} \ No newline at end of file diff --git a/data/standards/HTML.json b/data/standards/HTML.json new file mode 100644 index 0000000..9356fc0 --- /dev/null +++ b/data/standards/HTML.json @@ -0,0 +1 @@ +{"info": {"name": "HTML", "subsection_number": null, "subsection_name": null, "url": "https://html.spec.whatwg.org"}, "features": ["DataTransfer.prototype.addElement", "DataTransfer.prototype.clearData", "DataTransfer.prototype.getData", "DataTransfer.prototype.mozClearDataAt", "DataTransfer.prototype.mozGetDataAt", "DataTransfer.prototype.mozSetDataAt", "DataTransfer.prototype.mozTypesAt", "DataTransfer.prototype.setData", "DataTransfer.prototype.setDragImage", "document.activeElement", "document.body", "document.currentScript", "document.designMode", "document.dir", "document.getItems", "document.head", "document.images", "document.lastModified", "document.lastStyleSheetSet", "document.links", "document.onabort", "document.onblur", "document.oncanplay", "document.oncanplaythrough", "document.onchange", "document.onclick", "document.oncontextmenu", "document.oncopy", "document.oncut", "document.ondblclick", "document.ondrag", "document.ondragend", "document.ondragenter", "document.ondragleave", "document.ondragover", "document.ondragstart", "document.ondrop", "document.ondurationchange", "document.onemptied", "document.onended", "document.onerror", "document.onfocus", "document.oninput", "document.oninvalid", "document.onkeydown", "document.onkeypress", "document.onkeyup", "document.onload", "document.onloadeddata", "document.onloadedmetadata", "document.onloadstart", "document.onmousedown", "document.onmouseenter", "document.onmouseleave", "document.onmousemove", "document.onmouseout", "document.onmouseover", "document.onmouseup", "document.onpaste", "document.onpause", "document.onplay", "document.onplaying", "document.onprogress", "document.onratechange", "document.onreadystatechange", "document.onreset", "document.onresize", "document.onscroll", "document.onseeked", "document.onseeking", "document.onselect", "document.onshow", "document.onstalled", "document.onsubmit", "document.onsuspend", "document.ontimeupdate", "document.onvolumechange", "document.onwaiting", "document.onwheel", "Document.prototype.enableStyleSheetsForSet", "Document.prototype.hasFocus", "document.selectedStyleSheetSet", "document.styleSheetSets", "EventSource.prototype.close", "HashChangeEvent.prototype.initHashChangeEvent", "HTMLAllCollection.prototype.item", "HTMLAllCollection.prototype.namedItem", "HTMLDocument.prototype.clear", "HTMLDocument.prototype.getItems", "navigator.appCodeName", "navigator.appName", "navigator.appVersion", "navigator.cookieEnabled", "navigator.onLine", "navigator.platform", "navigator.product", "navigator.productSub", "Navigator.prototype.registerContentHandler", "Navigator.prototype.registerProtocolHandler", "navigator.userAgent", "navigator.vendor", "navigator.vendorSub", "PropertyNodeList.prototype.getValues", "TimeRanges.prototype.end", "TimeRanges.prototype.start", "window.blur", "window.close", "window.closed", "window.console", "window.createImageBitmap", "window.document", "window.focus", "window.frameElement", "window.frames", "window.length", "window.location", "window.name", "window.navigator", "window.onabort", "window.onafterprint", "window.onbeforeprint", "window.onbeforeunload", "window.onblur", "window.oncanplay", "window.oncanplaythrough", "window.onchange", "window.onclick", "window.oncontextmenu", "window.ondblclick", "window.ondrag", "window.ondragend", "window.ondragenter", "window.ondragleave", "window.ondragover", "window.ondragstart", "window.ondurationchange", "window.onemptied", "window.onended", "window.onerror", "window.onfocus", "window.onhashchange", "window.oninput", "window.oninvalid", "window.onkeydown", "window.onkeypress", "window.onkeyup", "window.onlanguagechange", "window.onloadeddata", "window.onloadedmetadata", "window.onloadstart", "window.onmessage", "window.onmousedown", "window.onmouseenter", "window.onmouseleave", "window.onmousemove", "window.onmouseout", "window.onmouseover", "window.onmouseup", "window.onoffline", "window.ononline", "window.onpagehide", "window.onpageshow", "window.onpause", "window.onplay", "window.onplaying", "window.onpopstate", "window.onprogress", "window.onratechange", "window.onreset", "window.onresize", "window.onscroll", "window.onseeked", "window.onseeking", "window.onselect", "window.onshow", "window.onstalled", "window.onsubmit", "window.onsuspend", "window.ontimeupdate", "window.onunload", "window.onvolumechange", "window.onwaiting", "window.onwheel", "window.open", "window.opener", "window.parent", "window.self", "window.setInterval", "window.setResizable", "window.setTimeout", "window.showModalDialog", "window.stop", "window.top", "window.window", "XMLDocument.prototype.load"]} \ No newline at end of file diff --git a/data/standards/HTML5.json b/data/standards/HTML5.json new file mode 100644 index 0000000..54896d6 --- /dev/null +++ b/data/standards/HTML5.json @@ -0,0 +1 @@ +{"info": {"name": "HTML 5", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/html5/"}, "features": ["document.defaultView", "document.location", "document.onafterscriptexecute", "document.onbeforescriptexecute", "document.preferredStyleSheetSet", "document.readyState", "HTMLButtonElement.prototype.checkValidity", "HTMLButtonElement.prototype.setCustomValidity", "HTMLFieldSetElement.prototype.checkValidity", "HTMLFieldSetElement.prototype.setCustomValidity", "HTMLFormControlsCollection.prototype.item", "HTMLFormElement.prototype.checkValidity", "HTMLInputElement.prototype.checkValidity", "HTMLInputElement.prototype.setCustomValidity", "HTMLInputElement.prototype.setRangeText", "HTMLInputElement.prototype.setSelectionRange", "HTMLInputElement.prototype.stepDown", "HTMLInputElement.prototype.stepUp", "HTMLMediaElement.prototype.addTextTrack", "HTMLMediaElement.prototype.canPlayType", "HTMLMediaElement.prototype.fastSeek", "HTMLMediaElement.prototype.load", "HTMLMediaElement.prototype.mozCaptureStream", "HTMLMediaElement.prototype.mozCaptureStreamUntilEnded", "HTMLMediaElement.prototype.mozGetMetadata", "HTMLMediaElement.prototype.pause", "HTMLMediaElement.prototype.play", "HTMLMediaElement.prototype.setMediaKeys", "HTMLObjectElement.prototype.checkValidity", "HTMLObjectElement.prototype.setCustomValidity", "HTMLOptionsCollection.prototype.add", "HTMLOptionsCollection.prototype.remove", "HTMLOutputElement.prototype.checkValidity", "HTMLOutputElement.prototype.setCustomValidity", "HTMLSelectElement.prototype.checkValidity", "HTMLSelectElement.prototype.setCustomValidity", "HTMLTextAreaElement.prototype.checkValidity", "HTMLTextAreaElement.prototype.setCustomValidity", "HTMLTextAreaElement.prototype.setRangeText", "HTMLTextAreaElement.prototype.setSelectionRange", "location.assign", "location.reload", "location.replace", "OfflineResourceList.prototype.mozAdd", "OfflineResourceList.prototype.mozHasItem", "OfflineResourceList.prototype.mozItem", "OfflineResourceList.prototype.mozRemove", "OfflineResourceList.prototype.swapCache", "OfflineResourceList.prototype.update", "TextTrack.prototype.addCue", "TextTrack.prototype.removeCue", "TextTrackCueList.prototype.getCueById", "TextTrackList.prototype.getTrackById", "TimeEvent.prototype.initTimeEvent", "window.alert", "window.applicationCache", "window.atob", "window.btoa", "window.confirm", "window.locationbar", "window.menubar", "window.personalbar", "window.print", "window.prompt", "window.scrollbars", "window.status", "window.statusbar", "window.toolbar", "location.href"]} \ No newline at end of file diff --git a/data/standards/HTML51.json b/data/standards/HTML51.json new file mode 100644 index 0000000..ffbb86c --- /dev/null +++ b/data/standards/HTML51.json @@ -0,0 +1 @@ +{"info": {"name": "HTML 5.1", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/html51/"}, "features": ["DragEvent.prototype.initDragEvent", "External.prototype.addSearchEngine", "External.prototype.AddSearchProvider", "External.prototype.IsSearchProviderInstalled", "navigator.language", "navigator.languages"]} \ No newline at end of file diff --git a/data/standards/IDB.json b/data/standards/IDB.json new file mode 100644 index 0000000..2864aa3 --- /dev/null +++ b/data/standards/IDB.json @@ -0,0 +1 @@ +{"info": {"name": "Indexed Database API", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/IndexedDB/"}, "features": ["IDBCursor.prototype.advance", "IDBCursor.prototype.continue", "IDBCursor.prototype.delete", "IDBCursor.prototype.update", "IDBDatabase.prototype.close", "IDBDatabase.prototype.createMutableFile", "IDBDatabase.prototype.createObjectStore", "IDBDatabase.prototype.deleteObjectStore", "IDBDatabase.prototype.mozCreateFileHandle", "IDBDatabase.prototype.transaction", "IDBFactory.prototype.cmp", "IDBFactory.prototype.deleteDatabase", "IDBFactory.prototype.open", "IDBFileHandle.prototype.abort", "IDBFileHandle.prototype.append", "IDBFileHandle.prototype.flush", "IDBFileHandle.prototype.getMetadata", "IDBFileHandle.prototype.readAsArrayBuffer", "IDBFileHandle.prototype.readAsText", "IDBFileHandle.prototype.truncate", "IDBFileHandle.prototype.write", "IDBIndex.prototype.count", "IDBIndex.prototype.get", "IDBIndex.prototype.getKey", "IDBIndex.prototype.mozGetAll", "IDBIndex.prototype.mozGetAllKeys", "IDBIndex.prototype.openCursor", "IDBIndex.prototype.openKeyCursor", "IDBKeyRange.bound", "IDBKeyRange.lowerBound", "IDBKeyRange.only", "IDBKeyRange.upperBound", "IDBMutableFile.prototype.getFile", "IDBMutableFile.prototype.open", "IDBObjectStore.prototype.add", "IDBObjectStore.prototype.clear", "IDBObjectStore.prototype.count", "IDBObjectStore.prototype.createIndex", "IDBObjectStore.prototype.delete", "IDBObjectStore.prototype.deleteIndex", "IDBObjectStore.prototype.get", "IDBObjectStore.prototype.index", "IDBObjectStore.prototype.mozGetAll", "IDBObjectStore.prototype.openCursor", "IDBObjectStore.prototype.put", "IDBTransaction.prototype.abort", "IDBTransaction.prototype.objectStore", "window.indexedDB"]} \ No newline at end of file diff --git a/data/standards/MCD.json b/data/standards/MCD.json new file mode 100644 index 0000000..708556a --- /dev/null +++ b/data/standards/MCD.json @@ -0,0 +1 @@ +{"info": {"name": "Media Capture from DOM Elements", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/mediacapture-fromelement/"}, "features": ["CanvasCaptureMediaStream.prototype.requestFrame", "HTMLCanvasElement.prototype.captureStream"]} \ No newline at end of file diff --git a/data/standards/MCS.json b/data/standards/MCS.json new file mode 100644 index 0000000..8ced269 --- /dev/null +++ b/data/standards/MCS.json @@ -0,0 +1 @@ +{"info": {"name": "Media Capture and Streams", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/mediacapture-streams/"}, "features": ["LocalMediaStream.prototype.stop", "MediaDevices.prototype.enumerateDevices", "MediaDevices.prototype.getUserMedia", "navigator.mediaDevices"]} \ No newline at end of file diff --git a/data/standards/MSE.json b/data/standards/MSE.json new file mode 100644 index 0000000..8f9157c --- /dev/null +++ b/data/standards/MSE.json @@ -0,0 +1 @@ +{"info": {"name": "Media Source Extensions", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/media-source/"}, "features": ["HTMLVideoElement.prototype.getVideoPlaybackQuality", "MediaSource.isTypeSupported", "MediaSource.prototype.addSourceBuffer", "MediaSource.prototype.endOfStream", "MediaSource.prototype.removeSourceBuffer", "SourceBuffer.prototype.abort", "SourceBuffer.prototype.appendBuffer", "SourceBuffer.prototype.remove"]} \ No newline at end of file diff --git a/data/standards/MSR.json b/data/standards/MSR.json new file mode 100644 index 0000000..4ce273b --- /dev/null +++ b/data/standards/MSR.json @@ -0,0 +1 @@ +{"info": {"name": "MediaStream Recording", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/mediastream-recording/"}, "features": ["MediaRecorder.prototype.pause", "MediaRecorder.prototype.requestData", "MediaRecorder.prototype.resume", "MediaRecorder.prototype.start", "MediaRecorder.prototype.stop", "MediaStream.prototype.getAudioTracks", "MediaStream.prototype.getTracks", "MediaStream.prototype.getVideoTracks", "MediaStreamTrack.prototype.applyConstraints", "MediaStreamTrack.prototype.stop"]} \ No newline at end of file diff --git a/data/standards/NS.json b/data/standards/NS.json new file mode 100644 index 0000000..02a9d23 --- /dev/null +++ b/data/standards/NS.json @@ -0,0 +1 @@ +{"info": {"name": "Non-Standard", "subsection_number": null, "subsection_name": null, "url": null}, "features": ["AnonymousContent.prototype.getAttributeForElement", "AnonymousContent.prototype.getTextContentForElement", "AnonymousContent.prototype.removeAttributeForElement", "AnonymousContent.prototype.setAttributeForElement", "AnonymousContent.prototype.setTextContentForElement", "CommandEvent.prototype.initCommandEvent", "document.embeds", "Document.prototype.mozSetImageElement", "Document.prototype.releaseCapture", "DOMCursor.prototype.continue", "DOMRequest.prototype.then", "Element.prototype.releaseCapture", "Element.prototype.setCapture", "Event.prototype.getPreventDefault", "HTMLDocument.prototype.captureEvents", "HTMLDocument.prototype.releaseEvents", "HTMLInputElement.prototype.mozIsTextField", "HTMLPropertiesCollection.prototype.item", "HTMLPropertiesCollection.prototype.namedItem", "window.captureEvents", "MouseEvent.prototype.initNSMouseEvent", "MouseScrollEvent.prototype.initMouseScrollEvent", "mozContact.prototype.init", "MozPowerManager.prototype.addWakeLockListener", "MozPowerManager.prototype.factoryReset", "MozPowerManager.prototype.getWakeLockState", "MozPowerManager.prototype.powerOff", "MozPowerManager.prototype.reboot", "MozPowerManager.prototype.removeWakeLockListener", "navigator.buildID", "navigator.oscpu", "Navigator.prototype.javaEnabled", "PaintRequestList.prototype.item", "screen.availLeft", "screen.availTop", "screen.top", "ScrollAreaEvent.prototype.initScrollAreaEvent", "SimpleGestureEvent.prototype.initSimpleGestureEvent", "window.content", "window.controllers", "window.dump", "window.external", "window.find", "window.fullScreen", "window.getDefaultComputedStyle", "window.mozInnerScreenX", "window.mozInnerScreenY", "window.mozPaintCount", "window.ondrop", "window.releaseEvents", "window.scrollByLines", "window.scrollByPages", "window.scrollMaxX", "window.scrollMaxY", "window.sidebar", "window.sizeToContent", "window.updateCommands", "XSLTProcessor.prototype.clearParameters", "XSLTProcessor.prototype.getParameter", "XSLTProcessor.prototype.importStylesheet", "XSLTProcessor.prototype.removeParameter", "XSLTProcessor.prototype.reset", "XSLTProcessor.prototype.setParameter", "XSLTProcessor.prototype.transformToDocument", "XSLTProcessor.prototype.transformToFragment"]} \ No newline at end of file diff --git a/data/standards/NT.json b/data/standards/NT.json new file mode 100644 index 0000000..a3e5996 --- /dev/null +++ b/data/standards/NT.json @@ -0,0 +1 @@ +{"info": {"name": "Navigation Timing", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/navigation-timing/"}, "features": ["performance.navigation", "performance.navigation.redirectCount", "performance.navigation.type", "performance.timing", "performance.timing.connectEnd", "performance.timing.connectStart", "performance.timing.domainLookupEnd", "performance.timing.domainLookupStart", "performance.timing.domComplete", "performance.timing.domContentLoadedEventEnd", "performance.timing.domContentLoadedEventStart", "performance.timing.domInteractive", "performance.timing.domLoading", "performance.timing.fetchStart", "performance.timing.loadEventEnd", "performance.timing.loadEventStart", "performance.timing.navigationStart", "performance.timing.redirectEnd", "performance.timing.redirectStart", "performance.timing.requestStart", "performance.timing.responseEnd", "performance.timing.responseStart", "performance.timing.unloadEventEnd", "performance.timing.unloadEventStart", "window.performance"]} \ No newline at end of file diff --git a/data/standards/PE.json b/data/standards/PE.json new file mode 100644 index 0000000..df1d482 --- /dev/null +++ b/data/standards/PE.json @@ -0,0 +1 @@ +{"info": {"name": "Proximity Events", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/proximity/"}, "features": ["window.ondeviceproximity", "window.onuserproximity"]} \ No newline at end of file diff --git a/data/standards/PL.json b/data/standards/PL.json new file mode 100644 index 0000000..eda9f38 --- /dev/null +++ b/data/standards/PL.json @@ -0,0 +1 @@ +{"info": {"name": "Pointer Lock", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/pointerlock/"}, "features": ["document.mozPointerLockElement", "document.onmozpointerlockchange", "document.onmozpointerlockerror", "Document.prototype.mozExitPointerLock", "Element.prototype.mozRequestPointerLock", "window.onmozpointerlockchange", "window.onmozpointerlockerror"]} \ No newline at end of file diff --git a/data/standards/PT.json b/data/standards/PT.json new file mode 100644 index 0000000..385b8fe --- /dev/null +++ b/data/standards/PT.json @@ -0,0 +1 @@ +{"info": {"name": "Performance Timeline", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/performance-timeline"}, "features": ["Performance.prototype.getEntriesByName", "Performance.prototype.getEntriesByType"]} \ No newline at end of file diff --git a/data/standards/PT2.json b/data/standards/PT2.json new file mode 100644 index 0000000..233407c --- /dev/null +++ b/data/standards/PT2.json @@ -0,0 +1 @@ +{"info": {"name": "Performance Timeline Level 2", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/performance-timeline"}, "features": ["Performance.prototype.getEntries"]} \ No newline at end of file diff --git a/data/standards/PV.json b/data/standards/PV.json new file mode 100644 index 0000000..18f22ca --- /dev/null +++ b/data/standards/PV.json @@ -0,0 +1 @@ +{"info": {"name": "Page Visibility (Second Edition)", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/page-visibility/"}, "features": ["document.hidden", "document.mozHidden", "document.mozVisibilityState", "document.visibilityState"]} \ No newline at end of file diff --git a/data/standards/RT.json b/data/standards/RT.json new file mode 100644 index 0000000..a574afa --- /dev/null +++ b/data/standards/RT.json @@ -0,0 +1 @@ +{"info": {"name": "Resource Timing", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/resource-timing/"}, "features": ["performance.onresourcetimingbufferfull", "Performance.prototype.clearResourceTimings", "Performance.prototype.setResourceTimingBufferSize"]} \ No newline at end of file diff --git a/data/standards/SD.json b/data/standards/SD.json new file mode 100644 index 0000000..94aad68 --- /dev/null +++ b/data/standards/SD.json @@ -0,0 +1 @@ +{"info": {"name": "Shadow DOM", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/shadow-dom/"}, "features": ["HTMLContentElement.prototype.getDistributedNodes"]} \ No newline at end of file diff --git a/data/standards/SEL.json b/data/standards/SEL.json new file mode 100644 index 0000000..02ea1be --- /dev/null +++ b/data/standards/SEL.json @@ -0,0 +1 @@ +{"info": {"name": "Selection API", "subsection_number": null, "subsection_name": null, "url": "http://w3c.github.io/selection-api/"}, "features": ["HTMLDocument.prototype.getSelection", "Selection.prototype.addRange", "Selection.prototype.collapse", "Selection.prototype.collapseToEnd", "Selection.prototype.collapseToStart", "Selection.prototype.containsNode", "Selection.prototype.deleteFromDocument", "Selection.prototype.extend", "Selection.prototype.getRangeAt", "Selection.prototype.modify", "Selection.prototype.removeAllRanges", "Selection.prototype.removeRange", "Selection.prototype.selectAllChildren", "window.getSelection"]} \ No newline at end of file diff --git a/data/standards/SLC.json b/data/standards/SLC.json new file mode 100644 index 0000000..100bc8e --- /dev/null +++ b/data/standards/SLC.json @@ -0,0 +1 @@ +{"info": {"name": "Selectors API Level 1", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/selectors-api"}, "features": ["Document.prototype.querySelector", "Document.prototype.querySelectorAll", "DocumentFragment.prototype.querySelector", "DocumentFragment.prototype.querySelectorAll", "Element.prototype.querySelector", "Element.prototype.querySelectorAll"]} \ No newline at end of file diff --git a/data/standards/SO.json b/data/standards/SO.json new file mode 100644 index 0000000..e790734 --- /dev/null +++ b/data/standards/SO.json @@ -0,0 +1 @@ +{"info": {"name": "The Screen Orientation API", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/screen-orientation/"}, "features": ["screen.mozOrientation", "screen.onmozorientationchange", "screen.orientation", "Screen.prototype.mozLockOrientation", "Screen.prototype.mozUnlockOrientation", "ScreenOrientation.prototype.lock", "ScreenOrientation.prototype.unlock", "window.ondevicemotion", "window.ondeviceorientation"]} \ No newline at end of file diff --git a/data/standards/SVG.json b/data/standards/SVG.json new file mode 100644 index 0000000..2040415 --- /dev/null +++ b/data/standards/SVG.json @@ -0,0 +1 @@ +{"info": {"name": "Scalable Vector Graphics (SVG) 1.1 (Second Edition)", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/SVG/"}, "features": ["HTMLEmbedElement.prototype.getSVGDocument", "HTMLIFrameElement.prototype.getSVGDocument", "HTMLObjectElement.prototype.getSVGDocument", "SVGAngle.prototype.convertToSpecifiedUnits", "SVGAngle.prototype.newValueSpecifiedUnits", "SVGAnimationElement.prototype.beginElement", "SVGAnimationElement.prototype.beginElementAt", "SVGAnimationElement.prototype.endElement", "SVGAnimationElement.prototype.endElementAt", "SVGAnimationElement.prototype.getCurrentTime", "SVGAnimationElement.prototype.getSimpleDuration", "SVGAnimationElement.prototype.getStartTime", "SVGAnimationElement.prototype.hasExtension", "SVGFEDropShadowElement.prototype.setStdDeviation", "SVGFEGaussianBlurElement.prototype.setStdDeviation", "SVGFilterElement.apply", "SVGGraphicsElement.prototype.getBBox", "SVGGraphicsElement.prototype.getCTM", "SVGGraphicsElement.prototype.getScreenCTM", "SVGGraphicsElement.prototype.getTransformToElement", "SVGGraphicsElement.prototype.hasExtension", "SVGLength.prototype.convertToSpecifiedUnits", "SVGLength.prototype.newValueSpecifiedUnits", "SVGLengthList.prototype.appendItem", "SVGLengthList.prototype.clear", "SVGLengthList.prototype.getItem", "SVGLengthList.prototype.initialize", "SVGLengthList.prototype.insertItemBefore", "SVGLengthList.prototype.removeItem", "SVGLengthList.prototype.replaceItem", "SVGMarkerElement.prototype.setOrientToAngle", "SVGMarkerElement.prototype.setOrientToAuto", "SVGMatrix.prototype.flipX", "SVGMatrix.prototype.flipY", "SVGMatrix.prototype.inverse", "SVGMatrix.prototype.multiply", "SVGMatrix.prototype.rotate", "SVGMatrix.prototype.rotateFromVector", "SVGMatrix.prototype.scale", "SVGMatrix.prototype.scaleNonUniform", "SVGMatrix.prototype.skewX", "SVGMatrix.prototype.skewY", "SVGMatrix.prototype.translate", "SVGNumberList.prototype.appendItem", "SVGNumberList.prototype.clear", "SVGNumberList.prototype.getItem", "SVGNumberList.prototype.initialize", "SVGNumberList.prototype.insertItemBefore", "SVGNumberList.prototype.removeItem", "SVGNumberList.prototype.replaceItem", "SVGPathElement.prototype.createSVGPathSegArcAbs", "SVGPathElement.prototype.createSVGPathSegArcRel", "SVGPathElement.prototype.createSVGPathSegClosePath", "SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs", "SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel", "SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs", "SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel", "SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs", "SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel", "SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs", "SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel", "SVGPathElement.prototype.createSVGPathSegLinetoAbs", "SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs", "SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel", "SVGPathElement.prototype.createSVGPathSegLinetoRel", "SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs", "SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel", "SVGPathElement.prototype.createSVGPathSegMovetoAbs", "SVGPathElement.prototype.createSVGPathSegMovetoRel", "SVGPathElement.prototype.getPathSegAtLength", "SVGPathElement.prototype.getPointAtLength", "SVGPathElement.prototype.getTotalLength", "SVGPathSegList.prototype.appendItem", "SVGPathSegList.prototype.clear", "SVGPathSegList.prototype.getItem", "SVGPathSegList.prototype.initialize", "SVGPathSegList.prototype.insertItemBefore", "SVGPathSegList.prototype.removeItem", "SVGPathSegList.prototype.replaceItem", "SVGPoint.prototype.matrixTransform", "SVGPointList.prototype.appendItem", "SVGPointList.prototype.clear", "SVGPointList.prototype.getItem", "SVGPointList.prototype.initialize", "SVGPointList.prototype.insertItemBefore", "SVGPointList.prototype.removeItem", "SVGPointList.prototype.replaceItem", "SVGStringList.prototype.appendItem", "SVGStringList.prototype.clear", "SVGStringList.prototype.getItem", "SVGStringList.prototype.initialize", "SVGStringList.prototype.insertItemBefore", "SVGStringList.prototype.removeItem", "SVGStringList.prototype.replaceItem", "SVGSVGElement.prototype.animationsPaused", "SVGSVGElement.prototype.createSVGAngle", "SVGSVGElement.prototype.createSVGLength", "SVGSVGElement.prototype.createSVGMatrix", "SVGSVGElement.prototype.createSVGNumber", "SVGSVGElement.prototype.createSVGPoint", "SVGSVGElement.prototype.createSVGRect", "SVGSVGElement.prototype.createSVGTransform", "SVGSVGElement.prototype.createSVGTransformFromMatrix", "SVGSVGElement.prototype.deselectAll", "SVGSVGElement.prototype.forceRedraw", "SVGSVGElement.prototype.getCurrentTime", "SVGSVGElement.prototype.getElementById", "SVGSVGElement.prototype.pauseAnimations", "SVGSVGElement.prototype.setCurrentTime", "SVGSVGElement.prototype.suspendRedraw", "SVGSVGElement.prototype.unpauseAnimations", "SVGSVGElement.prototype.unsuspendRedraw", "SVGSVGElement.prototype.unsuspendRedrawAll", "SVGSymbolElement.prototype.hasExtension", "SVGTextContentElement.prototype.getCharNumAtPosition", "SVGTextContentElement.prototype.getComputedTextLength", "SVGTextContentElement.prototype.getEndPositionOfChar", "SVGTextContentElement.prototype.getExtentOfChar", "SVGTextContentElement.prototype.getNumberOfChars", "SVGTextContentElement.prototype.getRotationOfChar", "SVGTextContentElement.prototype.getStartPositionOfChar", "SVGTextContentElement.prototype.getSubStringLength", "SVGTextContentElement.prototype.selectSubString", "SVGTransform.prototype.setMatrix", "SVGTransform.prototype.setRotate", "SVGTransform.prototype.setScale", "SVGTransform.prototype.setSkewX", "SVGTransform.prototype.setSkewY", "SVGTransform.prototype.setTranslate", "SVGTransformList.prototype.appendItem", "SVGTransformList.prototype.clear", "SVGTransformList.prototype.consolidate", "SVGTransformList.prototype.createSVGTransformFromMatrix", "SVGTransformList.prototype.getItem", "SVGTransformList.prototype.initialize", "SVGTransformList.prototype.insertItemBefore", "SVGTransformList.prototype.removeItem", "SVGTransformList.prototype.replaceItem"]} \ No newline at end of file diff --git a/data/standards/SW.json b/data/standards/SW.json new file mode 100644 index 0000000..39ea72f --- /dev/null +++ b/data/standards/SW.json @@ -0,0 +1 @@ +{"info": {"name": "Service Workers", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/service-workers/"}, "features": ["Cache.prototype.add", "Cache.prototype.addAll", "Cache.prototype.delete", "Cache.prototype.keys", "Cache.prototype.match", "Cache.prototype.matchAll", "Cache.prototype.put", "CacheStorage.prototype.delete", "CacheStorage.prototype.has", "CacheStorage.prototype.keys", "CacheStorage.prototype.match", "CacheStorage.prototype.open", "window.caches"]} \ No newline at end of file diff --git a/data/standards/TC.json b/data/standards/TC.json new file mode 100644 index 0000000..d3f5a1d --- /dev/null +++ b/data/standards/TC.json @@ -0,0 +1 @@ +{"info": {"name": "Timing control for script-based animations", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/animation-timing"}, "features": ["window.cancelAnimationFrame"]} \ No newline at end of file diff --git a/data/standards/TPE.json b/data/standards/TPE.json new file mode 100644 index 0000000..d000c51 --- /dev/null +++ b/data/standards/TPE.json @@ -0,0 +1 @@ +{"info": {"name": "Tracking Preference Expression (DNT)", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/tracking-dnt/"}, "features": ["navigator.doNotTrack"]} \ No newline at end of file diff --git a/data/standards/UIE.json b/data/standards/UIE.json new file mode 100644 index 0000000..72c6646 --- /dev/null +++ b/data/standards/UIE.json @@ -0,0 +1 @@ +{"info": {"name": "UI Events Specification", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/uievents/"}, "features": ["CompositionEvent.prototype.initCompositionEvent", "Event.prototype.stopImmediatePropagation", "KeyboardEvent.prototype.getModifierState", "KeyboardEvent.prototype.initKeyEvent", "MouseEvent.prototype.getModifierState", "MouseEvent.prototype.initMouseEvent", "MutationEvent.prototype.initMutationEvent", "UIEvent.prototype.initUIEvent"]} \ No newline at end of file diff --git a/data/standards/URL.json b/data/standards/URL.json new file mode 100644 index 0000000..cc04f6a --- /dev/null +++ b/data/standards/URL.json @@ -0,0 +1 @@ +{"info": {"name": "URL", "subsection_number": null, "subsection_name": null, "url": "https://url.spec.whatwg.org/"}, "features": ["URLSearchParams.prototype.append", "URLSearchParams.prototype.delete", "URLSearchParams.prototype.get", "URLSearchParams.prototype.getAll", "URLSearchParams.prototype.has", "URLSearchParams.prototype.set"]} \ No newline at end of file diff --git a/data/standards/UTL.json b/data/standards/UTL.json new file mode 100644 index 0000000..fce2de1 --- /dev/null +++ b/data/standards/UTL.json @@ -0,0 +1 @@ +{"info": {"name": "User Timing Level 2", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/user-timing/"}, "features": ["Performance.prototype.clearMarks", "Performance.prototype.clearMeasures", "Performance.prototype.mark", "Performance.prototype.measure"]} \ No newline at end of file diff --git a/data/standards/V.json b/data/standards/V.json new file mode 100644 index 0000000..b0c90b4 --- /dev/null +++ b/data/standards/V.json @@ -0,0 +1 @@ +{"info": {"name": "Vibration API", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/vibration/"}, "features": ["Navigator.prototype.vibrate"]} \ No newline at end of file diff --git a/data/standards/WCR.json b/data/standards/WCR.json new file mode 100644 index 0000000..7cfcddf --- /dev/null +++ b/data/standards/WCR.json @@ -0,0 +1 @@ +{"info": {"name": "Web Cryptography API", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/WebCryptoAPI/"}, "features": ["Crypto.prototype.getRandomValues", "SubtleCrypto.prototype.decrypt", "SubtleCrypto.prototype.deriveBits", "SubtleCrypto.prototype.deriveKey", "SubtleCrypto.prototype.digest", "SubtleCrypto.prototype.encrypt", "SubtleCrypto.prototype.exportKey", "SubtleCrypto.prototype.generateKey", "SubtleCrypto.prototype.importKey", "SubtleCrypto.prototype.sign", "SubtleCrypto.prototype.unwrapKey", "SubtleCrypto.prototype.verify", "SubtleCrypto.prototype.wrapKey", "window.crypto"]} \ No newline at end of file diff --git a/data/standards/WEBA.json b/data/standards/WEBA.json new file mode 100644 index 0000000..a3a4c32 --- /dev/null +++ b/data/standards/WEBA.json @@ -0,0 +1 @@ +{"info": {"name": "Web Audio API", "subsection_number": null, "subsection_name": null, "url": "https://webaudio.github.io/web-audio-api"}, "features": ["AnalyserNode.prototype.getByteFrequencyData", "AnalyserNode.prototype.getByteTimeDomainData", "AnalyserNode.prototype.getFloatFrequencyData", "AnalyserNode.prototype.getFloatTimeDomainData", "AudioBuffer.prototype.copyFromChannel", "AudioBuffer.prototype.copyToChannel", "AudioBuffer.prototype.getChannelData", "AudioBufferSourceNode.prototype.start", "AudioBufferSourceNode.prototype.stop", "AudioContext.prototype.close", "AudioContext.prototype.createAnalyser", "AudioContext.prototype.createBiquadFilter", "AudioContext.prototype.createBuffer", "AudioContext.prototype.createBufferSource", "AudioContext.prototype.createChannelMerger", "AudioContext.prototype.createChannelSplitter", "AudioContext.prototype.createConvolver", "AudioContext.prototype.createDelay", "AudioContext.prototype.createDynamicsCompressor", "AudioContext.prototype.createGain", "AudioContext.prototype.createMediaElementSource", "AudioContext.prototype.createMediaStreamDestination", "AudioContext.prototype.createMediaStreamSource", "AudioContext.prototype.createOscillator", "AudioContext.prototype.createPanner", "AudioContext.prototype.createPeriodicWave", "AudioContext.prototype.createScriptProcessor", "AudioContext.prototype.createStereoPanner", "AudioContext.prototype.createWaveShaper", "AudioContext.prototype.decodeAudioData", "AudioContext.prototype.resume", "AudioContext.prototype.suspend", "AudioListener.prototype.setOrientation", "AudioListener.prototype.setPosition", "AudioListener.prototype.setVelocity", "AudioNode.prototype.connect", "AudioNode.prototype.disconnect", "AudioParam.prototype.cancelScheduledValues", "AudioParam.prototype.exponentialRampToValueAtTime", "AudioParam.prototype.linearRampToValueAtTime", "AudioParam.prototype.setValueAtTime", "AudioParam.prototype.setValueCurveAtTime", "BiquadFilterNode.prototype.getFrequencyResponse", "OfflineAudioContext.prototype.resume", "OfflineAudioContext.prototype.startRendering", "OfflineAudioContext.prototype.suspend", "OscillatorNode.prototype.setPeriodicWave", "OscillatorNode.prototype.start", "OscillatorNode.prototype.stop", "PannerNode.prototype.setOrientation", "PannerNode.prototype.setPosition", "PannerNode.prototype.setVelocity"]} \ No newline at end of file diff --git a/data/standards/WEBGL.json b/data/standards/WEBGL.json new file mode 100644 index 0000000..7e7c9c8 --- /dev/null +++ b/data/standards/WEBGL.json @@ -0,0 +1 @@ +{"info": {"name": "WebGL Specification", "subsection_number": null, "subsection_name": null, "url": "https://www.khronos.org/registry/webgl/specs/latest/1.0/"}, "features": ["WebGLRenderingContext.prototype.activeTexture", "WebGLRenderingContext.prototype.attachShader", "WebGLRenderingContext.prototype.bindAttribLocation", "WebGLRenderingContext.prototype.bindBuffer", "WebGLRenderingContext.prototype.bindFramebuffer", "WebGLRenderingContext.prototype.bindRenderbuffer", "WebGLRenderingContext.prototype.bindTexture", "WebGLRenderingContext.prototype.blendColor", "WebGLRenderingContext.prototype.blendEquation", "WebGLRenderingContext.prototype.blendEquationSeparate", "WebGLRenderingContext.prototype.blendFunc", "WebGLRenderingContext.prototype.blendFuncSeparate", "WebGLRenderingContext.prototype.bufferData", "WebGLRenderingContext.prototype.bufferSubData", "WebGLRenderingContext.prototype.checkFramebufferStatus", "WebGLRenderingContext.prototype.clear", "WebGLRenderingContext.prototype.clearColor", "WebGLRenderingContext.prototype.clearDepth", "WebGLRenderingContext.prototype.clearStencil", "WebGLRenderingContext.prototype.colorMask", "WebGLRenderingContext.prototype.compileShader", "WebGLRenderingContext.prototype.compressedTexImage2D", "WebGLRenderingContext.prototype.compressedTexSubImage2D", "WebGLRenderingContext.prototype.copyTexImage2D", "WebGLRenderingContext.prototype.copyTexSubImage2D", "WebGLRenderingContext.prototype.createBuffer", "WebGLRenderingContext.prototype.createFramebuffer", "WebGLRenderingContext.prototype.createProgram", "WebGLRenderingContext.prototype.createRenderbuffer", "WebGLRenderingContext.prototype.createShader", "WebGLRenderingContext.prototype.createTexture", "WebGLRenderingContext.prototype.cullFace", "WebGLRenderingContext.prototype.deleteBuffer", "WebGLRenderingContext.prototype.deleteFramebuffer", "WebGLRenderingContext.prototype.deleteProgram", "WebGLRenderingContext.prototype.deleteRenderbuffer", "WebGLRenderingContext.prototype.deleteShader", "WebGLRenderingContext.prototype.deleteTexture", "WebGLRenderingContext.prototype.depthFunc", "WebGLRenderingContext.prototype.depthMask", "WebGLRenderingContext.prototype.depthRange", "WebGLRenderingContext.prototype.detachShader", "WebGLRenderingContext.prototype.disable", "WebGLRenderingContext.prototype.disableVertexAttribArray", "WebGLRenderingContext.prototype.drawArrays", "WebGLRenderingContext.prototype.drawElements", "WebGLRenderingContext.prototype.enable", "WebGLRenderingContext.prototype.enableVertexAttribArray", "WebGLRenderingContext.prototype.finish", "WebGLRenderingContext.prototype.flush", "WebGLRenderingContext.prototype.framebufferRenderbuffer", "WebGLRenderingContext.prototype.framebufferTexture2D", "WebGLRenderingContext.prototype.frontFace", "WebGLRenderingContext.prototype.generateMipmap", "WebGLRenderingContext.prototype.getActiveAttrib", "WebGLRenderingContext.prototype.getActiveUniform", "WebGLRenderingContext.prototype.getAttachedShaders", "WebGLRenderingContext.prototype.getAttribLocation", "WebGLRenderingContext.prototype.getBufferParameter", "WebGLRenderingContext.prototype.getContextAttributes", "WebGLRenderingContext.prototype.getError", "WebGLRenderingContext.prototype.getExtension", "WebGLRenderingContext.prototype.getFramebufferAttachmentParameter", "WebGLRenderingContext.prototype.getParameter", "WebGLRenderingContext.prototype.getProgramInfoLog", "WebGLRenderingContext.prototype.getProgramParameter", "WebGLRenderingContext.prototype.getRenderbufferParameter", "WebGLRenderingContext.prototype.getShaderInfoLog", "WebGLRenderingContext.prototype.getShaderParameter", "WebGLRenderingContext.prototype.getShaderPrecisionFormat", "WebGLRenderingContext.prototype.getShaderSource", "WebGLRenderingContext.prototype.getSupportedExtensions", "WebGLRenderingContext.prototype.getTexParameter", "WebGLRenderingContext.prototype.getUniform", "WebGLRenderingContext.prototype.getUniformLocation", "WebGLRenderingContext.prototype.getVertexAttrib", "WebGLRenderingContext.prototype.getVertexAttribOffset", "WebGLRenderingContext.prototype.hint", "WebGLRenderingContext.prototype.isBuffer", "WebGLRenderingContext.prototype.isContextLost", "WebGLRenderingContext.prototype.isEnabled", "WebGLRenderingContext.prototype.isFramebuffer", "WebGLRenderingContext.prototype.isProgram", "WebGLRenderingContext.prototype.isRenderbuffer", "WebGLRenderingContext.prototype.isShader", "WebGLRenderingContext.prototype.isTexture", "WebGLRenderingContext.prototype.lineWidth", "WebGLRenderingContext.prototype.linkProgram", "WebGLRenderingContext.prototype.pixelStorei", "WebGLRenderingContext.prototype.polygonOffset", "WebGLRenderingContext.prototype.readPixels", "WebGLRenderingContext.prototype.renderbufferStorage", "WebGLRenderingContext.prototype.sampleCoverage", "WebGLRenderingContext.prototype.scissor", "WebGLRenderingContext.prototype.shaderSource", "WebGLRenderingContext.prototype.stencilFunc", "WebGLRenderingContext.prototype.stencilFuncSeparate", "WebGLRenderingContext.prototype.stencilMask", "WebGLRenderingContext.prototype.stencilMaskSeparate", "WebGLRenderingContext.prototype.stencilOp", "WebGLRenderingContext.prototype.stencilOpSeparate", "WebGLRenderingContext.prototype.texImage2D", "WebGLRenderingContext.prototype.texParameterf", "WebGLRenderingContext.prototype.texParameteri", "WebGLRenderingContext.prototype.texSubImage2D", "WebGLRenderingContext.prototype.uniform1f", "WebGLRenderingContext.prototype.uniform1fv", "WebGLRenderingContext.prototype.uniform1i", "WebGLRenderingContext.prototype.uniform1iv", "WebGLRenderingContext.prototype.uniform2f", "WebGLRenderingContext.prototype.uniform2fv", "WebGLRenderingContext.prototype.uniform2i", "WebGLRenderingContext.prototype.uniform2iv", "WebGLRenderingContext.prototype.uniform3f", "WebGLRenderingContext.prototype.uniform3fv", "WebGLRenderingContext.prototype.uniform3i", "WebGLRenderingContext.prototype.uniform3iv", "WebGLRenderingContext.prototype.uniform4f", "WebGLRenderingContext.prototype.uniform4fv", "WebGLRenderingContext.prototype.uniform4i", "WebGLRenderingContext.prototype.uniform4iv", "WebGLRenderingContext.prototype.uniformMatrix2fv", "WebGLRenderingContext.prototype.uniformMatrix3fv", "WebGLRenderingContext.prototype.uniformMatrix4fv", "WebGLRenderingContext.prototype.useProgram", "WebGLRenderingContext.prototype.validateProgram", "WebGLRenderingContext.prototype.vertexAttrib1f", "WebGLRenderingContext.prototype.vertexAttrib1fv", "WebGLRenderingContext.prototype.vertexAttrib2f", "WebGLRenderingContext.prototype.vertexAttrib2fv", "WebGLRenderingContext.prototype.vertexAttrib3f", "WebGLRenderingContext.prototype.vertexAttrib3fv", "WebGLRenderingContext.prototype.vertexAttrib4f", "WebGLRenderingContext.prototype.vertexAttrib4fv", "WebGLRenderingContext.prototype.vertexAttribPointer", "WebGLRenderingContext.prototype.viewport"]} \ No newline at end of file diff --git a/data/standards/WEBVTT.json b/data/standards/WEBVTT.json new file mode 100644 index 0000000..8928449 --- /dev/null +++ b/data/standards/WEBVTT.json @@ -0,0 +1 @@ +{"info": {"name": "WebVTT: The Web Video Text Tracks Format", "subsection_number": null, "subsection_name": null, "url": "https://w3c.github.io/webvtt/"}, "features": ["VTTCue.prototype.getCueAsHTML"]} \ No newline at end of file diff --git a/data/standards/WN.json b/data/standards/WN.json new file mode 100644 index 0000000..bbfa102 --- /dev/null +++ b/data/standards/WN.json @@ -0,0 +1 @@ +{"info": {"name": "Web Notifications", "subsection_number": null, "subsection_name": null, "url": "https://notifications.spec.whatwg.org/"}, "features": ["DesktopNotification.prototype.show", "DesktopNotificationCenter.prototype.createNotification", "Notification.get", "Notification.prototype.close", "Notification.requestPermission"]} \ No newline at end of file diff --git a/data/standards/WRTC.json b/data/standards/WRTC.json new file mode 100644 index 0000000..3e3f137 --- /dev/null +++ b/data/standards/WRTC.json @@ -0,0 +1 @@ +{"info": {"name": "WebRTC 1.0: Real-time Communication Between Browser", "subsection_number": null, "subsection_name": null, "url": "https://www.w3.org/TR/webrtc/"}, "features": ["DataChannel.prototype.close", "DataChannel.prototype.send", "mozRTCPeerConnection.generateCertificate", "mozRTCPeerConnection.prototype.addIceCandidate", "mozRTCPeerConnection.prototype.addStream", "mozRTCPeerConnection.prototype.addTrack", "mozRTCPeerConnection.prototype.close", "mozRTCPeerConnection.prototype.createAnswer", "mozRTCPeerConnection.prototype.createDataChannel", "mozRTCPeerConnection.prototype.createOffer", "mozRTCPeerConnection.prototype.getConfiguration", "mozRTCPeerConnection.prototype.getIdentityAssertion", "mozRTCPeerConnection.prototype.getLocalStreams", "mozRTCPeerConnection.prototype.getReceivers", "mozRTCPeerConnection.prototype.getRemoteStreams", "mozRTCPeerConnection.prototype.getSenders", "mozRTCPeerConnection.prototype.getStats", "mozRTCPeerConnection.prototype.getStreamById", "mozRTCPeerConnection.prototype.removeStream", "mozRTCPeerConnection.prototype.removeTrack", "mozRTCPeerConnection.prototype.setIdentityProvider", "mozRTCPeerConnection.prototype.setLocalDescription", "mozRTCPeerConnection.prototype.setRemoteDescription", "mozRTCPeerConnection.prototype.updateIce", "RTCRtpSender.prototype.replaceTrack", "RTCStatsReport.prototype.forEach", "RTCStatsReport.prototype.get", "RTCStatsReport.prototype.has"]} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..9b6ad1c --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,25 @@ +let gulp = require('gulp'); +let fs = require('fs'); + +gulp.task('default', function () { + + let standardsDefDir = "data/standards"; + + // Build all the standards listings into a single features.js file. + let combinedStandards = fs.readdirSync(standardsDefDir) + .reduce(function (prev, next) { + + if (next.indexOf(".json") === -1) { + return prev; + } + + let fileContents = fs.readFileSync(standardsDefDir + "/" + next, {encoding: "utf8"}); + let standardContents = JSON.parse(fileContents); + prev[standardContents.info.name] = standardContents; + return prev; + }, {}); + + let renderedStandardsModule = "window.WEB_API_MANAGER.standards = " + JSON.stringify(combinedStandards) + ";"; + + fs.writeFileSync("content_scripts/standards.js", renderedStandardsModule); +}); diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ff5d427 --- /dev/null +++ b/manifest.json @@ -0,0 +1,29 @@ +{ + "manifest_version": 2, + "name": "WebAPI Manager", + "version": "0.1", + "description": "Improves browser security by restricting page access to parts of the Web API.", + "permissions": [ + "*://*/*", + "webNavigation", + "storage" + ], + "content_scripts": [ + { + "matches": ["*://*/*"], + "js": [ + "content_scripts/init.js", + "content_scripts/standards.js", + "content_scripts/defaults.js", + "content_scripts/stub.js" + ], + "all_frames": true, + "run_at": "document_start" + } + ], + "background": { + "scripts": [ + "background_scripts/bootstrap.js" + ] + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..df07243 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1562 @@ +{ + "name": "web-api-manager", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-slice": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", + "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "dateformat": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", + "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.2" + } + }, + "deprecated": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", + "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", + "dev": true + }, + "detect-file": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", + "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", + "dev": true, + "requires": { + "fs-exists-sync": "0.1.0" + } + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "end-of-stream": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", + "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", + "dev": true, + "requires": { + "once": "1.3.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "expand-tilde": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", + "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", + "dev": true + }, + "findup-sync": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", + "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", + "dev": true, + "requires": { + "detect-file": "0.1.0", + "is-glob": "2.0.1", + "micromatch": "2.3.11", + "resolve-dir": "0.1.1" + } + }, + "fined": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", + "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", + "dev": true, + "requires": { + "expand-tilde": "2.0.2", + "is-plain-object": "2.0.4", + "object.defaults": "1.1.0", + "object.pick": "1.3.0", + "parse-filepath": "1.0.1" + }, + "dependencies": { + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + } + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flagged-respawn": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", + "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "fs-exists-sync": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", + "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", + "dev": true + }, + "gaze": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", + "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", + "dev": true, + "requires": { + "globule": "0.1.0" + } + }, + "glob": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", + "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.3.3" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "glob-stream": { + "version": "3.1.18", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", + "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", + "dev": true, + "requires": { + "glob": "4.5.3", + "glob2base": "0.0.12", + "minimatch": "2.0.10", + "ordered-read-streams": "0.1.0", + "through2": "0.6.5", + "unique-stream": "1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "glob-watcher": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", + "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", + "dev": true, + "requires": { + "gaze": "0.5.2" + } + }, + "glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "dev": true, + "requires": { + "find-index": "0.1.1" + } + }, + "global-modules": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", + "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", + "dev": true, + "requires": { + "global-prefix": "0.1.5", + "is-windows": "0.2.0" + } + }, + "global-prefix": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", + "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1", + "ini": "1.3.4", + "is-windows": "0.2.0", + "which": "1.3.0" + } + }, + "globule": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", + "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", + "dev": true, + "requires": { + "glob": "3.1.21", + "lodash": "1.0.2", + "minimatch": "0.2.14" + }, + "dependencies": { + "glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } + }, + "graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "dev": true + }, + "inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "graceful-fs": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", + "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", + "dev": true, + "requires": { + "natives": "1.1.0" + } + }, + "gulp": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", + "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", + "dev": true, + "requires": { + "archy": "1.0.0", + "chalk": "1.1.3", + "deprecated": "0.0.1", + "gulp-util": "3.0.8", + "interpret": "1.0.3", + "liftoff": "2.3.0", + "minimist": "1.2.0", + "orchestrator": "0.3.8", + "pretty-hrtime": "1.0.3", + "semver": "4.3.6", + "tildify": "1.2.0", + "v8flags": "2.1.1", + "vinyl-fs": "0.3.14" + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.0.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.3.3", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "interpret": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", + "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "dev": true + }, + "is-absolute": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", + "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", + "dev": true, + "requires": { + "is-relative": "0.2.1", + "is-windows": "0.2.0" + } + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-relative": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", + "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", + "dev": true, + "requires": { + "is-unc-path": "0.1.2" + } + }, + "is-unc-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", + "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", + "dev": true, + "requires": { + "unc-path-regex": "0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", + "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "liftoff": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", + "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", + "dev": true, + "requires": { + "extend": "3.0.1", + "findup-sync": "0.4.3", + "fined": "1.1.0", + "flagged-respawn": "0.3.2", + "lodash.isplainobject": "4.0.6", + "lodash.isstring": "4.0.1", + "lodash.mapvalues": "4.6.0", + "rechoir": "0.6.2", + "resolve": "1.4.0" + } + }, + "lodash": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", + "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", + "dev": true + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "natives": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", + "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", + "dev": true + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "1.0.1", + "array-slice": "1.0.0", + "for-own": "1.0.0", + "isobject": "3.0.1" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", + "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "orchestrator": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", + "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", + "dev": true, + "requires": { + "end-of-stream": "0.1.5", + "sequencify": "0.0.7", + "stream-consume": "0.1.0" + } + }, + "ordered-read-streams": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", + "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "parse-filepath": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", + "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", + "dev": true, + "requires": { + "is-absolute": "0.2.6", + "map-cache": "0.2.2", + "path-root": "0.1.1" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "0.1.2" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.4.0" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "resolve": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", + "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", + "dev": true, + "requires": { + "expand-tilde": "1.2.2", + "global-modules": "0.2.3" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "sequencify": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", + "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "stream-consume": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", + "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", + "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "is-utf8": "0.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "tildify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "dev": true, + "requires": { + "os-homedir": "1.0.2" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "unique-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", + "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", + "dev": true + }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", + "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", + "dev": true, + "requires": { + "defaults": "1.0.3", + "glob-stream": "3.1.18", + "glob-watcher": "0.0.6", + "graceful-fs": "3.0.11", + "mkdirp": "0.5.1", + "strip-bom": "1.0.0", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..52678fd --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "web-api-manager", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "gulp": "^3.9.1" + } +}