147147 */
148148var messages = new function ( )
149149{
150- var __listeners = { } ;
150+ var _listeners = { } ;
151+ var _permanent_listeners = { } ;
151152
152153 /**
153154 * Add a message listener
154155 * @param key {String} The name of the message to listen for
155156 * @param cb {function} The callback to call when message is received
156157 */
157- this . addListener = function ( key , cb )
158+ this . addListener = function ( key , cb , is_permanent_listener )
158159 {
159- if ( __listeners [ key ] )
160+ var lists = [ _listeners ] ;
161+ if ( is_permanent_listener )
162+ lists . push ( _permanent_listeners ) ;
163+
164+ for ( var i = 0 , listeners ; listeners = lists [ i ] ; i ++ )
160165 {
161- if ( __listeners [ key ] . indexOf ( cb ) == - 1 )
166+ if ( listeners [ key ] )
162167 {
163- __listeners [ key ] . push ( cb ) ;
168+ if ( listeners [ key ] . indexOf ( cb ) == - 1 )
169+ listeners [ key ] . push ( cb ) ;
164170 }
165- }
166- else
167- {
168- __listeners [ key ] = [ cb ] ;
171+ else
172+ listeners [ key ] = [ cb ] ;
169173 }
170174 } ;
171175
@@ -178,15 +182,16 @@ var messages = new function()
178182 */
179183 this . removeListener = function ( key , cb )
180184 {
181- var cur = null , listeners = __listeners [ key ] , i = 0 ;
182- if ( listeners )
185+ var lists = [ _listeners , _permanent_listeners ] ;
186+ for ( var i = 0 , listeners ; listeners = lists [ i ] ; i ++ )
183187 {
184- for ( ; cur = listeners [ i ] ; i ++ )
188+ var listeners_type = listeners [ key ] ;
189+ if ( listeners_type )
185190 {
186- if ( cur == cb )
191+ for ( var j = listeners_type . length - 1 , cur ; cur = listeners_type [ j ] ; j -- )
187192 {
188- listeners . splice ( i , 1 ) ;
189- i -- ;
193+ if ( cur == cb )
194+ listeners_type . splice ( j , 1 ) ;
190195 }
191196 }
192197 }
@@ -203,7 +208,7 @@ var messages = new function()
203208 this . post = function ( key , msg )
204209 {
205210 msg || ( msg = { } ) ;
206- var listeners = __listeners [ key ] ;
211+ var listeners = _listeners [ key ] ;
207212 msg . type = key ;
208213 if ( listeners )
209214 {
@@ -213,4 +218,13 @@ var messages = new function()
213218 }
214219 }
215220 }
221+
222+ this . clear_session_listeners = function ( )
223+ {
224+ _listeners = { } ;
225+ for ( var key in _permanent_listeners )
226+ {
227+ _listeners [ key ] = _permanent_listeners [ key ] . slice ( ) ;
228+ }
229+ } ;
216230}
0 commit comments