| <!doctype html> | |
| <html> | |
| <body> | |
| <script> | |
| !function() { | |
| var names = []; | |
| var scanned = []; | |
| var to_scan = []; | |
| function scan(obj) { | |
| if (obj && typeof obj == "object" && !~scanned.indexOf(obj)) { | |
| scanned.push(obj); | |
| to_scan.push(obj); | |
| } | |
| } | |
| scan(self); | |
| [ | |
| "a", | |
| "abbr", | |
| "acronym", | |
| "address", | |
| "applet", | |
| "area", | |
| "article", | |
| "aside", | |
| "audio", | |
| "b", | |
| "base", | |
| "basefont", | |
| "bdi", | |
| "bdo", | |
| "bgsound", | |
| "big", | |
| "blink", | |
| "blockquote", | |
| "body", | |
| "br", | |
| "button", | |
| "canvas", | |
| "caption", | |
| "center", | |
| "checked", | |
| "cite", | |
| "code", | |
| "col", | |
| "colgroup", | |
| "command", | |
| "comment", | |
| "compact", | |
| "content", | |
| "data", | |
| "datalist", | |
| "dd", | |
| "declare", | |
| "defer", | |
| "del", | |
| "details", | |
| "dfn", | |
| "dialog", | |
| "dir", | |
| "disabled", | |
| "div", | |
| "dl", | |
| "dt", | |
| "element", | |
| "em", | |
| "embed", | |
| "fieldset", | |
| "figcaption", | |
| "figure", | |
| "font", | |
| "footer", | |
| "form", | |
| "frame", | |
| "frameset", | |
| "h1", | |
| "h2", | |
| "h3", | |
| "h4", | |
| "h5", | |
| "h6", | |
| "head", | |
| "header", | |
| "hgroup", | |
| "hr", | |
| "html", | |
| "i", | |
| "iframe", | |
| "image", | |
| "img", | |
| "input", | |
| "ins", | |
| "isindex", | |
| "ismap", | |
| "kbd", | |
| "keygen", | |
| "label", | |
| "legend", | |
| "li", | |
| "link", | |
| "listing", | |
| "main", | |
| "map", | |
| "mark", | |
| "marquee", | |
| "math", | |
| "menu", | |
| "menuitem", | |
| "meta", | |
| "meter", | |
| "multicol", | |
| "multiple", | |
| "nav", | |
| "nobr", | |
| "noembed", | |
| "noframes", | |
| "nohref", | |
| "noresize", | |
| "noscript", | |
| "noshade", | |
| "nowrap", | |
| "object", | |
| "ol", | |
| "optgroup", | |
| "option", | |
| "output", | |
| "p", | |
| "param", | |
| "picture", | |
| "plaintext", | |
| "pre", | |
| "progress", | |
| "q", | |
| "rb", | |
| "readonly", | |
| "rp", | |
| "rt", | |
| "rtc", | |
| "ruby", | |
| "s", | |
| "samp", | |
| "script", | |
| "section", | |
| "select", | |
| "selected", | |
| "shadow", | |
| "small", | |
| "source", | |
| "spacer", | |
| "span", | |
| "strike", | |
| "strong", | |
| "style", | |
| "sub", | |
| "summary", | |
| "sup", | |
| "svg", | |
| "table", | |
| "tbody", | |
| "td", | |
| "template", | |
| "textarea", | |
| "tfoot", | |
| "th", | |
| "thead", | |
| "time", | |
| "title", | |
| "tr", | |
| "track", | |
| "tt", | |
| "u", | |
| "ul", | |
| "var", | |
| "video", | |
| "wbr", | |
| "xmp", | |
| "XXX", | |
| ].forEach(function(tag) { | |
| scan(document.createElement(tag)); | |
| }); | |
| [ | |
| "abort", | |
| "absolutedeviceorientation", | |
| "activate", | |
| "active", | |
| "addsourcebuffer", | |
| "addstream", | |
| "addtrack", | |
| "afterprint", | |
| "afterscriptexecute", | |
| "afterupdate", | |
| "animationcancel", | |
| "animationend", | |
| "animationiteration", | |
| "animationstart", | |
| "appinstalled", | |
| "audioend", | |
| "audioprocess", | |
| "audiostart", | |
| "autocomplete", | |
| "autocompleteerror", | |
| "auxclick", | |
| "beforeactivate", | |
| "beforecopy", | |
| "beforecut", | |
| "beforedeactivate", | |
| "beforeeditfocus", | |
| "beforeinstallprompt", | |
| "beforepaste", | |
| "beforeprint", | |
| "beforescriptexecute", | |
| "beforeunload", | |
| "beforeupdate", | |
| "blocked", | |
| "blur", | |
| "bounce", | |
| "boundary", | |
| "cached", | |
| "cancel", | |
| "candidatewindowhide", | |
| "candidatewindowshow", | |
| "candidatewindowupdate", | |
| "canplay", | |
| "canplaythrough", | |
| "cellchange", | |
| "change", | |
| "chargingchange", | |
| "chargingtimechange", | |
| "checking", | |
| "click", | |
| "close", | |
| "compassneedscalibration", | |
| "complete", | |
| "connect", | |
| "connecting", | |
| "connectionstatechange", | |
| "contextmenu", | |
| "controllerchange", | |
| "controlselect", | |
| "copy", | |
| "cuechange", | |
| "cut", | |
| "dataavailable", | |
| "datachannel", | |
| "datasetchanged", | |
| "datasetcomplete", | |
| "dblclick", | |
| "deactivate", | |
| "devicechange", | |
| "devicelight", | |
| "devicemotion", | |
| "deviceorientation", | |
| "deviceorientationabsolute", | |
| "deviceproximity", | |
| "dischargingtimechange", | |
| "disconnect", | |
| "display", | |
| "downloading", | |
| "drag", | |
| "dragend", | |
| "dragenter", | |
| "dragexit", | |
| "dragleave", | |
| "dragover", | |
| "dragstart", | |
| "drop", | |
| "durationchange", | |
| "emptied", | |
| "encrypted", | |
| "end", | |
| "ended", | |
| "enter", | |
| "enterpictureinpicture", | |
| "error", | |
| "errorupdate", | |
| "exit", | |
| "filterchange", | |
| "finish", | |
| "focus", | |
| "focusin", | |
| "focusout", | |
| "freeze", | |
| "fullscreenchange", | |
| "fullscreenerror", | |
| "gesturechange", | |
| "gestureend", | |
| "gesturestart", | |
| "gotpointercapture", | |
| "hashchange", | |
| "help", | |
| "icecandidate", | |
| "iceconnectionstatechange", | |
| "icegatheringstatechange", | |
| "inactive", | |
| "input", | |
| "invalid", | |
| "keydown", | |
| "keypress", | |
| "keyup", | |
| "languagechange", | |
| "layoutcomplete", | |
| "leavepictureinpicture", | |
| "levelchange", | |
| "load", | |
| "loadeddata", | |
| "loadedmetadata", | |
| "loadend", | |
| "loading", | |
| "loadingdone", | |
| "loadingerror", | |
| "loadstart", | |
| "losecapture", | |
| "lostpointercapture", | |
| "mark", | |
| "message", | |
| "messageerror", | |
| "mousedown", | |
| "mouseenter", | |
| "mouseleave", | |
| "mousemove", | |
| "mouseout", | |
| "mouseover", | |
| "mouseup", | |
| "mousewheel", | |
| "move", | |
| "moveend", | |
| "movestart", | |
| "mozfullscreenchange", | |
| "mozfullscreenerror", | |
| "mozorientationchange", | |
| "mozpointerlockchange", | |
| "mozpointerlockerror", | |
| "mscontentzoom", | |
| "msfullscreenchange", | |
| "msfullscreenerror", | |
| "msgesturechange", | |
| "msgesturedoubletap", | |
| "msgestureend", | |
| "msgesturehold", | |
| "msgesturestart", | |
| "msgesturetap", | |
| "msgotpointercapture", | |
| "msinertiastart", | |
| "mslostpointercapture", | |
| "msmanipulationstatechanged", | |
| "msneedkey", | |
| "msorientationchange", | |
| "mspointercancel", | |
| "mspointerdown", | |
| "mspointerenter", | |
| "mspointerhover", | |
| "mspointerleave", | |
| "mspointermove", | |
| "mspointerout", | |
| "mspointerover", | |
| "mspointerup", | |
| "mssitemodejumplistitemremoved", | |
| "msthumbnailclick", | |
| "negotiationneeded", | |
| "nomatch", | |
| "noupdate", | |
| "obsolete", | |
| "offline", | |
| "online", | |
| "open", | |
| "orientationchange", | |
| "pagechange", | |
| "pagehide", | |
| "pageshow", | |
| "paste", | |
| "pause", | |
| "play", | |
| "playing", | |
| "pluginstreamstart", | |
| "pointercancel", | |
| "pointerdown", | |
| "pointerenter", | |
| "pointerleave", | |
| "pointerlockchange", | |
| "pointerlockerror", | |
| "pointermove", | |
| "pointerout", | |
| "pointerover", | |
| "pointerup", | |
| "popstate", | |
| "progress", | |
| "propertychange", | |
| "ratechange", | |
| "reading", | |
| "readystatechange", | |
| "rejectionhandled", | |
| "removesourcebuffer", | |
| "removestream", | |
| "removetrack", | |
| "reset", | |
| "resize", | |
| "resizeend", | |
| "resizestart", | |
| "resourcetimingbufferfull", | |
| "result", | |
| "resume", | |
| "rowenter", | |
| "rowexit", | |
| "rowsdelete", | |
| "rowsinserted", | |
| "scroll", | |
| "search", | |
| "seeked", | |
| "seeking", | |
| "select", | |
| "selectionchange", | |
| "selectstart", | |
| "show", | |
| "signalingstatechange", | |
| "soundend", | |
| "soundstart", | |
| "sourceclose", | |
| "sourceclosed", | |
| "sourceended", | |
| "sourceopen", | |
| "speechend", | |
| "speechstart", | |
| "stalled", | |
| "start", | |
| "statechange", | |
| "stop", | |
| "storage", | |
| "storagecommit", | |
| "submit", | |
| "success", | |
| "suspend", | |
| "textinput", | |
| "timeout", | |
| "timeupdate", | |
| "toggle", | |
| "touchcancel", | |
| "touchend", | |
| "touchmove", | |
| "touchstart", | |
| "track", | |
| "transitioncancel", | |
| "transitionend", | |
| "transitionrun", | |
| "transitionstart", | |
| "unhandledrejection", | |
| "unload", | |
| "updateready", | |
| "upgradeneeded", | |
| "userproximity", | |
| "versionchange", | |
| "visibilitychange", | |
| "voiceschanged", | |
| "volumechange", | |
| "vrdisplayactivate", | |
| "vrdisplayconnect", | |
| "vrdisplaydeactivate", | |
| "vrdisplaydisconnect", | |
| "vrdisplaypresentchange", | |
| "waiting", | |
| "waitingforkey", | |
| "warning", | |
| "webkitanimationend", | |
| "webkitanimationiteration", | |
| "webkitanimationstart", | |
| "webkitcurrentplaybacktargetiswirelesschanged", | |
| "webkitfullscreenchange", | |
| "webkitfullscreenerror", | |
| "webkitkeyadded", | |
| "webkitkeyerror", | |
| "webkitkeymessage", | |
| "webkitneedkey", | |
| "webkitorientationchange", | |
| "webkitplaybacktargetavailabilitychanged", | |
| "webkitpointerlockchange", | |
| "webkitpointerlockerror", | |
| "webkitresourcetimingbufferfull", | |
| "webkittransitionend", | |
| "wheel", | |
| "zoom", | |
| ].forEach(function(type) { | |
| [ | |
| "beforeunloadevent", | |
| "compositionevent", | |
| "customevent", | |
| "devicemotionevent", | |
| "deviceorientationevent", | |
| "dragevent", | |
| "event", | |
| "events", | |
| "focusevent", | |
| "hashchangeevent", | |
| "htmlevents", | |
| "keyboardevent", | |
| "messageevent", | |
| "mouseevent", | |
| "mouseevents", | |
| "storageevent", | |
| "svgevents", | |
| "textevent", | |
| "touchevent", | |
| "uievent", | |
| "uievents", | |
| ].forEach(function(interface) { | |
| try { | |
| var event = document.createEvent(interface); | |
| event.initEvent(type, true, true); | |
| scan(event); | |
| } catch (e) {} | |
| }); | |
| }); | |
| var obj; | |
| while (obj = to_scan.shift()) { | |
| var proto = obj; | |
| do { | |
| Object.getOwnPropertyNames(proto).forEach(function(name) { | |
| var visited = ~names.indexOf(name); | |
| if (!visited) names.push(name); | |
| try { | |
| scan(obj[name]); | |
| if (visited) return; | |
| if (/^create/.test(name)) { | |
| scan(obj[name]()); | |
| } | |
| if (/^[A-Z]/.test(name)) { | |
| scan(new obj[name]()); | |
| } | |
| } catch (e) {} | |
| }); | |
| } while (proto = Object.getPrototypeOf(proto)); | |
| } | |
| names.sort(); | |
| document.write('<pre>[\n "'); | |
| document.write(names.join('",\n "')); | |
| document.write('"\n]</pre>'); | |
| }(); | |
| </script> | |
| </body> | |
| </html> |