@@ -9,7 +9,6 @@ import { TPromise } from 'vs/base/common/winjs.base';
99import { TimeoutTimer } from 'vs/base/common/async' ;
1010import { onUnexpectedError } from 'vs/base/common/errors' ;
1111import { Disposable , IDisposable , dispose } from 'vs/base/common/lifecycle' ;
12- import { isObject } from 'vs/base/common/types' ;
1312import * as browser from 'vs/base/browser/browser' ;
1413import { IKeyboardEvent , StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent' ;
1514import { IMouseEvent , StandardMouseEvent } from 'vs/base/browser/mouseEvent' ;
@@ -23,31 +22,6 @@ export function clearNode(node: HTMLElement) {
2322 }
2423}
2524
26- /**
27- * Calls JSON.Stringify with a replacer to break apart any circular references.
28- * This prevents JSON.stringify from throwing the exception
29- * "Uncaught TypeError: Converting circular structure to JSON"
30- */
31- export function safeStringifyDOMAware ( obj : any ) : string {
32- let seen : any [ ] = [ ] ;
33- return JSON . stringify ( obj , ( key , value ) => {
34-
35- // HTML elements are never going to serialize nicely
36- if ( value instanceof Element ) {
37- return '[Element]' ;
38- }
39-
40- if ( isObject ( value ) || Array . isArray ( value ) ) {
41- if ( seen . indexOf ( value ) !== - 1 ) {
42- return '[Circular]' ;
43- } else {
44- seen . push ( value ) ;
45- }
46- }
47- return value ;
48- } ) ;
49- }
50-
5125export function isInDOM ( node : Node ) : boolean {
5226 while ( node ) {
5327 if ( node === document . body ) {
@@ -58,7 +32,14 @@ export function isInDOM(node: Node): boolean {
5832 return false ;
5933}
6034
61- const _manualClassList = new class {
35+ interface IDomClassList {
36+ hasClass ( node : HTMLElement , className : string ) : boolean ;
37+ addClass ( node : HTMLElement , className : string ) : void ;
38+ removeClass ( node : HTMLElement , className : string ) : void ;
39+ toggleClass ( node : HTMLElement , className : string , shouldHaveIt ?: boolean ) : void ;
40+ }
41+
42+ const _manualClassList = new class implements IDomClassList {
6243
6344 private _lastStart : number ;
6445 private _lastEnd : number ;
@@ -160,7 +141,7 @@ const _manualClassList = new class {
160141 }
161142} ;
162143
163- const _nativeClassList = new class {
144+ const _nativeClassList = new class implements IDomClassList {
164145 hasClass ( node : HTMLElement , className : string ) : boolean {
165146 return className && node . classList && node . classList . contains ( className ) ;
166147 }
@@ -186,7 +167,7 @@ const _nativeClassList = new class {
186167
187168// In IE11 there is only partial support for `classList` which makes us keep our
188169// custom implementation. Otherwise use the native implementation, see: http://caniuse.com/#search=classlist
189- const _classList = browser . isIE ? _manualClassList : _nativeClassList ;
170+ const _classList : IDomClassList = browser . isIE ? _manualClassList : _nativeClassList ;
190171export const hasClass : ( node : HTMLElement , className : string ) => boolean = _classList . hasClass . bind ( _classList ) ;
191172export const addClass : ( node : HTMLElement , className : string ) => void = _classList . addClass . bind ( _classList ) ;
192173export const removeClass : ( node : HTMLElement , className : string ) => void = _classList . removeClass . bind ( _classList ) ;
0 commit comments