lp1086458 staff client memory leaks collab/phasefx/lp1086458_shotgun
authorJason Etheridge <jason@esilibrary.com>
Mon, 21 Jan 2013 01:27:36 +0000 (20:27 -0500)
committerJason Etheridge <jason@esilibrary.com>
Mon, 21 Jan 2013 05:24:21 +0000 (00:24 -0500)
This was a shotgun attempt using the removeEventListener idea from Galen's
collab/gmcharlt/lp1086458_clean_up_after_some_event_listeners, except, it
doesn't work.  Just sharing it for reference.  The cycle collector log
described in the ticket still shows the leaked elements and event listeners
after the test scenario, and after many interations, the leak rate is
higher than Galen's patch, and I really don't see any change compared to
stock Evergreen either.

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
22 files changed:
Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js
Open-ILS/xul/staff_client/server/circ/alternate_copy_summary.js
Open-ILS/xul/staff_client/server/circ/backdate_post_checkin.js
Open-ILS/xul/staff_client/server/circ/checkout.js
Open-ILS/xul/staff_client/server/circ/in_house_use.js
Open-ILS/xul/staff_client/server/circ/print_list_template_editor.js
Open-ILS/xul/staff_client/server/patron/barcode_entry.xul
Open-ILS/xul/staff_client/server/patron/bill2.js
Open-ILS/xul/staff_client/server/patron/bill_details.js
Open-ILS/xul/staff_client/server/patron/bill_history.js
Open-ILS/xul/staff_client/server/patron/bill_wizard.js
Open-ILS/xul/staff_client/server/patron/display.js
Open-ILS/xul/staff_client/server/patron/edit_standing_penalty.js
Open-ILS/xul/staff_client/server/patron/hold_cancel.js
Open-ILS/xul/staff_client/server/patron/holds.js
Open-ILS/xul/staff_client/server/patron/info_notes.xul
Open-ILS/xul/staff_client/server/patron/new_standing_penalty.js
Open-ILS/xul/staff_client/server/patron/place_hold.js
Open-ILS/xul/staff_client/server/patron/search_form.js
Open-ILS/xul/staff_client/server/patron/staged.js
Open-ILS/xul/staff_client/server/patron/standing_penalties.js
Open-ILS/xul/staff_client/server/patron/summary.js

index 09c8671..2867029 100644 (file)
             alert('Error in global_utils.js, widget_prompt(): ' + E);
         }
     }
