Skip to content

Commit 71af7f2

Browse files
committed
add md-drawer-content
1 parent 13fb5b4 commit 71af7f2

File tree

6 files changed

+90
-14
lines changed

6 files changed

+90
-14
lines changed
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
<div class="mat-drawer-backdrop" (click)="_onBackdropClicked()"
22
[class.mat-drawer-shown]="_isShowingBackdrop()"></div>
33

4-
<ng-content select="md-drawer, mat-drawer, md-sidenav, mat-sidenav"></ng-content>
4+
<ng-content select="md-drawer, mat-drawer"></ng-content>
55

6-
<div class="mat-drawer-content" [ngStyle]="_styles" cdk-scrollable>
6+
<ng-content select="md-drawer-content, mat-drawer-content">
7+
</ng-content>
8+
<md-drawer-content *ngIf="!_content">
79
<ng-content></ng-content>
8-
</div>
10+
</md-drawer-content>

src/lib/sidenav/drawer.html

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/lib/sidenav/drawer.ts

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
NgZone,
2323
OnDestroy,
2424
Inject,
25-
ChangeDetectorRef,
25+
ChangeDetectorRef, ContentChild,
2626
} from '@angular/core';
2727
import {animate, state, style, transition, trigger, AnimationEvent} from '@angular/animations';
2828
import {Directionality, coerceBooleanProperty} from '../core';
@@ -31,6 +31,7 @@ import {ESCAPE} from '../core/keyboard/keycodes';
3131
import {first, takeUntil, startWith} from '../core/rxjs/index';
3232
import {DOCUMENT} from '@angular/platform-browser';
3333
import {merge} from 'rxjs/observable/merge';
34+
import {Subject} from 'rxjs/Subject';
3435

3536

3637
/** Throws an exception when two MdDrawer are matching the same position. */
@@ -47,6 +48,20 @@ export class MdDrawerToggleResult {
4748
constructor(public type: 'open' | 'close', public animationFinished: boolean) {}
4849
}
4950

51+
52+
@Component({
53+
moduleId: module.id,
54+
selector: 'md-drawer-content, mat-drawer-content',
55+
template: '<ng-content></ng-content>',
56+
host: {
57+
'class': 'mat-drawer-content',
58+
},
59+
changeDetection: ChangeDetectionStrategy.OnPush,
60+
encapsulation: ViewEncapsulation.None,
61+
})
62+
export class MdDrawerContent {}
63+
64+
5065
/**
5166
* <md-drawer> component.
5267
*
@@ -57,7 +72,7 @@ export class MdDrawerToggleResult {
5772
@Component({
5873
moduleId: module.id,
5974
selector: 'md-drawer, mat-drawer',
60-
templateUrl: 'drawer.html',
75+
template: '<ng-content></ng-content>',
6176
animations: [
6277
trigger('transform', [
6378
state('open, open-instant', style({
@@ -116,7 +131,13 @@ export class MdDrawer implements AfterContentInit, OnDestroy {
116131
set align(value) { this.position = value; }
117132

118133
/** Mode of the drawer; one of 'over', 'push' or 'side'. */
119-
@Input() mode: 'over' | 'push' | 'side' = 'over';
134+
@Input()
135+
get mode() { return this._mode; }
136+
set mode(value) {
137+
this._mode = value;
138+
this._modeChanged.next();
139+
}
140+
private _mode: 'over' | 'push' | 'side' = 'over';
120141

121142
/** Whether the drawer can be closed with the escape key or not. */
122143
@Input()
@@ -155,6 +176,8 @@ export class MdDrawer implements AfterContentInit, OnDestroy {
155176
/** @deprecated */
156177
@Output('align-changed') onAlignChanged = new EventEmitter<void>();
157178

179+
_modeChanged = new Subject();
180+
158181
get isFocusTrapEnabled() {
159182
// The focus trap is only enabled when the drawer is open in any mode other than side.
160183
return this.opened && this.mode !== 'side';
@@ -293,6 +316,7 @@ export class MdDrawer implements AfterContentInit, OnDestroy {
293316
}
294317
}
295318

319+
296320
/**
297321
* <md-drawer-container> component.
298322
*
@@ -316,6 +340,8 @@ export class MdDrawer implements AfterContentInit, OnDestroy {
316340
export class MdDrawerContainer implements AfterContentInit {
317341
@ContentChildren(MdDrawer) _drawers: QueryList<MdDrawer>;
318342

343+
@ContentChild(MdDrawerContent) _content: MdDrawerContent;
344+
319345
/** The drawer child with the `start` position. */
320346
get start() { return this._start; }
321347

@@ -357,6 +383,7 @@ export class MdDrawerContainer implements AfterContentInit {
357383
this._drawers.forEach((drawer: MdDrawer) => {
358384
this._watchDrawerToggle(drawer);
359385
this._watchDrawerPosition(drawer);
386+
this._watchDrawerMode(drawer);
360387
});
361388
});
362389
}
@@ -405,6 +432,14 @@ export class MdDrawerContainer implements AfterContentInit {
405432
first.call(this._ngZone.onMicrotaskEmpty).subscribe(() => this._validateDrawers()));
406433
}
407434

