LP#1272074 Physical Characteristics Wizard for the MARC Editor
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Tue, 12 Nov 2013 22:51:57 +0000 (17:51 -0500)
committerDan Wells <dbw2@calvin.edu>
Tue, 18 Feb 2014 17:03:50 +0000 (12:03 -0500)
Right-click in an 007 field to find a new entry in the context menu that
launches this wizard.  The prompts and suggested values come from data
already found in the database.

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/chrome/content/cat/opac.js
Open-ILS/xul/staff_client/chrome/content/main/constants.js
Open-ILS/xul/staff_client/server/cat/marcedit.js
Open-ILS/xul/staff_client/server/cat/marcedit.xul

index 2374fbe..54b63fe 100644 (file)
 <!ENTITY staff.cat.marcedit.toggleFFE.label "Fixed Fields -- Record type: ">
 <!ENTITY staff.cat.marcedit.source.caption "Bibliographic source">
 <!ENTITY staff.cat.marcedit.source.submit.label "Update source">
+<!ENTITY staff.cat.marcedit.phys_char_wizard.label "Physical Characteristics Wizard">
+<!ENTITY staff.cat.marcedit.phys_char_wizard.accesskey "W">
 <!ENTITY staff.cat.marc_new.load.label "Load">
 <!ENTITY staff.cat.marc_new.load.accesskey "L">
 <!ENTITY staff.cat.marc_new.set_default.label "Set Workstation Default">
index 1d76bc2..ba54530 100644 (file)
@@ -277,7 +277,8 @@ function set_marc_edit() {
                 }
             },
             'lock_tab' : xulG.lock_tab,
-            'unlock_tab' : xulG.unlock_tab
+            'unlock_tab' : xulG.unlock_tab,
+            'url_prefix': xulG.url_prefix
         };
     if (marc_edit_reset) {
         bottom_pane.reset_iframe( a,b,c );
index 3856f72..189d1a4 100644 (file)
@@ -507,6 +507,7 @@ var urls = {
     'EG_ACQ_USER_REQUESTS' : 'oils://remote/eg/acq/picklist/user_request',
     'XUL_SERIAL_BATCH_RECEIVE': 'oils://remote/xul/server/serial/batch_receive.xul',
     'XUL_SERIAL_PATTERN_WIZARD' : 'oils://remote/xul/server/serial/pattern_wizard.xul',
+    'EG_MARCEDIT_PHYS_CHAR_WIZARD' : 'oils://remote/eg/cat/marcedit/phys_char_wizard',
     'CUSTOM_JS' : '/xul/server/skin/custom.js',
     'ACQ_LINEITEM' : 'oils://remote/eg/acq/lineitem/related/',
     'SERIAL_LIST_SUBSCRIPTION' : 'oils://remote/eg/serial/list_subscription',
index 02cfa1e..5881a60 100644 (file)
@@ -257,12 +257,26 @@ function my_init() {
         }
 
         document.getElementById('save-button').setAttribute('label', window.xulG.save.label);
+        /* Ugh. Sorry about the spaghetti. */
         document.getElementById('save-button').setAttribute('oncommand',
+            'var to_save = function() { ' + /* begin to_save() */
             'if ($("xul-editor").hidden) set_flat_editor(false); ' +
             'mangle_005(); ' + 
             'var xml_string = xml_escape_unicode( xml_record.toXMLString() ); ' + 
             'save_attempt( xml_string ); ' +
-            'loadRecord();'
+            'loadRecord(); ' +
+            '}; ' + /* end to_save() */
+
+            'if (typeof _owPCW == "object") { ' +
+            ' for (var k in _owPCW) { ' +
+            '  if (_owPCW[k].active) { ' +
+            '    try { _owPCW[k].apply(to_save); to_save.ran = true; } ' +
+            '    catch (E) { alert("_ow_PCW[" + k + "]: " + E); } ' +
+            '    break; ' +
+            '  }' +
+            ' }' +
+            '} ' +
+            'if (!to_save.ran) to_save();'
         );
 
         if (window.xulG.record.url) {
@@ -430,7 +444,9 @@ function my_init() {
             buildBibSourceList(authtoken, xulG.record.id);
         }
 
+        preparePhysCharWizardContext();
         dojo.require('MARC.FixedFields');
+        dojo.require("openils.widget.PhysCharWizard");
 
     } catch(E) {
         alert('FIXME, MARC Editor, my_init: ' + E);
@@ -996,6 +1012,36 @@ function getFFContextMenu(type, name) {
     return context_menu_id;
 }
 
+/* This just sets up a special context menu for a 007 data field to use, so
+ * that users can right-click for a menu and get a choice to launch the
+ * Physical Characteristics Wizard.
+ */
+function preparePhysCharWizardContext() {
+    var menu = document.getElementById("physCharWizardContext");
+    menu.appendChild(document.createElement("menuseparator"));
+
+    var clipb_children = document.getElementById("clipboard").childNodes;
+    for (var i = 0; i < clipb_children.length; i++) /* collection not array */ {
+        var child = clipb_children[i];
+        if (child.nodeName == 'menuitem')
+            menu.appendChild(child.cloneNode(true));
+    }
+}
+
+function launchPhysCharWizard(popup_node) {
+    try {
+        new openils.widget.PhysCharWizard({
+            "node": popup_node,
+            "onapply": function(v) {
+                createControlField("007", v);
+                loadRecord();
+            }
+        });
+    } catch (E) {
+        alert("Exception raised by openils.widget.PhysCharWizard:\n" + E);
+    }
+}
+
 function fillFixedFields () {
     try {
             var grid = document.getElementById('leaderGrid');
@@ -1095,7 +1141,7 @@ function marcControlfield (field) {
                 { value : field.text(),
                   class : 'plain marcEditableControlfield',
                   name : 'CONTROL' + tagname,
-                  context : 'clipboard',
+                  context : tagname == 7 ? 'physCharWizardContext': 'clipboard',
                   size : 50,
                   maxlength : 50 } )
             );
index 6d86170..16505d9 100644 (file)
         <menuitem label="COM" oncommand="changeFFEditor('COM');"/>
         <menuitem label="MFHD" oncommand="changeFFEditor('MFHD');"/>
     </menupopup>
+    <menupopup id="physCharWizardContext" position="after_start">
+        <menuitem label="&staff.cat.marcedit.phys_char_wizard.label;" accesskey="&staff.cat.marcedit.phys_char_wizard.accesskey;" oncommand="launchPhysCharWizard(document.popupNode);" />
+    </menupopup>
 </popupset>
 
 </window>