@@ -3,13 +3,13 @@ import {
3
3
OpaqueToken ,
4
4
Inject ,
5
5
Injectable ,
6
- ElementRef
7
6
} from '@angular/core' ;
8
7
import { OverlayState } from './overlay-state' ;
9
8
import { DomPortalHost } from '../portal/dom-portal-host' ;
10
9
import { OverlayRef } from './overlay-ref' ;
11
- import { GlobalPositionStrategy } from './position/global-position-strategy' ;
12
- import { RelativePositionStrategy } from './position/relative-position-strategy' ;
10
+
11
+ import { OverlayPositionBuilder } from './position/overlay-position-builder' ;
12
+ import { ViewportRuler } from './position/viewport-ruler' ;
13
13
14
14
15
15
// Re-export overlay-related modules so they can be imported directly from here.
@@ -39,7 +39,8 @@ let defaultState = new OverlayState();
39
39
export class Overlay {
40
40
constructor (
41
41
@Inject ( OVERLAY_CONTAINER_TOKEN ) private _overlayContainerElement : HTMLElement ,
42
- private _dynamicComponentLoader : DynamicComponentLoader ) {
42
+ private _dynamicComponentLoader : DynamicComponentLoader ,
43
+ private _positionBuilder : OverlayPositionBuilder ) {
43
44
}
44
45
45
46
/**
@@ -48,44 +49,31 @@ export class Overlay {
48
49
* @returns A reference to the created overlay.
49
50
*/
50
51
create ( state : OverlayState = defaultState ) : Promise < OverlayRef > {
51
- return this . _createPaneElement ( state ) . then ( pane => this . _createOverlayRef ( pane ) ) ;
52
+ return this . _createPaneElement ( ) . then ( pane => this . _createOverlayRef ( pane , state ) ) ;
52
53
}
53
54
54
55
/**
55
56
* Returns a position builder that can be used, via fluent API,
56
57
* to construct and configure a position strategy.
57
58
*/
58
59
position ( ) {
59
- return POSITION_BUILDER ;
60
+ return this . _positionBuilder ;
60
61
}
61
62
62
63
/**
63
- * Creates the DOM element for an overlay.
64
- * @param state State to apply to the created element.
64
+ * Creates the DOM element for an overlay and appends it to the overlay container.
65
65
* @returns Promise resolving to the created element.
66
66
*/
67
- private _createPaneElement ( state : OverlayState ) : Promise < HTMLElement > {
67
+ private _createPaneElement ( ) : Promise < HTMLElement > {
68
68
var pane = document . createElement ( 'div' ) ;
69
- pane . id = `md-overlay-${ nextUniqueId ++ } ` ;
69
+ pane . id = `md-overlay-${ nextUniqueId ++ } ` ;
70
70
pane . classList . add ( 'md-overlay-pane' ) ;
71
71
72
- this . applyState ( pane , state ) ;
73
72
this . _overlayContainerElement . appendChild ( pane ) ;
74
73
75
74
return Promise . resolve ( pane ) ;
76
75
}
77
76
78
- /**
79
- * Applies a given state to the given pane element.
80
- * @param pane The pane to modify.
81
- * @param state The state to apply.
82
- */
83
- applyState ( pane : HTMLElement , state : OverlayState ) {
84
- if ( state . positionStrategy != null ) {
85
- state . positionStrategy . apply ( pane ) ;
86
- }
87
- }
88
-
89
77
/**
90
78
* Create a DomPortalHost into which the overlay content can be loaded.
91
79
* @param pane The DOM element to turn into a portal host.
@@ -100,26 +88,18 @@ export class Overlay {
100
88
/**
101
89
* Creates an OverlayRef for an overlay in the given DOM element.
102
90
* @param pane DOM element for the overlay
91
+ * @param state
103
92
* @returns {OverlayRef }
104
93
*/
105
- private _createOverlayRef ( pane : HTMLElement ) : OverlayRef {
106
- return new OverlayRef ( this . _createPortalHost ( pane ) ) ;
94
+ private _createOverlayRef ( pane : HTMLElement , state : OverlayState ) : OverlayRef {
95
+ return new OverlayRef ( this . _createPortalHost ( pane ) , pane , state ) ;
107
96
}
108
97
}
109
98
110
99
111
- /** Builder for overlay position strategy. */
112
- export class OverlayPositionBuilder {
113
- /** Creates a global position strategy. */
114
- global ( ) {
115
- return new GlobalPositionStrategy ( ) ;
116
- }
117
-
118
- /** Creates a relative position strategy. */
119
- relativeTo ( elementRef : ElementRef ) {
120
- return new RelativePositionStrategy ( elementRef ) ;
121
- }
122
- }
123
-
124
- // We only ever need one position builder.
125
- let POSITION_BUILDER : OverlayPositionBuilder = new OverlayPositionBuilder ( ) ;
100
+ /** Providers for Overlay and its related injectables. */
101
+ export const OVERLAY_PROVIDERS = [
102
+ ViewportRuler ,
103
+ OverlayPositionBuilder ,
104
+ Overlay ,
105
+ ] ;
0 commit comments