88  Renderer , 
99  ElementRef , 
1010  EventEmitter , 
11+   Inject , 
12+   Optional , 
1113}  from  '@angular/core' ; 
1214import  { 
1315  animate , 
@@ -17,6 +19,7 @@ import {
1719  transition , 
1820  AnimationEvent , 
1921}  from  '@angular/animations' ; 
22+ import  { DOCUMENT }  from  '@angular/platform-browser' ; 
2023import  { BasePortalHost ,  ComponentPortal ,  PortalHostDirective ,  TemplatePortal }  from  '../core' ; 
2124import  { MdDialogConfig }  from  './dialog-config' ; 
2225import  { MdDialogContentAlreadyAttachedError }  from  './dialog-errors' ; 
@@ -77,7 +80,8 @@ export class MdDialogContainer extends BasePortalHost implements OnDestroy {
7780    private  _ngZone : NgZone , 
7881    private  _renderer : Renderer , 
7982    private  _elementRef : ElementRef , 
80-     private  _focusTrapFactory : FocusTrapFactory )  { 
83+     private  _focusTrapFactory : FocusTrapFactory , 
84+     @Optional ( )  @Inject ( DOCUMENT )  private  _document : any )  { 
8185
8286    super ( ) ; 
8387  } 
@@ -91,6 +95,7 @@ export class MdDialogContainer extends BasePortalHost implements OnDestroy {
9195      throw  new  MdDialogContentAlreadyAttachedError ( ) ; 
9296    } 
9397
98+     this . _savePreviouslyFocusedElement ( ) ; 
9499    return  this . _portalHost . attachComponentPortal ( portal ) ; 
95100  } 
96101
@@ -103,6 +108,7 @@ export class MdDialogContainer extends BasePortalHost implements OnDestroy {
103108      throw  new  MdDialogContentAlreadyAttachedError ( ) ; 
104109    } 
105110
111+     this . _savePreviouslyFocusedElement ( ) ; 
106112    return  this . _portalHost . attachTemplatePortal ( portal ) ; 
107113  } 
108114
@@ -118,10 +124,19 @@ export class MdDialogContainer extends BasePortalHost implements OnDestroy {
118124    // If were to attempt to focus immediately, then the content of the dialog would not yet be 
119125    // ready in instances where change detection has to run first. To deal with this, we simply 
120126    // wait for the microtask queue to be empty. 
121-     this . _elementFocusedBeforeDialogWasOpened  =  document . activeElement  as  HTMLElement ; 
122127    this . _focusTrap . focusFirstTabbableElementWhenReady ( ) ; 
123128  } 
124129
130+   /** 
131+    * Saves a reference to the element that was focused before the dialog was opened. 
132+    * @private  
133+    */ 
134+   private  _savePreviouslyFocusedElement ( )  { 
135+     if  ( this . _document )  { 
136+       this . _elementFocusedBeforeDialogWasOpened  =  this . _document . activeElement  as  HTMLElement ; 
137+     } 
138+   } 
139+ 
125140  /** 
126141   * Kicks off the leave animation. 
127142   * @docs -private 
0 commit comments