From 6fd87629c752736ac5e9bf5a25bd12ccb121f903 Mon Sep 17 00:00:00 2001 From: phasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4> Date: Thu, 12 Nov 2009 06:03:26 +0000 Subject: [PATCH] Turn off bubbling for the oils_persist event (makes things less noisy with iframes, etc.). Support @oils_persist_peers for persisting related elements (mainly to support radio group style widgets) git-svn-id: svn://svn.open-ils.org/ILS/trunk@14879 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../staff_client/chrome/content/OpenILS/global_util.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js b/Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js index f99b2f14de..f1923e6aa6 100644 --- a/Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js +++ b/Open-ILS/xul/staff_client/chrome/content/OpenILS/global_util.js @@ -50,10 +50,12 @@ } } - function oils_persist(e) { + function oils_persist(e,cancelable) { try { + if (!e) { return; } + if (typeof cancelable == 'undefined') { cancelable = false; } var evt = document.createEvent("Events"); - evt.initEvent( 'oils_persist', true, true ); + evt.initEvent( 'oils_persist', false, cancelable ); // event name, bubbles, cancelable e.dispatchEvent(evt); } catch(E) { alert('Error with oils_persist():' + E); @@ -65,9 +67,7 @@ function gen_event_handler(etype,node) { return function(ev) { try { - var evt = document.createEvent("Events"); - evt.initEvent( 'oils_persist', true, true ); - ev.target.dispatchEvent(evt); + oils_persist(ev.target); } catch(E) { alert('Error in persist_helper, firing virtual event oils_persist after ' + etype + ' event on ' + node.nodeName + '.id = ' + node.id + ': ' + E); } @@ -104,6 +104,13 @@ prefs.setCharPref( key, value ); // TODO: Need to add logic for window resizing, splitter repositioning, grippy state, etc. } + if (target.hasAttribute('oils_persist_peers') && ! ev.cancelable) { // We abuse the .cancelable field on the oils_persist event to prevent looping + var peer_list = target.getAttribute('oils_persist_peers').split(' '); + for (var j = 0; j < peer_list.length; j++) { + dump('persist_helper: dispatching oils_persist to peer ' + peer_list[j] + '\n'); + oils_persist( document.getElementById( peer_list[j] ), true ); + } + } } catch(E) { alert('Error in persist_helper() event listener for ' + bk + ': ' + E); } -- 2.11.0