Skip to content
This repository was archived by the owner on Apr 25, 2023. It is now read-only.

Commit 5edef84

Browse files
committed
Merge pull request #18 from tdjones/master
Fixed 'next' status from never being removed after multiple transitions.
2 parents ab0a94e + 1c47217 commit 5edef84

File tree

4 files changed

+218
-6
lines changed

4 files changed

+218
-6
lines changed

message-center.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ MessageCenterModule.
1010
function ($rootScope, $sce, $timeout) {
1111
return {
1212
mcMessages: this.mcMessages || [],
13+
offlistener: this.offlistener || undefined,
1314
status: {
1415
unseen: 'unseen',
1516
shown: 'shown',
@@ -65,11 +66,11 @@ MessageCenterModule.
6566
if (!this.mcMessages[index].processed) {
6667
if (this.mcMessages[index].status == this.status.unseen) {
6768
this.mcMessages[index].status = this.status.shown;
69+
this.mcMessages[index].processed = true;
6870
}
6971
else if (this.mcMessages[index].status == this.status.next) {
7072
this.mcMessages[index].status = this.status.unseen;
7173
}
72-
this.mcMessages[index].processed = true;
7374
}
7475
}
7576
},
@@ -110,8 +111,9 @@ MessageCenterModule.
110111
$rootScope.mcMessages = messageCenterService.mcMessages;
111112
messageCenterService.flush();
112113
};
113-
$rootScope.$on('$locationChangeStart', changeReaction);
114-
114+
if (messageCenterService.offlistener === undefined) {
115+
messageCenterService.offlistener = $rootScope.$on('$locationChangeSuccess', changeReaction);
116+
}
115117
scope.animation = attrs.animation || 'fade in';
116118
}
117119
};

test/app/index.html

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@
6363
$scope.saveFailure = function() {
6464
messageCenterService.add('danger', 'Something went wrong!');
6565
};
66+
$scope.saveSuccessGoHome = function() {
67+
messageCenterService.add('success', 'Saved successfully and went home!', {status: messageCenterService.status.next});
68+
$scope.goIndex();
69+
};
70+
$scope.goIndex = function() {
71+
$location.path('/');
72+
};
6673
})
6774

6875
.controller('AllowHTMLController', function($scope, $location, messageCenterService) {
@@ -72,7 +79,14 @@
7279
$scope.plainText = function() {
7380
messageCenterService.add('warning', '<strong>HTML</strong> <em>is</em> NOT <span>allowed</span>.');
7481
};
75-
});
82+
})
83+
84+
.controller('PermanentController', function($scope, $location, messageCenterService) {
85+
$scope.goIndex = function() {
86+
$location.path('/');
87+
};
88+
})
89+
;
7690
</script>
7791
</head>
7892

@@ -100,6 +114,8 @@ <h1>Edit</h1>
100114
<button id="saveMultipleSuccess" data-ng-click="saveMultipleSuccess()">Save (multiple success)</button>
101115
<button id="saveMultipleTypes" data-ng-click="saveMultipleTypes()">Save (multiple types)</button>
102116
<button id="saveFailure" data-ng-click="saveFailure()">Save (failure)</button>
117+
<button id="saveSuccessGoHome" data-ng-click="saveSuccessGoHome()">Save and Go Home</button>
118+
103119
</article>
104120
</script>
105121

@@ -111,6 +127,13 @@ <h1>HTML</h1>
111127
</article>
112128
</script>
113129

130+
<script type="text/ng-template" id="permanent">
131+
<article data-ng-controller="PermanentController">
132+
<h1>Permanent</h1>
133+
<button id="goIndex" data-ng-click="goIndex()">Index page</button>
134+
</article>
135+
</script>
136+
114137
<div mc-messages></div>
115138
<article data-ng-view />
116139
</body>