435+
/** Subscribes to changes in drawer mode so we can run change detection. */
436+
private _watchDrawerMode(drawer: MdDrawer): void {
437+
if (drawer) {
438+
takeUntil.call(drawer._modeChanged, this._drawers.changes).subscribe(
439+
() => this._changeDetectorRef.markForCheck());
440+
}
441+
}
442+
408443
/** Toggles the 'mat-drawer-opened' class on the main 'md-drawer-container' element. */
409444
private _setContainerClass(isAdd: boolean): void {
410445
if (isAdd) {

src/lib/sidenav/index.ts

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,29 @@ import {CommonModule} from '@angular/common';
1111
import {A11yModule} from '@angular/cdk/a11y';
1212
import {OverlayModule} from '@angular/cdk/overlay';
1313
import {MdCommonModule} from '../core';
14-
import {MdDrawer, MdDrawerContainer} from './drawer';
15-
import {MdSidenav, MdSidenavContainer} from './sidenav';
14+
import {MdDrawer, MdDrawerContainer, MdDrawerContent} from './drawer';
15+
import {MdSidenav, MdSidenavContainer, MdSidenavContent} from './sidenav';
1616

1717

1818
@NgModule({
1919
imports: [CommonModule, MdCommonModule, A11yModule, OverlayModule],
20-
exports: [MdDrawerContainer, MdDrawer, MdSidenavContainer, MdSidenav, MdCommonModule],
21-
declarations: [MdDrawerContainer, MdDrawer, MdSidenavContainer, MdSidenav],
20+
exports: [
21+
MdCommonModule,
22+
MdDrawer,
23+
MdDrawerContainer,
24+
MdDrawerContent,
25+
MdSidenav,
26+
MdSidenavContainer,
27+
MdSidenavContent,
28+
],
29+
declarations: [
30+
MdDrawer,
31+
MdDrawerContainer,
32+
MdDrawerContent,
33+
MdSidenav,
34+
MdSidenavContainer,
35+
MdSidenavContent,
36+
],
2237
})
2338
export class MdSidenavModule {}
2439

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<div class="mat-drawer-backdrop" (click)="_onBackdropClicked()"
2+
[class.mat-drawer-shown]="_isShowingBackdrop()"></div>
3+
4+
<ng-content select="md-sidenav, mat-sidenav"></ng-content>
5+
6+
<ng-content select="md-sidenav-content, mat-sidenav-content">
7+
</ng-content>
8+
<md-sidenav-content *ngIf="!_content">
9+
<ng-content></ng-content>
10+
</md-sidenav-content>

src/lib/sidenav/sidenav.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,31 @@
88

99
import {
1010
ChangeDetectionStrategy,
11-
Component,
11+
Component, ContentChild,
1212
ContentChildren,
1313
ViewEncapsulation
1414
} from '@angular/core';
1515
import {MdDrawer, MdDrawerContainer} from './drawer';
1616
import {animate, state, style, transition, trigger} from '@angular/animations';
1717

1818

19+
@Component({
20+
moduleId: module.id,
21+
selector: 'md-sidenav-content, mat-sidenav-content',
22+
template: '<ng-content></ng-content>',
23+
host: {
24+
'class': 'mat-drawer-content mat-sidenav-content',
25+
},
26+
changeDetection: ChangeDetectionStrategy.OnPush,
27+
encapsulation: ViewEncapsulation.None,
28+
})
29+
export class MdSidenavContent {}
30+
31+
1932
@Component({
2033
moduleId: module.id,
2134
selector: 'md-sidenav, mat-sidenav',
22-
templateUrl: 'drawer.html',
35+
template: '<ng-content></ng-content>',
2336
animations: [
2437
trigger('transform', [
2538
state('open, open-instant', style({
@@ -57,7 +70,7 @@ export class MdSidenav extends MdDrawer {}
5770
@Component({
5871
moduleId: module.id,
5972
selector: 'md-sidenav-container, mat-sidenav-container',
60-
templateUrl: 'drawer-container.html',
73+
templateUrl: 'sidenav-container.html',
6174
styleUrls: [
6275
'drawer.css',
6376
'drawer-transitions.css',
@@ -70,4 +83,6 @@ export class MdSidenav extends MdDrawer {}
7083
})
7184
export class MdSidenavContainer extends MdDrawerContainer {
7285
@ContentChildren(MdSidenav) _drawers;
86+
87+
@ContentChild(MdSidenavContent) _content;
7388
}

0 commit comments

Comments
 (0)