├── README.md ├── autoload └── js.vim ├── example.png ├── ftplugin └── javascript.vim └── getjsprops.js /README.md: -------------------------------------------------------------------------------- 1 | Installation 2 | ============ 3 | 4 | Just throw this folder in your `.vim`/`bundle` directory. This should automatically replace Vim's existing JavaScript completion plugin 5 | 6 | Features 7 | ======== 8 | 9 | * Much more up-to-date completion including support for many HTML5 methods/globals 10 | * HTML5 canvas -> getContext completion 11 | * NodeIterator, Treewalker, localStorage/sessionStorage methods 12 | * All of the existing methods were updated including the `.style` completions (webkit supported), and `console.` object 13 | 14 | Options 15 | ======= 16 | 17 | * I removed a couple of things from the original plugin and turned them into options: 18 | 19 | ```viml 20 | let g:vimjs#casesensistive = 1 21 | " Enabled by default. flip the value to make completion matches case insensitive 22 | 23 | let g:vimjs#smartcomplete = 0 24 | " Disabled by default. Enabling this will let vim complete matches at any location 25 | " e.g. typing 'ocument' will suggest 'document' if enabled. 26 | 27 | let g:vimjs#chromeapis = 0 28 | " Disabled by default. Toggling this will enable completion for a number of Chrome's JavaScript extension APIs 29 | ``` 30 | 31 | Example 32 | ======= 33 | 34 | ![example image](https://raw.githubusercontent.com/1995eaton/vim-better-javascript-syntax/master/example.png) 35 | -------------------------------------------------------------------------------- /autoload/js.vim: -------------------------------------------------------------------------------- 1 | " (A more up-to-date) Vim completion script 2 | " Language: JavaScript 3 | " Maintainer: Jake Eaton (1995eaton@gmail.com) 4 | " Last Change: 2014 Jun 23 5 | " Original Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) 6 | 7 | if !exists('g:vimjs#casesensitive') 8 | let g:vimjs#casesensitive = 1 9 | endif 10 | 11 | if !exists('g:vimjs#smartcomplete') 12 | let g:vimjs#smartcomplete = 0 13 | endif 14 | 15 | let s:keywords = ['abstract', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'continue', 'debugger', 'default', 'delete', 'do', 'double ', 'else', 'enum', 'export', 'extends', 'false', 'final', 'finally', 'float', 'for', 'function', 'goto', 'if', 'implements', 'import', 'in ', 'instanceof', 'int', 'interface', 'long', 'native', 'new', 'null', 'package', 'private', 'protected', 'public', 'return', 'short', 'static', 'super ', 'switch', 'synchronized', 'this', 'throw', 'throws', 'transient', 'true', 'try', 'typeof', 'var', 'void', 'volatile', 'while', 'with', 'console'] 16 | 17 | if exists('g:vimjs#chromeapis') && g:vimjs#chromeapis == 1 18 | let s:chromeo = ['Event(', 'app', 'bookmarks', 'browserAction', 'commands', 'csi(', 'downloads', 'extension', 'history', 'i18n', 'loadTimes(', 'management', 'permissions', 'runtime', 'sessions', 'storage', 'tabs', 'test', 'topSites', 'types', 'windows'] 19 | let s:chrometabs = ['captureVisibleTab(', 'connect(', 'create(', 'detectLanguage(', 'duplicate(', 'executeScript(', 'get(', 'getAllInWindow(', 'getCurrent(', 'getSelected(', 'highlight(', 'insertCSS(', 'move(', 'onActivated', 'onActiveChanged', 'onAttached', 'onCreated', 'onDetached', 'onHighlightChanged', 'onHighlighted', 'onMoved', 'onRemoved', 'onReplaced', 'onSelectionChanged', 'onUpdated', 'query(', 'reload(', 'remove(', 'sendMessage(', 'sendRequest(', 'update('] 20 | let s:chromehist = ['addUrl(', 'deleteAll(', 'deleteRange(', 'deleteUrl(', 'getVisits(', 'onVisitRemoved', 'onVisited', 'search('] 21 | let s:chromemarks = ['MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE', 'MAX_WRITE_OPERATIONS_PER_HOUR', 'create(', 'get(', 'getChildren(', 'getRecent(', 'getSubTree(', 'getTree(', 'move(', 'onChanged', 'onChildrenReordered', 'onCreated', 'onImportBegan', 'onImportEnded', 'onMoved', 'onRemoved', 'remove(', 'removeTree(', 'search(', 'update('] 22 | let s:chromecomm = ['getAll(', 'onCommand'] 23 | let s:chromewins = ['WINDOW_ID_CURRENT', 'WINDOW_ID_NONE', 'create(', 'get(', 'getAll(', 'getCurrent(', 'getLastFocused(', 'onCreated', 'onFocusChanged', 'onRemoved', 'remove(', 'update('] 24 | let s:chromeext = ['connect(', 'connectNative(', 'getBackgroundPage(', 'getURL(', 'getViews(', 'inIncognitoContext', 'isAllowedFileSchemeAccess(', 'isAllowedIncognitoAccess(', 'onConnect', 'onConnectExternal', 'onMessage', 'onMessageExternal', 'onRequest', 'onRequestExternal', 'sendMessage(', 'sendNativeMessage(', 'sendRequest(', 'setUpdateUrlData('] 25 | let s:chromerunt = ['connect(', 'connectNative(', 'getBackgroundPage(', 'getManifest(', 'getPackageDirectoryEntry(', 'getPlatformInfo(', 'getURL(', 'id', 'onBrowserUpdateAvailable', 'onConnect', 'onConnectExternal', 'onInstalled', 'onMessage', 'onMessageExternal', 'onRestartRequired', 'onStartup', 'onSuspend', 'onSuspendCanceled', 'onUpdateAvailable', 'reload(', 'requestUpdateCheck(', 'restart(', 'sendMessage(', 'sendNativeMessage(', 'setUninstallURL('] 26 | let s:chrometops = ['get('] 27 | let s:chromebact = ['disable(', 'enable(', 'getBadgeBackgroundColor(', 'getBadgeText(', 'getPopup(', 'getTitle(', 'onClicked', 'openPopup(', 'setBadgeBackgroundColor(', 'setBadgeText(', 'setIcon(', 'setPopup(', 'setTitle('] 28 | let s:chromeapp = ['getDetails(', 'getDetailsForFrame(', 'getIsInstalled(', 'installState(', 'isInstalled', 'runningState('] 29 | let s:chromedown = ['acceptDanger(', 'cancel(', 'download(', 'drag(', 'erase(', 'getFileIcon(', 'onChanged', 'onCreated', 'onDeterminingFilename', 'onErased', 'open(', 'pause(', 'removeFile(', 'resume(', 'search(', 'setShelfEnabled(', 'show(', 'showDefaultFolder('] 30 | let s:chromeman = ['getPermissionWarningsByManifest(', 'uninstallSelf('] 31 | let s:chromeperm = ['contains(', 'getAll(', 'onAdded', 'onRemoved', 'remove(', 'request('] 32 | let s:chromesess = ['MAX_SESSION_RESULTS', 'getDevices(', 'getRecentlyClosed(', 'onChanged', 'restore('] 33 | let s:chromestor = ['local', 'managed', 'onChanged', 'sync'] 34 | let s:chromestorsync = ['MAX_ITEMS', 'MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE', 'MAX_WRITE_OPERATIONS_PER_HOUR', 'QUOTA_BYTES', 'QUOTA_BYTES_PER_ITEM', 'clear(', 'functionSchemas', 'get(', 'getBytesInUse(', 'remove(', 'set(', 'setSchema('] 35 | let s:chromestorloc = ['QUOTA_BYTES', 'clear(', 'functionSchemas', 'get(', 'getBytesInUse(', 'remove(', 'set(', 'setSchema('] 36 | else 37 | let g:vimjs#chromeapis = 0 38 | endif 39 | 40 | let s:winds = ['AnalyserNode(', 'AnimationEvent(', 'AppBannerPromptResult(', 'ApplicationCache(', 'ApplicationCacheErrorEvent(', 'Array(', 'ArrayBuffer(', 'Attr(', 'Audio(', 'AudioBuffer(', 'AudioBufferSourceNode(', 'AudioContext(', 'AudioDestinationNode(', 'AudioListener(', 'AudioNode(', 'AudioParam(', 'AudioProcessingEvent(', 'BarProp(', 'BatteryManager(', 'BeforeInstallPromptEvent(', 'BeforeUnloadEvent(', 'BiquadFilterNode(', 'Blob(', 'BlobEvent(', 'Boolean(', 'ByteLengthQueuingStrategy(', 'CDATASection(', 'CSS(', 'CSSFontFaceRule(', 'CSSGroupingRule(', 'CSSImportRule(', 'CSSKeyframeRule(', 'CSSKeyframesRule(', 'CSSMediaRule(', 'CSSNamespaceRule(', 'CSSPageRule(', 'CSSRule(', 'CSSRuleList(', 'CSSStyleDeclaration(', 'CSSStyleRule(', 'CSSStyleSheet(', 'CSSSupportsRule(', 'CSSViewportRule(', 'Cache(', 'CacheStorage(', 'CanvasCaptureMediaStreamTrack(', 'CanvasGradient(', 'CanvasPattern(', 'CanvasRenderingContext2D(', 'ChannelMergerNode(', 'ChannelSplitterNode(', 'CharacterData(', 'ClientRect(', 'ClientRectList(', 'ClipboardEvent(', 'CloseEvent(', 'Comment(', 'CompositionEvent(', 'ConvolverNode(', 'CountQueuingStrategy(', 'Credential(', 'CredentialsContainer(', 'Crypto(', 'CryptoKey(', 'CustomEvent(', 'DOMError(', 'DOMException(', 'DOMImplementation(', 'DOMParser(', 'DOMStringList(', 'DOMStringMap(', 'DOMTokenList(', 'DataTransfer(', 'DataTransferItem(', 'DataTransferItemList(', 'DataView(', 'Date(', 'DelayNode(', 'DeviceMotionEvent(', 'DeviceOrientationEvent(', 'Document(', 'DocumentFragment(', 'DocumentType(', 'DragEvent(', 'DynamicsCompressorNode(', 'Element(', 'Error(', 'ErrorEvent(', 'EvalError(', 'Event(', 'EventSource(', 'EventTarget(', 'FederatedCredential(', 'File(', 'FileError(', 'FileList(', 'FileReader(', 'Float32Array(', 'Float64Array(', 'FocusEvent(', 'FontFace(', 'FormData(', 'Function(', 'GainNode(', 'Gamepad(', 'GamepadButton(', 'GamepadEvent(', 'HTMLAllCollection(', 'HTMLAnchorElement(', 'HTMLAreaElement(', 'HTMLAudioElement(', 'HTMLBRElement(', 'HTMLBaseElement(', 'HTMLBodyElement(', 'HTMLButtonElement(', 'HTMLCanvasElement(', 'HTMLCollection(', 'HTMLContentElement(', 'HTMLDListElement(', 'HTMLDataListElement(', 'HTMLDetailsElement(', 'HTMLDialogElement(', 'HTMLDirectoryElement(', 'HTMLDivElement(', 'HTMLDocument(', 'HTMLElement(', 'HTMLEmbedElement(', 'HTMLFieldSetElement(', 'HTMLFontElement(', 'HTMLFormControlsCollection(', 'HTMLFormElement(', 'HTMLFrameElement(', 'HTMLFrameSetElement(', 'HTMLHRElement(', 'HTMLHeadElement(', 'HTMLHeadingElement(', 'HTMLHtmlElement(', 'HTMLIFrameElement(', 'HTMLImageElement(', 'HTMLInputElement(', 'HTMLKeygenElement(', 'HTMLLIElement(', 'HTMLLabelElement(', 'HTMLLegendElement(', 'HTMLLinkElement(', 'HTMLMapElement(', 'HTMLMarqueeElement(', 'HTMLMediaElement(', 'HTMLMenuElement(', 'HTMLMetaElement(', 'HTMLMeterElement(', 'HTMLModElement(', 'HTMLOListElement(', 'HTMLObjectElement(', 'HTMLOptGroupElement(', 'HTMLOptionElement(', 'HTMLOptionsCollection(', 'HTMLOutputElement(', 'HTMLParagraphElement(', 'HTMLParamElement(', 'HTMLPictureElement(', 'HTMLPreElement(', 'HTMLProgressElement(', 'HTMLQuoteElement(', 'HTMLScriptElement(', 'HTMLSelectElement(', 'HTMLShadowElement(', 'HTMLSourceElement(', 'HTMLSpanElement(', 'HTMLStyleElement(', 'HTMLTableCaptionElement(', 'HTMLTableCellElement(', 'HTMLTableColElement(', 'HTMLTableElement(', 'HTMLTableRowElement(', 'HTMLTableSectionElement(', 'HTMLTemplateElement(', 'HTMLTextAreaElement(', 'HTMLTitleElement(', 'HTMLTrackElement(', 'HTMLUListElement(', 'HTMLUnknownElement(', 'HTMLVideoElement(', 'HashChangeEvent(', 'Headers(', 'History(', 'IDBCursor(', 'IDBCursorWithValue(', 'IDBDatabase(', 'IDBFactory(', 'IDBIndex(', 'IDBKeyRange(', 'IDBObjectStore(', 'IDBOpenDBRequest(', 'IDBRequest(', 'IDBTransaction(', 'IDBVersionChangeEvent(', 'IIRFilterNode(', 'IdleDeadline(', 'Image(', 'ImageBitmap(', 'ImageData(', 'Infinity', 'InputDeviceCapabilities(', 'Int16Array(', 'Int32Array(', 'Int8Array(', 'IntersectionObserver(', 'IntersectionObserverEntry(', 'Intl', 'JSON', 'KeyboardEvent(', 'Location(', 'MIDIAccess(', 'MIDIConnectionEvent(', 'MIDIInput(', 'MIDIInputMap(', 'MIDIMessageEvent(', 'MIDIOutput(', 'MIDIOutputMap(', 'MIDIPort(', 'Map(', 'Math', 'MediaDevices(', 'MediaElementAudioSourceNode(', 'MediaEncryptedEvent(', 'MediaError(', 'MediaKeyMessageEvent(', 'MediaKeySession(', 'MediaKeyStatusMap(', 'MediaKeySystemAccess(', 'MediaKeys(', 'MediaList(', 'MediaQueryList(', 'MediaQueryListEvent(', 'MediaRecorder(', 'MediaSource(', 'MediaStreamAudioDestinationNode(', 'MediaStreamAudioSourceNode(', 'MediaStreamEvent(', 'MediaStreamTrack(', 'MessageChannel(', 'MessageEvent(', 'MessagePort(', 'MimeType(', 'MimeTypeArray(', 'MouseEvent(', 'MutationEvent(', 'MutationObserver(', 'MutationRecord(', 'NaN', 'NamedNodeMap(', 'Navigator(', 'Node(', 'NodeFilter(', 'NodeIterator(', 'NodeList(', 'Notification(', 'Number(', 'Object(', 'OfflineAudioCompletionEvent(', 'OfflineAudioContext(', 'Option(', 'OscillatorNode(', 'PERSISTENT', 'PageTransitionEvent(', 'PasswordCredential(', 'Path2D(', 'Performance(', 'PerformanceEntry(', 'PerformanceMark(', 'PerformanceMeasure(', 'PerformanceNavigation(', 'PerformanceObserver(', 'PerformanceObserverEntryList(', 'PerformanceResourceTiming(', 'PerformanceTiming(', 'PeriodicWave(', 'PermissionStatus(', 'Permissions(', 'Plugin(', 'PluginArray(', 'PopStateEvent(', 'Presentation(', 'PresentationAvailability(', 'PresentationConnection(', 'PresentationConnectionAvailableEvent(', 'PresentationConnectionCloseEvent(', 'PresentationRequest(', 'ProcessingInstruction(', 'ProgressEvent(', 'Promise(', 'PromiseRejectionEvent(', 'Proxy(', 'PushManager(', 'PushSubscription(', 'RTCCertificate(', 'RTCIceCandidate(', 'RTCSessionDescription(', 'RadioNodeList(', 'Range(', 'RangeError(', 'ReadableStream(', 'ReferenceError(', 'Reflect', 'RegExp(', 'Request(', 'Response(', 'SVGAElement(', 'SVGAngle(', 'SVGAnimateElement(', 'SVGAnimateMotionElement(', 'SVGAnimateTransformElement(', 'SVGAnimatedAngle(', 'SVGAnimatedBoolean(', 'SVGAnimatedEnumeration(', 'SVGAnimatedInteger(', 'SVGAnimatedLength(', 'SVGAnimatedLengthList(', 'SVGAnimatedNumber(', 'SVGAnimatedNumberList(', 'SVGAnimatedPreserveAspectRatio(', 'SVGAnimatedRect(', 'SVGAnimatedString(', 'SVGAnimatedTransformList(', 'SVGAnimationElement(', 'SVGCircleElement(', 'SVGClipPathElement(', 'SVGComponentTransferFunctionElement(', 'SVGCursorElement(', 'SVGDefsElement(', 'SVGDescElement(', 'SVGDiscardElement(', 'SVGElement(', 'SVGEllipseElement(', 'SVGFEBlendElement(', 'SVGFEColorMatrixElement(', 'SVGFEComponentTransferElement(', 'SVGFECompositeElement(', 'SVGFEConvolveMatrixElement(', 'SVGFEDiffuseLightingElement(', 'SVGFEDisplacementMapElement(', 'SVGFEDistantLightElement(', 'SVGFEDropShadowElement(', 'SVGFEFloodElement(', 'SVGFEFuncAElement(', 'SVGFEFuncBElement(', 'SVGFEFuncGElement(', 'SVGFEFuncRElement(', 'SVGFEGaussianBlurElement(', 'SVGFEImageElement(', 'SVGFEMergeElement(', 'SVGFEMergeNodeElement(', 'SVGFEMorphologyElement(', 'SVGFEOffsetElement(', 'SVGFEPointLightElement(', 'SVGFESpecularLightingElement(', 'SVGFESpotLightElement(', 'SVGFETileElement(', 'SVGFETurbulenceElement(', 'SVGFilterElement(', 'SVGForeignObjectElement(', 'SVGGElement(', 'SVGGeometryElement(', 'SVGGradientElement(', 'SVGGraphicsElement(', 'SVGImageElement(', 'SVGLength(', 'SVGLengthList(', 'SVGLineElement(', 'SVGLinearGradientElement(', 'SVGMPathElement(', 'SVGMarkerElement(', 'SVGMaskElement(', 'SVGMatrix(', 'SVGMetadataElement(', 'SVGNumber(', 'SVGNumberList(', 'SVGPathElement(', 'SVGPatternElement(', 'SVGPoint(', 'SVGPointList(', 'SVGPolygonElement(', 'SVGPolylineElement(', 'SVGPreserveAspectRatio(', 'SVGRadialGradientElement(', 'SVGRect(', 'SVGRectElement(', 'SVGSVGElement(', 'SVGScriptElement(', 'SVGSetElement(', 'SVGStopElement(', 'SVGStringList(', 'SVGStyleElement(', 'SVGSwitchElement(', 'SVGSymbolElement(', 'SVGTSpanElement(', 'SVGTextContentElement(', 'SVGTextElement(', 'SVGTextPathElement(', 'SVGTextPositioningElement(', 'SVGTitleElement(', 'SVGTransform(', 'SVGTransformList(', 'SVGUnitTypes(', 'SVGUseElement(', 'SVGViewElement(', 'SVGViewSpec(', 'SVGZoomEvent(', 'Screen(', 'ScreenOrientation(', 'ScriptProcessorNode(', 'SecurityPolicyViolationEvent(', 'Selection(', 'ServiceWorker(', 'ServiceWorkerContainer(', 'ServiceWorkerMessageEvent(', 'ServiceWorkerRegistration(', 'Set(', 'ShadowRoot(', 'SharedWorker(', 'SiteBoundCredential(', 'SourceBuffer(', 'SourceBufferList(', 'SpeechSynthesisEvent(', 'SpeechSynthesisUtterance(', 'Storage(', 'StorageEvent(', 'StorageManager', 'String(', 'StyleSheet(', 'StyleSheetList(', 'SubtleCrypto(', 'Symbol(', 'SyncManager(', 'SyntaxError(', 'TEMPORARY', 'Text(', 'TextDecoder(', 'TextEncoder(', 'TextEvent(', 'TextMetrics(', 'TextTrack(', 'TextTrackCue(', 'TextTrackCueList(', 'TextTrackList(', 'TimeRanges(', 'Touch(', 'TouchEvent(', 'TouchList(', 'TrackEvent(', 'TransitionEvent(', 'TreeWalker(', 'TypeError(', 'UIEvent(', 'URIError(', 'URL(', 'URLSearchParams(', 'Uint16Array(', 'Uint32Array(', 'Uint8Array(', 'Uint8ClampedArray(', 'VTTCue(', 'ValidityState(', 'WaveShaperNode(', 'WeakMap(', 'WeakSet(', 'WebGLActiveInfo(', 'WebGLBuffer(', 'WebGLContextEvent(', 'WebGLFramebuffer(', 'WebGLProgram(', 'WebGLRenderbuffer(', 'WebGLRenderingContext(', 'WebGLShader(', 'WebGLShaderPrecisionFormat(', 'WebGLTexture(', 'WebGLUniformLocation(', 'WebKitAnimationEvent(', 'WebKitCSSMatrix(', 'WebKitMutationObserver(', 'WebKitTransitionEvent(', 'WebSocket(', 'WheelEvent(', 'Window(', 'Worker(', 'XMLDocument(', 'XMLHttpRequest(', 'XMLHttpRequestEventTarget(', 'XMLHttpRequestUpload(', 'XMLSerializer(', 'XPathEvaluator(', 'XPathExpression(', 'XPathResult(', 'XSLTProcessor(', 'addEventListener(', 'alert(', 'applicationCache', 'atob(', 'blur(', 'btoa(', 'caches', 'cancelAnimationFrame(', 'cancelIdleCallback(', 'captureEvents(', 'chrome', 'clearInterval(', 'clearTimeout(', 'clientInformation', 'close(', 'closed', 'confirm(', 'console', 'createImageBitmap(', 'crypto', 'decodeURI(', 'decodeURIComponent(', 'defaultStatus', 'defaultstatus', 'devicePixelRatio', 'dispatchEvent(', 'document', 'encodeURI(', 'encodeURIComponent(', 'escape(', 'eval(', 'event', 'external', 'fetch(', 'find(', 'focus(', 'frameElement', 'frames', 'getComputedStyle(', 'getMatchedCSSRules(', 'getSelection(', 'history', 'indexedDB', 'innerHeight', 'innerWidth', 'isFinite(', 'isNaN(', 'isSecureContext', 'length', 'localStorage', 'location', 'locationbar', 'matchMedia(', 'menubar', 'moveBy(', 'moveTo(', 'navigator', 'offscreenBuffering', 'onabort', 'onanimationend', 'onanimationiteration', 'onanimationstart', 'onbeforeunload', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', 'oncontextmenu', 'oncuechange', 'ondblclick', 'ondevicemotion', 'ondeviceorientation', 'ondeviceorientationabsolute', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onfocus', 'onhashchange', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onlanguagechange', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmessage', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onoffline', 'ononline', 'onpagehide', 'onpageshow', 'onpause', 'onplay', 'onplaying', 'onpopstate', 'onprogress', 'onratechange', 'onrejectionhandled', 'onreset', 'onresize', 'onscroll', 'onsearch', 'onseeked', 'onseeking', 'onselect', 'onshow', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'ontransitionend', 'onunhandledrejection', 'onunload', 'onvolumechange', 'onwaiting', 'onwebkitanimationend', 'onwebkitanimationiteration', 'onwebkitanimationstart', 'onwebkittransitionend', 'onwheel', 'open(', 'openDatabase(', 'opener', 'outerHeight', 'outerWidth', 'pageXOffset', 'pageYOffset', 'parent', 'parseFloat(', 'parseInt(', 'performance', 'personalbar', 'postMessage(', 'print(', 'prompt(', 'releaseEvents(', 'removeEventListener(', 'requestAnimationFrame(', 'requestIdleCallback(', 'resizeBy(', 'resizeTo(', 'screen', 'screenLeft', 'screenTop', 'screenX', 'screenY', 'scroll(', 'scrollBy(', 'scrollTo(', 'scrollX', 'scrollY', 'scrollbars', 'self', 'sessionStorage', 'setInterval(', 'setTimeout(', 'speechSynthesis', 'status', 'statusbar', 'stop(', 'styleMedia', 'toolbar', 'top', 'undefined', 'unescape(', 'webkitAudioContext(', 'webkitCancelAnimationFrame(', 'webkitCancelRequestAnimationFrame(', 'webkitIDBCursor(', 'webkitIDBDatabase(', 'webkitIDBFactory(', 'webkitIDBIndex(', 'webkitIDBKeyRange(', 'webkitIDBObjectStore(', 'webkitIDBRequest(', 'webkitIDBTransaction(', 'webkitIndexedDB', 'webkitMediaStream(', 'webkitOfflineAudioContext(', 'webkitRTCPeerConnection(', 'webkitRequestAnimationFrame(', 'webkitRequestFileSystem(', 'webkitResolveLocalFileSystemURL(', 'webkitSpeechGrammar(', 'webkitSpeechGrammarList(', 'webkitSpeechRecognition(', 'webkitSpeechRecognitionError(', 'webkitSpeechRecognitionEvent(', 'webkitStorageInfo', 'webkitURL(', 'window'] 41 | 42 | let s:arrays = ['concat(', 'constructor(', 'copyWithin(', 'entries(', 'every(', 'fill(', 'filter(', 'find(', 'findIndex(', 'forEach(', 'includes(', 'indexOf(', 'isArray(', 'join(', 'keys(', 'lastIndexOf(', 'length', 'map(', 'pop(', 'push(', 'reduce(', 'reduceRight(', 'reverse(', 'shift(', 'slice(', 'some(', 'sort(', 'splice(', 'toLocaleString(', 'toString(', 'unshift(', 'values('] 43 | 44 | let s:dates = ['UTC(', 'constructor(', 'getDate(', 'getDay(', 'getFullYear(', 'getHours(', 'getMilliseconds(', 'getMinutes(', 'getMonth(', 'getSeconds(', 'getTime(', 'getTimezoneOffset(', 'getUTCDate(', 'getUTCDay(', 'getUTCFullYear(', 'getUTCHours(', 'getUTCMilliseconds(', 'getUTCMinutes(', 'getUTCMonth(', 'getUTCSeconds(', 'getYear(', 'length', 'now(', 'parse(', 'setDate(', 'setFullYear(', 'setHours(', 'setMilliseconds(', 'setMinutes(', 'setMonth(', 'setSeconds(', 'setTime(', 'setUTCDate(', 'setUTCFullYear(', 'setUTCHours(', 'setUTCMilliseconds(', 'setUTCMinutes(', 'setUTCMonth(', 'setUTCSeconds(', 'setYear(', 'toDateString(', 'toGMTString(', 'toISOString(', 'toJSON(', 'toLocaleDateString(', 'toLocaleString(', 'toLocaleTimeString(', 'toString(', 'toTimeString(', 'toUTCString(', 'valueOf('] 45 | 46 | let s:funcs = ['apply(', 'arguments', 'bind(', 'call(', 'caller', 'constructor(', 'length', 'name', 'prototype(', 'toString('] 47 | 48 | let s:maths = ['E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2', 'abs(', 'acos(', 'acosh(', 'asin(', 'asinh(', 'atan(', 'atan2(', 'atanh(', 'cbrt(', 'ceil(', 'clz32(', 'cos(', 'cosh(', 'exp(', 'expm1(', 'floor(', 'fround(', 'hypot(', 'imul(', 'log(', 'log10(', 'log1p(', 'log2(', 'max(', 'min(', 'pow(', 'random(', 'round(', 'sign(', 'sin(', 'sinh(', 'sqrt(', 'tan(', 'tanh(', 'trunc('] 49 | 50 | let s:numbs = ['EPSILON', 'MAX_SAFE_INTEGER', 'MAX_VALUE', 'MIN_SAFE_INTEGER', 'MIN_VALUE', 'NEGATIVE_INFINITY', 'NaN', 'POSITIVE_INFINITY', 'constructor(', 'isFinite(', 'isInteger(', 'isNaN(', 'isSafeInteger(', 'parseFloat(', 'parseInt(', 'toExponential(', 'toFixed(', 'toLocaleString(', 'toPrecision(', 'toString(', 'valueOf('] 51 | 52 | let s:evnts = ['AT_TARGET', 'BLUR', 'BUBBLING_PHASE', 'CAPTURING_PHASE', 'CHANGE', 'CLICK', 'DBLCLICK', 'DOM_KEY_LOCATION_LEFT', 'DOM_KEY_LOCATION_NUMPAD', 'DOM_KEY_LOCATION_RIGHT', 'DOM_KEY_LOCATION_STANDARD', 'DRAGDROP', 'FOCUS', 'KEYDOWN', 'KEYPRESS', 'KEYUP', 'MOUSEDOWN', 'MOUSEDRAG', 'MOUSEMOVE', 'MOUSEOUT', 'MOUSEOVER', 'MOUSEUP', 'NONE', 'SELECT', 'altGraphKey', 'altKey', 'bubbles', 'button', 'cancelBubble', 'cancelable', 'charCode', 'clientX', 'clientY', 'clipboardData', 'ctrlKey', 'currentTarget', 'dataTransfer', 'defaultPrevented', 'detail', 'eventPhase', 'fromElement', 'getModifierState(', 'initEvent(', 'initKeyboardEvent(', 'initMouseEvent(', 'initUIEvent(', 'keyCode', 'keyIdentifier', 'keyLocation', 'layerX', 'layerY', 'location', 'metaKey', 'movementX', 'movementY', 'offsetX', 'offsetY', 'pageX', 'pageY', 'path', 'preventDefault(', 'relatedTarget', 'repeat', 'returnValue', 'screenX', 'screenY', 'shiftKey', 'srcElement', 'stopImmediatePropagation(', 'stopPropagation(', 'target', 'timeStamp', 'toElement', 'type', 'view', 'webkitMovementX', 'webkitMovementY', 'which', 'x', 'y'] 53 | 54 | let s:locas = ['ancestorOrigins', 'assign(', 'hash', 'host', 'hostname', 'href', 'origin', 'pathname', 'port', 'protocol', 'reload(', 'replace(', 'search', 'toString(', 'valueOf('] 55 | 56 | let s:objes = ['assign(', 'constructor(', 'create(', 'defineProperties(', 'defineProperty(', 'entries(', 'freeze(', 'getOwnPropertyDescriptor(', 'getOwnPropertyDescriptors(', 'getOwnPropertyNames(', 'getOwnPropertySymbols(', 'getPrototypeOf(', 'hasOwnProperty(', 'is(', 'isExtensible(', 'isFrozen(', 'isPrototypeOf(', 'isSealed(', 'keys(', 'length', 'preventExtensions(', 'propertyIsEnumerable(', 'seal(', 'setPrototypeOf(', 'toLocaleString(', 'toString(', 'valueOf(', 'values('] 57 | 58 | let s:reges = ['compile(', 'constructor(', 'exec(', 'flags', 'global', 'ignoreCase', 'input', 'lastMatch', 'lastParen', 'leftContext', 'multiline', 'rightContext', 'source', 'sticky', 'test(', 'toString(', 'unicode'] 59 | 60 | let s:stris = ['anchor(', 'big(', 'blink(', 'bold(', 'charAt(', 'charCodeAt(', 'codePointAt(', 'concat(', 'constructor(', 'endsWith(', 'fixed(', 'fontcolor(', 'fontsize(', 'fromCharCode(', 'fromCodePoint(', 'includes(', 'indexOf(', 'italics(', 'lastIndexOf(', 'length', 'link(', 'localeCompare(', 'match(', 'normalize(', 'padEnd(', 'padStart(', 'raw(', 'repeat(', 'replace(', 'search(', 'slice(', 'small(', 'split(', 'startsWith(', 'strike(', 'sub(', 'substr(', 'substring(', 'sup(', 'toLocaleLowerCase(', 'toLocaleUpperCase(', 'toLowerCase(', 'toString(', 'toUpperCase(', 'trim(', 'trimLeft(', 'trimRight(', 'valueOf('] 61 | 62 | let s:webgl = ['ACTIVE_ATTRIBUTES', 'ACTIVE_TEXTURE', 'ACTIVE_UNIFORMS', 'ALIASED_LINE_WIDTH_RANGE', 'ALIASED_POINT_SIZE_RANGE', 'ALPHA', 'ALPHA_BITS', 'ALWAYS', 'ARRAY_BUFFER', 'ARRAY_BUFFER_BINDING', 'ATTACHED_SHADERS', 'BACK', 'BLEND', 'BLEND_COLOR', 'BLEND_DST_ALPHA', 'BLEND_DST_RGB', 'BLEND_EQUATION', 'BLEND_EQUATION_ALPHA', 'BLEND_EQUATION_RGB', 'BLEND_SRC_ALPHA', 'BLEND_SRC_RGB', 'BLUE_BITS', 'BOOL', 'BOOL_VEC2', 'BOOL_VEC3', 'BOOL_VEC4', 'BROWSER_DEFAULT_WEBGL', 'BUFFER_SIZE', 'BUFFER_USAGE', 'BYTE', 'CCW', 'CLAMP_TO_EDGE', 'COLOR_ATTACHMENT0', 'COLOR_BUFFER_BIT', 'COLOR_CLEAR_VALUE', 'COLOR_WRITEMASK', 'COMPILE_STATUS', 'COMPRESSED_TEXTURE_FORMATS', 'CONSTANT_ALPHA', 'CONSTANT_COLOR', 'CONTEXT_LOST_WEBGL', 'CULL_FACE', 'CULL_FACE_MODE', 'CURRENT_PROGRAM', 'CURRENT_VERTEX_ATTRIB', 'CW', 'DECR', 'DECR_WRAP', 'DELETE_STATUS', 'DEPTH_ATTACHMENT', 'DEPTH_BITS', 'DEPTH_BUFFER_BIT', 'DEPTH_CLEAR_VALUE', 'DEPTH_COMPONENT', 'DEPTH_COMPONENT16', 'DEPTH_FUNC', 'DEPTH_RANGE', 'DEPTH_STENCIL', 'DEPTH_STENCIL_ATTACHMENT', 'DEPTH_TEST', 'DEPTH_WRITEMASK', 'DITHER', 'DONT_CARE', 'DST_ALPHA', 'DST_COLOR', 'DYNAMIC_DRAW', 'ELEMENT_ARRAY_BUFFER', 'ELEMENT_ARRAY_BUFFER_BINDING', 'EQUAL', 'FASTEST', 'FLOAT', 'FLOAT_MAT2', 'FLOAT_MAT3', 'FLOAT_MAT4', 'FLOAT_VEC2', 'FLOAT_VEC3', 'FLOAT_VEC4', 'FRAGMENT_SHADER', 'FRAMEBUFFER', 'FRAMEBUFFER_ATTACHMENT_OBJECT_NAME', 'FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE', 'FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE', 'FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL', 'FRAMEBUFFER_BINDING', 'FRAMEBUFFER_COMPLETE', 'FRAMEBUFFER_INCOMPLETE_ATTACHMENT', 'FRAMEBUFFER_INCOMPLETE_DIMENSIONS', 'FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT', 'FRAMEBUFFER_UNSUPPORTED', 'FRONT', 'FRONT_AND_BACK', 'FRONT_FACE', 'FUNC_ADD', 'FUNC_REVERSE_SUBTRACT', 'FUNC_SUBTRACT', 'GENERATE_MIPMAP_HINT', 'GEQUAL', 'GREATER', 'GREEN_BITS', 'HIGH_FLOAT', 'HIGH_INT', 'IMPLEMENTATION_COLOR_READ_FORMAT', 'IMPLEMENTATION_COLOR_READ_TYPE', 'INCR', 'INCR_WRAP', 'INT', 'INT_VEC2', 'INT_VEC3', 'INT_VEC4', 'INVALID_ENUM', 'INVALID_FRAMEBUFFER_OPERATION', 'INVALID_OPERATION', 'INVALID_VALUE', 'INVERT', 'KEEP', 'LEQUAL', 'LESS', 'LINEAR', 'LINEAR_MIPMAP_LINEAR', 'LINEAR_MIPMAP_NEAREST', 'LINES', 'LINE_LOOP', 'LINE_STRIP', 'LINE_WIDTH', 'LINK_STATUS', 'LOW_FLOAT', 'LOW_INT', 'LUMINANCE', 'LUMINANCE_ALPHA', 'MAX_COMBINED_TEXTURE_IMAGE_UNITS', 'MAX_CUBE_MAP_TEXTURE_SIZE', 'MAX_FRAGMENT_UNIFORM_VECTORS', 'MAX_RENDERBUFFER_SIZE', 'MAX_TEXTURE_IMAGE_UNITS', 'MAX_TEXTURE_SIZE', 'MAX_VARYING_VECTORS', 'MAX_VERTEX_ATTRIBS', 'MAX_VERTEX_TEXTURE_IMAGE_UNITS', 'MAX_VERTEX_UNIFORM_VECTORS', 'MAX_VIEWPORT_DIMS', 'MEDIUM_FLOAT', 'MEDIUM_INT', 'MIRRORED_REPEAT', 'NEAREST', 'NEAREST_MIPMAP_LINEAR', 'NEAREST_MIPMAP_NEAREST', 'NEVER', 'NICEST', 'NONE', 'NOTEQUAL', 'NO_ERROR', 'ONE', 'ONE_MINUS_CONSTANT_ALPHA', 'ONE_MINUS_CONSTANT_COLOR', 'ONE_MINUS_DST_ALPHA', 'ONE_MINUS_DST_COLOR', 'ONE_MINUS_SRC_ALPHA', 'ONE_MINUS_SRC_COLOR', 'OUT_OF_MEMORY', 'PACK_ALIGNMENT', 'POINTS', 'POLYGON_OFFSET_FACTOR', 'POLYGON_OFFSET_FILL', 'POLYGON_OFFSET_UNITS', 'RED_BITS', 'RENDERBUFFER', 'RENDERBUFFER_ALPHA_SIZE', 'RENDERBUFFER_BINDING', 'RENDERBUFFER_BLUE_SIZE', 'RENDERBUFFER_DEPTH_SIZE', 'RENDERBUFFER_GREEN_SIZE', 'RENDERBUFFER_HEIGHT', 'RENDERBUFFER_INTERNAL_FORMAT', 'RENDERBUFFER_RED_SIZE', 'RENDERBUFFER_STENCIL_SIZE', 'RENDERBUFFER_WIDTH', 'RENDERER', 'REPEAT', 'REPLACE', 'RGB', 'RGB565', 'RGB5_A1', 'RGBA', 'RGBA4', 'SAMPLER_2D', 'SAMPLER_CUBE', 'SAMPLES', 'SAMPLE_ALPHA_TO_COVERAGE', 'SAMPLE_BUFFERS', 'SAMPLE_COVERAGE', 'SAMPLE_COVERAGE_INVERT', 'SAMPLE_COVERAGE_VALUE', 'SCISSOR_BOX', 'SCISSOR_TEST', 'SHADER_TYPE', 'SHADING_LANGUAGE_VERSION', 'SHORT', 'SRC_ALPHA', 'SRC_ALPHA_SATURATE', 'SRC_COLOR', 'STATIC_DRAW', 'STENCIL_ATTACHMENT', 'STENCIL_BACK_FAIL', 'STENCIL_BACK_FUNC', 'STENCIL_BACK_PASS_DEPTH_FAIL', 'STENCIL_BACK_PASS_DEPTH_PASS', 'STENCIL_BACK_REF', 'STENCIL_BACK_VALUE_MASK', 'STENCIL_BACK_WRITEMASK', 'STENCIL_BITS', 'STENCIL_BUFFER_BIT', 'STENCIL_CLEAR_VALUE', 'STENCIL_FAIL', 'STENCIL_FUNC', 'STENCIL_INDEX', 'STENCIL_INDEX8', 'STENCIL_PASS_DEPTH_FAIL', 'STENCIL_PASS_DEPTH_PASS', 'STENCIL_REF', 'STENCIL_TEST', 'STENCIL_VALUE_MASK', 'STENCIL_WRITEMASK', 'STREAM_DRAW', 'SUBPIXEL_BITS', 'TEXTURE', 'TEXTURE0', 'TEXTURE1', 'TEXTURE10', 'TEXTURE11', 'TEXTURE12', 'TEXTURE13', 'TEXTURE14', 'TEXTURE15', 'TEXTURE16', 'TEXTURE17', 'TEXTURE18', 'TEXTURE19', 'TEXTURE2', 'TEXTURE20', 'TEXTURE21', 'TEXTURE22', 'TEXTURE23', 'TEXTURE24', 'TEXTURE25', 'TEXTURE26', 'TEXTURE27', 'TEXTURE28', 'TEXTURE29', 'TEXTURE3', 'TEXTURE30', 'TEXTURE31', 'TEXTURE4', 'TEXTURE5', 'TEXTURE6', 'TEXTURE7', 'TEXTURE8', 'TEXTURE9', 'TEXTURE_2D', 'TEXTURE_BINDING_2D', 'TEXTURE_BINDING_CUBE_MAP', 'TEXTURE_CUBE_MAP', 'TEXTURE_CUBE_MAP_NEGATIVE_X', 'TEXTURE_CUBE_MAP_NEGATIVE_Y', 'TEXTURE_CUBE_MAP_NEGATIVE_Z', 'TEXTURE_CUBE_MAP_POSITIVE_X', 'TEXTURE_CUBE_MAP_POSITIVE_Y', 'TEXTURE_CUBE_MAP_POSITIVE_Z', 'TEXTURE_MAG_FILTER', 'TEXTURE_MIN_FILTER', 'TEXTURE_WRAP_S', 'TEXTURE_WRAP_T', 'TRIANGLES', 'TRIANGLE_FAN', 'TRIANGLE_STRIP', 'UNPACK_ALIGNMENT', 'UNPACK_COLORSPACE_CONVERSION_WEBGL', 'UNPACK_FLIP_Y_WEBGL', 'UNPACK_PREMULTIPLY_ALPHA_WEBGL', 'UNSIGNED_BYTE', 'UNSIGNED_INT', 'UNSIGNED_SHORT', 'UNSIGNED_SHORT_4_4_4_4', 'UNSIGNED_SHORT_5_5_5_1', 'UNSIGNED_SHORT_5_6_5', 'VALIDATE_STATUS', 'VENDOR', 'VERSION', 'VERTEX_ATTRIB_ARRAY_BUFFER_BINDING', 'VERTEX_ATTRIB_ARRAY_ENABLED', 'VERTEX_ATTRIB_ARRAY_NORMALIZED', 'VERTEX_ATTRIB_ARRAY_POINTER', 'VERTEX_ATTRIB_ARRAY_SIZE', 'VERTEX_ATTRIB_ARRAY_STRIDE', 'VERTEX_ATTRIB_ARRAY_TYPE', 'VERTEX_SHADER', 'VIEWPORT', 'ZERO', 'activeTexture(', 'attachShader(', 'bindAttribLocation(', 'bindBuffer(', 'bindFramebuffer(', 'bindRenderbuffer(', 'bindTexture(', 'blendColor(', 'blendEquation(', 'blendEquationSeparate(', 'blendFunc(', 'blendFuncSeparate(', 'bufferData(', 'bufferSubData(', 'canvas', 'checkFramebufferStatus(', 'clear(', 'clearColor(', 'clearDepth(', 'clearStencil(', 'colorMask(', 'compileShader(', 'compressedTexImage2D(', 'compressedTexSubImage2D(', 'copyTexImage2D(', 'copyTexSubImage2D(', 'createBuffer(', 'createFramebuffer(', 'createProgram(', 'createRenderbuffer(', 'createShader(', 'createTexture(', 'cullFace(', 'deleteBuffer(', 'deleteFramebuffer(', 'deleteProgram(', 'deleteRenderbuffer(', 'deleteShader(', 'deleteTexture(', 'depthFunc(', 'depthMask(', 'depthRange(', 'detachShader(', 'disable(', 'disableVertexAttribArray(', 'drawArrays(', 'drawElements(', 'drawingBufferHeight', 'drawingBufferWidth', 'enable(', 'enableVertexAttribArray(', 'finish(', 'flush(', 'framebufferRenderbuffer(', 'framebufferTexture2D(', 'frontFace(', 'generateMipmap(', 'getActiveAttrib(', 'getActiveUniform(', 'getAttachedShaders(', 'getAttribLocation(', 'getBufferParameter(', 'getContextAttributes(', 'getError(', 'getExtension(', 'getFramebufferAttachmentParameter(', 'getParameter(', 'getProgramInfoLog(', 'getProgramParameter(', 'getRenderbufferParameter(', 'getShaderInfoLog(', 'getShaderParameter(', 'getShaderPrecisionFormat(', 'getShaderSource(', 'getSupportedExtensions(', 'getTexParameter(', 'getUniform(', 'getUniformLocation(', 'getVertexAttrib(', 'getVertexAttribOffset(', 'hint(', 'isBuffer(', 'isContextLost(', 'isEnabled(', 'isFramebuffer(', 'isProgram(', 'isRenderbuffer(', 'isShader(', 'isTexture(', 'lineWidth(', 'linkProgram(', 'pixelStorei(', 'polygonOffset(', 'readPixels(', 'renderbufferStorage(', 'sampleCoverage(', 'scissor(', 'shaderSource(', 'stencilFunc(', 'stencilFuncSeparate(', 'stencilMask(', 'stencilMaskSeparate(', 'stencilOp(', 'stencilOpSeparate(', 'texImage2D(', 'texParameterf(', 'texParameteri(', 'texSubImage2D(', 'uniform1f(', 'uniform1fv(', 'uniform1i(', 'uniform1iv(', 'uniform2f(', 'uniform2fv(', 'uniform2i(', 'uniform2iv(', 'uniform3f(', 'uniform3fv(', 'uniform3i(', 'uniform3iv(', 'uniform4f(', 'uniform4fv(', 'uniform4i(', 'uniform4iv(', 'uniformMatrix2fv(', 'uniformMatrix3fv(', 'uniformMatrix4fv(', 'useProgram(', 'validateProgram(', 'vertexAttrib1f(', 'vertexAttrib1fv(', 'vertexAttrib2f(', 'vertexAttrib2fv(', 'vertexAttrib3f(', 'vertexAttrib3fv(', 'vertexAttrib4f(', 'vertexAttrib4fv(', 'vertexAttribPointer(', 'viewport('] 63 | 64 | let s:ctxs = ['arc(', 'arcTo(', 'beginPath(', 'bezierCurveTo(', 'canvas', 'clearRect(', 'clearShadow(', 'clip(', 'closePath(', 'constructor(', 'createImageData(', 'createLinearGradient(', 'createPattern(', 'createRadialGradient(', 'drawFocusIfNeeded(', 'drawImage(', 'drawImageFromRect(', 'ellipse(', 'fill(', 'fillRect(', 'fillStyle', 'fillText(', 'font', 'getContextAttributes(', 'getImageData(', 'getLineDash(', 'globalAlpha', 'globalCompositeOperation', 'imageSmoothingEnabled', 'isPointInPath(', 'isPointInStroke(', 'lineCap', 'lineDashOffset', 'lineJoin', 'lineTo(', 'lineWidth', 'measureText(', 'miterLimit', 'moveTo(', 'putImageData(', 'quadraticCurveTo(', 'rect(', 'resetTransform(', 'restore(', 'rotate(', 'save(', 'scale(', 'setAlpha(', 'setCompositeOperation(', 'setFillColor(', 'setLineCap(', 'setLineDash(', 'setLineJoin(', 'setLineWidth(', 'setMiterLimit(', 'setShadow(', 'setStrokeColor(', 'setTransform(', 'shadowBlur', 'shadowColor', 'shadowOffsetX', 'shadowOffsetY', 'stroke(', 'strokeRect(', 'strokeStyle', 'strokeText(', 'textAlign', 'textBaseline', 'toString(', 'transform(', 'translate(', 'webkitImageSmoothingEnabled'] 65 | 66 | let s:storage = ['clear(', 'constructor(', 'getItem(', 'key(', 'length', 'removeItem(', 'setItem(', 'toString('] 67 | 68 | let s:bodys = ['ALLOW_KEYBOARD_INPUT', 'ATTRIBUTE_NODE', 'CDATA_SECTION_NODE', 'COMMENT_NODE', 'DOCUMENT_FRAGMENT_NODE', 'DOCUMENT_NODE', 'DOCUMENT_POSITION_CONTAINED_BY', 'DOCUMENT_POSITION_CONTAINS', 'DOCUMENT_POSITION_DISCONNECTED', 'DOCUMENT_POSITION_FOLLOWING', 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'DOCUMENT_POSITION_PRECEDING', 'DOCUMENT_TYPE_NODE', 'ELEMENT_NODE', 'ENTITY_NODE', 'ENTITY_REFERENCE_NODE', 'NOTATION_NODE', 'PROCESSING_INSTRUCTION_NODE', 'TEXT_NODE', 'aLink', 'accessKey', 'addEventListener(', 'animate(', 'appendChild(', 'attributes', 'background', 'baseURI', 'bgColor', 'blur(', 'childElementCount', 'childNodes', 'children', 'classList', 'className', 'click(', 'clientHeight', 'clientLeft', 'clientTop', 'clientWidth', 'cloneNode(', 'compareDocumentPosition(', 'contains(', 'contentEditable', 'createShadowRoot(', 'dataset', 'dir', 'dispatchEvent(', 'draggable', 'firstChild', 'firstElementChild', 'focus(', 'getAttribute(', 'getAttributeNS(', 'getAttributeNode(', 'getAttributeNodeNS(', 'getBoundingClientRect(', 'getClientRects(', 'getDestinationInsertionPoints(', 'getElementsByClassName(', 'getElementsByTagName(', 'getElementsByTagNameNS(', 'hasAttribute(', 'hasAttributeNS(', 'hasAttributes(', 'hasChildNodes(', 'hidden', 'id', 'innerHTML', 'innerText', 'insertAdjacentElement(', 'insertAdjacentHTML(', 'insertAdjacentText(', 'insertBefore(', 'isContentEditable', 'isDefaultNamespace(', 'isEqualNode(', 'isSameNode(', 'lang', 'lastChild', 'lastElementChild', 'link', 'localName', 'lookupNamespaceURI(', 'lookupPrefix(', 'matches(', 'namespaceURI', 'nextElementSibling', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'normalize(', 'offsetHeight', 'offsetLeft', 'offsetParent', 'offsetTop', 'offsetWidth', 'onabort', 'onautocomplete', 'onautocompleteerror', 'onbeforecopy', 'onbeforecut', 'onbeforepaste', 'onbeforeunload', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', 'oncontextmenu', 'oncopy', 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onfocus', 'onhashchange', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onlanguagechange', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmessage', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onoffline', 'ononline', 'onpagehide', 'onpageshow', 'onpaste', 'onpause', 'onplay', 'onplaying', 'onpopstate', 'onprogress', 'onratechange', 'onreset', 'onresize', 'onscroll', 'onsearch', 'onseeked', 'onseeking', 'onselect', 'onselectstart', 'onshow', 'onstalled', 'onstorage', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'onunload', 'onvolumechange', 'onwaiting', 'onwebkitfullscreenchange', 'onwebkitfullscreenerror', 'onwheel', 'outerHTML', 'outerText', 'ownerDocument', 'parentElement', 'parentNode', 'prefix', 'previousElementSibling', 'previousSibling', 'querySelector(', 'querySelectorAll(', 'remove(', 'removeAttribute(', 'removeAttributeNS(', 'removeAttributeNode(', 'removeChild(', 'removeEventListener(', 'replaceChild(', 'requestPointerLock(', 'scrollByLines(', 'scrollByPages(', 'scrollHeight', 'scrollIntoView(', 'scrollIntoViewIfNeeded(', 'scrollLeft', 'scrollTop', 'scrollWidth', 'setAttribute(', 'setAttributeNS(', 'setAttributeNode(', 'setAttributeNodeNS(', 'shadowRoot', 'spellcheck', 'style', 'tabIndex', 'tagName', 'text', 'textContent', 'title', 'translate', 'vLink', 'webkitMatchesSelector(', 'webkitRequestFullScreen(', 'webkitRequestFullscreen(', 'webkitRequestPointerLock(', 'webkitdropzone'] 69 | 70 | let s:docus = ['ATTRIBUTE_NODE', 'CDATA_SECTION_NODE', 'COMMENT_NODE', 'DOCUMENT_FRAGMENT_NODE', 'DOCUMENT_NODE', 'DOCUMENT_POSITION_CONTAINED_BY', 'DOCUMENT_POSITION_CONTAINS', 'DOCUMENT_POSITION_DISCONNECTED', 'DOCUMENT_POSITION_FOLLOWING', 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'DOCUMENT_POSITION_PRECEDING', 'DOCUMENT_TYPE_NODE', 'ELEMENT_NODE', 'ENTITY_NODE', 'ENTITY_REFERENCE_NODE', 'NOTATION_NODE', 'PROCESSING_INSTRUCTION_NODE', 'TEXT_NODE', 'URL', 'activeElement', 'addEventListener(', 'adoptNode(', 'alinkColor', 'all', 'anchors', 'appendChild(', 'applets', 'baseURI', 'bgColor', 'body', 'captureEvents(', 'caretRangeFromPoint(', 'characterSet', 'charset', 'childElementCount', 'childNodes', 'children', 'clear(', 'cloneNode(', 'close(', 'compareDocumentPosition(', 'compatMode', 'contains(', 'contentType', 'cookie', 'createAttribute(', 'createAttributeNS(', 'createCDATASection(', 'createComment(', 'createDocumentFragment(', 'createElement(', 'createElementNS(', 'createEvent(', 'createExpression(', 'createNSResolver(', 'createNodeIterator(', 'createProcessingInstruction(', 'createRange(', 'createTextNode(', 'createTreeWalker(', 'currentScript', 'defaultView', 'designMode', 'dir', 'dispatchEvent(', 'doctype', 'documentElement', 'documentURI', 'domain', 'elementFromPoint(', 'elementsFromPoint(', 'embeds', 'evaluate(', 'execCommand(', 'exitPointerLock(', 'fgColor', 'firstChild', 'firstElementChild', 'fonts', 'forms', 'getElementById(', 'getElementsByClassName(', 'getElementsByName(', 'getElementsByTagName(', 'getElementsByTagNameNS(', 'getSelection(', 'hasChildNodes(', 'hasFocus(', 'head', 'hidden', 'images', 'implementation', 'importNode(', 'inputEncoding', 'insertBefore(', 'isConnected', 'isDefaultNamespace(', 'isEqualNode(', 'isSameNode(', 'lastChild', 'lastElementChild', 'lastModified', 'linkColor', 'links', 'location', 'lookupNamespaceURI(', 'lookupPrefix(', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'normalize(', 'onabort', 'onbeforecopy', 'onbeforecut', 'onbeforepaste', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', 'oncontextmenu', 'oncopy', 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onfocus', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onpaste', 'onpause', 'onplay', 'onplaying', 'onpointerlockchange', 'onpointerlockerror', 'onprogress', 'onratechange', 'onreadystatechange', 'onreset', 'onresize', 'onscroll', 'onsearch', 'onseeked', 'onseeking', 'onselect', 'onselectionchange', 'onselectstart', 'onshow', 'onstalled', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'onvolumechange', 'onwaiting', 'onwebkitfullscreenchange', 'onwebkitfullscreenerror', 'onwheel', 'open(', 'origin', 'ownerDocument', 'parentElement', 'parentNode', 'plugins', 'pointerLockElement', 'preferredStylesheetSet', 'previousSibling', 'queryCommandEnabled(', 'queryCommandIndeterm(', 'queryCommandState(', 'queryCommandSupported(', 'queryCommandValue(', 'querySelector(', 'querySelectorAll(', 'readyState', 'referrer', 'registerElement(', 'releaseEvents(', 'removeChild(', 'removeEventListener(', 'replaceChild(', 'rootElement', 'scripts', 'scrollingElement', 'selectedStylesheetSet', 'styleSheets', 'textContent', 'title', 'visibilityState', 'vlinkColor', 'webkitCancelFullScreen(', 'webkitCurrentFullScreenElement', 'webkitExitFullscreen(', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitHidden', 'webkitIsFullScreen', 'webkitVisibilityState', 'write(', 'writeln(', 'xmlEncoding', 'xmlStandalone', 'xmlVersion'] 71 | 72 | let s:hists = ['back(', 'constructor(', 'forward(', 'go(', 'length', 'pushState(', 'replaceState(', 'toString('] 73 | 74 | let s:imags = ['ALLOW_KEYBOARD_INPUT', 'ATTRIBUTE_NODE', 'CDATA_SECTION_NODE', 'COMMENT_NODE', 'DOCUMENT_FRAGMENT_NODE', 'DOCUMENT_NODE', 'DOCUMENT_POSITION_CONTAINED_BY', 'DOCUMENT_POSITION_CONTAINS', 'DOCUMENT_POSITION_DISCONNECTED', 'DOCUMENT_POSITION_FOLLOWING', 'DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'DOCUMENT_POSITION_PRECEDING', 'DOCUMENT_TYPE_NODE', 'ELEMENT_NODE', 'ENTITY_NODE', 'ENTITY_REFERENCE_NODE', 'NOTATION_NODE', 'PROCESSING_INSTRUCTION_NODE', 'TEXT_NODE', 'accessKey', 'addEventListener(', 'align', 'alt', 'animate(', 'appendChild(', 'attributes', 'baseURI', 'blur(', 'border', 'childElementCount', 'childNodes', 'children', 'classList', 'className', 'click(', 'clientHeight', 'clientLeft', 'clientTop', 'clientWidth', 'cloneNode(', 'compareDocumentPosition(', 'complete', 'constructor(', 'contains(', 'contentEditable', 'createShadowRoot(', 'crossOrigin', 'dataset', 'dir', 'dispatchEvent(', 'draggable', 'firstChild', 'firstElementChild', 'focus(', 'getAttribute(', 'getAttributeNS(', 'getAttributeNode(', 'getAttributeNodeNS(', 'getBoundingClientRect(', 'getClientRects(', 'getDestinationInsertionPoints(', 'getElementsByClassName(', 'getElementsByTagName(', 'getElementsByTagNameNS(', 'hasAttribute(', 'hasAttributeNS(', 'hasAttributes(', 'hasChildNodes(', 'height', 'hidden', 'hspace', 'id', 'innerHTML', 'innerText', 'insertAdjacentElement(', 'insertAdjacentHTML(', 'insertAdjacentText(', 'insertBefore(', 'isContentEditable', 'isDefaultNamespace(', 'isEqualNode(', 'isMap', 'isSameNode(', 'lang', 'lastChild', 'lastElementChild', 'localName', 'longDesc', 'lookupNamespaceURI(', 'lookupPrefix(', 'lowsrc', 'matches(', 'namespaceURI', 'naturalHeight', 'naturalWidth', 'nextElementSibling', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'normalize(', 'offsetHeight', 'offsetLeft', 'offsetParent', 'offsetTop', 'offsetWidth', 'onabort', 'onautocomplete', 'onautocompleteerror', 'onbeforecopy', 'onbeforecut', 'onbeforepaste', 'onblur', 'oncancel', 'oncanplay', 'oncanplaythrough', 'onchange', 'onclick', 'onclose', 'oncontextmenu', 'oncopy', 'oncuechange', 'oncut', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onfocus', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onpaste', 'onpause', 'onplay', 'onplaying', 'onprogress', 'onratechange', 'onreset', 'onresize', 'onscroll', 'onsearch', 'onseeked', 'onseeking', 'onselect', 'onselectstart', 'onshow', 'onstalled', 'onsubmit', 'onsuspend', 'ontimeupdate', 'ontoggle', 'onvolumechange', 'onwaiting', 'onwebkitfullscreenchange', 'onwebkitfullscreenerror', 'onwheel', 'outerHTML', 'outerText', 'ownerDocument', 'parentElement', 'parentNode', 'prefix', 'previousElementSibling', 'previousSibling', 'querySelector(', 'querySelectorAll(', 'remove(', 'removeAttribute(', 'removeAttributeNS(', 'removeAttributeNode(', 'removeChild(', 'removeEventListener(', 'replaceChild(', 'requestPointerLock(', 'scrollByLines(', 'scrollByPages(', 'scrollHeight', 'scrollIntoView(', 'scrollIntoViewIfNeeded(', 'scrollLeft', 'scrollTop', 'scrollWidth', 'setAttribute(', 'setAttributeNS(', 'setAttributeNode(', 'setAttributeNodeNS(', 'shadowRoot', 'spellcheck', 'src', 'srcset', 'style', 'tabIndex', 'tagName', 'textContent', 'title', 'translate', 'useMap', 'vspace', 'webkitMatchesSelector(', 'webkitRequestFullScreen(', 'webkitRequestFullscreen(', 'webkitRequestPointerLock(', 'webkitdropzone', 'width', 'x', 'y'] 75 | 76 | let s:navis = ['appCodeName', 'appName', 'appVersion', 'constructor(', 'cookieEnabled', 'doNotTrack', 'geolocation', 'getGamepads(', 'getMediaDevices(', 'getStorageUpdates(', 'hardwareConcurrency', 'javaEnabled(', 'language', 'languages', 'length', 'maxTouchPoints', 'mimeTypes', 'onLine', 'platform', 'plugins', 'product', 'productSub', 'registerProtocolHandler(', 'toString(', 'userAgent', 'vendor', 'vendorSub', 'vibrate(', 'webkitGetGamepads(', 'webkitGetUserMedia(', 'webkitPersistentStorage', 'webkitTemporaryStorage'] 77 | 78 | let s:scres = ['availHeight', 'availLeft', 'availTop', 'availWidth', 'colorDepth', 'constructor(', 'height', 'pixelDepth', 'toString(', 'width'] 79 | 80 | let s:styls = ['alignContent', 'alignItems', 'alignSelf', 'alignmentBaseline', 'all', 'animation', 'animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction', 'backfaceVisibility', 'background', 'backgroundAttachment', 'backgroundBlendMode', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPosition', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundRepeatX', 'backgroundRepeatY', 'backgroundSize', 'baselineShift', 'border', 'borderBottom', 'borderBottomColor', 'borderBottomLeftRadius', 'borderBottomRightRadius', 'borderBottomStyle', 'borderBottomWidth', 'borderCollapse', 'borderColor', 'borderImage', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeft', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRadius', 'borderRight', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderSpacing', 'borderStyle', 'borderTop', 'borderTopColor', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderTopStyle', 'borderTopWidth', 'borderWidth', 'bottom', 'boxShadow', 'boxSizing', 'breakAfter', 'breakBefore', 'breakInside', 'bufferedRendering', 'captionSide', 'clear', 'clip', 'clipPath', 'clipRule', 'color', 'colorInterpolation', 'colorInterpolationFilters', 'colorRendering', 'columnCount', 'columnFill', 'columnGap', 'columnRule', 'columnRuleColor', 'columnRuleStyle', 'columnRuleWidth', 'columnSpan', 'columnWidth', 'columns', 'contain', 'content', 'counterIncrement', 'counterReset', 'cssFloat', 'cssText', 'cursor', 'cx', 'cy', 'd', 'direction', 'display', 'dominantBaseline', 'emptyCells', 'fill', 'fillOpacity', 'fillRule', 'filter', 'flex', 'flexBasis', 'flexDirection', 'flexFlow', 'flexGrow', 'flexShrink', 'flexWrap', 'float', 'floodColor', 'floodOpacity', 'font', 'fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontSize', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantCaps', 'fontVariantLigatures', 'fontVariantNumeric', 'fontWeight', 'getPropertyPriority(', 'getPropertyValue(', 'height', 'imageRendering', 'isolation', 'item(', 'justifyContent', 'left', 'length', 'letterSpacing', 'lightingColor', 'lineHeight', 'listStyle', 'listStyleImage', 'listStylePosition', 'listStyleType', 'margin', 'marginBottom', 'marginLeft', 'marginRight', 'marginTop', 'marker', 'markerEnd', 'markerMid', 'markerStart', 'mask', 'maskType', 'maxHeight', 'maxWidth', 'maxZoom', 'minHeight', 'minWidth', 'minZoom', 'mixBlendMode', 'motion', 'motionOffset', 'motionPath', 'motionRotation', 'objectFit', 'objectPosition', 'opacity', 'order', 'orientation', 'orphans', 'outline', 'outlineColor', 'outlineOffset', 'outlineStyle', 'outlineWidth', 'overflow', 'overflowWrap', 'overflowX', 'overflowY', 'padding', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', 'page', 'pageBreakAfter', 'pageBreakBefore', 'pageBreakInside', 'paintOrder', 'parentRule', 'perspective', 'perspectiveOrigin', 'pointerEvents', 'position', 'quotes', 'r', 'removeProperty(', 'resize', 'right', 'rx', 'ry', 'setProperty(', 'shapeImageThreshold', 'shapeMargin', 'shapeOutside', 'shapeRendering', 'size', 'speak', 'src', 'stopColor', 'stopOpacity', 'stroke', 'strokeDasharray', 'strokeDashoffset', 'strokeLinecap', 'strokeLinejoin', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth', 'tabSize', 'tableLayout', 'textAlign', 'textAlignLast', 'textAnchor', 'textCombineUpright', 'textDecoration', 'textIndent', 'textOrientation', 'textOverflow', 'textRendering', 'textShadow', 'textTransform', 'top', 'touchAction', 'transform', 'transformOrigin', 'transformStyle', 'transition', 'transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction', 'unicodeBidi', 'unicodeRange', 'userZoom', 'vectorEffect', 'verticalAlign', 'visibility', 'webkitAppRegion', 'webkitAppearance', 'webkitBackgroundClip', 'webkitBackgroundOrigin', 'webkitBorderAfter', 'webkitBorderAfterColor', 'webkitBorderAfterStyle', 'webkitBorderAfterWidth', 'webkitBorderBefore', 'webkitBorderBeforeColor', 'webkitBorderBeforeStyle', 'webkitBorderBeforeWidth', 'webkitBorderEnd', 'webkitBorderEndColor', 'webkitBorderEndStyle', 'webkitBorderEndWidth', 'webkitBorderHorizontalSpacing', 'webkitBorderImage', 'webkitBorderStart', 'webkitBorderStartColor', 'webkitBorderStartStyle', 'webkitBorderStartWidth', 'webkitBorderVerticalSpacing', 'webkitBoxAlign', 'webkitBoxDecorationBreak', 'webkitBoxDirection', 'webkitBoxFlex', 'webkitBoxFlexGroup', 'webkitBoxLines', 'webkitBoxOrdinalGroup', 'webkitBoxOrient', 'webkitBoxPack', 'webkitBoxReflect', 'webkitClipPath', 'webkitColumnBreakAfter', 'webkitColumnBreakBefore', 'webkitColumnBreakInside', 'webkitFilter', 'webkitFontSizeDelta', 'webkitFontSmoothing', 'webkitHighlight', 'webkitHyphenateCharacter', 'webkitLineBreak', 'webkitLineClamp', 'webkitLocale', 'webkitLogicalHeight', 'webkitLogicalWidth', 'webkitMarginAfter', 'webkitMarginAfterCollapse', 'webkitMarginBefore', 'webkitMarginBeforeCollapse', 'webkitMarginBottomCollapse', 'webkitMarginCollapse', 'webkitMarginEnd', 'webkitMarginStart', 'webkitMarginTopCollapse', 'webkitMask', 'webkitMaskBoxImage', 'webkitMaskBoxImageOutset', 'webkitMaskBoxImageRepeat', 'webkitMaskBoxImageSlice', 'webkitMaskBoxImageSource', 'webkitMaskBoxImageWidth', 'webkitMaskClip', 'webkitMaskComposite', 'webkitMaskImage', 'webkitMaskOrigin', 'webkitMaskPosition', 'webkitMaskPositionX', 'webkitMaskPositionY', 'webkitMaskRepeat', 'webkitMaskRepeatX', 'webkitMaskRepeatY', 'webkitMaskSize', 'webkitMaxLogicalHeight', 'webkitMaxLogicalWidth', 'webkitMinLogicalHeight', 'webkitMinLogicalWidth', 'webkitPaddingAfter', 'webkitPaddingBefore', 'webkitPaddingEnd', 'webkitPaddingStart', 'webkitPerspectiveOriginX', 'webkitPerspectiveOriginY', 'webkitPrintColorAdjust', 'webkitRtlOrdering', 'webkitRubyPosition', 'webkitTapHighlightColor', 'webkitTextCombine', 'webkitTextDecorationsInEffect', 'webkitTextEmphasis', 'webkitTextEmphasisColor', 'webkitTextEmphasisPosition', 'webkitTextEmphasisStyle', 'webkitTextFillColor', 'webkitTextOrientation', 'webkitTextSecurity', 'webkitTextStroke', 'webkitTextStrokeColor', 'webkitTextStrokeWidth', 'webkitTransformOriginX', 'webkitTransformOriginY', 'webkitTransformOriginZ', 'webkitUserDrag', 'webkitUserModify', 'webkitUserSelect', 'webkitWritingMode', 'whiteSpace', 'widows', 'width', 'willChange', 'wordBreak', 'wordSpacing', 'wordWrap', 'writingMode', 'x', 'y', 'zIndex', 'zoom'] 81 | 82 | let s:niters = ['constructor(', 'detach(', 'expandEntityReferences', 'filter', 'length', 'nextNode(', 'pointerBeforeReferenceNode', 'previousNode(', 'referenceNode', 'root', 'toString(', 'whatToShow'] 83 | 84 | let s:nfilter = ['FILTER_ACCEPT', 'FILTER_REJECT', 'FILTER_SKIP', 'SHOW_ALL', 'SHOW_ATTRIBUTE', 'SHOW_CDATA_SECTION', 'SHOW_COMMENT', 'SHOW_DOCUMENT', 'SHOW_DOCUMENT_FRAGMENT', 'SHOW_DOCUMENT_TYPE', 'SHOW_ELEMENT', 'SHOW_ENTITY', 'SHOW_ENTITY_REFERENCE', 'SHOW_NOTATION', 'SHOW_PROCESSING_INSTRUCTION', 'SHOW_TEXT', 'acceptNode(', 'constructor(', 'length', 'toString('] 85 | 86 | let s:twalkers = ['constructor(', 'currentNode', 'expandEntityReferences', 'filter', 'firstChild(', 'lastChild(', 'length', 'nextNode(', 'nextSibling(', 'parentNode(', 'previousNode(', 'previousSibling(', 'root', 'toString(', 'whatToShow'] 87 | 88 | let s:console = ['assert(', 'clear(', 'count(', 'debug(', 'dir(', 'dirxml(', 'error(', 'group(', 'groupCollapsed(', 'groupEnd(', 'info(', 'log(', 'markTimeline(', 'memory', 'profile(', 'profileEnd(', 'table(', 'time(', 'timeEnd(', 'timeStamp(', 'timeline(', 'timelineEnd(', 'trace(', 'warn('] 89 | 90 | let s:xmlhs = ['DONE', 'HEADERS_RECEIVED', 'LOADING', 'OPENED', 'UNSENT', 'abort(', 'addEventListener(', 'constructor(', 'dispatchEvent(', 'getAllResponseHeaders(', 'getResponseHeader(', 'length', 'onabort', 'onerror', 'onload', 'onloadend', 'onloadstart', 'onprogress', 'onreadystatechange', 'ontimeout', 'open(', 'overrideMimeType(', 'readyState', 'removeEventListener(', 'response', 'responseText', 'responseType', 'responseURL', 'responseXML', 'send(', 'setRequestHeader(', 'status', 'statusText', 'timeout', 'toString(', 'upload', 'withCredentials'] 91 | 92 | function! js#CompleteJS(findstart, base) 93 | if a:findstart 94 | " locate the start of the word 95 | let line = getline('.') 96 | let start = col('.') - 1 97 | let curline = line('.') 98 | let compl_begin = col('.') - 2 99 | " Bit risky but JS is rather limited language and local chars shouldn't 100 | " fint way into names 101 | while start >= 0 && line[start - 1] =~ '\k' 102 | let start -= 1 103 | endwhile 104 | let b:compl_context = getline('.')[0:compl_begin] 105 | return start 106 | else 107 | " Initialize base return lists 108 | let res = [] 109 | let res2 = [] 110 | " a:base is very short - we need context 111 | " Shortcontext is context without a:base, useful for checking if we are 112 | " looking for objects and for what objects we are looking for 113 | let context = b:compl_context 114 | let shortcontext = substitute(context, a:base.'$', '', '') 115 | unlet! b:compl_context 116 | 117 | if exists("b:jsrange") 118 | let file = getline(b:jsrange[0],b:jsrange[1]) 119 | unlet! b:jsrange 120 | 121 | if len(b:js_extfiles) > 0 122 | let file = b:js_extfiles + file 123 | endif 124 | 125 | else 126 | let file = getline(1, '$') 127 | endif 128 | 129 | 130 | if shortcontext =~ '\.$' 131 | 132 | let user_props1 = filter(copy(file), 'v:val =~ "this\\.\\k"') 133 | let juser_props1 = join(user_props1, ' ') 134 | let user_props1 = split(juser_props1, '\zethis\.') 135 | unlet! juser_props1 136 | call map(user_props1, 'matchstr(v:val, "this\\.\\zs\\k\\+\\ze")') 137 | 138 | let user_props2 = filter(copy(file), 'v:val =~ "\\.prototype\\.\\k"') 139 | let juser_props2 = join(user_props2, ' ') 140 | let user_props2 = split(juser_props2, '\zeprototype\.') 141 | unlet! juser_props2 142 | call map(user_props2, 'matchstr(v:val, "prototype\\.\\zs\\k\\+\\ze")') 143 | let user_props = user_props1 + user_props2 144 | 145 | " Find object type declaration to reduce number of suggestions. {{{ 146 | " 1. Get object name 147 | " 2. Find object declaration line 148 | " 3. General declaration follows "= new Type" syntax, additional else 149 | " for regexp "= /re/" 150 | " 4. Make correction for Microsoft.XMLHTTP ActiveXObject 151 | " 5. Repeat for external files 152 | let object = matchstr(shortcontext, '\zs\k\+\ze\(\[.\{-}\]\)\?\.$') 153 | if len(object) > 0 154 | let decl_line = search(object.'.\{-}=\s*new\s*', 'bn') 155 | if decl_line > 0 156 | let object_type = matchstr(getline(decl_line), object.'.\{-}=\s*new\s*\zs\k\+\ze') 157 | if object_type == 'ActiveXObject' && matchstr(getline(decl_line), object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != '' 158 | let object_type = 'XMLHttpRequest' 159 | endif 160 | else 161 | if search(object.'\s*=\s*\/', 'bn') > 0 162 | let object_type = 'RegExp' 163 | elseif search(object.'\s*=\s*{', 'bn') > 0 164 | let object_type = 'Object' 165 | elseif search(object.'\s*=\s*\(true\|false\|!\)', 'bn') > 0 166 | let object_type = 'Boolean' 167 | elseif search(object.'\s*=\s*\[', 'bn') > 0 168 | let object_type = 'Array' 169 | elseif search(object.'\s*=\s*\(["'."'".']\|String(\)', 'bn') > 0 170 | let object_type = 'String' 171 | elseif search(object.'\s*=\s*document\.createTreeWalker(', 'bn') > 0 172 | let object_type = 'TreeWalker' 173 | elseif search(object.'\s*=\s*[a-zA-Z_$]\+\.getContext( *.webgl', 'bn') > 0 174 | let object_type = 'WebGL' 175 | elseif search(object.'\s*=\s*[a-zA-Z_$]\+\.getContext( *.2d', 'bn') > 0 176 | let object_type = 'CanvasRenderingContext2D' 177 | elseif search(object.'\s*=\s*document\.createNodeIterator(', 'bn') > 0 178 | let object_type = 'NodeIterator' 179 | endif 180 | endif 181 | " We didn't find var declaration in current file but we may have 182 | " something in external files. 183 | if decl_line == 0 && exists("b:js_extfiles") 184 | let dext_line = filter(copy(b:js_extfiles), 'v:val =~ "'.object.'.\\{-}=\\s*new\\s*"') 185 | if len(dext_line) > 0 186 | let object_type = matchstr(dext_line[-1], object.'.\{-}=\s*new\s*\zs\k\+\ze') 187 | if object_type == 'ActiveXObject' && matchstr(dext_line[-1], object.'.\{-}=\s*new\s*ActiveXObject\s*(.Microsoft\.XMLHTTP.)') != '' 188 | let object_type = 'XMLHttpRequest' 189 | endif 190 | else 191 | let dext_line = filter(copy(b:js_extfiles), 'v:val =~ "var\s*'.object.'\\s*=\\s*\\/"') 192 | if len(dext_line) > 0 193 | let object_type = 'RegExp' 194 | endif 195 | endif 196 | endif 197 | endif 198 | 199 | if !exists('object_type') 200 | let object_type = '' 201 | endif 202 | 203 | if object_type == 'Date' 204 | let values = s:dates 205 | elseif object_type == 'Image' 206 | let values = s:imags 207 | elseif object_type == 'Array' 208 | let values = s:arrays 209 | elseif object_type == 'Object' 210 | let values = s:objes 211 | elseif object_type == 'Boolean' 212 | let values = ['constructor', 'toString', 'valueOf'] 213 | elseif object_type == 'XMLHttpRequest' 214 | let values = s:xmlhs 215 | elseif object_type == 'String' 216 | let values = s:stris 217 | elseif object_type == 'RegExp' 218 | let values = s:reges 219 | elseif object_type == 'Math' 220 | let values = s:maths 221 | elseif object_type == 'WebGL' 222 | let values = s:webgl 223 | elseif object_type == 'CanvasRenderingContext2D' 224 | let values = s:ctxs 225 | elseif object_type == 'NodeIterator' 226 | let values = s:niters 227 | elseif object_type == 'TreeWalker' 228 | let values = s:twalkers 229 | endif 230 | 231 | "Chrome extension API completions -- enable with 'let g:vimjs#chromeapis = 1' 232 | if !exists('values') && g:vimjs#chromeapis == 1 233 | if shortcontext =~ 'chrome\.$' 234 | let values = s:chromeo 235 | elseif shortcontext =~ 'chrome\.\([a-zA-Z]\+\.\)\+$' 236 | if shortcontext =~ 'tabs\.$' 237 | let values = s:chrometabs 238 | elseif shortcontext =~ 'history\.$' 239 | let values = s:chromehist 240 | elseif shortcontext =~ 'bookmarks\.$' 241 | let values = s:chromemarks 242 | elseif shortcontext =~ 'command\.$' 243 | let values = s:chromecomm 244 | elseif shortcontext =~ 'windows\.$' 245 | let values = s:chromewins 246 | elseif shortcontext =~ 'extension\.$' 247 | let values = s:chromeext 248 | elseif shortcontext =~ 'runtime\.$' 249 | let values = s:chromerunt 250 | elseif shortcontext =~ 'topSites\.$' 251 | let values = s:chrometops 252 | elseif shortcontext =~ 'browserAction\.$' 253 | let values = s:chromebact 254 | elseif shortcontext =~ 'app\.$' 255 | let values = s:chromeapp 256 | elseif shortcontext =~ 'downloads\.$' 257 | let values = s:chromedown 258 | elseif shortcontext =~ 'management\.$' 259 | let values = s:chromeman 260 | elseif shortcontext =~ 'permissions\.$' 261 | let values = s:chromeperm 262 | elseif shortcontext =~ 'sessions\.$' 263 | let values = s:chromesess 264 | elseif shortcontext =~ 'storage\.$' 265 | let values = s:chromestor 266 | elseif shortcontext =~ 'storage\.sync\.$' 267 | let values = s:chromestorsync 268 | elseif shortcontext =~ 'storage\.local\.$' 269 | let values = s:chromestorloc 270 | elseif shortcontext =~ '\.on[A-Z][a-z]\+\.$' 271 | let values = ['addListener(', 'addRules(', 'dispatch(', 'dispatchToListener(', 'getRules(', 'hasListener(', 'hasListeners(', 'removeListener(', 'removeRules('] 272 | endif 273 | endif 274 | endif 275 | 276 | if !exists('values') 277 | if shortcontext =~ 'Math\.$' 278 | let values = s:maths 279 | elseif shortcontext =~ 'body\.$' 280 | let values = s:bodys 281 | elseif shortcontext =~ 'document\.$' 282 | let values = s:docus 283 | elseif shortcontext =~ 'history\.$' 284 | let values = s:hists 285 | elseif shortcontext =~ 'JSON\.$' 286 | let values = ['parse(', 'stringify('] 287 | elseif shortcontext =~ '\(local\|session\)Storage\.$' 288 | let values = s:storage 289 | elseif shortcontext =~ 'NodeFilter\.$' 290 | let values = s:nfilter 291 | elseif shortcontext =~ '\/.*\(\\\/\)\@!\/\.$' 292 | let values = s:reges 293 | elseif shortcontext =~ 'images\(\[.\{-}\]\)\?\.$' 294 | let values = s:imags 295 | elseif shortcontext =~ 'location\.$' 296 | let values = s:locas 297 | elseif shortcontext =~ 'navigator\.$' 298 | let values = s:navis 299 | elseif shortcontext =~ 'console\.$' 300 | let values = s:console 301 | elseif shortcontext =~ 'event\.$' 302 | let values = s:evnts 303 | elseif shortcontext =~ '\]\.$' 304 | let values = s:arrays 305 | elseif shortcontext =~ "['\"]\.$" 306 | let values = s:stris 307 | elseif shortcontext =~ '\(}\|object\)\.$' 308 | let values = s:objes 309 | elseif shortcontext =~ 'screen\.$' 310 | let values = s:scres 311 | elseif shortcontext =~ 'style\.$' 312 | let values = s:styls 313 | elseif shortcontext =~ '\(top\|self\|window\)\.$' 314 | let values = s:winds 315 | else 316 | let values = user_props + s:bodys + s:arrays + s:dates + 317 | \ s:funcs + s:numbs + s:reges + s:stris + s:docus + 318 | \ s:imags + s:locas + s:navis + s:objes + s:scres + s:winds 319 | endif 320 | endif 321 | 322 | let oprops1 = matchstr(shortcontext, '\zs\k\+\ze\(\[.\{-}\]\)\?\.$') 323 | let oprops = [] 324 | if len(oprops1) > 0 325 | let oprops = filter(copy(file), 'v:val =~ "'.oprops1.'\\.[a-zA-Z_]\\+\\s*="') 326 | call map(oprops, 'matchstr(v:val, "\\.\\zs[a-zA-Z_]\\+\\ze")') 327 | let oprops2 = filter(copy(file), 'v:val =~ "\\w*\\(case\\|default\\)\\@!:"') 328 | call map(oprops2, 'matchstr(v:val, "\\zs\\w\\+\\ze:")') 329 | let values = oprops + oprops2 + values 330 | endif 331 | 332 | for m in values 333 | if m =~? '^'.a:base 334 | call add(res, m) 335 | elseif m =~? a:base 336 | call add(res2, m) 337 | endif 338 | endfor 339 | 340 | unlet! values 341 | return res + res2 342 | 343 | endif 344 | 345 | let variables = filter(copy(file), 'v:val =~ "var\\s"') 346 | call map(variables, 'matchstr(v:val, ".\\{-}var\\s\\+\\zs.*\\ze")') 347 | call map(variables, 'substitute(v:val, ";\\|$", ",", "g")') 348 | let vars = [] 349 | " This loop (and next one) is necessary to get variable names from 350 | " constructs like: var var1, var2, var3 = "something"; 351 | for i in range(len(variables)) 352 | let comma_separated = split(variables[i], ',\s*') 353 | call map(comma_separated, 'matchstr(v:val, "\\k\\+")') 354 | let vars += comma_separated 355 | endfor 356 | 357 | let variables = sort(vars) 358 | unlet! vars 359 | 360 | " Add "no var" variables. 361 | let undeclared_variables = filter(copy(file), 'v:val =~ "^\\s*\\k\\+\\s*="') 362 | let u_vars = [] 363 | for i in range(len(undeclared_variables)) 364 | let split_equal = split(undeclared_variables[i], '\s*=') 365 | call map(split_equal, 'matchstr(v:val, "\\k\\+$")') 366 | let u_vars += split_equal 367 | endfor 368 | 369 | let variables += sort(u_vars) 370 | unlet! u_vars 371 | 372 | " Get functions 373 | let functions = filter(copy(file), 'v:val =~ "^\\s*function\\s"') 374 | let arguments = copy(functions) 375 | call map(functions, 'matchstr(v:val, "^\\s*function\\s\\+\\zs\\k\\+")') 376 | call map(functions, 'v:val."("') 377 | let functions = sort(functions) 378 | 379 | " Create table to keep arguments for additional 'menu' info 380 | let b:js_menuinfo = {} 381 | for i in arguments 382 | let g:ia = i 383 | let f_elements = matchlist(i, 'function\s\+\(\k\+\)\s*(\(.\{-}\))') 384 | if len(f_elements) == 3 385 | let b:js_menuinfo[f_elements[1].'('] = f_elements[2] 386 | endif 387 | endfor 388 | 389 | call map(arguments, 'matchstr(v:val, "function.\\{-}(\\zs.\\{-}\\ze)")') 390 | let jargs = join(arguments, ',') 391 | let jargs = substitute(jargs, '\s', '', 'g') 392 | let arguments = split(jargs, ',') 393 | let arguments = sort(arguments) 394 | 395 | let values = variables + functions + arguments + s:keywords + s:winds 396 | 397 | for m in values 398 | let valueadded = 0 399 | if g:vimjs#casesensitive 400 | if m =~# '^'.a:base 401 | let valueadded = 1 402 | endif 403 | else 404 | if m =~? '^'.a:base 405 | let valueadded = 1 406 | endif 407 | endif 408 | if valueadded == 1 || (g:vimjs#smartcomplete == 1 && m =~ a:base) 409 | call add(res, m) 410 | endif 411 | endfor 412 | 413 | let menu = res + res2 414 | let final_menu = [] 415 | for i in range(len(menu)) 416 | let item = menu[i] 417 | if item =~ '($' 418 | let kind = '[F]' 419 | if has_key(b:js_menuinfo, item) 420 | let m_info = b:js_menuinfo[item] 421 | else 422 | let m_info = '' 423 | endif 424 | else 425 | let kind = '[V]' 426 | let m_info = '' 427 | endif 428 | let final_menu += [{'word':item, 'menu':m_info, 'kind':kind}] 429 | endfor 430 | let g:fm = final_menu 431 | return final_menu 432 | 433 | endfunction 434 | -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/1995eaton/vim-better-javascript-completion/46ba1601d6ed378920dcc80247759d34b96a6032/example.png -------------------------------------------------------------------------------- /ftplugin/javascript.vim: -------------------------------------------------------------------------------- 1 | " Vim filetype plugin file 2 | " Language: Javascript 3 | " Maintainer: Doug Kearns 4 | " Last Change: 2008 Jun 15 5 | " URL: http://gus.gscit.monash.edu.au/~djkea2/vim/ftplugin/javascript.vim 6 | 7 | if exists("b:did_ftplugin") 8 | finish 9 | endif 10 | let b:did_ftplugin = 1 11 | 12 | let s:cpo_save = &cpo 13 | set cpo-=C 14 | 15 | " Set 'formatoptions' to break comment lines but not other lines, 16 | " " and insert the comment leader when hitting or using "o". 17 | setlocal formatoptions-=t formatoptions+=croql 18 | 19 | " Set completion with CTRL-X CTRL-O to autoloaded function. 20 | if exists('&ofu') 21 | setlocal omnifunc=js#CompleteJS 22 | endif 23 | 24 | " Set 'comments' to format dashed lists in comments. 25 | setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// 26 | 27 | setlocal commentstring=//%s 28 | 29 | " Change the :browse e filter to primarily show Java-related files. 30 | if has("gui_win32") 31 | let b:browsefilter="Javascript Files (*.js)\t*.js\n" . 32 | \ "All Files (*.*)\t*.*\n" 33 | endif 34 | 35 | let b:undo_ftplugin = "setl fo< ofu< com< cms<" 36 | 37 | let &cpo = s:cpo_save 38 | unlet s:cpo_save 39 | -------------------------------------------------------------------------------- /getjsprops.js: -------------------------------------------------------------------------------- 1 | var _ = function() { 2 | var removeDups = function(arr) { 3 | for (var i = 0; i < arr.length; i++) { 4 | var lastIndex; 5 | while ((lastIndex = arr.lastIndexOf(arr[i])) !== i) { 6 | arr.splice(lastIndex, 1); 7 | } 8 | } 9 | return arr; 10 | }; 11 | var getAllKeys = function(obj) { 12 | var _ret = Object.keys(obj).concat(Object.getOwnPropertyNames(obj)); 13 | for (var key in obj) { 14 | _ret.push(key); 15 | } 16 | _ret = _ret.map(function(e) { 17 | if (typeof obj[e] === 'function') { 18 | return e + '('; 19 | } 20 | return e; 21 | }); 22 | if (obj.hasOwnProperty('prototype')) { 23 | _ret = _ret.concat(getAllKeys(obj.prototype)); 24 | } 25 | return _ret; 26 | }; 27 | var roots = Array.prototype.slice.call(arguments); 28 | var _ret = []; 29 | for (var i = 0; i < roots.length; i++) { 30 | _ret = _ret.concat(removeDups(getAllKeys(roots[i]))); 31 | } 32 | _ret = removeDups(_ret 33 | .filter(function(e) { 34 | return e.charAt(0) !== '_' && e.charAt(0) !== '$'; 35 | }) 36 | .sort()); 37 | console.log(_ret); 38 | copy('[\'' + _ret.join('\', \'') + '\']'); 39 | }; 40 | --------------------------------------------------------------------------------