some server side xul
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 4 Nov 2005 15:35:23 +0000 (15:35 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 4 Nov 2005 15:35:23 +0000 (15:35 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@1951 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/server/OpenILS/util_overlay.xul [new file with mode: 0644]
Open-ILS/xul/staff_client/server/main/JSAN.js [new file with mode: 0644]
Open-ILS/xul/staff_client/server/main/menu.js [new file with mode: 0644]
Open-ILS/xul/staff_client/server/main/menu_frame.xul [new file with mode: 0644]
Open-ILS/xul/staff_client/server/main/menu_frame_menus.xul [new file with mode: 0644]
Open-ILS/xul/staff_client/server/main/menu_frame_overlay.xul [new file with mode: 0644]

diff --git a/Open-ILS/xul/staff_client/server/OpenILS/util_overlay.xul b/Open-ILS/xul/staff_client/server/OpenILS/util_overlay.xul
new file mode 100644 (file)
index 0000000..8dfcadc
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!-- Modified by Jason for Evergreen -->
+
+<overlay id="openils_util_overlay"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <scripts id="openils_util_scripts">
+               <script type="text/javascript" src="/opac/common/js/utils.js" />
+               <script type="text/javascript" src="/opac/common/js/md5.js" />
+               <script type="text/javascript" src="/opac/common/js/JSON.js" />
+               <script type="text/javascript" src="/opac/common/js/fmall.js" />
+               <script type="text/javascript" src="/opac/common/js/fmgen.js" />
+               <script type="text/javascript" src="/opac/common/js/RemoteRequest.js" />
+               <script type="text/javascript" src="/opac/common/js/OrgTree.js" />
+               <script type="text/javascript" src="/opac/common/js/org_utils.js" />   
+       </scripts>
+
+</overlay>
+
diff --git a/Open-ILS/xul/staff_client/server/main/JSAN.js b/Open-ILS/xul/staff_client/server/main/JSAN.js
new file mode 100644 (file)
index 0000000..809367c
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+
+*/
+
+var JSAN = function () { JSAN.addRepository(arguments) }
+
+JSAN.VERSION = 0.10;
+
+/*
+
+*/
+
+JSAN.globalScope   = self;
+JSAN.includePath   = ['.', 'lib'];
+JSAN.errorLevel    = "die";
+JSAN.errorMessage  = "";
+JSAN.loaded        = {};
+
+/*
+
+*/
+
+JSAN.use = function () {
+    var classdef = JSAN.require(arguments[0]);
+    if (!classdef) return null;
+
+    var importList = JSAN._parseUseArgs.apply(JSAN, arguments).importList;
+    JSAN.exporter(classdef, importList);
+
+    return classdef;
+}
+
+/*
+
+*/
+
+JSAN.require = function (pkg) {
+    var path = JSAN._convertPackageToPath(pkg);
+    if (JSAN.loaded[path]) {
+        return JSAN.loaded[path];
+    }
+
+    try {
+        var classdef = eval(pkg);
+        if (typeof classdef != 'undefined') return classdef;
+    } catch (e) { /* nice try, eh? */ }
+
+
+    for (var i = 0; i < JSAN.includePath.length; i++) {
+        var js;
+        try{
+            var url = JSAN._convertPathToUrl(path, JSAN.includePath[i]);
+                js  = JSAN._loadJSFromUrl(url);
+        } catch (e) {
+            if (i == JSAN.includePath.length - 1) throw e;
+        }
+        if (js != null) {
+            var classdef = JSAN._createScript(js, pkg);
+            JSAN.loaded[path] = classdef;
+            return classdef;
+        }
+    }
+    return false;
+
+}
+
+/*
+
+*/
+
+JSAN.exporter = function () {
+    JSAN._exportItems.apply(JSAN, arguments);
+}
+
+/*
+
+*/
+
+JSAN.addRepository = function () {
+    var temp = JSAN._flatten( arguments );
+    // Need to go in reverse to do something as simple as unshift( @foo, @_ );
+    for ( var i = temp.length - 1; i >= 0; i-- )
+        JSAN.includePath.unshift(temp[i]);
+    return JSAN;
+}
+
+JSAN._flatten = function( list1 ) {
+    var list2 = new Array();
+    for ( var i = 0; i < list1.length; i++ ) {
+        if ( typeof list1[i] == 'object' ) {
+            list2 = JSAN._flatten( list1[i], list2 );
+        }
+        else {
+            list2.push( list1[i] );
+        }
+    }
+    return list2;
+};
+
+JSAN._findMyPath = function () {
+    if (document) {
+        var scripts = document.getElementsByTagName('script');
+        for ( var i = 0; i < scripts.length; i++ ) {
+            var src = scripts[i].getAttribute('src');
+            if (src) {
+                var inc = src.match(/^(.*?)\/?JSAN.js/);
+                if (inc && inc[1]) {
+                    var repo = inc[1];
+                    for (var j = 0; j < JSAN.includePath.length; j++) {
+                        if (JSAN.includePath[j] == repo) {
+                            return;
+                        }
+                    }
+                    JSAN.addRepository(repo);
+                }
+            }
+        }
+    }
+}
+JSAN._findMyPath();
+
+JSAN._convertPathToUrl = function (path, repository) {
+    return repository.concat('/' + path);
+};
+    
+
+JSAN._convertPackageToPath = function (pkg) {
+    var path = pkg.replace(/\./g, '/');
+        path = path.concat('.js');
+    return path;
+}
+
+JSAN._parseUseArgs = function () {
+    var pkg        = arguments[0];
+    var importList = [];
+
+    for (var i = 1; i < arguments.length; i++)
+        importList.push(arguments[i]);
+
+    return {
+        pkg:        pkg,
+        importList: importList
+    }
+}
+
+JSAN._loadJSFromUrl = function (url) {
+    return new JSAN.Request().getText(url);
+}
+
+JSAN._findExportInList = function (list, request) {
+    if (list == null) return false;
+    for (var i = 0; i < list.length; i++)
+        if (list[i] == request)
+            return true;
+    return false;
+}
+
+JSAN._findExportInTag = function (tags, request) {
+    if (tags == null) return [];
+    for (var i in tags)
+        if (i == request)
+            return tags[i];
+    return [];
+}
+
+JSAN._exportItems = function (classdef, importList) {
+    var exportList  = new Array();
+    var EXPORT      = classdef.EXPORT;
+    var EXPORT_OK   = classdef.EXPORT_OK;
+    var EXPORT_TAGS = classdef.EXPORT_TAGS;
+    
+    if (importList.length > 0) {
+       importList = JSAN._flatten( importList );
+
+       for (var i = 0; i < importList.length; i++) {
+            var request = importList[i];
+            if (   JSAN._findExportInList(EXPORT,    request)
+                || JSAN._findExportInList(EXPORT_OK, request)) {
+                exportList.push(request);
+                continue;
+            }
+            var list = JSAN._findExportInTag(EXPORT_TAGS, request);
+            for (var i = 0; i < list.length; i++) {
+                exportList.push(list[i]);
+            }
+        }
+    } else {
+        exportList = EXPORT;
+    }
+    JSAN._exportList(classdef, exportList);
+}
+
+JSAN._exportList = function (classdef, exportList) {
+    if (typeof(exportList) != 'object') return null;
+    for (var i = 0; i < exportList.length; i++) {
+        var name = exportList[i];
+
+        if (JSAN.globalScope[name] == null)
+            JSAN.globalScope[name] = classdef[name];
+    }
+}
+
+JSAN._makeNamespace = function(js, pkg) {
+    var spaces = pkg.split('.');
+    var parent = JSAN.globalScope;
+    eval(js);
+    var classdef = eval(pkg);
+    for (var i = 0; i < spaces.length; i++) {
+        var name = spaces[i];
+        if (i == spaces.length - 1) {
+            if (typeof parent[name] == 'undefined') {
+                parent[name] = classdef;
+                if ( typeof classdef['prototype'] != 'undefined' ) {
+                    parent[name].prototype = classdef.prototype;
+                }
+            }
+        } else {
+            if (parent[name] == undefined) {
+                parent[name] = {};
+            }
+        }
+
+        parent = parent[name];
+    }
+    return classdef;
+}
+
+JSAN._handleError = function (msg, level) {
+    if (!level) level = JSAN.errorLevel;
+    JSAN.errorMessage = msg;
+
+    switch (level) {
+        case "none":
+            break;
+        case "warn":
+            alert(msg);
+            break;
+        case "die":
+        default:
+            throw new Error(msg);
+            break;
+    }
+}
+
+JSAN._createScript = function (js, pkg) {
+    try {
+        return JSAN._makeNamespace(js, pkg);
+    } catch (e) {
+        JSAN._handleError("Could not create namespace[" + pkg + "]: " + e);
+    }
+    return null;
+}
+
+
+JSAN.prototype = {
+    use: function () { JSAN.use.apply(JSAN, arguments) }
+};
+
+
+// Low-Level HTTP Request
+JSAN.Request = function (jsan) {
+    if (JSAN.globalScope.XMLHttpRequest) {
+        this._req = new XMLHttpRequest();
+    } else {
+        this._req = new ActiveXObject("Microsoft.XMLHTTP");
+    }
+}
+
+JSAN.Request.prototype = {
+    _req:  null,
+    
+    getText: function (url) {
+        this._req.open("GET", url, false);
+        try {
+            this._req.send(null);
+            if (this._req.status == 200 || this._req.status == 0)
+                return this._req.responseText;
+        } catch (e) {
+            JSAN._handleError("File not found: " + url);
+            return null;
+        };
+
+        JSAN._handleError("File not found: " + url);
+        return null;
+    }
+};
+
+/*
+
+*/
diff --git a/Open-ILS/xul/staff_client/server/main/menu.js b/Open-ILS/xul/staff_client/server/main/menu.js
new file mode 100644 (file)
index 0000000..3d7cca8
--- /dev/null
@@ -0,0 +1,44 @@
+dump('entering main/menu.js\n');
+
+if (typeof main == 'undefined') main = {};
+main.menu = function () {
+
+       JSAN.use('util.error'); this.error = new util.error();
+       this.error.sdump('D_ERROR',window);
+
+}
+
+main.menu.prototype = {
+
+       'init' : function() {
+
+               var obj = this;
+
+               var cmd_close_window = window.document.getElementById('cmd_close_window');
+                       if (cmd_close_window) {
+                               this.error.sdump('D_TRACE', 'cmd_close_window = ' + cmd_close_window );
+                               cmd_close_window.addEventListener('command', function() { dump('hiccup\n'); alert('help'); window.close(); }, false);
+                       }
+                       
+               var test_button = window.document.getElementById('cmd_test_button');
+                       if (test_button) {
+                               this.error.sdump('D_TRACE', 'test_button = ' + test_button );
+                               test_button.addEventListener('command', function() { dump('hiccup\n'); alert('help'); window.close(); }, false);
+                       }
+
+               var cmd_new_window = window.document.getElementById('cmd_new_window');
+                       if (cmd_new_window)
+                               cmd_new_window.addEventListener('command', function() { alert('Not Yet Implemented'); }, false);
+
+               var cmd_broken = window.document.getElementById('cmd_broken');
+                       if (cmd_broken)
+                               cmd_broken.addEventListener('command', function() { alert('Not Yet Implemented'); }, false);
+               
+       },
+
+       'close_tab' : function (t_idx) {
+       }
+
+}
+
+dump('exiting main/menu.js\n');
diff --git a/Open-ILS/xul/staff_client/server/main/menu_frame.xul b/Open-ILS/xul/staff_client/server/main/menu_frame.xul
new file mode 100644 (file)
index 0000000..52edb1c
--- /dev/null
@@ -0,0 +1,72 @@
+<?xml version="1.0"?>
+<!-- Application: Evergreen Staff Client -->
+<!-- Screen: Main, Menu and Tab Navigation -->
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- STYLESHEETS -->
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="/xul/server/skin/evergreen.css" type="text/css"?>
+<?xml-stylesheet href="/xul/server/skin/menu_frame.css" type="text/css"?>
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- LOCALIZATION -->
+<!DOCTYPE window SYSTEM "/xul/server/locale/menu_frame.dtd">
+
+<!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+<!-- OVERLAYS -->
+<?xul-overlay href="/xul/server/main/menu_frame_overlay.xul"?>
+<?xul-overlay href="/xul/server/OpenILS/util_overlay.xul"?>
+
+<window id="menu_frame_win"
+       onload="my_init()"
+       orient="vertical" style="overflow: auto" width="800" height="500"
+       sizemode="maximized" persist="width height" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+       <!-- BEHAVIOR -->
+        <script type="text/javascript">var myPackageDir = 'evergreen'; var IAMXUL = true; var g = {};</script>
+        <scripts id="openils_util_scripts"/>
+
+       <script type="text/javascript" src="/xul/server/main/JSAN.js"/>
+       <script type="text/javascript">
+       <![CDATA[
+               function my_init() {
+                       try {
+                               netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+                               if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
+                               JSAN.errorLevel = "die"; // none, warn, or die
+                               JSAN.addRepository('/xul/server/');
+                               JSAN.use('util.error'); g.error = new util.error();
+                               g.error.sdump('D_TRACE','my_init() for menu_frame.xul');
+
+                               JSAN.use('main.menu'); g.menu = new main.menu();
+                               g.menu.init();
+       
+                       } catch(E) {
+                               var err_msg = "!! This software has encountered an error.  Please tell your friendly " +
+                                       "system administrator or software developer the following:\n" + E + '\n';
+                               try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
+                               alert(err_msg);
+                       }
+               }
+       ]]>
+       </script>
+
+       <commandset id="universal_cmds">
+               <command id="cmd_test_button" oncommand="alert('beep');" />
+       </commandset>
+
+       <keyset id="menu_frame_keys" />
+
+       <popupset id="universal_popupset" />
+
+       <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
+       <!-- CONTENT -->
+
+       <box id="menu_frame_main" />
+
+       <button id="test_button2" label="test" command="cmd_close_window" />
+
+</window>
+
diff --git a/Open-ILS/xul/staff_client/server/main/menu_frame_menus.xul b/Open-ILS/xul/staff_client/server/main/menu_frame_menus.xul
new file mode 100644 (file)
index 0000000..b677cc5
--- /dev/null
@@ -0,0 +1,141 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "/xul/server/locale/menu_frame.dtd">
+<overlay id="menu_frame_menus_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+<!-- The File menu on the main menu -->
+<menu id="main.menu.file" label="&main.menu.file.label;" accesskey="&main.menu.file.key;" >
+       <menupopup id="main.menu.file.popup">
+               <menuitem label="&main.menu.file.new.label;" accesskey="&main.menu.file.new.key;" key="file-new-key" observes="cmd_new_window"/>
+               <menuitem label="&main.menu.file.new_tab.label;" accesskey="&main.menu.file.new_tab.key;" key="file-new-tab-key" observes="cmd_new_tab"/>
+               <menuseparator />
+       <!--
+               <menuitem label="&main.menu.file.open.label;" accesskey="&main.menu.file.open.key;" key="file-open-key" observes="cmd_broken" disabled="true"/>
+               <menuitem label="&main.menu.file.save.label;" accesskey="&main.menu.file.save.key;" key="file-save-key" observes="cmd_broken"/>
+               <menuseparator />
+       -->
+               <menuitem label="&main.menu.file.close_tab.label;" accesskey="&main.menu.file.close_tab.key;" key="file-close-tab-key" observes="cmd_close_tab"/>
+               <menuitem label="&main.menu.file.close.label;" accesskey="&main.menu.file.close.key;" key="file-close-key" observes="cmd_close_window"/>
+       </menupopup>
+</menu>
+
+<!-- The Edit menu on the main menu -->
+<menu id="main.menu.edit" label="&main.menu.edit.label;" accesskey="&main.menu.edit.key;">
+       <menupopup id="main.menu.edit.popup">
+               <menuitem label="stub"/>
+       <!--
+               <menuitem label="&main.menu.edit.undo.label;" accesskey="&main.menu.edit.undo.key;" key="edit-undo-key" observes="cmd_broken"/>
+               <menuitem label="&main.menu.edit.redo.label;" accesskey="&main.menu.edit.redo.key;" key="edit-redo-key" observes="cmd_broken"/>
+               <menuseparator />
+               <menuitem label="&main.menu.edit.cut.label;" accesskey="&main.menu.edit.cut.key;" key="edit-cut-key" observes="cmd_broken"/>
+               <menuitem label="&main.menu.edit.copy.label;" accesskey="&main.menu.edit.copy.key;" key="edit-copy-key" observes="cmd_broken"/>
+               <menuitem label="&main.menu.edit.paste.label;" accesskey="&main.menu.edit.paste.key;" key="edit-paste-key" observes="cmd_broken"/>
+               <menuitem label="&main.menu.edit.delete.label;" accesskey="&main.menu.edit.delete.key;" key="edit-delete-key" observes="cmd_broken"/>
+               <menuseparator />
+               <menuitem label="&main.menu.edit.buckets.label;" accesskey="&main.menu.edit.buckets.key;" observes="cmd_broken"/>
+               <menuseparator />
+               <menuitem label="&main.menu.edit.select_all.label;" accesskey="&main.menu.edit.select_all.key;" key="edit-select-all-key" observes="cmd_broken"/>
+               <menuseparator />
+               <menuitem label="&main.menu.edit.find.label;" accesskey="&main.menu.edit.find.key;" key="edit-find-key" observes="cmd_broken"/>
+               <menuitem label="&main.menu.edit.find_again.label;" accesskey="&main.menu.edit.find_again.key;" key="edit-find-again-key" observes="cmd_broken"/>
+       -->
+       </menupopup>
+</menu>
+
+<!-- The Circulation menu on the main menu -->
+<menu id="main.menu.circ" label="&main.menu.circ.label;" accesskey="&main.menu.circ.key;">
+       <menupopup id="main.menu.circ.popup">
+               <menuitem label="&main.menu.circ.checkout.label;" accesskey="&main.menu.circ.checkout.key;" observes="cmd_circ_checkout"/>
+               <menuitem label="&main.menu.circ.checkin.label;" accesskey="&main.menu.circ.checkin.key;" observes="cmd_circ_checkin"/>
+               <menuitem label="&main.menu.circ.hold_capture.label;" accesskey="&main.menu.circ.hold_capture.key;" observes="cmd_circ_hold_capture"/>
+       <!--
+               <menu id="special-circ-menu" label="&main.menu.circ.special.label;" accesskey="&main.menu.circ.special.key;" observes="cmd_broken"/>
+               <menuseparator />
+               <menuitem label="&main.menu.circ.place_hold.label;" accesskey="&main.menu.circ.place_hold.key;" key="circ-place-hold-key" observes="cmd_broken"/>
+       -->
+               <menuseparator />
+               <menuitem label="&main.menu.circ.copy_status.label;" accesskey="&main.menu.circ.copy_status.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.patron_status.label;" accesskey="&main.menu.circ.patron_status.key;" observes="cmd_circ_checkout"/>
+               <menuseparator />
+               <menuitem label="&main.menu.circ.patron_registration.label;" accesskey="&main.menu.circ.patron_registration.key;" observes="cmd_patron_register"/>
+       </menupopup>
+</menu>
+
+<!-- The Special Circulation submenu in the Circulation menu -->
+<menu id="special-circ-menu">
+       <menupopup id="special-circ-popup">
+               <menuitem label="&main.menu.circ.mark_used.label;" accesskey="&main.menu.circ.mark_used.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.lost.label;" accesskey="&main.menu.circ.lost.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.missing.label;" accesskey="&main.menu.circ.missing.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.found.label;" accesskey="&main.menu.circ.found.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.claimed_returned.label;" accesskey="&main.menu.circ.claimed_returned.key;" observes="cmd_broken"/>
+               <menuitem label="&main.menu.circ.quick_add.label;" accesskey="&main.menu.circ.quick_add.key;" observes="cmd_broken"/>
+       </menupopup>
+</menu>
+
+<!-- The Cataloging menu on the main menu -->
+<menu id="main.menu.cat" label="&main.menu.cat.label;" accesskey="&main.menu.cat.key;">
+       <menupopup id="main.menu.cat.popup">
+               <menuitem label="&main.menu.cat.bib_search.label;" accesskey="&main.menu.cat.bib_search.key;" observes="cmd_search_opac"/>
+               <menuseparator />
+               <menuitem disabled="true" label="&main.menu.cat.dedup.label;" accesskey="&main.menu.cat.dedup.key;" observes="cmd_broken"/>
+               <menuitem label="Create New Marc Record" accesskey="n" observes="cmd_create_new_marc_book"/>
+               <menuitem label="Z39.50 Import" accesskey="Z" observes="cmd_z39_50_import"/>
+       </menupopup>
+</menu>
+
+<!-- The Search menu on the main menu -->
+<menu id="main.menu.search" label="&main.menu.search.label;" accesskey="&main.menu.search.key;">
+       <menupopup id="main.menu.search.popup">
+               <menuitem label="Catalog" accesskey="C" observes="cmd_search_opac" />
+               <menuitem label="Patrons" accesskey="P" observes="cmd_patron_search" />
+       </menupopup>
+</menu>
+
+<!-- The Serials menu on the main menu -->
+<menu id="main.menu.serials" label="&main.menu.serials.label;" accesskey="&main.menu.serials.key;">
+       <menupopup id="main.menu.serials.popup">
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+
+<!-- The Acquisitions menu on the main menu -->
+<menu id="main.menu.acquisitions" label="&main.menu.acquisitions.label;" accesskey="&main.menu.acquisitions.key;">
+       <menupopup id="main.menu.acquisitions.popup">
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+
+<!-- The Reports menu on the main menu -->
+<menu id="main.menu.reports" label="&main.menu.reports.label;" accesskey="&main.menu.reports.key;">
+       <menupopup id="main.menu.reports.popup">
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+
+<!-- The Help menu on the main menu -->
+<menu id="main.menu.help" label="&main.menu.help.label;" accesskey="&main.menu.help.key;">
+       <menupopup id="main.menu.help.popup">
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+
+<!-- The Help menu on the main menu -->
+<menu id="main.menu.admin" label="&main.menu.admin.label;" accesskey="&main.menu.admin.key;">
+       <menupopup id="main.menu.admin.popup">
+               <menuitem label="Receipt Template Editor" accesskey="R" observes="cmd_receipt_template_editor"/>
+               <menuitem label="Survey Wizard" accesskey="S" observes="cmd_survey_wizard"/>
+               <menuitem label="Copy Stat-Cat Editor" accesskey="C" observes="cmd_copy_stat_cat_edit"/>
+               <menuitem label="Patron Stat-Cat Editor" accesskey="P" observes="cmd_patron_stat_cat_edit"/>
+               <menuseparator />
+               <menuitem label="Test Module" accesskey="T" observes="cmd_test"/>
+               <menuitem label="XUL Test" accesskey="X" observes="cmd_xuleditor"/>
+               <menuitem label="Fieldmapper" accesskey="m" observes="cmd_fieldmapper"/>
+               <menuitem label="Filterable Console" accesskey="F" observes="cmd_filter_console"/>
+               <menuitem label="Javscript Console" accesskey="J" observes="cmd_console"/>
+               <menuitem label="Javscript Shell" accesskey="H" observes="cmd_shell"/>
+       </menupopup>
+</menu>
+
+
+</overlay>
diff --git a/Open-ILS/xul/staff_client/server/main/menu_frame_overlay.xul b/Open-ILS/xul/staff_client/server/main/menu_frame_overlay.xul
new file mode 100644 (file)
index 0000000..25edf84
--- /dev/null
@@ -0,0 +1,176 @@
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "/xul/server/locale/menu_frame.dtd">
+<?xul-overlay href="/xul/server/main/menu_frame_menus.xul"?>
+<overlay id="menu_frame_overlay" 
+       xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+
+<commandset id="universal_cmds">
+       <command id="cmd_close_window" key="close-window-key" />
+       <command id="cmd_new_window" key="new-window-key" />
+       <command id="cmd_new_tab" key="new-tab-key" />
+       <command id="cmd_close_tab" key="close-tab-key" />
+
+       <command id="cmd_cat_main" key="cat-main-key" />
+       <command id="cmd_circ_checkout" key="circ-checkout-key" />
+       <command id="cmd_patron_search" key="patron-search-key" />
+       <command id="cmd_circ_checkin" key="circ-checkin-key" />
+       <command id="cmd_circ_hold_capture" key="circ-hold-capture-key" />
+       <command id="cmd_search_opac" key="search-opac-key" />
+       <command id="cmd_patron_register" key="patron-register-key" />
+       <command id="cmd_survey_wizard" />
+       <command id="cmd_copy_stat_cat_edit" />
+       <command id="cmd_patron_stat_cat_edit" />
+       <command id="cmd_receipt_template_editor" />
+       <command id="cmd_z39_50_import" />
+       <command id="cmd_create_new_marc_book" />
+
+       <command id="cmd_console" />
+       <command id="cmd_shell" />
+       <command id="cmd_xuleditor" />
+       <command id="cmd_filter_console" />
+       <command id="cmd_fieldmapper" />
+
+       <command id="cmd_test" disabled="true" />
+       <command id="cmd_broken" disabled="true" />
+</commandset>
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="menu_frame_keys">
+       <key id="new-window-key" modifiers="accel" key="N" command="cmd_new_window"/>
+       <key id="new-tab-key" modifiers="accel" key="T" command="cmd_new_tab"/>
+       <key id="open-key" modifiers="accel" key="O" command=""/>
+       <key id="save-key" modifiers="accel" key="S" command=""/>
+       <key id="close-tab-key" modifiers="accel" key="W" command="cmd_close_tab"/>
+       <key id="close-window-key" modifiers="accel" key="Q" command="cmd_close_window"/>
+       <!--
+       <key id="edit-undo-key" modifiers="accel" key="Z" command=""/>
+       <key id="edit-redo-key" modifiers="accel" key="Y" command=""/>
+       <key id="edit-cut-key" modifiers="accel" key="X" command=""/>
+       <key id="edit-copy-key" modifiers="accel" key="C" command=""/>
+       <key id="edit-paste-key" modifiers="accel" key="V" command=""/>
+       <key id="edit-delete-key" modifiers="" keycode="VK_DELETE" command=""/>
+       <key id="edit-select-all-key" modifiers="accel" key="A" command=""/>
+       <key id="edit-find-key" modifiers="accel" key="F" command=""/>
+       <key id="edit-find-again-key" modifiers="accel" key="G" command=""/>
+
+       <key id="circ-patron-status-key" keycode="VK_F11" command="cmd_circ_display"/>
+       <key id="circ-copy-status-key" keycode="VK_F9" command=""/>
+       <key id="circ-check-in-key" keycode="VK_F2" command="cmd_circ_checkin"/>
+       <key id="circ-renew-key" keycode="VK_F3" command=""/>
+       <key id="circ-mark-used-key" keycode="VK_F4" command=""/>
+       <key id="circ-place-hold-key" keycode="VK_F5" command=""/>
+       <key id="circ-patron-registration-key" keycode="VK_F12" command=""/>
+       -->
+       <key id="circ-checkout-key" keycode="VK_F1" command="cmd_circ_checkout"/>
+       <key id="circ-checkin-key" keycode="VK_F2" command="cmd_circ_checkin"/>
+       <key id="search-opac-key" keycode="VK_F3" command="cmd_search_opac"/>
+       <key id="patron-search-key" keycode="VK_F4" command="cmd_patron_search"/>
+       <key id="circ-hold-capture-key" keycode="VK_F5" command="cmd_circ_hold_capture"/>
+       <key id="patron-register-key" keycode="VK_F12" command="cmd_patron_registration"/>
+</keyset>
+
+<!-- The top level widget for the staff client -->
+<box id="menu_frame_main" flex="1" orient="vertical">
+       <toolbox id="main_toolbox"/>
+       <tabbox id="main_tabbox" flex="1" eventnode="window" handleCtrlTab="true">
+               <tabs id="main_tabs" closebutton="true">
+                       <tab id="tab_1" accesskey="1" label="Tab 1" hidden="true" />
+                       <tab id="tab_2" accesskey="2" label="Tab 2" hidden="true" />
+                       <tab id="tab_3" accesskey="3" label="Tab 3" hidden="true" />
+                       <tab id="tab_4" accesskey="4" label="Tab 4" hidden="true" />
+                       <tab id="tab_5" accesskey="5" label="Tab 5" hidden="true" />
+                       <tab id="tab_6" accesskey="6" label="Tab 6" hidden="true" />
+                       <tab id="tab_7" accesskey="7" label="Tab 7" hidden="true" />
+                       <tab id="tab_8" accesskey="8" label="Tab 8" hidden="true" />
+                       <tab id="tab_9" accesskey="9" label="Tab 9" hidden="true" />
+               </tabs>
+               <tabpanels id="main_panels" flex="1">
+                       <tabpanel id="panel_1"><label value="panel_1"/></tabpanel>
+                       <tabpanel id="panel_2"><label value="panel_2"/></tabpanel>
+                       <tabpanel id="panel_3"><label value="panel_3"/></tabpanel>
+                       <tabpanel id="panel_4"><label value="panel_4"/></tabpanel>
+                       <tabpanel id="panel_5"><label value="panel_5"/></tabpanel>
+                       <tabpanel id="panel_6"><label value="panel_6"/></tabpanel>
+                       <tabpanel id="panel_7"><label value="panel_7"/></tabpanel>
+                       <tabpanel id="panel_8"><label value="panel_8"/></tabpanel>
+                       <tabpanel id="panel_9"><label value="panel_9"/></tabpanel>
+               </tabpanels>
+       </tabbox>
+       <toolbox id="entity_toolbox"/>
+</box>
+
+<!-- The main top level menubar -->
+<toolbox id="main_toolbox">
+       <menubar id="main_menubar">
+               <menu id="main.menu.file" />
+               <menu id="main.menu.edit" />
+               <menu id="main.menu.search" />
+               <menu id="main.menu.circ" />
+               <menu id="main.menu.cat" />
+               <menu id="main.menu.serials" />
+               <menu id="main.menu.acquisitions" />
+               <menu id="main.menu.reports" />
+               <spacer flex="1" />
+               <menu id="main.menu.admin" />
+               <menu id="main.menu.help" />
+       </menubar>
+</toolbox>
+
+<!-- The Entity top level menubar -->
+<!--
+<toolbox id="entity_toolbox">
+       <menubar id="entity_menubar">
+               <menu id="patron-menu" label="&main.menu.entity.patron.label;" accesskey="&main.menu.entity.patron.key;" command="cmd_broken"/>
+               <menu id="copy-menu" label="&main.menu.entity.copy.label;" accesskey="&main.menu.entity.copy.key;" command="cmd_broken"/>
+               <menu id="volume-menu" label="&main.menu.entity.volume.label;" accesskey="&main.menu.entity.volume.key;" command="cmd_broken"/>
+               <menu id="bib-menu" label="&main.menu.entity.bib.label;" accesskey="&main.menu.entity.bib.key;" command="cmd_broken"/>
+       </menubar>
+</toolbox>
+-->
+
+<!-- The Patron menu on the Entity menubar -->
+<!--
+<menu id="patron-menu">
+       <menupopup id="patron-popup">
+               <menuitem label="&main.menu.circ.patron_registration.label;" accesskey="&main.menu.entity.patron.register.key;" command="cmd_patron_register"/>
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+-->
+
+<!-- The Items menu on the Entity menubar -->
+<!--
+<menu id="copy-menu">
+       <menupopup id="copy-popup">
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+-->
+
+<!-- The Volumes menu on the Entity menubar -->
+<!--
+<menu id="volume-menu">
+       <menupopup id="volume-popup">
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+-->
+
+<!-- The Bib Records menu on the Entity menubar -->
+<!--
+<menu id="bib-menu">
+       <menupopup id="bib-popup">
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+               <menuitem label="stub" />
+       </menupopup>
+</menu>
+-->
+
+</overlay>