From a14adc90be76e6526d305aac7e4e28af0076543d Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 1 Feb 2016 11:00:36 +0100 Subject: [PATCH] some vs/base/browser linting --- src/vs/base/browser/browser.ts | 57 ++-- src/vs/base/browser/browserService.ts | 30 +- src/vs/base/browser/dnd.ts | 6 +- src/vs/base/browser/dom.ts | 474 +++++++++++++------------- src/vs/base/browser/idleMonitor.ts | 56 +-- src/vs/base/browser/iframe.ts | 34 +- src/vs/base/browser/touch.ts | 178 +++++----- 7 files changed, 417 insertions(+), 418 deletions(-) diff --git a/src/vs/base/browser/browser.ts b/src/vs/base/browser/browser.ts index 513203741e1..2043d66da46 100644 --- a/src/vs/base/browser/browser.ts +++ b/src/vs/base/browser/browser.ts @@ -12,13 +12,13 @@ interface ISafeWindow { } interface ISafeDocument { - URL:string; - createElement(tagName:'div'):HTMLDivElement; - createElement(tagName:string):HTMLElement; + URL: string; + createElement(tagName: 'div'): HTMLDivElement; + createElement(tagName: string): HTMLElement; } interface INavigator { - userAgent:string; + userAgent: string; } interface ILocation { @@ -26,18 +26,18 @@ interface ILocation { } interface IGlobalScope { - window:ISafeWindow; - navigator:INavigator; - parent:IGlobalScope; - document:ISafeDocument; + window: ISafeWindow; + navigator: INavigator; + parent: IGlobalScope; + document: ISafeDocument; history: { - pushState:any + pushState: any }; - isTest:boolean; + isTest: boolean; location: ILocation; } -var globals = (typeof self === 'object' ? self : global); +const globals = (typeof self === 'object' ? self : global); // MAC: // chrome: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.100 Safari/535.2" @@ -53,8 +53,8 @@ var globals = (typeof self === 'object' ? self : global); // chrome: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" // firefox: "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0" -var userAgent = globals.navigator ? globals.navigator.userAgent : ''; -var isTest = !!globals.isTest; +const userAgent = globals.navigator ? globals.navigator.userAgent : ''; +const isTest = !!globals.isTest; // DOCUMENTED FOR FUTURE REFERENCE: // When running IE11 in IE10 document mode, the code below will identify the browser as being IE10, @@ -77,6 +77,8 @@ export const canUseTranslate3d = !isIE9 && !isFirefox; export const enableEmptySelectionClipboard = isWebKit; +let _disablePushState = false; + /** * Returns if the browser supports the history.pushState function or not. */ @@ -84,7 +86,6 @@ export function canPushState() { return (!_disablePushState && globals.history && globals.history.pushState); }; -var _disablePushState = false; /** * Helpful when we detect that pushing state does not work for some reason (e.g. FF prevents pushState for security reasons in some cases) */ @@ -104,11 +105,11 @@ export function hasCSSAnimationSupport() { return false; } - var supported = false; - var element = globals.document.createElement('div'); - var properties = ['animationName', 'webkitAnimationName', 'msAnimationName', 'MozAnimationName', 'OAnimationName']; - for (var i = 0; i < properties.length; i++) { - var property = properties[i]; + let supported = false; + let element = globals.document.createElement('div'); + let properties = ['animationName', 'webkitAnimationName', 'msAnimationName', 'MozAnimationName', 'OAnimationName']; + for (let i = 0; i < properties.length; i++) { + let property = properties[i]; if (!types.isUndefinedOrNull(element.style[property]) || element.style.hasOwnProperty(property)) { supported = true; break; @@ -127,14 +128,14 @@ export function hasCSSAnimationSupport() { /** * Returns if the browser supports the provided video mime type or not. */ -export function canPlayVideo(type:string) { +export function canPlayVideo(type: string) { if (!globals.document) { return false; } - var video:HTMLVideoElement = globals.document.createElement('video'); + let video: HTMLVideoElement = globals.document.createElement('video'); if (video.canPlayType) { - var canPlay = video.canPlayType(type); + let canPlay = video.canPlayType(type); return canPlay === 'maybe' || canPlay === 'probably'; } @@ -145,14 +146,14 @@ export function canPlayVideo(type:string) { /** * Returns if the browser supports the provided audio mime type or not. */ -export function canPlayAudio(type:string) { +export function canPlayAudio(type: string) { if (!globals.document) { return false; } - var audio:HTMLAudioElement = globals.document.createElement('audio'); + let audio: HTMLAudioElement = globals.document.createElement('audio'); if (audio.canPlayType) { - var canPlay = audio.canPlayType(type); + let canPlay = audio.canPlayType(type); return canPlay === 'maybe' || canPlay === 'probably'; } @@ -160,11 +161,11 @@ export function canPlayAudio(type:string) { return false; } -export function isInWebWorker():boolean { - return !globals.document && typeof((globals).importScripts) !== 'undefined'; +export function isInWebWorker(): boolean { + return !globals.document && typeof ((globals).importScripts) !== 'undefined'; } -export function supportsExecCommand(command:string): boolean { +export function supportsExecCommand(command: string): boolean { return ( (isIE11orEarlier || Platform.isNative) && document.queryCommandSupported(command) diff --git a/src/vs/base/browser/browserService.ts b/src/vs/base/browser/browserService.ts index 08111fbd33f..066a4db10ca 100644 --- a/src/vs/base/browser/browserService.ts +++ b/src/vs/base/browser/browserService.ts @@ -4,27 +4,27 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import Browser = require('vs/base/browser/browser'); +import {isInWebWorker} from 'vs/base/browser/browser'; export interface IBrowserServiceData { - document:Document; - window:Window; - isHTMLElement: (o:any)=>boolean; + document: Document; + window: Window; + isHTMLElement: (o: any) => boolean; } export interface IBrowserService extends IBrowserServiceData { /** * Mock the DOM with dummy objects */ - mock(source:IBrowserServiceData):void; + mock(source: IBrowserServiceData): void; /** * Restore the normal DOM */ - restore():void; + restore(): void; } -export function regularIsHTMLElement(o:any): boolean { +export function regularIsHTMLElement(o: any): boolean { if (typeof HTMLElement === 'object') { return o instanceof HTMLElement; } @@ -33,23 +33,23 @@ export function regularIsHTMLElement(o:any): boolean { class BrowserService implements IBrowserService { - public document:Document; - public window:Window; - public isHTMLElement: (o:any)=>boolean; + public document: Document; + public window: Window; + public isHTMLElement: (o: any) => boolean; constructor() { this.restore(); } - public mock(source:IBrowserServiceData):void { + public mock(source: IBrowserServiceData): void { this.document = source.document; this.window = source.window; this.isHTMLElement = source.isHTMLElement; } - public restore():void { + public restore(): void { this.isHTMLElement = regularIsHTMLElement; - if(Browser.isInWebWorker()) { + if (isInWebWorker()) { this.document = null; this.window = null; } else { @@ -59,8 +59,8 @@ class BrowserService implements IBrowserService { } } -var browserService = new BrowserService(); +const browserService = new BrowserService(); -export function getService():IBrowserService { +export function getService(): IBrowserService { return browserService; } \ No newline at end of file diff --git a/src/vs/base/browser/dnd.ts b/src/vs/base/browser/dnd.ts index 3aa8908c73f..4376dc00189 100644 --- a/src/vs/base/browser/dnd.ts +++ b/src/vs/base/browser/dnd.ts @@ -5,9 +5,7 @@ 'use strict'; -import Builder = require('vs/base/browser/builder'); - -var $ = Builder.$; +import {$} from 'vs/base/browser/builder'; /** * A helper that will execute a provided function when the provided HTMLElement receives @@ -17,7 +15,7 @@ export class DelayedDragHandler { private timeout: number; - constructor(container:HTMLElement, callback: () => void) { + constructor(container: HTMLElement, callback: () => void) { $(container).on('dragover', () => { if (!this.timeout) { this.timeout = setTimeout(() => { diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts index 57f81b5226c..0b4c260892f 100644 --- a/src/vs/base/browser/dom.ts +++ b/src/vs/base/browser/dom.ts @@ -4,19 +4,19 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import Browser = require('vs/base/browser/browser'); -import Types = require('vs/base/common/types'); -import Emitter = require('vs/base/common/eventEmitter'); -import Lifecycle = require('vs/base/common/lifecycle'); +import {isChrome, isWebKit} from 'vs/base/browser/browser'; +import types = require('vs/base/common/types'); +import {EventEmitter} from 'vs/base/common/eventEmitter'; +import {IDisposable} from 'vs/base/common/lifecycle'; import mouseEvent = require('vs/base/browser/mouseEvent'); import keyboardEvent = require('vs/base/browser/keyboardEvent'); -import errors = require('vs/base/common/errors'); +import {onUnexpectedError} from 'vs/base/common/errors'; import browserService = require('vs/base/browser/browserService'); export type IKeyboardEvent = keyboardEvent.IKeyboardEvent; export type IMouseEvent = mouseEvent.IMouseEvent; -export function clearNode (node:HTMLElement) { +export function clearNode(node: HTMLElement) { while (node.firstChild) { node.removeChild(node.firstChild); } @@ -27,17 +27,17 @@ export function clearNode (node:HTMLElement) { * This prevents JSON.stringify from throwing the exception * "Uncaught TypeError: Converting circular structure to JSON" */ -export function safeStringifyDOMAware(obj: any):string { - var seen:any[] = []; +export function safeStringifyDOMAware(obj: any): string { + let seen: any[] = []; return JSON.stringify(obj, (key, value) => { // HTML elements are never going to serialize nicely - if(value instanceof Element) { + if (value instanceof Element) { return '[Element]'; } - if(Types.isObject(value) || Array.isArray(value)) { - if(seen.indexOf(value) !== -1) { + if (types.isObject(value) || Array.isArray(value)) { + if (seen.indexOf(value) !== -1) { return '[Circular]'; } else { seen.push(value); @@ -47,7 +47,7 @@ export function safeStringifyDOMAware(obj: any):string { }); } -export function isInDOM(node:Node):boolean { +export function isInDOM(node: Node): boolean { while (node) { if (node === document.body) { return true; @@ -57,61 +57,61 @@ export function isInDOM(node:Node):boolean { return false; } -var _blank = ' '.charCodeAt(0); -var lastStart:number, lastEnd:number; +const _blank = ' '.charCodeAt(0); +let lastStart: number, lastEnd: number; -function _findClassName(node:HTMLElement, className:string): void { +function _findClassName(node: HTMLElement, className: string): void { - var classes = node.className; - if(!classes) { + let classes = node.className; + if (!classes) { lastStart = -1; return; } className = className.trim(); - var classesLen = classes.length, + let classesLen = classes.length, classLen = className.length; - if(classLen === 0) { + if (classLen === 0) { lastStart = -1; return; } - if(classesLen < classLen) { + if (classesLen < classLen) { lastStart = -1; return; } - if(classes === className) { + if (classes === className) { lastStart = 0; lastEnd = classesLen; return; } - var idx = -1, - idxEnd:number; + let idx = -1, + idxEnd: number; while ((idx = classes.indexOf(className, idx + 1)) >= 0) { idxEnd = idx + classLen; // a class that is followed by another class - if((idx === 0 || classes.charCodeAt(idx - 1) === _blank) && classes.charCodeAt(idxEnd) === _blank) { + if ((idx === 0 || classes.charCodeAt(idx - 1) === _blank) && classes.charCodeAt(idxEnd) === _blank) { lastStart = idx; lastEnd = idxEnd + 1; return; } // last class - if(idx > 0 && classes.charCodeAt(idx - 1) === _blank && idxEnd === classesLen) { + if (idx > 0 && classes.charCodeAt(idx - 1) === _blank && idxEnd === classesLen) { lastStart = idx - 1; lastEnd = idxEnd; return; } // equal - duplicate of cmp above - if(idx === 0 && idxEnd === classesLen) { + if (idx === 0 && idxEnd === classesLen) { lastStart = 0; lastEnd = idxEnd; return; @@ -126,7 +126,7 @@ function _findClassName(node:HTMLElement, className:string): void { * @param className a class name * @return true if the className attribute of the provided node contains the provided className */ -export function hasClass(node:HTMLElement, className:string): boolean { +export function hasClass(node: HTMLElement, className: string): boolean { _findClassName(node, className); return lastStart !== -1; } @@ -137,12 +137,12 @@ export function hasClass(node:HTMLElement, className:string): boolean { * @param node a dom node * @param className a class name */ -export function addClass(node:HTMLElement, className:string): void { - if(!node.className) { // doesn't have it for sure +export function addClass(node: HTMLElement, className: string): void { + if (!node.className) { // doesn't have it for sure node.className = className; } else { _findClassName(node, className); // see if it's already there - if(lastStart === -1) { + if (lastStart === -1) { node.className = node.className + ' ' + className; } } @@ -154,7 +154,7 @@ export function addClass(node:HTMLElement, className:string): void { * @param node a dom node * @param className a class name */ -export function removeClass(node:HTMLElement, className:string): void { +export function removeClass(node: HTMLElement, className: string): void { _findClassName(node, className); if (lastStart === -1) { return; // Prevent styles invalidation if not necessary @@ -168,78 +168,78 @@ export function removeClass(node:HTMLElement, className:string): void { * @param className a class name * @param shouldHaveIt */ -export function toggleClass(node:HTMLElement, className:string, shouldHaveIt?:boolean): void { +export function toggleClass(node: HTMLElement, className: string, shouldHaveIt?: boolean): void { _findClassName(node, className); - if(lastStart !== -1 && !shouldHaveIt) { + if (lastStart !== -1 && !shouldHaveIt) { removeClass(node, className); } - if(lastStart === -1 && shouldHaveIt) { + if (lastStart === -1 && shouldHaveIt) { addClass(node, className); } } -export var StyleMutator = { - setMaxWidth: (domNode:HTMLElement, maxWidth:number) => { - var desiredValue = maxWidth + 'px'; +export const StyleMutator = { + setMaxWidth: (domNode: HTMLElement, maxWidth: number) => { + let desiredValue = maxWidth + 'px'; if (domNode.style.maxWidth !== desiredValue) { domNode.style.maxWidth = desiredValue; } }, - setWidth: (domNode:HTMLElement, width:number) => { - var desiredValue = width + 'px'; + setWidth: (domNode: HTMLElement, width: number) => { + let desiredValue = width + 'px'; if (domNode.style.width !== desiredValue) { domNode.style.width = desiredValue; } }, - setHeight: (domNode:HTMLElement, height:number) => { - var desiredValue = height + 'px'; + setHeight: (domNode: HTMLElement, height: number) => { + let desiredValue = height + 'px'; if (domNode.style.height !== desiredValue) { domNode.style.height = desiredValue; } }, - setTop: (domNode:HTMLElement, top:number) => { - var desiredValue = top + 'px'; + setTop: (domNode: HTMLElement, top: number) => { + let desiredValue = top + 'px'; if (domNode.style.top !== desiredValue) { domNode.style.top = desiredValue; } }, - setLeft: (domNode:HTMLElement, left:number) => { - var desiredValue = left + 'px'; + setLeft: (domNode: HTMLElement, left: number) => { + let desiredValue = left + 'px'; if (domNode.style.left !== desiredValue) { domNode.style.left = desiredValue; } }, - setBottom: (domNode:HTMLElement, bottom:number) => { - var desiredValue = bottom + 'px'; + setBottom: (domNode: HTMLElement, bottom: number) => { + let desiredValue = bottom + 'px'; if (domNode.style.bottom !== desiredValue) { domNode.style.bottom = desiredValue; } }, - setRight: (domNode:HTMLElement, right:number) => { - var desiredValue = right + 'px'; + setRight: (domNode: HTMLElement, right: number) => { + let desiredValue = right + 'px'; if (domNode.style.right !== desiredValue) { domNode.style.right = desiredValue; } }, - setFontSize: (domNode:HTMLElement, fontSize:number) => { - var desiredValue = fontSize + 'px'; + setFontSize: (domNode: HTMLElement, fontSize: number) => { + let desiredValue = fontSize + 'px'; if (domNode.style.fontSize !== desiredValue) { domNode.style.fontSize = desiredValue; } }, - setLineHeight: (domNode:HTMLElement, lineHeight:number) => { - var desiredValue = lineHeight + 'px'; + setLineHeight: (domNode: HTMLElement, lineHeight: number) => { + let desiredValue = lineHeight + 'px'; if (domNode.style.lineHeight !== desiredValue) { domNode.style.lineHeight = desiredValue; } }, setTransform: null, - setDisplay: (domNode:HTMLElement, desiredValue:string) => { + setDisplay: (domNode: HTMLElement, desiredValue: string) => { if (domNode.style.display !== desiredValue) { domNode.style.display = desiredValue; } }, - setVisibility: (domNode:HTMLElement, desiredValue:string) => { + setVisibility: (domNode: HTMLElement, desiredValue: string) => { if (domNode.style.visibility !== desiredValue) { domNode.style.visibility = desiredValue; } @@ -259,8 +259,8 @@ function setTransform(domNode: HTMLElement, desiredValue: string): void { domNode.style.transform = desiredValue; } } -(function () { - var testDomNode = document.createElement('div'); +(function() { + let testDomNode = document.createElement('div'); if (typeof (testDomNode.style).webkitTransform !== 'undefined') { StyleMutator.setTransform = setWebkitTransform; } else { @@ -268,18 +268,18 @@ function setTransform(domNode: HTMLElement, desiredValue: string): void { } })(); -export function addListener(node:Element, type:string, handler:(event:any)=>void, useCapture?:boolean):()=>void; -export function addListener(node:Window, type:string, handler:(event:any)=>void, useCapture?:boolean):()=>void; -export function addListener(node:Document, type:string, handler:(event:any)=>void, useCapture?:boolean):()=>void; -export function addListener(node:any, type:string, handler:(event:any)=>void, useCapture?:boolean):()=>void { - var wrapHandler = function (e):void { +export function addListener(node: Element, type: string, handler: (event: any) => void, useCapture?: boolean): () => void; +export function addListener(node: Window, type: string, handler: (event: any) => void, useCapture?: boolean): () => void; +export function addListener(node: Document, type: string, handler: (event: any) => void, useCapture?: boolean): () => void; +export function addListener(node: any, type: string, handler: (event: any) => void, useCapture?: boolean): () => void { + let wrapHandler = function(e): void { e = e || window.event; handler(e); }; - if (Types.isFunction(node.addEventListener)) { + if (types.isFunction(node.addEventListener)) { node.addEventListener(type, wrapHandler, useCapture || false); - return function () { + return function() { if (!wrapHandler) { // Already removed return; @@ -294,38 +294,38 @@ export function addListener(node:any, type:string, handler:(event:any)=>void, us } node.attachEvent('on' + type, wrapHandler); - return function () { node.detachEvent('on' + type, wrapHandler); }; + return function() { node.detachEvent('on' + type, wrapHandler); }; } -export function addDisposableListener(node:Element, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable; -export function addDisposableListener(node:Window, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable; -export function addDisposableListener(node:Document, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable; -export function addDisposableListener(node:any, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable { - var dispose = addListener(node, type, handler, useCapture); +export function addDisposableListener(node: Element, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable; +export function addDisposableListener(node: Window, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable; +export function addDisposableListener(node: Document, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable; +export function addDisposableListener(node: any, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable { + let dispose = addListener(node, type, handler, useCapture); return { dispose: dispose }; } export interface IAddStandardDisposableListenerSignature { - (node:HTMLElement, type:'click', handler:(event:IMouseEvent)=>void, useCapture?:boolean): Lifecycle.IDisposable; - (node:HTMLElement, type:'keydown', handler:(event:IKeyboardEvent)=>void, useCapture?:boolean): Lifecycle.IDisposable; - (node:HTMLElement, type:'keypress', handler:(event:IKeyboardEvent)=>void, useCapture?:boolean): Lifecycle.IDisposable; - (node:HTMLElement, type:'keyup', handler:(event:IKeyboardEvent)=>void, useCapture?:boolean): Lifecycle.IDisposable; - (node:HTMLElement, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable; + (node: HTMLElement, type: 'click', handler: (event: IMouseEvent) => void, useCapture?: boolean): IDisposable; + (node: HTMLElement, type: 'keydown', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable; + (node: HTMLElement, type: 'keypress', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable; + (node: HTMLElement, type: 'keyup', handler: (event: IKeyboardEvent) => void, useCapture?: boolean): IDisposable; + (node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable; } -function _wrapAsStandardMouseEvent(handler:(e:IMouseEvent)=>void): (e:MouseEvent) => void { - return function (e:MouseEvent) { +function _wrapAsStandardMouseEvent(handler: (e: IMouseEvent) => void): (e: MouseEvent) => void { + return function(e: MouseEvent) { return handler(new mouseEvent.StandardMouseEvent(e)); }; } -function _wrapAsStandardKeyboardEvent(handler:(e:IKeyboardEvent)=>void): (e:KeyboardEvent) => void { - return function (e:KeyboardEvent) { +function _wrapAsStandardKeyboardEvent(handler: (e: IKeyboardEvent) => void): (e: KeyboardEvent) => void { + return function(e: KeyboardEvent) { return handler(new keyboardEvent.StandardKeyboardEvent(e)); }; } -export var addStandardDisposableListener:IAddStandardDisposableListenerSignature = function addStandardDisposableListener(node:HTMLElement, type:string, handler:(event:any)=>void, useCapture?:boolean): Lifecycle.IDisposable { - var wrapHandler = handler; +export let addStandardDisposableListener: IAddStandardDisposableListenerSignature = function addStandardDisposableListener(node: HTMLElement, type: string, handler: (event: any) => void, useCapture?: boolean): IDisposable { + let wrapHandler = handler; if (type === 'click') { wrapHandler = _wrapAsStandardMouseEvent(handler); @@ -335,7 +335,7 @@ export var addStandardDisposableListener:IAddStandardDisposableListenerSignature node.addEventListener(type, wrapHandler, useCapture || false); return { - dispose: function () { + dispose: function() { if (!wrapHandler) { // Already removed return; @@ -350,10 +350,10 @@ export var addStandardDisposableListener:IAddStandardDisposableListenerSignature }; }; -export function addNonBubblingMouseOutListener(node:Element, handler:(event:any)=>void):()=>void { - return addListener(node, 'mouseout', (e:MouseEvent) => { +export function addNonBubblingMouseOutListener(node: Element, handler: (event: any) => void): () => void { + return addListener(node, 'mouseout', (e: MouseEvent) => { // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements - var toElement = (e.relatedTarget || e.toElement); + let toElement = (e.relatedTarget || e.toElement); while (toElement && toElement !== node) { toElement = toElement.parentNode; } @@ -364,44 +364,44 @@ export function addNonBubblingMouseOutListener(node:Element, handler:(event:any) handler(e); }); } -export function addDisposableNonBubblingMouseOutListener(node:Element, handler:(event:MouseEvent)=>void): Lifecycle.IDisposable { - var dispose = addNonBubblingMouseOutListener(node, handler); +export function addDisposableNonBubblingMouseOutListener(node: Element, handler: (event: MouseEvent) => void): IDisposable { + let dispose = addNonBubblingMouseOutListener(node, handler); return { dispose: dispose }; } -var _animationFrame = (function() { - var emulatedRequestAnimationFrame = (callback:(time:number)=>void):number => { +const _animationFrame = (function() { + let emulatedRequestAnimationFrame = (callback: (time: number) => void): number => { return setTimeout(() => callback(new Date().getTime()), 0); }; - var nativeRequestAnimationFrame:(callback:(time:number)=>void)=>number = - self.requestAnimationFrame - || (self).msRequestAnimationFrame - || (self).webkitRequestAnimationFrame - || (self).mozRequestAnimationFrame - || (self).oRequestAnimationFrame; + let nativeRequestAnimationFrame: (callback: (time: number) => void) => number = + self.requestAnimationFrame + || (self).msRequestAnimationFrame + || (self).webkitRequestAnimationFrame + || (self).mozRequestAnimationFrame + || (self).oRequestAnimationFrame; - var emulatedCancelAnimationFrame = (id:number) => {}; - var nativeCancelAnimationFrame:(id:number)=>void = - self.cancelAnimationFrame || (self).cancelRequestAnimationFrame - || (self).msCancelAnimationFrame || (self).msCancelRequestAnimationFrame - || (self).webkitCancelAnimationFrame || (self).webkitCancelRequestAnimationFrame - || (self).mozCancelAnimationFrame || (self).mozCancelRequestAnimationFrame - || (self).oCancelAnimationFrame || (self).oCancelRequestAnimationFrame; + let emulatedCancelAnimationFrame = (id: number) => { }; + let nativeCancelAnimationFrame: (id: number) => void = + self.cancelAnimationFrame || (self).cancelRequestAnimationFrame + || (self).msCancelAnimationFrame || (self).msCancelRequestAnimationFrame + || (self).webkitCancelAnimationFrame || (self).webkitCancelRequestAnimationFrame + || (self).mozCancelAnimationFrame || (self).mozCancelRequestAnimationFrame + || (self).oCancelAnimationFrame || (self).oCancelRequestAnimationFrame; - var isNative = !!nativeRequestAnimationFrame; - var request = nativeRequestAnimationFrame || emulatedRequestAnimationFrame; - var cancel = nativeCancelAnimationFrame || nativeCancelAnimationFrame; + let isNative = !!nativeRequestAnimationFrame; + let request = nativeRequestAnimationFrame || emulatedRequestAnimationFrame; + let cancel = nativeCancelAnimationFrame || nativeCancelAnimationFrame; return { isNative: isNative, - request: (callback:(time:number)=>void): number => { + request: (callback: (time: number) => void): number => { return request(callback); }, - cancel: (id:number) => { + cancel: (id: number) => { return cancel(id); } }; @@ -413,16 +413,16 @@ var _animationFrame = (function() { * If currently in an animation frame, `runner` will be executed immediately. * @return token that can be used to cancel the scheduled runner (only if `runner` was not executed immediately). */ -export var runAtThisOrScheduleAtNextAnimationFrame:(runner:()=>void, priority?:number)=>Lifecycle.IDisposable; +export let runAtThisOrScheduleAtNextAnimationFrame: (runner: () => void, priority?: number) => IDisposable; /** * Schedule a callback to be run at the next animation frame. * This allows multiple parties to register callbacks that should run at the next animation frame. * If currently in an animation frame, `runner` will be executed at the next animation frame. * @return token that can be used to cancel the scheduled runner. */ -export var scheduleAtNextAnimationFrame:(runner:()=>void, priority?:number)=>Lifecycle.IDisposable; +export let scheduleAtNextAnimationFrame: (runner: () => void, priority?: number) => IDisposable; -class AnimationFrameQueueItem implements Lifecycle.IDisposable { +class AnimationFrameQueueItem implements IDisposable { private _runner: () => void; public priority: number; @@ -446,7 +446,7 @@ class AnimationFrameQueueItem implements Lifecycle.IDisposable { try { this._runner(); } catch (e) { - errors.onUnexpectedError(e); + onUnexpectedError(e); } } @@ -460,21 +460,21 @@ class AnimationFrameQueueItem implements Lifecycle.IDisposable { /** * The runners scheduled at the next animation frame */ - var NEXT_QUEUE: AnimationFrameQueueItem[] = []; + let NEXT_QUEUE: AnimationFrameQueueItem[] = []; /** * The runners scheduled at the current animation frame */ - var CURRENT_QUEUE: AnimationFrameQueueItem[] = null; + let CURRENT_QUEUE: AnimationFrameQueueItem[] = null; /** * A flag to keep track if the native requestAnimationFrame was already called */ - var animFrameRequested = false; + let animFrameRequested = false; /** * A flag to indicate if currently handling a native requestAnimationFrame callback */ - var inAnimationFrameRunner = false; + let inAnimationFrameRunner = false; - var animationFrameRunner = () => { + let animationFrameRunner = () => { animFrameRequested = false; CURRENT_QUEUE = NEXT_QUEUE; @@ -483,23 +483,23 @@ class AnimationFrameQueueItem implements Lifecycle.IDisposable { inAnimationFrameRunner = true; while (CURRENT_QUEUE.length > 0) { CURRENT_QUEUE.sort(AnimationFrameQueueItem.sort); - var top = CURRENT_QUEUE.shift(); + let top = CURRENT_QUEUE.shift(); top.execute(); } inAnimationFrameRunner = false; }; - scheduleAtNextAnimationFrame = (runner:()=>void, priority:number = 0) => { - var item = new AnimationFrameQueueItem(runner, priority); + scheduleAtNextAnimationFrame = (runner: () => void, priority: number = 0) => { + let item = new AnimationFrameQueueItem(runner, priority); NEXT_QUEUE.push(item); if (!animFrameRequested) { animFrameRequested = true; // TODO@Alex: also check if it is electron - if (Browser.isChrome) { - var handle:number; - _animationFrame.request(function () { + if (isChrome) { + let handle: number; + _animationFrame.request(function() { clearTimeout(handle); animationFrameRunner(); }); @@ -515,9 +515,9 @@ class AnimationFrameQueueItem implements Lifecycle.IDisposable { return item; }; - runAtThisOrScheduleAtNextAnimationFrame = (runner:()=>void, priority?:number) => { + runAtThisOrScheduleAtNextAnimationFrame = (runner: () => void, priority?: number) => { if (inAnimationFrameRunner) { - var item = new AnimationFrameQueueItem(runner, priority); + let item = new AnimationFrameQueueItem(runner, priority); CURRENT_QUEUE.push(item); return item; } else { @@ -530,16 +530,16 @@ class AnimationFrameQueueItem implements Lifecycle.IDisposable { /// Add a throttled listener. `handler` is fired at most every 16ms or with the next animation frame (if browser supports it). /// export interface IEventMerger { - (lastEvent:R, currentEvent:Event):R; + (lastEvent: R, currentEvent: Event): R; } -var MINIMUM_TIME_MS = 16; -var DEFAULT_EVENT_MERGER:IEventMerger = function (lastEvent:Event, currentEvent:Event) { +const MINIMUM_TIME_MS = 16; +const DEFAULT_EVENT_MERGER: IEventMerger = function(lastEvent: Event, currentEvent: Event) { return currentEvent; }; -function timeoutThrottledListener(node:any, type:string, handler:(event:R)=>void, eventMerger:IEventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs:number = MINIMUM_TIME_MS):()=>void { - var lastEvent:R = null, lastHandlerTime = 0, timeout = -1; +function timeoutThrottledListener(node: any, type: string, handler: (event: R) => void, eventMerger: IEventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs: number = MINIMUM_TIME_MS): () => void { + let lastEvent: R = null, lastHandlerTime = 0, timeout = -1; function invokeHandler(): void { timeout = -1; @@ -548,9 +548,9 @@ function timeoutThrottledListener(node:any, type:string, handler:(event:R)=>v lastEvent = null; }; - var unbinder = addListener(node, type, function (e) { + let unbinder = addListener(node, type, function(e) { lastEvent = eventMerger(lastEvent, e); - var elapsedTime = (new Date()).getTime() - lastHandlerTime; + let elapsedTime = (new Date()).getTime() - lastHandlerTime; if (elapsedTime >= minimumTimeMs) { if (timeout !== -1) { @@ -564,7 +564,7 @@ function timeoutThrottledListener(node:any, type:string, handler:(event:R)=>v } }); - return function () { + return function() { if (timeout !== -1) { window.clearTimeout(timeout); } @@ -572,34 +572,34 @@ function timeoutThrottledListener(node:any, type:string, handler:(event:R)=>v }; } -export function addThrottledListener(node:any, type:string, handler:(event:R)=>void, eventMerger?:IEventMerger, minimumTimeMs?:number):()=>void { +export function addThrottledListener(node: any, type: string, handler: (event: R) => void, eventMerger?: IEventMerger, minimumTimeMs?: number): () => void { return timeoutThrottledListener(node, type, handler, eventMerger, minimumTimeMs); } -export function addDisposableThrottledListener(node:any, type:string, handler:(event:R)=>void, eventMerger?:IEventMerger, minimumTimeMs?:number):Lifecycle.IDisposable { - var dispose = addThrottledListener(node, type, handler, eventMerger, minimumTimeMs); +export function addDisposableThrottledListener(node: any, type: string, handler: (event: R) => void, eventMerger?: IEventMerger, minimumTimeMs?: number): IDisposable { + let dispose = addThrottledListener(node, type, handler, eventMerger, minimumTimeMs); return { dispose: dispose }; } -export function getComputedStyle(el:HTMLElement):CSSStyleDeclaration { +export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration { return document.defaultView.getComputedStyle(el, null); } // Adapted from WinJS // Converts a CSS positioning string for the specified element to pixels. -var convertToPixels:(element:HTMLElement, value:string)=>number = (function() { - var pixelsRE = /^-?\d+(\.\d+)?(px)?$/i; - var numberRE = /^-?\d+(\.\d+)?/i; - return function(element:HTMLElement, value:string):number { +const convertToPixels: (element: HTMLElement, value: string) => number = (function() { + let pixelsRE = /^-?\d+(\.\d+)?(px)?$/i; + let numberRE = /^-?\d+(\.\d+)?/i; + return function(element: HTMLElement, value: string): number { return parseFloat(value) || 0; }; })(); -function getDimension(element:HTMLElement, cssPropertyName:string, jsPropertyName:string):number { - var computedStyle:CSSStyleDeclaration = getComputedStyle(element); - var value = '0'; +function getDimension(element: HTMLElement, cssPropertyName: string, jsPropertyName: string): number { + let computedStyle: CSSStyleDeclaration = getComputedStyle(element); + let value = '0'; if (computedStyle) { if (computedStyle.getPropertyValue) { value = computedStyle.getPropertyValue(cssPropertyName); @@ -611,44 +611,44 @@ function getDimension(element:HTMLElement, cssPropertyName:string, jsPropertyNam return convertToPixels(element, value); } -var sizeUtils = { +const sizeUtils = { - getBorderLeftWidth: function (element:HTMLElement):number { + getBorderLeftWidth: function(element: HTMLElement): number { return getDimension(element, 'border-left-width', 'borderLeftWidth'); }, - getBorderTopWidth: function (element:HTMLElement):number { + getBorderTopWidth: function(element: HTMLElement): number { return getDimension(element, 'border-top-width', 'borderTopWidth'); }, - getBorderRightWidth: function (element:HTMLElement):number { + getBorderRightWidth: function(element: HTMLElement): number { return getDimension(element, 'border-right-width', 'borderRightWidth'); }, - getBorderBottomWidth: function (element:HTMLElement):number { + getBorderBottomWidth: function(element: HTMLElement): number { return getDimension(element, 'border-bottom-width', 'borderBottomWidth'); }, - getPaddingLeft: function (element:HTMLElement):number { + getPaddingLeft: function(element: HTMLElement): number { return getDimension(element, 'padding-left', 'paddingLeft'); }, - getPaddingTop: function (element:HTMLElement):number { + getPaddingTop: function(element: HTMLElement): number { return getDimension(element, 'padding-top', 'paddingTop'); }, - getPaddingRight: function (element:HTMLElement):number { + getPaddingRight: function(element: HTMLElement): number { return getDimension(element, 'padding-right', 'paddingRight'); }, - getPaddingBottom: function (element:HTMLElement):number { + getPaddingBottom: function(element: HTMLElement): number { return getDimension(element, 'padding-bottom', 'paddingBottom'); }, - getMarginLeft: function (element:HTMLElement):number { + getMarginLeft: function(element: HTMLElement): number { return getDimension(element, 'margin-left', 'marginLeft'); }, - getMarginTop: function (element:HTMLElement):number { + getMarginTop: function(element: HTMLElement): number { return getDimension(element, 'margin-top', 'marginTop'); }, - getMarginRight: function (element:HTMLElement):number { + getMarginRight: function(element: HTMLElement): number { return getDimension(element, 'margin-right', 'marginRight'); }, - getMarginBottom: function (element:HTMLElement):number { + getMarginBottom: function(element: HTMLElement): number { return getDimension(element, 'margin-bottom', 'marginBottom'); }, __commaSentinel: false @@ -657,15 +657,15 @@ var sizeUtils = { // ---------------------------------------------------------------------------------------- // Position & Dimension -export function getTopLeftOffset (element:HTMLElement):{left:number; top:number;} { +export function getTopLeftOffset(element: HTMLElement): { left: number; top: number; } { // Adapted from WinJS.Utilities.getPosition // and added borders to the mix - var offsetParent = element.offsetParent, top = element.offsetTop, left = element.offsetLeft; + let offsetParent = element.offsetParent, top = element.offsetTop, left = element.offsetLeft; while ((element = element.parentNode) !== null && element !== document.body && element !== document.documentElement) { top -= element.scrollTop; - var c = getComputedStyle(element); + let c = getComputedStyle(element); if (c) { left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft; } @@ -686,14 +686,14 @@ export function getTopLeftOffset (element:HTMLElement):{left:number; top:number; } export interface IDomNodePosition { - left:number; - top:number; - width:number; - height:number; + left: number; + top: number; + width: number; + height: number; } -export function getDomNodePosition (domNode:HTMLElement):IDomNodePosition { - var r = getTopLeftOffset(domNode); +export function getDomNodePosition(domNode: HTMLElement): IDomNodePosition { + let r = getTopLeftOffset(domNode); return { left: r.left, top: r.top, @@ -704,43 +704,43 @@ export function getDomNodePosition (domNode:HTMLElement):IDomNodePosition { // Adapted from WinJS // Gets the width of the content of the specified element. The content width does not include borders or padding. -export function getContentWidth(element:HTMLElement):number { - var border = sizeUtils.getBorderLeftWidth(element) + sizeUtils.getBorderRightWidth(element); - var padding = sizeUtils.getPaddingLeft(element) + sizeUtils.getPaddingRight(element); +export function getContentWidth(element: HTMLElement): number { + let border = sizeUtils.getBorderLeftWidth(element) + sizeUtils.getBorderRightWidth(element); + let padding = sizeUtils.getPaddingLeft(element) + sizeUtils.getPaddingRight(element); return element.offsetWidth - border - padding; } // Adapted from WinJS // Gets the width of the element, including margins. -export function getTotalWidth(element:HTMLElement):number { - var margin = sizeUtils.getMarginLeft(element) + sizeUtils.getMarginRight(element); +export function getTotalWidth(element: HTMLElement): number { + let margin = sizeUtils.getMarginLeft(element) + sizeUtils.getMarginRight(element); return element.offsetWidth + margin; } // Adapted from WinJS // Gets the height of the content of the specified element. The content height does not include borders or padding. -export function getContentHeight(element:HTMLElement):number { - var border = sizeUtils.getBorderTopWidth(element) + sizeUtils.getBorderBottomWidth(element); - var padding = sizeUtils.getPaddingTop(element) + sizeUtils.getPaddingBottom(element); +export function getContentHeight(element: HTMLElement): number { + let border = sizeUtils.getBorderTopWidth(element) + sizeUtils.getBorderBottomWidth(element); + let padding = sizeUtils.getPaddingTop(element) + sizeUtils.getPaddingBottom(element); return element.offsetHeight - border - padding; } // Adapted from WinJS // Gets the height of the element, including its margins. -export function getTotalHeight(element:HTMLElement):number { - var margin = sizeUtils.getMarginTop(element) + sizeUtils.getMarginBottom(element); +export function getTotalHeight(element: HTMLElement): number { + let margin = sizeUtils.getMarginTop(element) + sizeUtils.getMarginBottom(element); return element.offsetHeight + margin; } // Adapted from WinJS // Gets the left coordinate of the specified element relative to the specified parent. -export function getRelativeLeft(element:HTMLElement, parent:HTMLElement):number { +export function getRelativeLeft(element: HTMLElement, parent: HTMLElement): number { if (element === null) { return 0; } - var left = element.offsetLeft; - var e = element.parentNode; + let left = element.offsetLeft; + let e = element.parentNode; while (e !== null) { left -= e.offsetLeft; @@ -755,13 +755,13 @@ export function getRelativeLeft(element:HTMLElement, parent:HTMLElement):number // Adapted from WinJS // Gets the top coordinate of the element relative to the specified parent. -export function getRelativeTop(element:HTMLElement, parent:HTMLElement):number { +export function getRelativeTop(element: HTMLElement, parent: HTMLElement): number { if (element === null) { return 0; } - var top = element.offsetTop; - var e = element.parentNode; + let top = element.offsetTop; + let e = element.parentNode; while (e !== null) { top -= e.offsetTop; @@ -776,8 +776,8 @@ export function getRelativeTop(element:HTMLElement, parent:HTMLElement):number { // ---------------------------------------------------------------------------------------- -export function isAncestor (testChild:Node, testAncestor:Node):boolean { - while(testChild) { +export function isAncestor(testChild: Node, testAncestor: Node): boolean { + while (testChild) { if (testChild === testAncestor) { return true; } @@ -787,7 +787,7 @@ export function isAncestor (testChild:Node, testAncestor:Node):boolean { return false; } -export function findParentWithClass (node:HTMLElement, clazz:string, stopAtClazz?:string):HTMLElement { +export function findParentWithClass(node: HTMLElement, clazz: string, stopAtClazz?: string): HTMLElement { while (node) { if (hasClass(node, clazz)) { return node; @@ -804,16 +804,16 @@ export function findParentWithClass (node:HTMLElement, clazz:string, stopAtClazz } export function createStyleSheet(): HTMLStyleElement { - var style = document.createElement('style'); + let style = document.createElement('style'); style.type = 'text/css'; style.media = 'screen'; document.getElementsByTagName('head')[0].appendChild(style); return style; } -var sharedStyle = createStyleSheet(); +const sharedStyle = createStyleSheet(); -function getDynamicStyleSheetRules(style:any) { +function getDynamicStyleSheetRules(style: any) { if (style && style.sheet && style.sheet.rules) { // Chrome, IE return style.sheet.rules; @@ -825,7 +825,7 @@ function getDynamicStyleSheetRules(style:any) { return []; } -export function createCSSRule(selector:string, cssText:string, style:HTMLStyleElement=sharedStyle): void { +export function createCSSRule(selector: string, cssText: string, style: HTMLStyleElement = sharedStyle): void { if (!style || !cssText) { return; } @@ -833,15 +833,15 @@ export function createCSSRule(selector:string, cssText:string, style:HTMLStyleEl (style.sheet).insertRule(selector + '{' + cssText + '}', 0); } -export function getCSSRule(selector:string, style:HTMLStyleElement=sharedStyle): any { +export function getCSSRule(selector: string, style: HTMLStyleElement = sharedStyle): any { if (!style) { return null; } - var rules = getDynamicStyleSheetRules(style); - for (var i = 0; i < rules.length; i++) { - var rule = rules[i]; - var normalizedSelectorText = rule.selectorText.replace(/::/gi, ':'); + let rules = getDynamicStyleSheetRules(style); + for (let i = 0; i < rules.length; i++) { + let rule = rules[i]; + let normalizedSelectorText = rule.selectorText.replace(/::/gi, ':'); if (normalizedSelectorText === selector) { return rule; } @@ -850,31 +850,31 @@ export function getCSSRule(selector:string, style:HTMLStyleElement=sharedStyle): return null; } -export function removeCSSRulesWithPrefix(ruleName:string, style=sharedStyle): void { +export function removeCSSRulesWithPrefix(ruleName: string, style = sharedStyle): void { if (!style) { return; } - var rules = getDynamicStyleSheetRules(style); - var toDelete: number[] = []; - for (var i = 0; i < rules.length; i++) { - var rule = rules[i]; - var normalizedSelectorText = rule.selectorText.replace(/::/gi, ':'); + let rules = getDynamicStyleSheetRules(style); + let toDelete: number[] = []; + for (let i = 0; i < rules.length; i++) { + let rule = rules[i]; + let normalizedSelectorText = rule.selectorText.replace(/::/gi, ':'); if (normalizedSelectorText.indexOf(ruleName) === 0) { toDelete.push(i); } } - for (var i = toDelete.length - 1; i >= 0; i--) { + for (let i = toDelete.length - 1; i >= 0; i--) { style.sheet.deleteRule(toDelete[i]); } } -export function isHTMLElement(o:any): o is HTMLElement { +export function isHTMLElement(o: any): o is HTMLElement { return browserService.getService().isHTMLElement(o); } -export var EventType = { +export const EventType = { // Mouse CLICK: 'click', DBLCLICK: 'dblclick', @@ -914,9 +914,9 @@ export var EventType = { DROP: 'drop', DRAG_END: 'dragend', // Animation - ANIMATION_START: Browser.isWebKit ? 'webkitAnimationStart' : 'animationstart', - ANIMATION_END: Browser.isWebKit ? 'webkitAnimationEnd' : 'animationend', - ANIMATION_ITERATION: Browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration' + ANIMATION_START: isWebKit ? 'webkitAnimationStart' : 'animationstart', + ANIMATION_END: isWebKit ? 'webkitAnimationEnd' : 'animationend', + ANIMATION_ITERATION: isWebKit ? 'webkitAnimationIteration' : 'animationiteration' }; export interface EventLike { @@ -924,8 +924,8 @@ export interface EventLike { stopPropagation(): void; } -export var EventHelper = { - stop: function (e:EventLike, cancelBubble?:boolean) { +export const EventHelper = { + stop: function(e: EventLike, cancelBubble?: boolean) { if (e.preventDefault) { e.preventDefault(); } else { @@ -945,16 +945,16 @@ export var EventHelper = { }; export interface IFocusTracker { - addBlurListener(fn):()=>void; - addFocusListener(fn):()=>void; - dispose():void; + addBlurListener(fn): () => void; + addFocusListener(fn): () => void; + dispose(): void; } -export function selectTextInInputElement(textArea:HTMLTextAreaElement): void { +export function selectTextInInputElement(textArea: HTMLTextAreaElement): void { // F12 has detected in their automated tests that selecting throws sometimes, // the root cause remains a mistery. Bug #378257 filled against IE. try { - var scrollState:number[] = saveParentsScrollTop(textArea); + let scrollState: number[] = saveParentsScrollTop(textArea); textArea.select(); if (textArea.setSelectionRange) { // on iOS Safari, .select() moves caret to the end of the text instead of selecting @@ -967,17 +967,17 @@ export function selectTextInInputElement(textArea:HTMLTextAreaElement): void { } } -export function saveParentsScrollTop(node:Element): number[] { - var r:number[] = []; - for (var i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) { +export function saveParentsScrollTop(node: Element): number[] { + let r: number[] = []; + for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) { r[i] = node.scrollTop; node = node.parentNode; } return r; } -export function restoreParentsScrollTop(node:Element, state:number[]): void { - for (var i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) { +export function restoreParentsScrollTop(node: Element, state: number[]): void { + for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) { if (node.scrollTop !== state[i]) { node.scrollTop = state[i]; } @@ -985,43 +985,43 @@ export function restoreParentsScrollTop(node:Element, state:number[]): void { } } -export function trackFocus(element:HTMLElement):IFocusTracker { +export function trackFocus(element: HTMLElement): IFocusTracker { - var hasFocus:boolean = false, loosingFocus = false; - var eventEmitter = new Emitter.EventEmitter(), unbind = [], result:IFocusTracker = null; + let hasFocus: boolean = false, loosingFocus = false; + let eventEmitter = new EventEmitter(), unbind = [], result: IFocusTracker = null; // fill result result = { addFocusListener: function(fn) { - var h = eventEmitter.addListener('focus', fn); + let h = eventEmitter.addListener('focus', fn); unbind.push(h); return h; }, addBlurListener: function(fn) { - var h = eventEmitter.addListener('blur', fn); + let h = eventEmitter.addListener('blur', fn); unbind.push(h); return h; }, dispose: function() { - while(unbind.length > 0) { + while (unbind.length > 0) { unbind.pop()(); } } }; - var onFocus = function(event) { + let onFocus = function(event) { loosingFocus = false; - if(!hasFocus) { + if (!hasFocus) { hasFocus = true; eventEmitter.emit('focus', {}); } }; - var onBlur = function(event) { - if(hasFocus) { + let onBlur = function(event) { + if (hasFocus) { loosingFocus = true; window.setTimeout(function() { - if(loosingFocus) { + if (loosingFocus) { loosingFocus = false; hasFocus = false; eventEmitter.emit('blur', {}); @@ -1037,12 +1037,12 @@ export function trackFocus(element:HTMLElement):IFocusTracker { return result; } -export function removeScriptTags(html:string):string { - var div = document.createElement('div'); +export function removeScriptTags(html: string): string { + let div = document.createElement('div'); div.innerHTML = html; - var scripts = div.getElementsByTagName('script'); - var i = scripts.length; + let scripts = div.getElementsByTagName('script'); + let i = scripts.length; while (i--) { scripts[i].parentNode.removeChild(scripts[i]); @@ -1056,17 +1056,17 @@ export function append(parent: HTMLElement, child: T): T { return child; } -var SELECTOR_REGEX = /([\w\-]+)?(#([\w\-]+))?((.([\w\-]+))*)/; +const SELECTOR_REGEX = /([\w\-]+)?(#([\w\-]+))?((.([\w\-]+))*)/; // Similar to builder, but much more lightweight -export function emmet(description: string):HTMLElement { - var match = SELECTOR_REGEX.exec(description); +export function emmet(description: string): HTMLElement { + let match = SELECTOR_REGEX.exec(description); if (!match) { throw new Error('Bad use of emmet'); } - var result = document.createElement(match[1] || 'div'); + let result = document.createElement(match[1] || 'div'); if (match[3]) result.id = match[3]; if (match[4]) result.className = match[4].replace(/\./g, ' ').trim(); @@ -1085,7 +1085,7 @@ export function hide(...elements: HTMLElement[]): void { } } -function findParentWithAttribute (node:HTMLElement, attribute:string):HTMLElement { +function findParentWithAttribute(node: HTMLElement, attribute: string): HTMLElement { while (node) { if (node.hasAttribute(attribute)) { return node; diff --git a/src/vs/base/browser/idleMonitor.ts b/src/vs/base/browser/idleMonitor.ts index f5637be62a8..e4e7adcca5b 100644 --- a/src/vs/base/browser/idleMonitor.ts +++ b/src/vs/base/browser/idleMonitor.ts @@ -5,28 +5,28 @@ 'use strict'; import DomUtils = require('vs/base/browser/dom'); -import Lifecycle = require('vs/base/common/lifecycle'); -import EventEmitter = require('vs/base/common/eventEmitter'); -import BrowserService = require('vs/base/browser/browserService'); +import {IDisposable, disposeAll} from 'vs/base/common/lifecycle'; +import {EventEmitter, ListenerUnbind} from 'vs/base/common/eventEmitter'; +import {getService} from 'vs/base/browser/browserService'; export enum UserStatus { Idle, Active } -export var DEFAULT_IDLE_TIME = 60 * 60 * 1000; // 60 minutes +export const DEFAULT_IDLE_TIME = 60 * 60 * 1000; // 60 minutes export class IdleMonitor { - private toDispose:Lifecycle.IDisposable[]; - private lastActiveTime:number; - private idleCheckTimeout:number; - private status:UserStatus; - private eventEmitter:EventEmitter.EventEmitter; - private instance:ReferenceCountedIdleMonitor; - private idleTime:number; + private toDispose: IDisposable[]; + private lastActiveTime: number; + private idleCheckTimeout: number; + private status: UserStatus; + private eventEmitter: EventEmitter; + private instance: ReferenceCountedIdleMonitor; + private idleTime: number; - constructor(idleTime:number = DEFAULT_IDLE_TIME) { + constructor(idleTime: number = DEFAULT_IDLE_TIME) { this.instance = ReferenceCountedIdleMonitor.INSTANCE; this.instance.increment(); @@ -36,17 +36,17 @@ export class IdleMonitor { this.idleTime = idleTime; this.toDispose = []; - this.eventEmitter = new EventEmitter.EventEmitter(); + this.eventEmitter = new EventEmitter(); this.toDispose.push(this.eventEmitter); - this.toDispose.push({dispose: this.instance.addListener(() => this.onUserActive())}); + this.toDispose.push({ dispose: this.instance.addListener(() => this.onUserActive()) }); this.onUserActive(); } - public addOneTimeActiveListener(callback:()=>void): Lifecycle.IDisposable { + public addOneTimeActiveListener(callback: () => void): IDisposable { return this.eventEmitter.addOneTimeDisposableListener('onActive', callback); } - public addOneTimeIdleListener(callback:()=>void): Lifecycle.IDisposable { + public addOneTimeIdleListener(callback: () => void): IDisposable { return this.eventEmitter.addOneTimeDisposableListener('onIdle', callback); } @@ -56,7 +56,7 @@ export class IdleMonitor { public dispose(): void { this.cancelIdleCheck(); - this.toDispose = Lifecycle.disposeAll(this.toDispose); + this.toDispose = disposeAll(this.toDispose); this.instance.decrement(); } @@ -78,7 +78,7 @@ export class IdleMonitor { private scheduleIdleCheck(): void { if (this.idleCheckTimeout === -1) { - var minimumTimeWhenUserCanBecomeIdle = this.lastActiveTime + this.idleTime; + let minimumTimeWhenUserCanBecomeIdle = this.lastActiveTime + this.idleTime; this.idleCheckTimeout = setTimeout(() => { this.idleCheckTimeout = -1; this.checkIfUserIsIdle(); @@ -94,7 +94,7 @@ export class IdleMonitor { } private checkIfUserIsIdle(): void { - var actualIdleTime = (new Date()).getTime() - this.lastActiveTime; + let actualIdleTime = (new Date()).getTime() - this.lastActiveTime; if (actualIdleTime >= this.idleTime) { this.onUserIdle(); } else { @@ -105,7 +105,7 @@ export class IdleMonitor { class ReferenceCountedObject { - private referenceCount:number; + private referenceCount: number; constructor() { this.referenceCount = 0; @@ -138,29 +138,29 @@ class ReferenceCountedObject { class ReferenceCountedIdleMonitor extends ReferenceCountedObject { - public static INSTANCE:ReferenceCountedIdleMonitor = new ReferenceCountedIdleMonitor(); + public static INSTANCE: ReferenceCountedIdleMonitor = new ReferenceCountedIdleMonitor(); - private toDispose:Lifecycle.IDisposable[]; - private eventEmitter:EventEmitter.EventEmitter; + private toDispose: IDisposable[]; + private eventEmitter: EventEmitter; public construct(): void { this.toDispose = []; - this.eventEmitter = new EventEmitter.EventEmitter(); + this.eventEmitter = new EventEmitter(); this.toDispose.push(this.eventEmitter); - this.toDispose.push(DomUtils.addDisposableListener(BrowserService.getService().document, 'mousemove', () => this.onUserActive())); - this.toDispose.push(DomUtils.addDisposableListener(BrowserService.getService().document, 'keydown', () => this.onUserActive())); + this.toDispose.push(DomUtils.addDisposableListener(getService().document, 'mousemove', () => this.onUserActive())); + this.toDispose.push(DomUtils.addDisposableListener(getService().document, 'keydown', () => this.onUserActive())); this.onUserActive(); } public dispose(): void { - this.toDispose = Lifecycle.disposeAll(this.toDispose); + this.toDispose = disposeAll(this.toDispose); } private onUserActive(): void { this.eventEmitter.emit('onActive'); } - public addListener(callback:()=>void):EventEmitter.ListenerUnbind { + public addListener(callback: () => void): ListenerUnbind { return this.eventEmitter.addListener('onActive', callback); } } \ No newline at end of file diff --git a/src/vs/base/browser/iframe.ts b/src/vs/base/browser/iframe.ts index d080ea4aeeb..218031b5ad0 100644 --- a/src/vs/base/browser/iframe.ts +++ b/src/vs/base/browser/iframe.ts @@ -18,18 +18,18 @@ export interface IWindowChainElement { iframeElement: HTMLIFrameElement; } -var hasDifferentOriginAncestorFlag:boolean = false; -var sameOriginWindowChainCache:IWindowChainElement[] = null; +let hasDifferentOriginAncestorFlag: boolean = false; +let sameOriginWindowChainCache: IWindowChainElement[] = null; -function getParentWindowIfSameOrigin(w:Window): Window { +function getParentWindowIfSameOrigin(w: Window): Window { if (!w.parent || w.parent === w) { return null; } // Cannot really tell if we have access to the parent window unless we try to access something in it try { - var location = w.location; - var parentLocation = w.parent.location; + let location = w.location; + let parentLocation = w.parent.location; if (location.protocol !== parentLocation.protocol || location.hostname !== parentLocation.hostname || location.port !== parentLocation.port) { hasDifferentOriginAncestorFlag = true; return null; @@ -42,10 +42,10 @@ function getParentWindowIfSameOrigin(w:Window): Window { return w.parent; } -function findIframeElementInParentWindow(parentWindow:Window, childWindow:Window): HTMLIFrameElement { - var parentWindowIframes = parentWindow.document.getElementsByTagName('iframe'); - var iframe:HTMLIFrameElement; - for (var i = 0, len = parentWindowIframes.length; i < len; i++) { +function findIframeElementInParentWindow(parentWindow: Window, childWindow: Window): HTMLIFrameElement { + let parentWindowIframes = parentWindow.document.getElementsByTagName('iframe'); + let iframe: HTMLIFrameElement; + for (let i = 0, len = parentWindowIframes.length; i < len; i++) { iframe = parentWindowIframes[i]; if (iframe.contentWindow === childWindow) { return iframe; @@ -62,7 +62,7 @@ function findIframeElementInParentWindow(parentWindow:Window, childWindow:Window export function getSameOriginWindowChain(): IWindowChainElement[] { if (!sameOriginWindowChainCache) { sameOriginWindowChainCache = []; - var w = window, parent:Window; + let w = window, parent: Window; do { parent = getParentWindowIfSameOrigin(w); if (parent) { @@ -96,7 +96,7 @@ export function hasDifferentOriginAncestor(): boolean { /** * Returns the position of `childWindow` relative to `ancestorWindow` */ -export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow:Window, ancestorWindow:any) { +export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow: Window, ancestorWindow: any) { if (!ancestorWindow || childWindow === ancestorWindow) { return { @@ -105,12 +105,12 @@ export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow:Win }; } - var top = 0, left = 0; + let top = 0, left = 0; - var windowChain = getSameOriginWindowChain(); + let windowChain = getSameOriginWindowChain(); - for (var i = 0; i < windowChain.length; i++) { - var windowChainEl = windowChain[i]; + for (let i = 0; i < windowChain.length; i++) { + let windowChainEl = windowChain[i]; if (windowChainEl.window === ancestorWindow) { break; @@ -120,7 +120,7 @@ export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow:Win break; } - var boundingRect = windowChainEl.iframeElement.getBoundingClientRect(); + let boundingRect = windowChainEl.iframeElement.getBoundingClientRect(); top += boundingRect.top; left += boundingRect.left; } @@ -129,4 +129,4 @@ export function getPositionOfChildWindowRelativeToAncestorWindow(childWindow:Win top: top, left: left }; -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/vs/base/browser/touch.ts b/src/vs/base/browser/touch.ts index b0a150cf9f4..484179d6305 100644 --- a/src/vs/base/browser/touch.ts +++ b/src/vs/base/browser/touch.ts @@ -4,76 +4,76 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import Arrays = require('vs/base/common/arrays'); -import Lifecycle = require('vs/base/common/lifecycle'); +import arrays = require('vs/base/common/arrays'); +import {IDisposable, cAll} from 'vs/base/common/lifecycle'; import DomUtils = require('vs/base/browser/dom'); export namespace EventType { - export var Tap = '-monaco-gesturetap'; - export var Change = '-monaco-gesturechange'; - export var Start = '-monaco-gesturestart'; - export var End = '-monaco-gesturesend'; + export const Tap = '-monaco-gesturetap'; + export const Change = '-monaco-gesturechange'; + export const Start = '-monaco-gesturestart'; + export const End = '-monaco-gesturesend'; } interface TouchData { - id:number; - initialTarget:EventTarget; - initialTimeStamp:number; - initialPageX:number; - initialPageY:number; - rollingTimestamps:number[]; - rollingPageX:number[]; - rollingPageY:number[]; + id: number; + initialTarget: EventTarget; + initialTimeStamp: number; + initialPageX: number; + initialPageY: number; + rollingTimestamps: number[]; + rollingPageX: number[]; + rollingPageY: number[]; } export interface GestureEvent extends MouseEvent { - initialTarget:EventTarget; - translationX:number; - translationY:number; - pageX:number; - pageY:number; + initialTarget: EventTarget; + translationX: number; + translationY: number; + pageX: number; + pageY: number; } interface Touch { - identifier:number; - screenX:number; - screenY:number; - clientX:number; - clientY:number; - pageX:number; - pageY:number; - radiusX:number; - radiusY:number; - rotationAngle:number; - force:number; - target:Element; + identifier: number; + screenX: number; + screenY: number; + clientX: number; + clientY: number; + pageX: number; + pageY: number; + radiusX: number; + radiusY: number; + rotationAngle: number; + force: number; + target: Element; } interface TouchList { - [i:number]:Touch; - length:number; - item(index:number):Touch; - identifiedTouch(id:number):Touch; + [i: number]: Touch; + length: number; + item(index: number): Touch; + identifiedTouch(id: number): Touch; } interface TouchEvent extends Event { - touches:TouchList; - targetTouches:TouchList; - changedTouches:TouchList; + touches: TouchList; + targetTouches: TouchList; + changedTouches: TouchList; } -export class Gesture implements Lifecycle.IDisposable { +export class Gesture implements IDisposable { private static HOLD_DELAY = 2000; private static SCROLL_FRICTION = -0.005; - private targetElement:HTMLElement; - private callOnTarget:Function[]; - private handle: Lifecycle.IDisposable; + private targetElement: HTMLElement; + private callOnTarget: Function[]; + private handle: IDisposable; - private activeTouches:{[id:number]:TouchData;}; + private activeTouches: { [id: number]: TouchData; }; - constructor(target:HTMLElement) { + constructor(target: HTMLElement) { this.callOnTarget = []; this.activeTouches = {}; this.target = target; @@ -88,14 +88,14 @@ export class Gesture implements Lifecycle.IDisposable { } } - public set target(element:HTMLElement) { - Lifecycle.cAll(this.callOnTarget); + public set target(element: HTMLElement) { + cAll(this.callOnTarget); this.activeTouches = {}; this.targetElement = element; - if(!this.targetElement) { + if (!this.targetElement) { return; } @@ -104,14 +104,14 @@ export class Gesture implements Lifecycle.IDisposable { this.callOnTarget.push(DomUtils.addListener(this.targetElement, 'touchmove', (e) => this.onTouchMove(e))); } - private static newGestureEvent(type:string):GestureEvent { - var event = ( document.createEvent('CustomEvent')); + private static newGestureEvent(type: string): GestureEvent { + let event = (document.createEvent('CustomEvent')); event.initEvent(type, false, true); return event; } - private onTouchStart(e:TouchEvent): void { - var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. + private onTouchStart(e: TouchEvent): void { + let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. e.preventDefault(); e.stopPropagation(); @@ -120,8 +120,8 @@ export class Gesture implements Lifecycle.IDisposable { this.handle = null; } - for(var i = 0, len = e.targetTouches.length; i < len; i++) { - var touch = e.targetTouches.item(i); + for (let i = 0, len = e.targetTouches.length; i < len; i++) { + let touch = e.targetTouches.item(i); this.activeTouches[touch.identifier] = { id: touch.identifier, @@ -134,49 +134,49 @@ export class Gesture implements Lifecycle.IDisposable { rollingPageY: [touch.pageY] }; - var evt = Gesture.newGestureEvent(EventType.Start); + let evt = Gesture.newGestureEvent(EventType.Start); evt.pageX = touch.pageX; evt.pageY = touch.pageY; this.targetElement.dispatchEvent(evt); } } - private onTouchEnd(e:TouchEvent): void { - var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. + private onTouchEnd(e: TouchEvent): void { + let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. e.preventDefault(); e.stopPropagation(); - var activeTouchCount = Object.keys(this.activeTouches).length; + let activeTouchCount = Object.keys(this.activeTouches).length; - for(var i = 0, len = e.changedTouches.length; i < len; i++) { + for (let i = 0, len = e.changedTouches.length; i < len; i++) { - var touch = e.changedTouches.item(i); + let touch = e.changedTouches.item(i); - if(!this.activeTouches.hasOwnProperty(String(touch.identifier))) { + if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) { console.warn('move of an UNKNOWN touch', touch); continue; } - var data = this.activeTouches[touch.identifier], + let data = this.activeTouches[touch.identifier], holdTime = Date.now() - data.initialTimeStamp; - if(holdTime < Gesture.HOLD_DELAY && - Math.abs(data.initialPageX - Arrays.tail(data.rollingPageX)) < 30 && - Math.abs(data.initialPageY - Arrays.tail(data.rollingPageY)) < 30) { + if (holdTime < Gesture.HOLD_DELAY && + Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30 && + Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) { - var evt = Gesture.newGestureEvent(EventType.Tap); + let evt = Gesture.newGestureEvent(EventType.Tap); evt.initialTarget = data.initialTarget; - evt.pageX = Arrays.tail(data.rollingPageX); - evt.pageY = Arrays.tail(data.rollingPageY); + evt.pageX = arrays.tail(data.rollingPageX); + evt.pageY = arrays.tail(data.rollingPageY); this.targetElement.dispatchEvent(evt); - } else if(activeTouchCount === 1) { - var finalX = Arrays.tail(data.rollingPageX); - var finalY = Arrays.tail(data.rollingPageY); + } else if (activeTouchCount === 1) { + let finalX = arrays.tail(data.rollingPageX); + let finalY = arrays.tail(data.rollingPageY); - var deltaT = Arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0]; - var deltaX = finalX - data.rollingPageX[0]; - var deltaY = finalY - data.rollingPageY[0]; + let deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0]; + let deltaX = finalX - data.rollingPageX[0]; + let deltaY = finalY - data.rollingPageY[0]; this.inertia(timestamp, // time now Math.abs(deltaX) / deltaT, // speed @@ -193,59 +193,59 @@ export class Gesture implements Lifecycle.IDisposable { } } - private inertia(t1:number, vX:number, dirX: number, x:number, vY:number, dirY: number, y:number): void { + private inertia(t1: number, vX: number, dirX: number, x: number, vY: number, dirY: number, y: number): void { this.handle = DomUtils.scheduleAtNextAnimationFrame(() => { - var now = Date.now(); + let now = Date.now(); // velocity: old speed + accel_over_time - var deltaT = now - t1, + let deltaT = now - t1, delta_pos_x = 0, delta_pos_y = 0, stopped = true; vX += Gesture.SCROLL_FRICTION * deltaT; vY += Gesture.SCROLL_FRICTION * deltaT; - if(vX > 0) { + if (vX > 0) { stopped = false; delta_pos_x = dirX * vX * deltaT; } - if(vY > 0) { + if (vY > 0) { stopped = false; delta_pos_y = dirY * vY * deltaT; } // dispatch translation event - var evt = Gesture.newGestureEvent(EventType.Change); + let evt = Gesture.newGestureEvent(EventType.Change); evt.translationX = delta_pos_x; evt.translationY = delta_pos_y; this.targetElement.dispatchEvent(evt); - if(!stopped) { + if (!stopped) { this.inertia(now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y); } }); } - private onTouchMove(e:TouchEvent): void { - var timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. + private onTouchMove(e: TouchEvent): void { + let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based. e.preventDefault(); e.stopPropagation(); - for(var i = 0, len = e.changedTouches.length; i < len; i++) { + for (let i = 0, len = e.changedTouches.length; i < len; i++) { - var touch = e.changedTouches.item(i); + let touch = e.changedTouches.item(i); - if(!this.activeTouches.hasOwnProperty(String(touch.identifier))) { + if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) { console.warn('end of an UNKNOWN touch', touch); continue; } - var data = this.activeTouches[touch.identifier]; + let data = this.activeTouches[touch.identifier]; - var evt = Gesture.newGestureEvent(EventType.Change); - evt.translationX = touch.pageX - Arrays.tail(data.rollingPageX); - evt.translationY = touch.pageY - Arrays.tail(data.rollingPageY); + let evt = Gesture.newGestureEvent(EventType.Change); + evt.translationX = touch.pageX - arrays.tail(data.rollingPageX); + evt.translationY = touch.pageY - arrays.tail(data.rollingPageY); evt.pageX = touch.pageX; evt.pageY = touch.pageY; this.targetElement.dispatchEvent(evt); -- GitLab