test/app/index3.html

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<script src="components/angular/angular.js"></script>
5+
<script src="components/angular-route/angular-route.js"></script>
6+
<script src="message-center.js"></script>
7+
<script>
8+
angular.module('messageCenter.e2e', ['MessageCenterModule', 'ngRoute'])
9+
.config(function($routeProvider) {
10+
$routeProvider
11+
.when('/', { templateUrl: 'home' })
12+
.when('/edit', { templateUrl: 'edit' })
13+
.when('/html', { templateUrl: 'html' })
14+
.when('/permanent', { templateUrl: 'permanent' });
15+
})
16+
17+
.controller('HomeController', function($scope, $location, messageCenterService) {
18+
$scope.goIndex = function() {
19+
$location.path('/');
20+
};
21+
$scope.goEdit = function() {
22+
$location.path('/edit');
23+
};
24+
$scope.goHTML = function() {
25+
$location.path('/html');
26+
};
27+
$scope.goPermanent = function() {
28+
messageCenterService.add('success', 'Showing permanent message!', {status: messageCenterService.status.permanent});
29+
$location.path('/permanent');
30+
};
31+
$scope.goEditSuccess = function() {
32+
messageCenterService.add('success', 'You have reached the edit page!', {status: messageCenterService.status.next});
33+
$scope.goEdit();
34+
};
35+
$scope.goEditMultipleSuccess = function() {
36+
messageCenterService.add('success', 'Yay!', {status: messageCenterService.status.next});
37+
messageCenterService.add('success', 'You have reached the edit page!', {status: messageCenterService.status.next});
38+
$scope.goEdit();
39+
};
40+
$scope.goEditMultipleTypes = function() {
41+
messageCenterService.add('success', 'Yay!', {status: messageCenterService.status.next});
42+
messageCenterService.add('danger', 'Something went wrong!', {status: messageCenterService.status.next});
43+
$scope.goEdit();
44+
};
45+
$scope.goEditFailure = function() {
46+
messageCenterService.add('danger', 'Something went wrong!', {status: messageCenterService.status.next});
47+
$scope.goEdit();
48+
};
49+
})
50+
51+
.controller('EditController', function($scope, $location, messageCenterService) {
52+
$scope.saveSuccess = function() {
53+
messageCenterService.add('success', 'Saved successfully!');
54+
};
55+
$scope.saveMultipleSuccess = function() {
56+
messageCenterService.add('success', 'Yay!');
57+
messageCenterService.add('success', 'Saved successfully!');
58+
};
59+
$scope.saveMultipleTypes = function() {
60+
messageCenterService.add('success', 'Yay!');
61+
messageCenterService.add('danger', 'Something went wrong!');
62+
};
63+
$scope.saveFailure = function() {
64+
messageCenterService.add('danger', 'Something went wrong!');
65+
};
66+
$scope.saveSuccessGoHome = function() {
67+
messageCenterService.add('success', 'Saved successfully and went home!', {status: messageCenterService.status.next});
68+
$scope.goIndex();
69+
};
70+
$scope.goIndex = function() {
71+
$location.path('/');
72+
};
73+
})
74+
75+
.controller('AllowHTMLController', function($scope, $location, messageCenterService) {
76+
$scope.allowedHTML = function() {
77+
messageCenterService.add('success', '<strong>HTML</strong> <em>is</em> <span>allowed</span>.', {html: true});
78+
};
79+
$scope.plainText = function() {
80+
messageCenterService.add('warning', '<strong>HTML</strong> <em>is</em> NOT <span>allowed</span>.');
81+
};
82+
})
83+
84+
.controller('PermanentController', function($scope, $location, messageCenterService) {
85+
$scope.goIndex = function() {
86+
$location.path('/');
87+
};
88+
})
89+
;
90+
</script>
91+
</head>
92+
93+
<body data-ng-app="messageCenter.e2e">
94+
<script type="text/ng-template" id="home">
95+
<article data-ng-controller="HomeController" >
96+
<div mc-messages></div>
97+
<h1>Home</h1>
98+
<button id="goIndex" data-ng-click="goIndex()">Index page</button>
99+
<button id="goEdit" data-ng-click="goEdit()">Edit page</button>
100+
<button id="goHTML" data-ng-click="goHTML()">HTML page</button>
101+
<button id="goPermanent" data-ng-click="goPermanent()">Permanent page</button>
102+
<button id="goEditSuccess" data-ng-click="goEditSuccess()">Edit (success)</button>
103+
<button id="goEditMultipleSuccess" data-ng-click="goEditMultipleSuccess()">Edit (multiple success)</button>
104+
<button id="goEditMultipleTypes" data-ng-click="goEditMultipleTypes()">Edit (multiple types)</button>
105+
<button id="goEditFailure" data-ng-click="goEditFailure()">Edit (failure)</button>
106+
<button id="testPermanent" data-ng-click="testPermanent()">Test permanent</button>
107+
<button id="testPermanentClose" data-ng-click="testPermanent()">Test permanent (close)</button>
108+
</article>
109+
</script>
110+
111+
<script type="text/ng-template" id="edit">
112+
<article data-ng-controller="EditController">
113+
<div mc-messages></div>
114+
<h1>Edit</h1>
115+
<button id="saveSuccess" data-ng-click="saveSuccess()">Save</button>
116+
<button id="saveMultipleSuccess" data-ng-click="saveMultipleSuccess()">Save (multiple success)</button>
117+
<button id="saveMultipleTypes" data-ng-click="saveMultipleTypes()">Save (multiple types)</button>
118+
<button id="saveFailure" data-ng-click="saveFailure()">Save (failure)</button>
119+
<button id="saveSuccessGoHome" data-ng-click="saveSuccessGoHome()">Save and Go Home</button>
120+
121+
</article>
122+
</script>
123+
124+
<script type="text/ng-template" id="html">
125+
<article data-ng-controller="AllowHTMLController">
126+
<div mc-messages></div>
127+
<h1>HTML</h1>
128+
<button id="allowedHTML" data-ng-click="allowedHTML()">Allowed HTML</button>
129+
<button id="plainText" data-ng-click="plainText()">Plain Text</button>
130+
</article>
131+
</script>
132+
133+
<script type="text/ng-template" id="permanent">
134+
<article data-ng-controller="PermanentController">
135+
<div mc-messages></div>
136+
<h1>Permanent</h1>
137+
<button id="goIndex" data-ng-click="goIndex()">Index page</button>
138+
</article>
139+
</script>
140+
141+
142+
<article data-ng-view />
143+
</body>
144+
</html>

