Skip to content

Commit 477920e

Browse files
javoireRoopeHakulinen
authored andcommitted
optionally send flashes to different containers (#39)
1 parent 3022e1d commit 477920e

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,17 @@ Example:
146146
}
147147
```
148148

149+
#### Multiple flash containers
150+
151+
You can send flashes to different containers by naming them and specifying their name in the config you pass to the `Flash.create` function.
152+
153+
```html
154+
<flash-message name="flash-fixed"></flash-message>
155+
```
156+
```js
157+
Flash.create('success', 'Hooray!', 0, {container: 'flash-fixed'});
158+
```
159+
149160
#### [Guidelines for contributors](https://github.com/sachinchoolur/angular-flash/blob/master/contributing.md)
150161

151162
#### Running tests

src/angular-flash.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ app.directive('flashMessage', [
5555
scope: {
5656
duration: '=',
5757
showClose: '=',
58-
onDismiss: '&'
58+
onDismiss: '&',
59+
name: '@'
5960
},
6061
link: function(scope, ele, attrs, ctrl, transclude) {
6162
Flash.setTimeout(scope.duration);
@@ -73,7 +74,7 @@ app.directive('flashMessage', [
7374
},
7475
transclude: Flash.config.templateTransclude,
7576
template: `
76-
<div ng-repeat="flash in $root.flashes track by $index">
77+
<div ng-repeat="flash in $root.flashes track by $index" ng-if="flash.config.container === name">
7778
` + Flash.config.template + `
7879
</div>
7980
`

test/angular-flash_test.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,42 @@ describe('Unit testing Angular Flash', function() {
7676
expect(contents.querySelectorAll('.alert').length).toEqual(0);
7777
});
7878

79+
describe('show flashes in designated containers', function() {
80+
var containers;
81+
82+
beforeEach(function() {
83+
containers = $compile(
84+
'<flash-message duration=1000></flash-message>' +
85+
'<flash-message duration=1000 name="flash-container-a"></flash-message>' +
86+
'<flash-message duration=1000 name="flash-container-b"></flash-message>')($rootScope);
87+
88+
Flash.create('success', 'All good');
89+
Flash.create('success', 'All good - A', 0, { container: 'flash-container-a'});
90+
Flash.create('success', 'All good - B', 0, { container: 'flash-container-b'});
91+
92+
$rootScope.$digest();
93+
});
94+
95+
it('only shows default alert in default container', function() {
96+
expect(containers[0].querySelectorAll('.alert').length).toEqual(1);
97+
expect(containers[0].outerHTML).toContain('All good');
98+
expect(containers[0].outerHTML).not.toContain('All good - A');
99+
expect(containers[0].outerHTML).not.toContain('All good - B');
100+
});
101+
102+
it('only shows alert A in container A', function() {
103+
expect(containers[1].querySelectorAll('.alert').length).toEqual(1);
104+
expect(containers[1].outerHTML).toContain('All good - A');
105+
expect(containers[1].outerHTML).not.toContain('All good - B');
106+
});
107+
108+
it('only shows alert B in container B', function() {
109+
expect(containers[2].querySelectorAll('.alert').length).toEqual(1);
110+
expect(containers[2].outerHTML).toContain('All good - B');
111+
expect(containers[2].outerHTML).not.toContain('All good - A');
112+
});
113+
});
114+
79115
describe('close button', function () {
80116
it('is shown by default', function() {
81117
Flash.create('success', 'All good');

0 commit comments

Comments
 (0)