@@ -17,6 +17,12 @@ cls.EventName = function(name)
1717
1818cls . EvenetListeners = function ( view )
1919{
20+ this . _init ( view ) ;
21+ } ;
22+
23+ cls . EvenetListeners . prototype = new function ( )
24+ {
25+
2026 /* interface */
2127
2228 this . update = function ( ) { } ;
@@ -50,6 +56,33 @@ cls.EvenetListeners = function(view)
5056
5157 */
5258
59+ var DELAY = 150 ;
60+
61+ this . _on_new_rts = function ( )
62+ {
63+ if ( ! this . _on_new_rts_timeout )
64+ this . _on_new_rts_timeout = setTimeout ( this . _handle_new_rts_bound , DELAY ) ;
65+ } ;
66+
67+ this . _handle_new_rts = function ( )
68+ {
69+ var rt_ids = window . runtimes . get_dom_runtime_ids ( ) ;
70+ var cur_rt_ids = this . _rts . map ( this . _get_rt_id ) ;
71+ var new_rt_ids = rt_ids . filter ( function ( id ) { return ! cur_rt_ids . contains ( id ) ; } ) ;
72+ var live_rts = this . _rts . filter ( function ( rt ) { return rt_ids . contains ( rt . rt_id ) ; } ) ;
73+ if ( live_rts . length != this . _rts . length )
74+ {
75+ this . _rts = live_rts ;
76+ this . _view . update ( ) ;
77+ }
78+ if ( new_rt_ids )
79+ this . _update_rt_list ( new_rt_ids ) ;
80+
81+ this . _on_new_rts_timeout = 0 ;
82+ } ;
83+
84+ this . _get_rt_id = function ( rt ) { return rt . rt_id } ;
85+
5386 this . _update_rt_list = function ( rt_id_list )
5487 {
5588 var ctx = { rt_id_list : rt_id_list , rt_map : { } , win_id_map : { } , expanded_map : { } } ;
@@ -104,33 +137,34 @@ cls.EvenetListeners = function(view)
104137 var EVENT_NAMES = 2 ;
105138 var rt_id = message [ RUNTIME_ID ] ;
106139 var obj_id = message [ OBJECT_ID ] ;
107- ctx . rt_map [ rt_id ] = null ;
108- if ( message [ EVENT_NAMES ] && message [ EVENT_NAMES ] . length )
140+ var ev_list = message [ EVENT_NAMES ] ;
141+ var rt_listeners = { rt_id : rt_id ,
142+ obj_id : obj_id ,
143+ window_id : ctx . win_id_map [ rt_id ] } ;
144+ ctx . expanded_map [ rt_id ] = [ ] ;
145+ if ( ev_list && ev_list . length )
109146 {
110- ctx . expanded_map [ rt_id ] = [ ] ;
111- ctx . rt_map [ message [ RUNTIME_ID ] ] =
147+ rt_listeners . event_names = ev_list . map ( function ( name )
112148 {
113- rt_id : rt_id ,
114- obj_id : obj_id ,
115- window_id : ctx . win_id_map [ rt_id ] ,
116- event_names : message [ EVENT_NAMES ] . map ( function ( name )
149+ var ev_n_obj = new cls . EventName ( name ) ;
150+ if ( this . is_expanded ( rt_id , name ) )
117151 {
118- var ev_n_obj = new cls . EventName ( name ) ;
119- if ( this . is_expanded ( rt_id , name ) )
120- {
121- ctx . expanded_map [ rt_id ] . push ( name ) ;
122- ev_n_obj . rt_id = rt_id ;
123- ev_n_obj . obj_id = obj_id ;
124- ev_n_obj . model = new cls . InspectableDOMNode ( rt_id , obj_id ) ;
125- var search_cb = this . _handle_dom_search . bind ( this ,
126- ev_n_obj ,
127- ctx . handle_expand_listener ) ;
128- ev_n_obj . model . search ( name , SEARCH_TYPE_EVENT , 0 , 0 , search_cb ) ;
129- }
130- return ev_n_obj ;
131- } , this ) ,
132- } ;
152+ ctx . expanded_map [ rt_id ] . push ( name ) ;
153+ ev_n_obj . rt_id = rt_id ;
154+ ev_n_obj . obj_id = obj_id ;
155+ ev_n_obj . model = new cls . InspectableDOMNode ( rt_id , obj_id ) ;
156+ var search_cb = this . _handle_dom_search . bind ( this ,
157+ ev_n_obj ,
158+ ctx . handle_expand_listener ) ;
159+ ev_n_obj . model . search ( name , SEARCH_TYPE_EVENT , 0 , 0 , search_cb ) ;
160+ }
161+ return ev_n_obj ;
162+ } , this ) ;
133163 }
164+ else
165+ rt_listeners . event_names = [ ] ;
166+
167+ ctx . rt_map [ rt_id ] = rt_listeners ;
134168 this . _check_update_ctx ( ctx ) ;
135169 }
136170 else
@@ -245,14 +279,9 @@ cls.EvenetListeners = function(view)
245279 {
246280 this . _rts = [ ] ;
247281 this . _win_id_map = { } ;
248- var rt_id_list = window . runtimes . get_runtime_ids ( ) ;
282+ var rt_id_list = window . runtimes . get_dom_runtime_ids ( ) ;
249283 if ( rt_id_list . length )
250- {
251- window . messages . remove_listener ( 'new-top-runtime' , this . _update_bound ) ;
252284 this . _update_rt_list ( rt_id_list ) ;
253- }
254- else
255- window . messages . add_listener ( 'new-top-runtime' , this . _update_bound ) ;
256285 } ;
257286
258287 this . get_data = function ( )
@@ -304,14 +333,16 @@ cls.EvenetListeners = function(view)
304333
305334 this . _init = function ( view )
306335 {
336+ this . _on_new_rts_timeout = 0 ;
337+ this . _handle_new_rts_bound = this . _handle_new_rts . bind ( this ) ;
307338 this . _rts = [ ] ;
308339 this . _win_id_map = { } ;
309340 this . _expand_tree = { } ;
310341 this . _view = view ;
311342 this . _tagman = window . tag_manager ;
312343 this . _esdb = window . services [ "ecmascript-debugger" ] ;
313- this . _update_bound = this . update . bind ( this ) ;
314- }
344+ window . messages . add_listener ( "active-tab" , this . _on_new_rts . bind ( this ) ) ;
345+ } ;
315346
316- this . _init ( view ) ;
347+
317348} ;
0 commit comments