test/scenarios.js

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
describe('Message Center', function() {
1+
describe('Message Center with single directive', function() {
22

33
beforeEach(module('MessageCenterModule'));
44

@@ -88,7 +88,7 @@ describe('Message Center', function() {
8888
});
8989
});
9090

91-
describe('after navigating to multiple different views', function () {
91+
describe('after navigating to multiple different views with permanent message', function () {
9292
beforeEach(function () {
9393
element('#goPermanent').click();
9494
});
@@ -130,6 +130,21 @@ describe('Message Center', function() {
130130
});
131131
});
132132

133+
describe('after navigating to multiple different views with next message', function () {
134+
it('clears the next message', function () {
135+
element('#goEditSuccess').click();
136+
var messages = element('div#mc-messages-wrapper .alert');
137+
expect(messages.count()).toBe(1);
138+
expect(messages.prop('className')).toEqual('alert alert-success fade in');
139+
expect(messages.text()).toMatch('You have reached the edit page!');
140+
element('#saveSuccessGoHome').click();
141+
var messages = element('div#mc-messages-wrapper .alert');
142+
expect(messages.count()).toBe(1);
143+
expect(messages.prop('className')).toEqual('alert alert-success fade in');
144+
expect(messages.text()).toMatch('Saved successfully and went home!');
145+
});
146+
});
147+
133148
describe('when going to the allowed HTML page', function(){
134149
beforeEach(function() { element('#goHTML').click(); });
135150

@@ -203,3 +218,31 @@ describe('Message Center', function() {
203218
});
204219
});
205220
});
221+
222+
describe('Message Center with multiple directives', function() {
223+
224+
beforeEach(module('MessageCenterModule'));
225+
226+
beforeEach(function() { browser().navigateTo('/index3.html'); });
227+
228+
it('renders an empty ordered list on its initial state', function() {
229+
expect(element('div#mc-messages-wrapper').count()).toBe(1);
230+
expect(element('div#mc-messages-wrapper .alert').count()).toBe(0);
231+
});
232+
233+
describe('when navigating through two views', function() {
234+
235+
it('renders a message with the default "success" level', function() {
236+
element('#goEditSuccess').click();
237+
var messages = element('div#mc-messages-wrapper .alert');
238+
expect(messages.count()).toBe(1);
239+
expect(messages.prop('className')).toEqual('alert alert-success fade in');
240+
expect(messages.text()).toMatch('You have reached the edit page!');
241+
element('#saveSuccessGoHome').click();
242+
messages = element('div#mc-messages-wrapper .alert');
243+
expect(messages.count()).toBe(1);
244+
expect(messages.prop('className')).toEqual('alert alert-success fade in');
245+
expect(messages.text()).toMatch('Saved successfully and went home!');
246+
});
247+
});
248+
});

0 commit comments

Comments
 (0)