UNPKG

5.18 kBJavaScriptView Raw
1var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5 return c > 3 && r && Object.defineProperty(target, key, r), r;
6};
7var __metadata = (this && this.__metadata) || function (k, v) {
8 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9};
10import { NgModule, Directive, TemplateRef, ViewContainerRef, Input, ElementRef } from '@angular/core';
11import { Overlay, OVERLAY_PROVIDERS } from './overlay';
12import { TemplatePortal } from '../portal/portal';
13import { OverlayState } from './overlay-state';
14import { ConnectionPositionPair } from './position/connected-position';
15import { PortalModule } from '../portal/portal-directives';
16/** Default set of positions for the overlay. Follows the behavior of a dropdown. */
17var defaultPositionList = [
18 new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }),
19 new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }),
20];
21/**
22 * Directive applied to an element to make it usable as an origin for an Overlay using a
23 * ConnectedPositionStrategy.
24 */
25export var OverlayOrigin = (function () {
26 function OverlayOrigin(_elementRef) {
27 this._elementRef = _elementRef;
28 }
29 Object.defineProperty(OverlayOrigin.prototype, "elementRef", {
30 get: function () {
31 return this._elementRef;
32 },
33 enumerable: true,
34 configurable: true
35 });
36 OverlayOrigin = __decorate([
37 Directive({
38 selector: '[overlay-origin]',
39 exportAs: 'overlayOrigin',
40 }),
41 __metadata('design:paramtypes', [ElementRef])
42 ], OverlayOrigin);
43 return OverlayOrigin;
44}());
45/**
46 * Directive to facilitate declarative creation of an Overlay using a ConnectedPositionStrategy.
47 */
48export var ConnectedOverlayDirective = (function () {
49 // TODO(jelbourn): inputs for size, scroll behavior, animation, etc.
50 function ConnectedOverlayDirective(_overlay, templateRef, viewContainerRef) {
51 this._overlay = _overlay;
52 this._templatePortal = new TemplatePortal(templateRef, viewContainerRef);
53 }
54 Object.defineProperty(ConnectedOverlayDirective.prototype, "overlayRef", {
55 get: function () {
56 return this._overlayRef;
57 },
58 enumerable: true,
59 configurable: true
60 });
61 /** TODO: internal */
62 ConnectedOverlayDirective.prototype.ngOnInit = function () {
63 this._createOverlay();
64 };
65 /** TODO: internal */
66 ConnectedOverlayDirective.prototype.ngOnDestroy = function () {
67 this._destroyOverlay();
68 };
69 /** Creates an overlay and attaches this directive's template to it. */
70 ConnectedOverlayDirective.prototype._createOverlay = function () {
71 if (!this.positions || !this.positions.length) {
72 this.positions = defaultPositionList;
73 }
74 var overlayConfig = new OverlayState();
75 overlayConfig.positionStrategy =
76 this._overlay.position().connectedTo(this.origin.elementRef, { originX: this.positions[0].overlayX, originY: this.positions[0].originY }, { overlayX: this.positions[0].overlayX, overlayY: this.positions[0].overlayY });
77 this._overlayRef = this._overlay.create(overlayConfig);
78 this._overlayRef.attach(this._templatePortal);
79 };
80 /** Destroys the overlay created by this directive. */
81 ConnectedOverlayDirective.prototype._destroyOverlay = function () {
82 this._overlayRef.dispose();
83 };
84 __decorate([
85 Input(),
86 __metadata('design:type', OverlayOrigin)
87 ], ConnectedOverlayDirective.prototype, "origin", void 0);
88 __decorate([
89 Input(),
90 __metadata('design:type', Array)
91 ], ConnectedOverlayDirective.prototype, "positions", void 0);
92 ConnectedOverlayDirective = __decorate([
93 Directive({
94 selector: '[connected-overlay]'
95 }),
96 __metadata('design:paramtypes', [Overlay, TemplateRef, ViewContainerRef])
97 ], ConnectedOverlayDirective);
98 return ConnectedOverlayDirective;
99}());
100export var OverlayModule = (function () {
101 function OverlayModule() {
102 }
103 OverlayModule.forRoot = function () {
104 return {
105 ngModule: OverlayModule,
106 providers: OVERLAY_PROVIDERS,
107 };
108 };
109 OverlayModule = __decorate([
110 NgModule({
111 imports: [PortalModule],
112 exports: [ConnectedOverlayDirective, OverlayOrigin],
113 declarations: [ConnectedOverlayDirective, OverlayOrigin],
114 }),
115 __metadata('design:paramtypes', [])
116 ], OverlayModule);
117 return OverlayModule;
118}());
119
120//# sourceMappingURL=overlay-directives.js.map