Skip to content

Commit 74e3edf

Browse files
committed
feat(overlay): add overlay container & styles
1 parent abefaf5 commit 74e3edf

File tree

9 files changed

+56
-12
lines changed

9 files changed

+56
-12
lines changed

ember-cli-build.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
1111
var BroccoliSass = require('broccoli-sass');
1212
var broccoliAutoprefixer = require('broccoli-autoprefixer');
1313

14-
const BroccoliTypescript = require('./tools/broccoli/broccoli-typescript').default;
1514
const BroccoliTs2Dart = require('./tools/broccoli/broccoli-ts2dart').default;
1615
const BroccoliDestCopy = require('./tools/broccoli/broccoli-dest-copy').default;
1716
const BroccoliDartFmt = require('./tools/broccoli/broccoli-dartfmt').default;
@@ -24,13 +23,15 @@ module.exports = function(defaults) {
2423
var demoAppCssTree = new BroccoliSass(['src/demo-app'], './demo-app.scss', 'demo-app/demo-app.css');
2524
var demoCssTree = getCssTree('demo-app');
2625
var componentCssTree = getCssTree('components');
26+
var mainCssTree = new BroccoliSass(['src', 'src/core/style'], './main.scss', 'main.css');
2727
var angularAppTree = new Angular2App(defaults);
2828

2929
var dartAppTree = getDartTree('src/');
3030

3131
return mergeTrees([
3232
angularAppTree.toTree(),
3333
componentCssTree,
34+
mainCssTree,
3435
demoAppCssTree,
3536
demoCssTree,
3637
].concat(dartAppTree || []));

src/core/overlay/overlay-container.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {DOM} from '../platform/dom/dom_adapter';
2+
3+
4+
/**
5+
* Create the overlay container element, which is simply a div
6+
* with the 'md-overlay-container' class on the document body.
7+
*/
8+
export function createOverlayContainer(): Element {
9+
let documentBody = DOM.getGlobalEventTarget('body');
10+
let container = DOM.createElement('div');
11+
DOM.addClass(container, 'md-overlay-container');
12+
DOM.appendChild(documentBody, container);
13+
return container;
14+
}

src/core/overlay/overlay.scss

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/** The overlay-container is an invisible element which contains all individual overlays. */
2+
.md-overlay-container {
3+
position: absolute;
4+
5+
// Disable events from being captured on the overlay container.
6+
pointer-events: none;
7+
8+
// The container should be the size of the viewport.
9+
top: 0;
10+
left: 0;
11+
height: 100%;
12+
width: 100%;
13+
}
14+
15+
/** A single overlay pane. */
16+
.md-overlay-pane {
17+
position: absolute;
18+
}

src/core/overlay/overlay.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import {DomPortalHost} from '../portal/dom-portal-host';
1010
import {OverlayRef} from './overlay-ref';
1111
import {DOM} from '../platform/dom/dom_adapter';
1212

13-
// Re-export OverlayState and OverlayRef so they can be imported directly from here.
13+
// Re-export overlay-related modules so they can be imported directly from here.
1414
export {OverlayState} from './overlay-state';
1515
export {OverlayRef} from './overlay-ref';
16+
export {createOverlayContainer} from './overlay-container';
1617

1718
/** Token used to inject the DOM element that serves as the overlay container. */
1819
export const OVERLAY_CONTAINER_TOKEN = CONST_EXPR(new OpaqueToken('overlayContainer'));

src/demo-app/overlay/overlay-demo.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import {Component, provide, ElementRef, ViewChildren, QueryList} from 'angular2/core';
2-
import {Overlay, OVERLAY_CONTAINER_TOKEN} from '../../core/overlay/overlay';
1+
import {Component, ElementRef, ViewChildren, QueryList} from 'angular2/core';
2+
import {Overlay} from '../../core/overlay/overlay';
33
import {ComponentPortal, Portal} from '../../core/portal/portal';
4-
import {BrowserDomAdapter} from '../../core/platform/browser/browser_adapter';
54
import {TemplatePortalDirective} from '../../core/portal/portal-directives';
65

76

@@ -12,15 +11,12 @@ import {TemplatePortalDirective} from '../../core/portal/portal-directives';
1211
directives: [TemplatePortalDirective],
1312
providers: [
1413
Overlay,
15-
provide(OVERLAY_CONTAINER_TOKEN, {useValue: document.body})
1614
]
1715
})
1816
export class OverlayDemo {
1917
@ViewChildren(TemplatePortalDirective) templatePortals: QueryList<Portal<any>>;
2018

21-
constructor(public overlay: Overlay, public elementRef: ElementRef) {
22-
BrowserDomAdapter.makeCurrent();
23-
}
19+
constructor(public overlay: Overlay, public elementRef: ElementRef) { }
2420

2521
openRotiniPanel() {
2622
this.overlay.create().then(ref => {

src/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<script src="vendor/angular2/bundles/angular2-polyfills.js"></script>
99
{{content-for 'head'}}
1010
<link rel="icon" type="image/x-icon" href="favicon.ico">
11-
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
12-
rel="stylesheet">
11+
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
12+
<link href="main.css" rel="stylesheet">
1313
</head>
1414
<body>
1515
<demo-app>Loading...</demo-app>

src/main.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import "package:angular2/platform/browser.dart" show bootstrap;
22
import "./demo-app/demo-app.dart" show DemoApp;
33
import "package:angular2/router.dart" show ROUTER_PROVIDERS;
4+
import "./core/platform/browser/browser_adapter.dart" show BrowserDomAdapter;
45

56
void main() {
7+
BrowserDomAdapter.makeCurrent();
68
bootstrap(DemoApp, [ROUTER_PROVIDERS]);
79
}

src/main.scss

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Main library CSS file that will eventually be delivered as angular2-material.css.
2+
// Contains CSS rules that users will consume throughout their application as well as rules
3+
// that are consumed across multiple components (and thus shouldn't be scoped).
4+
5+
@import "core/overlay/overlay";

src/main.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
import {bootstrap} from 'angular2/platform/browser';
22
import {DemoApp} from './demo-app/demo-app';
33
import {ROUTER_PROVIDERS} from 'angular2/router';
4+
import {BrowserDomAdapter} from './core/platform/browser/browser_adapter';
5+
import {OVERLAY_CONTAINER_TOKEN} from './core/overlay/overlay';
6+
import {provide} from 'angular2/core';
7+
import {createOverlayContainer} from './core/overlay/overlay-container';
8+
9+
BrowserDomAdapter.makeCurrent();
410

511
bootstrap(DemoApp, [
6-
ROUTER_PROVIDERS
12+
ROUTER_PROVIDERS,
13+
provide(OVERLAY_CONTAINER_TOKEN, {useValue: createOverlayContainer()}),
714
]);

0 commit comments

Comments
 (0)