forked from angular/components
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(md-snack-bar): Create initial MdSnackBar.
- Loading branch information
1 parent
6cade28
commit d3d9f73
Showing
21 changed files
with
405 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
<h1>SnackBar demo</h1> | ||
<div> | ||
<div>Message: <md-input type="text" [(ngModel)]="message"></md-input></div> | ||
<div> | ||
<md-checkbox [(ngModel)]="action">Show button</md-checkbox> | ||
<md-input type="text" class="button-label-input" | ||
placeholder="Snack bar action label" | ||
[disabled]="!action" | ||
[(ngModel)]="actionButtonLabel"></md-input> | ||
</div> | ||
</div> | ||
|
||
<button md-raised-button (click)="open()">OPEN</button> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
.button-label-input { | ||
display: inline-block; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import {Component, ViewContainerRef} from '@angular/core'; | ||
import {MdSnackBar, MdSnackBarConfig} from '@angular2-material/snack-bar'; | ||
|
||
@Component({ | ||
moduleId: module.id, | ||
selector: 'snack-bar-demo', | ||
templateUrl: 'snack-bar-demo.html', | ||
}) | ||
export class SnackBarDemo { | ||
message: string = 'Snack Bar opened.'; | ||
actionButtonLabel: string = 'Retry'; | ||
action: boolean = false; | ||
|
||
constructor( | ||
public snackBar: MdSnackBar, | ||
public viewContainerRef: ViewContainerRef) { } | ||
|
||
open() { | ||
let config = new MdSnackBarConfig(this.viewContainerRef); | ||
this.snackBar.open(this.message, this.action && this.actionButtonLabel, config); | ||
} | ||
} | ||
|
||
|
||
@Component({ | ||
moduleId: module.id, | ||
selector: 'demo-snack', | ||
templateUrl: 'snack-bar-demo.html', | ||
styleUrls: ['./snack-bar-demo.css'], | ||
}) | ||
export class DemoSnack {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import {MdSnackBarRef} from './snack-bar-ref'; | ||
|
||
|
||
export class BaseSnackBarContent<T> { | ||
/** The instance of the component making up the content of the snack bar. */ | ||
snackBarRef: MdSnackBarRef<T>; | ||
|
||
/** Dismisses the snack bar. */ | ||
dismiss(): void { | ||
this.snackBarRef.dismiss(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
export * from './snack-bar'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
{ | ||
"name": "@angular2-material/snack-bar", | ||
"version": "2.0.0-alpha.8-2", | ||
"description": "Angular 2 Material snack bar", | ||
"main": "./snack-bar.umd.js", | ||
"module": "./index.js", | ||
"typings": "./index.d.ts", | ||
"repository": { | ||
"type": "git", | ||
"url": "https://github.com/angular/material2.git" | ||
}, | ||
"keywords": [ | ||
"angular", | ||
"material", | ||
"material design", | ||
"components", | ||
"snackbar", | ||
"toast", | ||
"notification" | ||
], | ||
"license": "MIT", | ||
"bugs": { | ||
"url": "https://github.com/angular/material2/issues" | ||
}, | ||
"homepage": "https://github.com/angular/material2#readme", | ||
"peerDependencies": { | ||
"@angular2-material/core": "2.0.0-alpha.8-2" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<span class="md-simple-snackbar-message">{{message}}</span> | ||
<button md-button class="md-simple-snackbar-action" | ||
*ngIf="hasAction" (click)="dismiss()">{{action}}</button> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
md-simple-snackbar { | ||
display: flex; | ||
justify-content: space-between; | ||
} | ||
|
||
.md-simple-snackbar-message { | ||
box-sizing: border-box; | ||
border: none; | ||
color: white; | ||
font-family: Roboto, 'Helvetica Neue', sans-serif; | ||
font-size: 14px; | ||
line-height: 20px; | ||
outline: none; | ||
text-decoration: none; | ||
word-break: break-all; | ||
} | ||
|
||
.md-simple-snackbar-action { | ||
box-sizing: border-box; | ||
color: white; | ||
float: right; | ||
font-weight: 600; | ||
line-height: 20px; | ||
margin: -5px 0 0 48px; | ||
min-width: initial; | ||
padding: 5px; | ||
text-transform: uppercase; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import {Component} from '@angular/core'; | ||
import {BaseSnackBarContent} from './base-snack-bar'; | ||
|
||
|
||
@Component({ | ||
moduleId: module.id, | ||
selector: 'simple-snack-bar', | ||
templateUrl: 'simple-snack-bar.html', | ||
styleUrls: ['simple-snack-bar.css'], | ||
}) | ||
export class SimpleSnackBar extends BaseSnackBarContent<SimpleSnackBar> { | ||
/** The message to be shown in the snack bar. */ | ||
message: string; | ||
|
||
/** The label for the button in the snack bar. */ | ||
action: string; | ||
|
||
/** If the action button should be shown. */ | ||
get hasAction(): boolean { return !!this.action; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import {ViewContainerRef} from '@angular/core'; | ||
|
||
|
||
export type SnackBarRole = 'alert' | 'polite'; | ||
|
||
export class MdSnackBarConfig { | ||
/** The aria-role of the snack bar. */ | ||
role: SnackBarRole = 'alert'; | ||
|
||
/** The view container to place the overlay for the snack bar into. */ | ||
viewContainerRef: ViewContainerRef; | ||
|
||
constructor(viewContainerRef: ViewContainerRef) { | ||
this.viewContainerRef = viewContainerRef; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<template portalHost></template> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
@import '../core/style/elevation'; | ||
|
||
$md-snack-bar-padding: 14px 24px !default; | ||
$md-snack-bar-height: 20px !default; | ||
$md-snack-bar-min-width: 288px !default; | ||
$md-snack-bar-max-width: 568px !default; | ||
|
||
|
||
:host { | ||
@include md-elevation(24); | ||
background: #323232; | ||
border-radius: 2px; | ||
display: block; | ||
height: $md-snack-bar-height; | ||
max-width: $md-snack-bar-max-width; | ||
min-width: $md-snack-bar-min-width; | ||
overflow: hidden; | ||
padding: $md-snack-bar-padding; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import { | ||
Component, | ||
ComponentRef, | ||
ViewChild | ||
} from '@angular/core'; | ||
import { | ||
BasePortalHost, | ||
ComponentPortal, | ||
TemplatePortal, | ||
PortalHostDirective | ||
} from '@angular2-material/core'; | ||
import {MdSnackBarConfig} from './snack-bar-config'; | ||
import {MdSnackBarContentAlreadyAttached} from './snack-bar-errors'; | ||
|
||
|
||
/** | ||
* Internal component that wraps user-provided snack bar content. | ||
*/ | ||
@Component({ | ||
moduleId: module.id, | ||
selector: 'snack-bar-content', | ||
templateUrl: 'snack-bar-container.html', | ||
styleUrls: ['snack-bar-container.css'], | ||
host: { | ||
'[attr.role]': 'snackBarConfig?.role' | ||
} | ||
}) | ||
export class MdSnackBarContainer extends BasePortalHost { | ||
/** The portal host inside of this container into which the snack bar content will be loaded. */ | ||
@ViewChild(PortalHostDirective) _portalHost: PortalHostDirective; | ||
|
||
/** The snack bar configuration. */ | ||
snackBarConfig: MdSnackBarConfig; | ||
|
||
/** Attach a portal as content to this snack bar container. */ | ||
attachComponentPortal<T>(portal: ComponentPortal<T>): ComponentRef<T> { | ||
if (this._portalHost.hasAttached()) { | ||
throw new MdSnackBarContentAlreadyAttached(); | ||
} | ||
|
||
return this._portalHost.attachComponentPortal(portal); | ||
} | ||
|
||
attachTemplatePortal(portal: TemplatePortal): Map<string, any> { | ||
throw Error('Not yet implemented'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import {MdError} from '@angular2-material/core'; | ||
|
||
|
||
export class MdSnackBarContentAlreadyAttached extends MdError { | ||
constructor() { | ||
super('Attempting to attach snack bar content after content is already attached'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
import {OverlayRef} from '@angular2-material/core'; | ||
import {Observable} from 'rxjs/Observable'; | ||
import {Subject} from 'rxjs/Subject'; | ||
|
||
// TODO(josephperrott): Implement onAction observable. | ||
|
||
|
||
/** | ||
* Reference to a snack bar dispatched from the snack bar service. | ||
*/ | ||
export class MdSnackBarRef<T> { | ||
/** The instance of the component making up the content of the snack bar. */ | ||
readonly instance: T|any; | ||
|
||
/** Subject for notifying the user that the snack bar has closed. */ | ||
private _afterClosed: Subject<any> = new Subject(); | ||
|
||
/** If the snack bar is active. */ | ||
private _isActive: boolean = true; | ||
|
||
constructor(instance: T|any, private _overlayRef: OverlayRef) { | ||
// Sets the readonly instance of the snack bar content component. | ||
this.instance = instance; | ||
this.afterDismissed().subscribe(null, null, () => { this._isActive = false; }); | ||
} | ||
|
||
|
||
/** Dismisses the snack bar. */ | ||
dismiss(): void { | ||
if (this._isActive) { | ||
this._overlayRef.dispose(); | ||
this._afterClosed.complete(); | ||
} | ||
} | ||
|
||
|
||
/** Gets an observable that is notified when the snack bar is finished closing. */ | ||
afterDismissed(): Observable<void> { | ||
return this._afterClosed.asObservable(); | ||
} | ||
} |
Oops, something went wrong.