+
+function registerEventListener(node,type,listener,useCapture) {
+    try {
+        if (typeof window.oils_listeners == 'undefined') { window.oils_listeners = []; }
+        node.addEventListener(type,listener,useCapture);
+        window.oils_listeners.push({
+            'node' : node,
+            'type' : type,
+            'listener' : listener,
+            'useCapture' : useCapture
+        });
+    } catch(E) {
+        alert(location.href + ' Error in registerEventListener(' + node + ',' + listener + ',' + useCapture + '): ' + E);
+    }
+}
+
+function unloadEventListeners(ev) {
+    try {
+        if (typeof window.oils_listeners != 'undefined') {
+            for (var i = 0; i < window.oils_listeners.length; i++) {
+                window.oils_listeners[i].node.removeEventListener(
+                    window.oils_listeners[i].type,
+                    window.oils_listeners[i].listener,
+                    window.oils_listeners[i].useCapture
+                );
+            }
+            delete window.oils_listeners;
+        }
+    } catch(E) {
+        alert(location.href + ' Error in unloadEventListeners(): ' + E);
+    }
+}
+
+window.addEventListener('unload',unloadEventListeners,false);
index 29a7dd8..5b9801d 100644 (file)
@@ -19,7 +19,8 @@ function my_init() {
 
         var x = document.getElementById('patron_name');
         if (x) {
-            x.addEventListener(
+            registerEventListener(
+                x,
                 'command',
                 function(ev) {
                     var usr = ev.target.getAttribute('data');
@@ -30,7 +31,8 @@ function my_init() {
         }
         var y = document.getElementById('prev_patron_name');
         if (y) {
-            y.addEventListener(
+            registerEventListener(
+                y,
                 'command',
                 function(ev) {
                     var usr = ev.target.getAttribute('data');
index a139a99..4c78237 100644 (file)
@@ -43,16 +43,19 @@ function backdate_post_checkin_init() {
         }
 
         /* set widget behavior */
-        $('cancel_btn').addEventListener(
+        registerEventListener(
+            $('cancel_btn'),
             'command', function() { window.close(); }, false
         );
-        $('apply_btn').addEventListener(
+        registerEventListener(
+            $('apply_btn'),
             'command', 
             gen_handle_apply(circ_ids),
             false
         );
 
-        $('checkin_effective_datepicker').addEventListener(
+        registerEventListener(
+            $('checkin_effective_datepicker'),
             'change',
             function(ev) {
                 try {
index 30dcec2..68b451d 100644 (file)
@@ -87,7 +87,8 @@ circ.checkout.prototype = {
                                 e.appendChild( ml );
                                 ml.setAttribute('id','checkout_menulist');
                                 ml.setAttribute('accesskey','');
-                                ml.addEventListener(
+                                registerEventListener(
+                                    ml,
                                     'command',
                                     function(ev) {
                                         var tb = obj.controller.view.checkout_barcode_entry_textbox;
index e3d7be5..29d540f 100644 (file)
@@ -96,7 +96,8 @@ circ.in_house_use.prototype = {
                                 e.appendChild( ml );
                                 ml.setAttribute('id','in_house_use_menulist');
                                 ml.setAttribute('accesskey','');
-                                ml.addEventListener(
+                                registerEventListener(
+                                    ml,
                                     'command',
                                     function(ev) {
                                         var tb = obj.controller.view.in_house_use_barcode_entry_textbox;
index dab6e2b..4f59550 100644 (file)
@@ -304,7 +304,8 @@ circ.print_list_template_editor.prototype = {
                                     ml.setAttribute('flex','1');
                                     e.appendChild(ml);
                                     obj.controller.view.template_name_menu = ml;
-                                    ml.addEventListener(
+                                    registerEventListener(
+                                        ml,
                                         'command',
                                         function(ev) {
                                             var tmp = obj.data.print_list_templates[ ev.target.value ];
index bd8f077..c3defbe 100644 (file)
@@ -42,7 +42,8 @@
                 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
 
                 var tb = document.getElementById('barcode_tb');
-                tb.addEventListener(
+                registerEventListener(
+                    tb,
                     'keypress',
                     function(ev) {
                         if (ev.keyCode == 13 || ev.keyCode == 77) {
index 83bf51c..cbb438b 100644 (file)
@@ -65,43 +65,50 @@ function my_init() {
 
 function event_listeners() {
     try {
-        $('details').addEventListener(
+        registerEventListener(
+            $('details'),
             'command',
             handle_details,
             false
         );
 
-        $('add').addEventListener(
+        registerEventListener(
+            $('add'),
             'command',
             handle_add,
             false
         );
 
-        $('voidall').addEventListener(
+        registerEventListener(
+            $('voidall'),
             'command',
             handle_void_all,
             false
         );
 
-        $('refund').addEventListener(
+        registerEventListener(
+            $('refund'),
             'command',
             handle_refund,
             false
         );
 
-        $('opac').addEventListener(
+        registerEventListener(
+            $('opac'),
             'command',
             handle_opac,
             false
         );
 
-        $('copy_details').addEventListener(
+        registerEventListener(
+            $('copy_details'),
             'command',
             handle_copy_details,
             false
         );
 
-        $('payment').addEventListener(
+        registerEventListener(
+            $('payment'),
             'change',
             function(ev) {
                 if ($('payment_type').value == 'credit_payment') {
@@ -120,13 +127,15 @@ function event_listeners() {
             false
         );
 
-        $('payment').addEventListener(
+        registerEventListener(
+            $('payment'),
             'focus',
             function(ev) { ev.target.select(); },
             false
         );
 
-        $('payment').addEventListener(
+        registerEventListener(
+            $('payment'),
             'keypress',
             function(ev) {
                 if (! (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* mac enter */) ) { return; }
@@ -136,7 +145,8 @@ function event_listeners() {
             false
         );
 
-        $('bill_patron_btn').addEventListener(
+        registerEventListener(
+            $('bill_patron_btn'),
             'command',
             function() {
                 JSAN.use('util.window'); var win = new util.window();
@@ -154,7 +164,8 @@ function event_listeners() {
             false
         );
 
-        $('bill_history_btn').addEventListener(
+        registerEventListener(
+            $('bill_history_btn'),
             'command',
             function() {
                 xulG.display_window.g.patron.right_deck.reset_iframe( 
@@ -171,7 +182,8 @@ function event_listeners() {
             false
         );
 
-        $('convert_change_to_credit').addEventListener(
+        registerEventListener(
+            $('convert_change_to_credit'),
             'command',
             function(ev) {
                 if (ev.target.checked) {
@@ -183,7 +195,8 @@ function event_listeners() {
             false
         );
 
-        $('apply_payment_btn').addEventListener(
+        registerEventListener(
+            $('apply_payment_btn'),
             'command',
             function(ev) {
                 try {
index 52c4e06..b1f39c0 100644 (file)
@@ -224,19 +224,22 @@ function my_init() {
         retrieve_mb();
         retrieve_mp();
 
-        $('void').addEventListener(
+        registerEventListener(
+            $('void'),
             'command',
             handle_void,
             false
         );
 
-        $('edit_bill_note').addEventListener(
+        registerEventListener(
+            $('edit_bill_note'),
             'command',
             handle_edit_bill_note,
             false
         );
 
-        $('edit_payment_note').addEventListener(
+        registerEventListener(
+            $('edit_payment_note'),
             'command',
             handle_edit_payment_note,
             false
index 098a140..8776da4 100644 (file)
@@ -244,31 +244,36 @@ function my_init() {
 
         retrieve_mbts_for_list();
 
-        $('details').addEventListener(
+        registerEventListener(
+            $('details'),
             'command',
             gen_handle_details('bills'),
             false
         );
 
-        $('payments_details').addEventListener(
+        registerEventListener(
+            $('payments_details'),
             'command',
             gen_handle_details('payments'),
             false
         );
 
-        $('copy_details').addEventListener(
+        registerEventListener(
+            $('copy_details'),
             'command',
             gen_handle_copy_details('bills'),
             false
         );
 
-        $('copy_details_from_payments').addEventListener(
+        registerEventListener(
+            $('copy_details_from_payments'),
             'command',
             gen_handle_copy_details('payments'),
             false
         );
 
-        $('add').addEventListener(
+        registerEventListener(
+            $('add'),
             'command',
             handle_add,
             false
index 1dc3147..69c8fab 100644 (file)
@@ -116,7 +116,8 @@ function patron_bill_init() {
         );
         ml.setAttribute('id','billing_type');
         document.getElementById('menu_placeholder').appendChild(ml);
-        ml.addEventListener(
+        registerEventListener(
+            ml,
             'command',
             function() {
                 if ( g.OpenILS.data.hash.cbt[ ml.value ] ) {
index 3530f71..b8abcaa 100644 (file)
@@ -605,21 +605,21 @@ patron.display.prototype = {
         );
 
         var x = document.getElementById("PatronNavBar_checkout");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_refresh");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_items");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_holds");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_other");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_edit");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_bills");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
         var x = document.getElementById("PatronNavBar_messages");
-        x.addEventListener( 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
+        registerEventListener(x, 'focus', function(xx) { return function() { try { document.getElementById("PatronNavBarScrollbox").ensureElementIsVisible(xx); } catch(E) {}; } }(x), false);
 
         if (obj.barcode || obj.id) {
             if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
index b2d60fd..893326d 100644 (file)
@@ -48,7 +48,8 @@ function edit_penalty_init() {
         }
 
         /* set widget behavior */
-        document.getElementById('csp_menulist').addEventListener(
+        registerEventListener(
+            document.getElementById('csp_menulist'),
             'command',
             function() {
                 document.getElementById('note_btn').checked = false;
@@ -57,7 +58,8 @@ function edit_penalty_init() {
             },
             false
         );
-        document.getElementById('note_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('note_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -65,7 +67,8 @@ function edit_penalty_init() {
             }, 
             false
         );
-        document.getElementById('alert_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('alert_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -73,7 +76,8 @@ function edit_penalty_init() {
             }, 
             false
         );
-        document.getElementById('block_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('block_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -81,10 +85,12 @@ function edit_penalty_init() {
             }, 
             false
         );
-        document.getElementById('cancel_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('cancel_btn'),
             'command', function() { window.close(); }, false
         );
-        document.getElementById('apply_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('apply_btn'),
             'command', 
             function() {
                 var note = document.getElementById('note_tb').value;
index 4adbcc1..845cba1 100644 (file)
@@ -25,10 +25,12 @@ function hold_cancel_init() {
         build_cancel_reason_menu();
 
         /* set widget behavior */
-        document.getElementById('cancel_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('cancel_btn'),
             'command', function() { window.close(); }, false
         );
-        document.getElementById('apply_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('apply_btn'),
             'command', 
             function() {
                 var note = document.getElementById('note_tb').value;
index 9b15aef..9b2cc04 100644 (file)
@@ -1825,7 +1825,8 @@ patron.holds.prototype = {
                 var ml = util.widgets.make_menulist( list_data[0], obj.data.list.au[0].ws_ou() );
                 ml.setAttribute('id','lib_menu');
                 x.appendChild( ml );
-                ml.addEventListener(
+                registerEventListener(
+                    ml,
                     'command',
                     function(ev) {
                         obj.filter_lib = ev.target.value;
index 133eec5..e945070 100644 (file)
                 btn1.setAttribute('label',$("patronStrings").getString('staff.patron.info_notes.render_notes.btn1.delete_note.label'));
                 btn1.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
 
-                btn1.addEventListener(
+                registerEventListener(
+                    btn1,
                     'command',
                     function(id){ 
                         return function() { 
                     btn2.setAttribute('label',$("patronStrings").getString('staff.patron.info_notes.render_notes.btn2.print_note.label'));
                     btn2.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
 
-                    btn2.addEventListener(
+                    registerEventListener(
+                        btn2,
                         'command',
                         function(id){ return function() { 
                             try {
index ddfd645..359ba70 100644 (file)
@@ -30,7 +30,8 @@ function new_penalty_init() {
         }
 
         /* set widget behavior */
-        document.getElementById('csp_menulist').addEventListener(
+        registerEventListener(
+            document.getElementById('csp_menulist'),
             'command',
             function() {
                 document.getElementById('note_btn').checked = false;
@@ -39,7 +40,8 @@ function new_penalty_init() {
             },
             false
         );
-        document.getElementById('note_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('note_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -47,7 +49,8 @@ function new_penalty_init() {
             }, 
             false
         );
-        document.getElementById('alert_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('alert_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -55,7 +58,8 @@ function new_penalty_init() {
             }, 
             false
         );
-        document.getElementById('block_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('block_btn'),
             'command', 
             function() { 
                 document.getElementById('csp_menulist').setAttribute('label',''); 
@@ -63,10 +67,12 @@ function new_penalty_init() {
             }, 
             false
         );
-        document.getElementById('cancel_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('cancel_btn'),
             'command', function() { window.close(); }, false
         );
-        document.getElementById('apply_btn').addEventListener(
+        registerEventListener(
+            document.getElementById('apply_btn'),
             'command', 
             function() {
                 var note = document.getElementById('note_tb').value;
index 4dd8423..83a49db 100644 (file)
@@ -20,7 +20,8 @@ function my_init() {
         populate_hold_usr_textbox();
         populate_pickup_lib_menu();
 
-        $('request_btn').addEventListener(
+        registerEventListener(
+            $('request_btn'),
             'command',
             function(ev) {
                 make_request(copy_ids,false);
@@ -134,7 +135,8 @@ function handle_failures(failures,failed_targets) {
                 )
             );
             addCSSClass(err_msg,'click_link');
-            err_msg.addEventListener(
+            registerEventListener(
+                err_msg,
                 'click',
                 function(copy_ids) {
                     return function(ev) {
@@ -156,7 +158,8 @@ function handle_failures(failures,failed_targets) {
             );
             err_box.appendChild(retry_btn);
 
-            retry_btn.addEventListener(
+            registerEventListener(
+                retry_btn,
                 'command',
                 function(copy_ids) {
                     return function(ev) {
@@ -177,7 +180,8 @@ function handle_failures(failures,failed_targets) {
             );
             err_box.appendChild(override_btn);
 
-            override_btn.addEventListener(
+            registerEventListener(
+                override_btn,
                 'command',
                 function(copy_ids) {
                     return function(ev) {
@@ -200,13 +204,15 @@ function handle_failures(failures,failed_targets) {
 function set_remaining_event_listeners() {
     try {
 
-        $('hold_type_menu').addEventListener(
+        registerEventListener(
+            $('hold_type_menu'),
             'command',
             function(ev) { oils_lock_page(); },
             false
         );
 
-        $('cancel_btn').addEventListener(
+        registerEventListener(
+            $('cancel_btn'),
             'command',
             function(ev) { xulG.close_tab(); },
             false
@@ -231,7 +237,8 @@ function populate_hold_usr_textbox() {
         'value',
         patron.util.format_name(au_obj)
     );
-    $('hold_usr_textbox').addEventListener(
+    registerEventListener(
+        $('hold_usr_textbox'),
         'change',
         function(ev) {
             try {
@@ -288,7 +295,8 @@ function populate_pickup_lib_menu() {
 
         $('pickup_lib_menu_placeholder').appendChild(ml);
 
-        ml.addEventListener(
+        registerEventListener(
+            ml,
             'command',
             function(ev) { oils_lock_page(); },
             false
index 7f58952..abd6a4b 100644 (file)
@@ -251,7 +251,7 @@ patron.search_form.prototype = {
         obj.controller.render();
         var nl = document.getElementsByTagName('textbox');
         for (var i = 0; i < nl.length; i++) {
-            nl[i].addEventListener('keypress',function(ev){
+            registerEventListener(nl[i],'keypress',function(ev){
                 if (ev.target.tagName != 'textbox') return;
                 if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
             },false);
@@ -273,7 +273,7 @@ patron.search_form.prototype = {
                 }
             )
         );
-        ml.addEventListener('command', function() {
+        registerEventListener(ml,'command', function() {
                 ml.parentNode.setAttribute('value',ml.value);
                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
@@ -291,7 +291,7 @@ patron.search_form.prototype = {
         }
 
         var cb = obj.controller.view.inactive;
-        cb.addEventListener('command',function() { 
+        registerEventListener(cb,'command',function() { 
                 cb.setAttribute('value',cb.checked ? "true" : "false");
                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
@@ -315,7 +315,7 @@ patron.search_form.prototype = {
                     }
                 )
             );
-            profile_ml.addEventListener('command', function() {
+            registerEventListener(profile_ml,'command', function() {
                     profile_ml.parentNode.setAttribute('value', profile_ml.value);
                 }, false
             );
index 45e1567..9d45b94 100644 (file)
@@ -37,9 +37,9 @@ function staged_init() {
         init_list();
         $('list_actions').appendChild( list.render_list_actions() );
         list.set_list_actions();
-        $('cmd_cancel').addEventListener('command', gen_event_handler('cancel'), false);
-        $('cmd_load').addEventListener('command', gen_event_handler('load'), false);
-        $('cmd_reload').addEventListener('command', function() { populate_list(); }, false);
+        registerEventListener($('cmd_cancel'),'command', gen_event_handler('cancel'), false);
+        registerEventListener($('cmd_load'),'command', gen_event_handler('load'), false);
+        registerEventListener($('cmd_reload'),'command', function() { populate_list(); }, false);
         populate_list();
         default_focus();
 
@@ -64,7 +64,8 @@ function populate_lib_menu() {
             var ml = util.widgets.make_menulist( list_data[0], menu_lib );
             ml.setAttribute('id','lib_menu');
             x.appendChild( ml );
-            ml.addEventListener(
+            registerEventListener(
+                ml,
                 'command',
                 function(ev) {
                     menu_lib = ev.target.value;
index d36edf4..54c017f 100644 (file)
@@ -29,11 +29,11 @@ function penalty_init() {
         init_list();
         init_archived_list();
         document.getElementById('date1').year = document.getElementById('date1').year - 1;
-        document.getElementById('cmd_apply_penalty').addEventListener('command', handle_apply_penalty, false);
-        document.getElementById('cmd_remove_penalty').addEventListener('command', handle_remove_penalty, false);
-        document.getElementById('cmd_edit_penalty').addEventListener('command', handle_edit_penalty, false);
-        document.getElementById('cmd_archive_penalty').addEventListener('command', handle_archive_penalty, false);
-        document.getElementById('cmd_retrieve_archived_penalties').addEventListener('command', handle_retrieve_archived_penalties, false);
+        registerEventListener(document.getElementById('cmd_apply_penalty'),'command', handle_apply_penalty, false);
+        registerEventListener(document.getElementById('cmd_remove_penalty'),'command', handle_remove_penalty, false);
+        registerEventListener(document.getElementById('cmd_edit_penalty'),'command', handle_edit_penalty, false);
+        registerEventListener(document.getElementById('cmd_archive_penalty'),'command', handle_archive_penalty, false);
+        registerEventListener(document.getElementById('cmd_retrieve_archived_penalties'),'command', handle_retrieve_archived_penalties, false);
         populate_list();
         default_focus();
 
index 0b65cc4..9be9c9d 100644 (file)
@@ -901,7 +901,8 @@ patron.summary.prototype = {
             var caption = document.getElementById("PatronSummaryContact_caption");
             var arrow = document.getAnonymousNodes(caption)[0];
             var gb_content = document.getAnonymousNodes(caption.parentNode)[1];
-            arrow.addEventListener(
+            registerEventListener(
+                arrow,
                 'click',
                 function() {
                     setTimeout(