66  Renderer , 
77  ElementRef , 
88  EventEmitter , 
9+   Inject , 
10+   Optional , 
911}  from  '@angular/core' ; 
1012import  { 
1113  animate , 
@@ -15,6 +17,7 @@ import {
1517  transition , 
1618  AnimationEvent , 
1719}  from  '@angular/animations' ; 
20+ import  { DOCUMENT }  from  '@angular/platform-browser' ; 
1821import  { BasePortalHost ,  ComponentPortal ,  PortalHostDirective ,  TemplatePortal }  from  '../core' ; 
1922import  { MdDialogConfig }  from  './dialog-config' ; 
2023import  { MdDialogContentAlreadyAttachedError }  from  './dialog-errors' ; 
@@ -57,6 +60,9 @@ export class MdDialogContainer extends BasePortalHost {
5760  /** Element that was focused before the dialog was opened. Save this to restore upon close. */ 
5861  private  _elementFocusedBeforeDialogWasOpened : HTMLElement  =  null ; 
5962
63+   /** Reference to the global document object. */ 
64+   private  _document : Document ; 
65+ 
6066  /** The dialog configuration. */ 
6167  dialogConfig : MdDialogConfig ; 
6268
@@ -69,9 +75,11 @@ export class MdDialogContainer extends BasePortalHost {
6975  constructor ( 
7076    private  _renderer : Renderer , 
7177    private  _elementRef : ElementRef , 
72-     private  _focusTrapFactory : FocusTrapFactory )  { 
78+     private  _focusTrapFactory : FocusTrapFactory , 
79+     @Optional ( )  @Inject ( DOCUMENT )  _document : any )  { 
7380
7481    super ( ) ; 
82+     this . _document  =  _document ; 
7583  } 
7684
7785  /** 
@@ -83,6 +91,7 @@ export class MdDialogContainer extends BasePortalHost {
8391      throw  new  MdDialogContentAlreadyAttachedError ( ) ; 
8492    } 
8593
94+     this . _savePreviouslyFocusedElement ( ) ; 
8695    return  this . _portalHost . attachComponentPortal ( portal ) ; 
8796  } 
8897
@@ -95,6 +104,7 @@ export class MdDialogContainer extends BasePortalHost {
95104      throw  new  MdDialogContentAlreadyAttachedError ( ) ; 
96105    } 
97106
107+     this . _savePreviouslyFocusedElement ( ) ; 
98108    return  this . _portalHost . attachTemplatePortal ( portal ) ; 
99109  } 
100110
@@ -109,10 +119,18 @@ export class MdDialogContainer extends BasePortalHost {
109119    // If were to attempt to focus immediately, then the content of the dialog would not yet be 
110120    // ready in instances where change detection has to run first. To deal with this, we simply 
111121    // wait for the microtask queue to be empty. 
112-     this . _elementFocusedBeforeDialogWasOpened  =  document . activeElement  as  HTMLElement ; 
113122    this . _focusTrap . focusFirstTabbableElementWhenReady ( ) ; 
114123  } 
115124
125+   /** 
126+    * Saves a reference to the element that was focused before the dialog was opened. 
127+    */ 
128+   private  _savePreviouslyFocusedElement ( )  { 
129+     if  ( this . _document )  { 
130+       this . _elementFocusedBeforeDialogWasOpened  =  this . _document . activeElement  as  HTMLElement ; 
131+     } 
132+   } 
133+ 
116134  /** 
117135   * Callback, invoked whenever an animation on the host completes. 
118136   * @docs -private 
0 commit comments