@@ -4,13 +4,13 @@ import {
44 OpaqueToken ,
55 Inject ,
66 Injectable ,
7- ElementRef
87} from 'angular2/core' ;
98import { OverlayState } from './overlay-state' ;
109import { DomPortalHost } from '../portal/dom-portal-host' ;
1110import { OverlayRef } from './overlay-ref' ;
12- import { GlobalPositionStrategy } from './position/global-position-strategy' ;
13- import { RelativePositionStrategy } from './position/relative-position-strategy' ;
11+
12+ import { OverlayPositionBuilder } from './position/overlay-position-builder' ;
13+ import { ViewportRuler } from './position/viewport-ruler' ;
1414
1515
1616// Re-export overlay-related modules so they can be imported directly from here.
@@ -41,7 +41,8 @@ export class Overlay {
4141 constructor (
4242 @Inject ( OVERLAY_CONTAINER_TOKEN ) private _overlayContainerElement : HTMLElement ,
4343 private _dynamicComponentLoader : DynamicComponentLoader ,
44- private _appViewManager : AppViewManager ) {
44+ private _appViewManager : AppViewManager ,
45+ private _positionBuilder : OverlayPositionBuilder ) {
4546 }
4647
4748 /**
@@ -50,44 +51,31 @@ export class Overlay {
5051 * @returns A reference to the created overlay.
5152 */
5253 create ( state : OverlayState = defaultState ) : Promise < OverlayRef > {
53- return this . _createPaneElement ( state ) . then ( pane => this . _createOverlayRef ( pane ) ) ;
54+ return this . _createPaneElement ( ) . then ( pane => this . _createOverlayRef ( pane , state ) ) ;
5455 }
5556
5657 /**
5758 * Returns a position builder that can be used, via fluent API,
5859 * to construct and configure a position strategy.
5960 */
6061 position ( ) {
61- return POSITION_BUILDER ;
62+ return this . _positionBuilder ;
6263 }
6364
6465 /**
65- * Creates the DOM element for an overlay.
66- * @param state State to apply to the created element.
66+ * Creates the DOM element for an overlay and appends it to the overlay container.
6767 * @returns Promise resolving to the created element.
6868 */
69- private _createPaneElement ( state : OverlayState ) : Promise < HTMLElement > {
69+ private _createPaneElement ( ) : Promise < HTMLElement > {
7070 var pane = document . createElement ( 'div' ) ;
71- pane . id = `md-overlay-${ nextUniqueId ++ } ` ;
71+ pane . id = `md-overlay-${ nextUniqueId ++ } ` ;
7272 pane . classList . add ( 'md-overlay-pane' ) ;
7373
74- this . applyState ( pane , state ) ;
7574 this . _overlayContainerElement . appendChild ( pane ) ;
7675
7776 return Promise . resolve ( pane ) ;
7877 }
7978
80- /**
81- * Applies a given state to the given pane element.
82- * @param pane The pane to modify.
83- * @param state The state to apply.
84- */
85- applyState ( pane : HTMLElement , state : OverlayState ) {
86- if ( state . positionStrategy != null ) {
87- state . positionStrategy . apply ( pane ) ;
88- }
89- }
90-
9179 /**
9280 * Create a DomPortalHost into which the overlay content can be loaded.
9381 * @param pane The DOM element to turn into a portal host.
@@ -103,26 +91,18 @@ export class Overlay {
10391 /**
10492 * Creates an OverlayRef for an overlay in the given DOM element.
10593 * @param pane DOM element for the overlay
94+ * @param state
10695 * @returns {OverlayRef }
10796 */
108- private _createOverlayRef ( pane : HTMLElement ) : OverlayRef {
109- return new OverlayRef ( this . _createPortalHost ( pane ) ) ;
97+ private _createOverlayRef ( pane : HTMLElement , state : OverlayState ) : OverlayRef {
98+ return new OverlayRef ( this . _createPortalHost ( pane ) , pane , state ) ;
11099 }
111100}
112101
113102
114- /** Builder for overlay position strategy. */
115- export class OverlayPositionBuilder {
116- /** Creates a global position strategy. */
117- global ( ) {
118- return new GlobalPositionStrategy ( ) ;
119- }
120-
121- /** Creates a relative position strategy. */
122- relativeTo ( elementRef : ElementRef ) {
123- return new RelativePositionStrategy ( elementRef ) ;
124- }
125- }
126-
127- // We only ever need one position builder.
128- let POSITION_BUILDER : OverlayPositionBuilder = new OverlayPositionBuilder ( ) ;
103+ /** Providers for Overlay and its related injectables. */
104+ export const OVERLAY_PROVIDERS = [
105+ ViewportRuler ,
106+ OverlayPositionBuilder ,
107+ Overlay ,
108+ ] ;
0 commit comments