Z3950 Batch : initial xul dialog for finding matches
authorBill Erickson <berick@esilibrary.com>
Mon, 18 Feb 2013 20:49:32 +0000 (15:49 -0500)
committerBill Erickson <berick@esilibrary.com>
Mon, 18 Feb 2013 20:49:32 +0000 (15:49 -0500)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Open-ILS/xul/staff_client/server/cat/bucketz39_dialog.js
Open-ILS/xul/staff_client/server/cat/bucketz39_dialog_overlay.xul

index df29687..b540278 100644 (file)
@@ -1,17 +1,32 @@
 var dialog;
 
 function Bucketz39Dialog() {
-    dump('here....');
 
-    // number of data sets to fetch on page load
-    this.loadCount = 3;
+    this._build_options_grid = function(list, key, id_attr, label_attr) {
 
-    this.item_loaded = function() {
-        if (--this.loadCount > 0) return;
-        // anything to do?
+        // determine the number of columns per row dynamically
+        var grid = dojo.byId(key).parentNode;
+        var colcount = grid.getElementsByTagName('column').length;
+
+        var row;
+        dojo.forEach(list, function(obj, idx) {
+
+            if (idx % colcount == 0) {
+                row = dojo.create('row');
+                dojo.byId(key).appendChild(row);
+            }
+
+            var attrs = {
+                value : obj[id_attr](),
+                label : obj[label_attr]()
+            };
+            attrs[key] = 1;
+
+            row.appendChild(dojo.create('checkbox', attrs));
+        });
     }
 
-    this.load = function() {
+    this.init = function() {
         var self = this;
         var pcrud = new OpenSRF.ClientSession('open-ils.pcrud');
 
@@ -27,16 +42,15 @@ function Bucketz39Dialog() {
                 if (resp = r.recv()) {
                     var qlist = resp.content();
                     dojo.forEach(qlist, function(q) {
-                        var attrs = {value : q.id(), label : q.name()};
+                        var attrs = {label : q.name()};
                         var item = dojo.create('menuitem', attrs);
                         dojo.byId('queue_selector').appendChild(item);
                     });
-                    self.item_loaded();
                 }
             }
         }).send();
 
-        // z39 index maps
+        // z39 index field maps
         pcrud.request({
             method : 'open-ils.pcrud.search.czifm.atomic',
             params : [
@@ -45,19 +59,9 @@ function Bucketz39Dialog() {
                 {order_by : {czifm : 'label'}}
             ],
             oncomplete : function(r) {
-                if (resp = r.recv()) {
-                    var maps = resp.content();
-                    dojo.forEach(maps, function(map) {
-                        var attrs = {
-                            value : map.id(), 
-                            label : map.label(),
-                            index_selector : '1',
-                        };
-                        var cbox = dojo.create('checkbox', attrs);
-                        dojo.byId('index_selector').appendChild(cbox);
-                    });
-                    self.item_loaded();
-                }
+                self._build_options_grid(
+                    r.recv().content(), 
+                    'index_selector', 'id', 'label');
             }
         }).send();
 
@@ -70,22 +74,37 @@ function Bucketz39Dialog() {
                 {order_by : {czs : 'name'}}
             ],
             oncomplete : function(r) {
-                if (resp = r.recv()) {
-                    var sources = resp.content();
-                    dojo.forEach(sources, function(src) {
-                        var attrs = {
-                            value : src.name(), 
-                            label : src.label(),
-                            source_selector : '1',
-                        };
-                        var item = dojo.create('checkbox', attrs);
-                        dojo.byId('source_selector').appendChild(item);
-                    });
-                    self.item_loaded();
-                }
+                self._build_options_grid(
+                    r.recv().content(), 
+                    'source_selector', 'name', 'label');
             }
         }).send();
     }
+
+    this.submit = function() {
+        
+        var params = [this.authtoken, this.user_id];
+
+        // Z39 sources
+        params.push(dojo.query('[source_selector]').filter(
+            function(cbox) { return cbox.checked }).map(
+                function(cbox) { return cbox.getAttribute('value') }));
+
+        // indexes
+        params.push(dojo.query('[index_selector]').filter(
+            function(cbox) { return cbox.checked }).map(
+                function(cbox) { return cbox.getAttribute('value') }));
+
+        params.push({queue_name : dojo.byId('queue_selector').parentNode.value});
+
+        dump('submitting z39 search with: ' + js2JSON(params) + '\n');
+
+        /*
+        open-ils.search
+        open-ils.search.z3950.bucket_search_queue
+        "fcb49802e337036baf7225c7044f04e4", 1, ["biblios", "loc"], [3], {"queue_name":"zq1"}
+        */
+    }
 }
 
 function my_init() {
@@ -93,5 +112,5 @@ function my_init() {
     dialog.user_id = window.arguments[0];
     dialog.authtoken = window.arguments[1];
     dialog.bucket_id = window.arguments[2];
-    dialog.load();
+    dialog.init();
 }
index d70d326..c19648a 100644 (file)
             <grid>                                                     
                 <columns><column /><column /></columns>
                 <rows>      
-                    <row>
-                        <label value="Search These Z39.50 Servers:"/>
-                        <vbox id='source_selector'>
-                        </vbox>
+                    <row style='border-bottom:1px solid black; padding:5px;'>
+                        <label class='header' value="Search These Z39.50 Servers:"/>
+                        <grid>
+                            <columns>
+                                <!-- display 2 Z-sources per row -->
+                                <column />
+                                <column />
+                            </columns>
+                            <rows id='source_selector'>
+                            </rows>
+                        </grid>
                     </row>
-                    <row id='index_selector_row'>
-                        <label value="Use These Match Points:"/>
-                        <vbox id='index_selector'>
-                        </vbox>
+                    <row style='border-bottom:1px solid black; padding:5px;'>
+                        <label class='header' value="Use These Z39.50 Search Indexes:"/>
+                        <grid>
+                            <columns>
+                                <!-- display 3 Z-index options per row -->
+                                <column />
+                                <column />
+                                <column />
+                            </columns>
+                            <rows id='index_selector'>
+                            </rows>
+                        </grid>
                     </row>
-                    <row>
-                        <label value="Add Results to Queue:"/>
+                    <row style='border-bottom:1px solid black; padding:5px;'>
+                        <label class='header' value="Add Results to Queue:"/>
                         <menulist editable='true'>
                             <menupopup id='queue_selector'>
-                                <menuitem value='' label="-- Select Queue -->"/>
                             </menupopup>
                         </menulist>
                     </row>
+                    <row style='padding:5px;'>
+                        <button oncommand="window.close();" 
+                            icon="remove" accesskey="C" label="Cancel" />  
+                        <button oncommand="dialog.submit();" 
+                            icon="accept" accesskey="P" label="Perform Search" />  
+                    </row>
                 </rows>
             </grid>
-            <hbox pack='center'>
-                <button oncommand="window.close();" 
-                    icon="remove" accesskey="C" label="Cancel" />  
-                <button oncommand="dialog.submit();" 
-                    icon="accept" accesskey="P" label="Perform Search" />  
-            </hbox>
         </vbox>
     </box>
 </overlay>