utility functions for Javascript Shell
authorJason Etheridge <jason@esilibrary.com>
Thu, 22 Mar 2012 04:12:34 +0000 (00:12 -0400)
committerThomas Berezansky <tsbere@mvlc.org>
Wed, 28 Mar 2012 19:32:33 +0000 (15:32 -0400)
win_list() returns an array of "eg_main" chrome windows

get_tab() takes two forms:

    get_tab(chrome_window,tab_index)
    get_tab(tab_index)

The latter invocation assumes the first chrome window returned by win_list().

get_tab returns an object with the keys 'name' and 'content', pointing to the
tab label and the tab panel -> iframe -> contentWindow, respectively.

So let's say you had a patron account open in tab 1, and the Javascript Shell
open in tab 2.  In the shell, you could do:

    var o = get_tab(1);

o.name might contain something like

    1 Patron: Circulator, Ima

and you could do this to refresh that interface:

    o.content.g.patron.refresh_all()

Signed-off-by: Jason Etheridge <jason@esilibrary.com>
Signed-off-by: Thomas Berezansky <tsbere@mvlc.org>
Open-ILS/xul/staff_client/chrome/content/util/shell.js

index eadc228..7dda6e3 100644 (file)
@@ -9,6 +9,38 @@ _out,
 tooManyMatches = null,
 lastError = null;
 
+function win_list() {
+    var list = [];
+    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].
+        getService(Components.interfaces.nsIWindowMediator);
+    var enumerator = wm.getEnumerator('eg_menu');
+    while(enumerator.hasMoreElements()) {
+        targetwindow = enumerator.getNext();
+        list.push(targetwindow);
+    }
+    return list;
+}
+
+function get_tab(a,b) {
+
+    var win;
+    var idx;
+
+    if (typeof b == 'undefined') {
+        idx = a;
+        win = win_list()[0];
+    } else {
+        win = a;
+        idx = b;
+    }
+
+    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    var tabs = win.document.getElementById('main_tabs');
+    var panels = win.document.getElementById('main_panels');
+    return { 'name' : tabs.childNodes[idx].getAttribute('label'), 'content' : panels.childNodes[idx].firstChild.contentWindow };
+}
+
 function refocus()
 {
   _in.blur(); // Needed for Mozilla to scroll correctly.