forward porting 10975 10977, vandelay goodies
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 29 Oct 2008 17:35:42 +0000 (17:35 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 29 Oct 2008 17:35:42 +0000 (17:35 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@10978 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/js/dojo/openils/Util.js
Open-ILS/web/opac/locale/en-US/vandelay.dtd
Open-ILS/web/vandelay/inc/queue.xml
Open-ILS/web/vandelay/vandelay.css
Open-ILS/web/vandelay/vandelay.js
Open-ILS/web/vandelay/vandelay.xml

index 4ce9cff..904caa5 100644 (file)
@@ -54,6 +54,45 @@ if(!dojo._hasResource["openils.Util"]) {
     };
 
     /**
+     * Given a HTML select object, returns the currently selected value
+     */
+    openils.Util.selectorValue = function(sel) {
+        if(!sel) return null;
+        var idx = sel.selectedIndex;
+        if(idx < 0) return null;
+        var o = sel.options[idx];
+        var v = o.value; 
+        if(v == null) v = o.innerHTML;
+        return v;
+    }
+
+    /**
+     * Returns the character code of the provided (or current window) event
+     */
+    openils.Util.getCharCode = function(evt) {
+        evt = (evt) ? evt : ((window.event) ? event : null); 
+        if(evt) {
+            return (evt.charCode ? evt.charCode : 
+                ((evt.which) ? evt.which : evt.keyCode ));
+        } else { return -1; }
+    }
+
+
+    /**
+     * Registers a handler for when the Enter key is pressed while 
+     * the provided DOM node has focus.
+     */
+    openils.Util.registerEnterHandler = function(domNode, func) {
+           if(!(domNode && func)) return;
+           domNode.onkeydown = function(evt) {
+            var code = openils.Util.getCharCode(evt);
+            if(code == 13 || code == 3) 
+                func();
+        }
+       }
+
+
+    /**
      * Parses opensrf response objects to see if they contain 
      * data and/or an ILS event.  This only calls request.recv()
      * once, so in a streaming context, it's necessary to loop on
index fd26641..a2017fe 100644 (file)
 <!ENTITY vandelay.export.retrieve "Retrieve Records">
 <!ENTITY vandelay.export.field_no_hint "(starting from 0)">
 <!ENTITY vandelay.export.bucket "Record Bucket ID">
+<!ENTITY vandelay.select_actions "-- Actions --">
+<!ENTITY vandelay.queue.total "Total:">
+<!ENTITY vandelay.queue.imported "Imported:">
+
index 00e5722..563a650 100644 (file)
@@ -1,8 +1,14 @@
-<h1>&vandelay.record.queue;</h1><br/>
-<div>
-    <span style='font-size:105%;' id='vl-queue-summary-name'/>
-    <span id='vl-queue-summary-import-count'/> / <span id='vl-queue-summary-total-count'/>
-</div>
+<table class='wide'>
+    <tr>
+        <td align='left'>
+            <h1>&vandelay.record.queue; <span style='font-style:italic;' id='vl-queue-summary-name'/></h1><br/>
+        </td>
+        <td align='right'>
+            &vandelay.queue.total; <span style='font-weight:bold;' id='vl-queue-summary-total-count'/>
+            &vandelay.queue.imported; <span style='font-weight:bold;' id='vl-queue-summary-import-count'/>
+        </td>
+    </tr>
+</table>
 <script>
     var vlQueueGridLayout;
     function resetVlQueueGridLayout() {
@@ -28,7 +34,7 @@
 <div id='vl-queue-div-grid' class='tall' dojoType="dijit.layout.ContentPane" layoutAlign='client'>
 
     <!-- column picker dialog -->
-    <div dojoType="dijit.Dialog" jsId='vlQueueGridColumePickerDialog' title="Column Picker" execute="alert(2);">
+    <div dojoType="dijit.Dialog" jsId='vlQueueGridColumePickerDialog' title="Column Picker">
         <table class='form_table'>
             <thead>
                 <tr><th width='33%'>&vandelay.column;</th>
         <table width='100%' style='margin-bottom:0px;'>
             <tr>
                 <td align='left' valign='bottom'>
-                    <button dojoType='dijit.form.Button' onclick='vlImportSelectedRecords();'>&vandelay.import.selected;</button>
-                    <button dojoType='dijit.form.Button' onclick='vlImportAllRecords();'>&vandelay.import.all;</button>
-                    <button dojoType='dijit.form.Button' onclick="
-                        if(confirm('&vandelay.sure.to.delete.queue;')) {
-                            vlDeleteQueue(currentType, currentQueueId, 
-                                function() { displayGlobalDiv('vl-marc-upload-div'); });
-                        }">&vandelay.delete.queue;</button>
+                    <select id='vl-queue-actions-selector'>
+                        <option selected='selected' disabled='disabled' value='select-actions'>&vandelay.select_actions;</option>
+                        <option value='import'>&vandelay.import.selected;</option>
+                        <option value='import_all'>&vandelay.import.all;</option>
+                        <option value='delete_queue'>&vandelay.delete.queue;</option>
+                    </select>
+                    <script>
+                        var sel = dojo.byId('vl-queue-actions-selector');
+                        sel.onchange = function(evt) {
+                            switch(openils.Util.selectorValue(evt.target)) {
+                                case 'import': vlImportSelectedRecords(); break;;
+                                case 'import_all': vlImportAllRecords(); break;;
+                                case 'delete_queue': 
+                                    if(confirm('&vandelay.sure.to.delete.queue;')) {
+                                        vlDeleteQueue(currentType, currentQueueId, 
+                                            function() { displayGlobalDiv('vl-marc-upload-div'); });
+                                    }
+                            }
+                            evt.target.selectedIndex = 0;
+                        }
+                    </script>
                 </td>
                 <td align='middle' valign='bottom'>
-                    <style>.filter_td { padding-right: 5px; border-right: 2px solid #e8e1cf; } </style>
+                    <style>.filter_span { padding-right: 5px; border-right: 2px solid #e8e1cf; } </style>
                     <table><tr>
-                        <td class='filter_td'>
-                            <table class='small_form_table'><tr>
-                                    <td>&vandelay.limit.to.collision.matches;</td>
-                                    <td><input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowMatches'/></td>
-                                </tr><tr>
-                                    <td>&vandelay.limit.to.non.imported;</td>
-                                    <td><input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowNonImport' checked='checked'/></td>
-                            </tr></table>
-                        </td>
-                        <td class='filter_td' style='padding-left:5px;'>
-                            <div class='nav_row_div'>&vandelay.results.per.page;</div>
-                            <div class='nav_row_div'>
-                                <select style='width:68px;' jsId='vlQueueDisplayLimit' dojoType='dijit.form.FilteringSelect' value='10'>
+                        <td>
+                            <span>&vandelay.limit.to.collision.matches;</span>
+                            <span class='filter_span'>
+                                <input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowMatches' onchange='retrieveQueuedRecords();'/>
+                            </span>
+
+                            <span>&vandelay.limit.to.non.imported;</span>
+                            <span class='filter_span'>
+                                <input dojoType='dijit.form.CheckBox' jsId='vlQueueGridShowNonImport' checked='checked' onchange='retrieveQueuedRecords();'/>
+                            </span>
+
+                            <span>&vandelay.results.per.page;</span>
+                            <span class='filter_span'>
+                                <select jsId='vlQueueDisplayLimit' id='vl-queue-display-limit-selector'
+                                    value='10' onchange='retrieveQueuedRecords();'>
                                     <option value='10'>10</option>
                                     <option value='20'>20</option>
                                     <option value='50'>50</option>
                                     <option value='100'>100</option>
                                 </select>
-                            </div>
-                        </td>
-                        <td class='filter_td' style='padding-left:5px;'>
-                            <div class='nav_row_div'>&vandelay.page;</div>
-                            <div class='nav_row_div'>
-                                <input style='width:36px;' dojoType='dijit.form.TextBox' jsId='vlQueueDisplayPage' value='1'/>
-                            </div>
-                        </td>
-                        <td style='padding-left:5px;'>
-                            <button dojoType='dijit.form.Button' 
-                                onclick='retrieveQueuedRecords(currentType, currentQueueId, handleRetrieveRecords)'>&vandelay.refresh;</button>
+                            </span>
+
+                            <span style='padding-left:5px;'>&vandelay.page;</span>
+                            <input style='width:36px;' dojoType='dijit.form.TextBox' jsId='vlQueueDisplayPage' value='1'/>
                         </td>
                     </tr></table>
                 </td>
                     <span style='padding-right:10px;'>
                         <a href='javascript:void(0);' onclick='vlQueueGridNextPage();'>&vandelay.next.page; &#187;</a>
                     </span>
-                    <span style='background:#e8e1cf;padding:3px 0px 0px 6px;-moz-border-radius:6px 0px 0px 0px;'>
+                    <span style='background:#e8e1cf;padding:3px 2px 2px 6px;-moz-border-radius:6px 0px 0px 0px;'>
                         <a href='javascript:void(0);' onclick='vlQueueGridColumePickerDialog.show();'>&vandelay.select.cols;</a>
                     </span>
                 </td>
index f42d9f4..27831fb 100644 (file)
@@ -5,6 +5,7 @@
 html,body { width:100%; height:100%; border:0; margin:0; padding:0; }
 table { border-collapse: collapse; }
 table.dijitTooltipTable { border-collapse: separate; }
+.content { padding: 5px; }
 .form_table td { padding: 6px; }
 .small_form_table td { padding: 1px; }
 .match_div {
index b7a32f7..14b0636 100644 (file)
@@ -35,6 +35,7 @@ dojo.require("fieldmapper.dojoData");
 dojo.require('openils.CGI');
 dojo.require('openils.User');
 dojo.require('openils.Event');
+dojo.require('openils.Util');
 dojo.require('openils.MarcXPathParser');
 dojo.require('openils.GridColumnPicker');
 
@@ -84,6 +85,9 @@ function vlInit() {
     var initNeeded = 4; // how many async responses do we need before we're init'd 
     var initCount = 0; // how many async reponses we've received
 
+    openils.Util.registerEnterHandler(
+        vlQueueDisplayPage.domNode, function(){retrieveQueuedRecords();});
+
     function checkInitDone() {
         initCount++;
         if(initCount == initNeeded)
@@ -282,11 +286,17 @@ function retrieveQueuedRecords(type, queueId, onload) {
     selectableGridRecords = {};
     resetVlQueueGridLayout();
 
+    if(!type) type = currentType;
+    if(!queueId) queueId = currentQueueId;
+    if(!onload) onload = handleRetrieveRecords;
+
     var method = 'open-ils.vandelay.'+type+'_queue.records.retrieve.atomic';
     if(vlQueueGridShowMatches.checked)
         method = method.replace('records', 'records.matches');
 
-    var limit = parseInt(vlQueueDisplayLimit.getValue());
+    //var limit = parseInt(vlQueueDisplayLimit.getValue());
+    var sel = dojo.byId('vl-queue-display-limit-selector');
+    var limit = parseInt(sel.options[sel.selectedIndex].value);
     var offset = limit * parseInt(vlQueueDisplayPage.getValue()-1);
 
     var params =  [authtoken, queueId, {clear_marc: 1, offset: offset, limit: limit}];
index dbbfa63..10aac24 100644 (file)
@@ -22,7 +22,7 @@
     <head>
         <title>&vandelay.vandelay;</title>
         <link type='text/css' rel='stylesheet' href="/vandelay/vandelay.css"/>
-        <script type="text/javascript" djConfig="parseOnLoad: true,isDebug:true" src="/js/dojo/dojo/dojo.js"></script>
+        <script type="text/javascript" djConfig="parseOnLoad: true,isDebug:false" src="/js/dojo/dojo/dojo.js"></script>
         <script type="text/javascript" src='/js/dojo/openils/MarcXPathParser.js'></script>
         <script type="text/javascript" src='/vandelay/vandelay.js'></script>
     </head>
             <div dojoType="dijit.layout.ContentPane" layoutAlign='client'>
                 <!--#include virtual="inc/progress.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-export-div' class='hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-export-div' class='hidden content'>
                 <!--#include virtual="inc/export.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-upload-div' class='hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-upload-div' class='hidden content'>
                 <!--#include virtual="inc/upload.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-div' class='tall hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-div' class='tall hidden content'>
                 <!--#include virtual="inc/queue.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-match-div' class='tall hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-match-div' class='tall hidden content'>
                 <!--#include virtual="inc/matches.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-html-div' class='tall hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-marc-html-div' class='tall hidden content'>
                 <!--#include virtual="inc/marchtml.xml"-->
             </div>
-            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-select-div' class='tall hidden'>
+            <div dojoType="dijit.layout.ContentPane" layoutAlign='client' id='vl-queue-select-div' class='tall hidden content'>
                 <!--#include virtual="inc/queueselect.xml"-->
             </div>
             <div dojoType="dijit.layout.ContentPane" layoutAlign="client"  id="vl-attr-editor-div" 
-                    class='hidden attr-editor-detail-content-pane' title='&vandelay.edit.attrs;'>
+                    class='hidden attr-editor-detail-content-pane content' title='&vandelay.edit.attrs;'>
                 <!--#include virtual="inc/attrs.xml"-->
             </div>
         </div>