@@ -129,12 +129,12 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
129
129
}
130
130
dispatchEvent ( el : Node , evt : any ) { el . dispatchEvent ( evt ) ; }
131
131
createMouseEvent ( eventType : string ) : MouseEvent {
132
- const evt : MouseEvent = document . createEvent ( 'MouseEvent' ) ;
132
+ const evt : MouseEvent = this . getDefaultDocument ( ) . createEvent ( 'MouseEvent' ) ;
133
133
evt . initEvent ( eventType , true , true ) ;
134
134
return evt ;
135
135
}
136
136
createEvent ( eventType : any ) : Event {
137
- const evt : Event = document . createEvent ( 'Event' ) ;
137
+ const evt : Event = this . getDefaultDocument ( ) . createEvent ( 'Event' ) ;
138
138
evt . initEvent ( eventType , true , true ) ;
139
139
return evt ;
140
140
}
@@ -147,7 +147,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
147
147
}
148
148
getInnerHTML ( el : HTMLElement ) : string { return el . innerHTML ; }
149
149
getTemplateContent ( el : Node ) : Node | null {
150
- return 'content' in el && el instanceof HTMLTemplateElement ? el . content : null ;
150
+ return 'content' in el && this . isTemplateElement ( el ) ? ( < any > el ) . content : null ;
151
151
}
152
152
getOuterHTML ( el : HTMLElement ) : string { return el . outerHTML ; }
153
153
nodeName ( node : Node ) : string { return node . nodeName ; }
@@ -198,25 +198,34 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
198
198
setValue ( el : any , value : string ) { el . value = value ; }
199
199
getChecked ( el : any ) : boolean { return el . checked ; }
200
200
setChecked ( el : any , value : boolean ) { el . checked = value ; }
201
- createComment ( text : string ) : Comment { return document . createComment ( text ) ; }
201
+ createComment ( text : string ) : Comment { return this . getDefaultDocument ( ) . createComment ( text ) ; }
202
202
createTemplate ( html : any ) : HTMLElement {
203
- const t = document . createElement ( 'template' ) ;
203
+ const t = this . getDefaultDocument ( ) . createElement ( 'template' ) ;
204
204
t . innerHTML = html ;
205
205
return t ;
206
206
}
207
- createElement ( tagName : string , doc = document ) : HTMLElement { return doc . createElement ( tagName ) ; }
208
- createElementNS ( ns : string , tagName : string , doc = document ) : Element {
207
+ createElement ( tagName : string , doc ?: Document ) : HTMLElement {
208
+ doc = doc || this . getDefaultDocument ( ) ;
209
+ return doc . createElement ( tagName ) ;
210
+ }
211
+ createElementNS ( ns : string , tagName : string , doc ?: Document ) : Element {
212
+ doc = doc || this . getDefaultDocument ( ) ;
209
213
return doc . createElementNS ( ns , tagName ) ;
210
214
}
211
- createTextNode ( text : string , doc = document ) : Text { return doc . createTextNode ( text ) ; }
212
- createScriptTag ( attrName : string , attrValue : string , doc = document ) : HTMLScriptElement {
215
+ createTextNode ( text : string , doc ?: Document ) : Text {
216
+ doc = doc || this . getDefaultDocument ( ) ;
217
+ return doc . createTextNode ( text ) ;
218
+ }
219
+ createScriptTag ( attrName : string , attrValue : string , doc ?: Document ) : HTMLScriptElement {
220
+ doc = doc || this . getDefaultDocument ( ) ;
213
221
const el = < HTMLScriptElement > doc . createElement ( 'SCRIPT' ) ;
214
222
el . setAttribute ( attrName , attrValue ) ;
215
223
return el ;
216
224
}
217
- createStyleElement ( css : string , doc = document ) : HTMLStyleElement {
225
+ createStyleElement ( css : string , doc ?: Document ) : HTMLStyleElement {
226
+ doc = doc || this . getDefaultDocument ( ) ;
218
227
const style = < HTMLStyleElement > doc . createElement ( 'style' ) ;
219
- this . appendChild ( style , this . createTextNode ( css ) ) ;
228
+ this . appendChild ( style , this . createTextNode ( css , doc ) ) ;
220
229
return style ;
221
230
}
222
231
createShadowRoot ( el : HTMLElement ) : DocumentFragment { return ( < any > el ) . createShadowRoot ( ) ; }
@@ -253,7 +262,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
253
262
const res = new Map < string , string > ( ) ;
254
263
const elAttrs = element . attributes ;
255
264
for ( let i = 0 ; i < elAttrs . length ; i ++ ) {
256
- const attrib = elAttrs [ i ] ;
265
+ const attrib = elAttrs . item ( i ) ;
257
266
res . set ( attrib . name , attrib . value ) ;
258
267
}
259
268
return res ;
@@ -282,17 +291,18 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
282
291
createHtmlDocument ( ) : HTMLDocument {
283
292
return document . implementation . createHTMLDocument ( 'fakeTitle' ) ;
284
293
}
294
+ getDefaultDocument ( ) : Document { return document ; }
285
295
getBoundingClientRect ( el : Element ) : any {
286
296
try {
287
297
return el . getBoundingClientRect ( ) ;
288
298
} catch ( e ) {
289
299
return { top : 0 , bottom : 0 , left : 0 , right : 0 , width : 0 , height : 0 } ;
290
300
}
291
301
}
292
- getTitle ( doc : Document ) : string { return document . title ; }
293
- setTitle ( doc : Document , newTitle : string ) { document . title = newTitle || '' ; }
302
+ getTitle ( doc : Document ) : string { return doc . title ; }
303
+ setTitle ( doc : Document , newTitle : string ) { doc . title = newTitle || '' ; }
294
304
elementMatches ( n : any , selector : string ) : boolean {
295
- if ( n instanceof HTMLElement ) {
305
+ if ( this . isElementNode ( n ) ) {
296
306
return n . matches && n . matches ( selector ) ||
297
307
n . msMatchesSelector && n . msMatchesSelector ( selector ) ||
298
308
n . webkitMatchesSelector && n . webkitMatchesSelector ( selector ) ;
@@ -301,7 +311,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
301
311
return false ;
302
312
}
303
313
isTemplateElement ( el : Node ) : boolean {
304
- return el instanceof HTMLElement && el . nodeName == 'TEMPLATE' ;
314
+ return this . isElementNode ( el ) && el . nodeName = == 'TEMPLATE' ;
305
315
}
306
316
isTextNode ( node : Node ) : boolean { return node . nodeType === Node . TEXT_NODE ; }
307
317
isCommentNode ( node : Node ) : boolean { return node . nodeType === Node . COMMENT_NODE ; }
@@ -312,7 +322,7 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
312
322
isShadowRoot ( node : any ) : boolean { return node instanceof DocumentFragment ; }
313
323
importIntoDoc ( node : Node ) : any { return document . importNode ( this . templateAwareRoot ( node ) , true ) ; }
314
324
adoptNode ( node : Node ) : any { return document . adoptNode ( node ) ; }
315
- getHref ( el : Element ) : string { return ( < any > el ) . href ; }
325
+ getHref ( el : Element ) : string { return el . getAttribute ( ' href' ) ! ; }
316
326
317
327
getEventKey ( event : any ) : string {
318
328
let key = event . key ;
@@ -342,10 +352,10 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
342
352
return window ;
343
353
}
344
354
if ( target === 'document' ) {
345
- return document ;
355
+ return doc ;
346
356
}
347
357
if ( target === 'body' ) {
348
- return document . body ;
358
+ return doc . body ;
349
359
}
350
360
return null ;
351
361
}
0 commit comments