Show
Ignore:
Timestamp:
05/07/08 13:33:19 (2 months ago)
Author:
erickson
Message:

more progress toward dojo-ized search interface

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/acq-experiment/Open-ILS/web/oilsweb/oilsweb/templates/oils/default/acq/picklist/bib_search.html

    r9516 r9519  
    66<%def name="block_content()"> 
    77 
     8    <style> 
     9        @import url(${c.oils.core.media_prefix.value}/js/dojo/dojox/form/resources/CheckedMultiSelect.css); 
     10    </style> 
     11 
    812    <script> 
    9         dojo.require('dijit.form.MultiSelect'); 
     13        //dojo.require('dijit.form.MultiSelect'); 
     14        dojo.require('dojox.form.CheckedMultiSelect'); 
    1015        dojo.require('fieldmapper.Fieldmapper'); 
    1116        dojo.require('dojo.data.ItemFileReadStore'); 
    1217        dojo.require('openils.Event'); 
     18 
     19        var searchFields = []; 
    1320 
    1421        var user = new openils.User(); 
     
    2229            openils.Event.parse_and_raise(sources); 
    2330 
    24             fields = {}; 
    25  
    2631            for(var name in sources) { 
    2732                source = sources[name]; 
    28                 o = document.createElement('option'); 
    29                 o.value = name; 
    30                 o.appendChild(document.createTextNode(name+' : '+source.host)); 
    31                 bibSourceSelect.domNode.appendChild(o); 
     33                bibSourceSelect.addOption(name, name+':'+source.host); 
    3234                for(var attr in source.attrs)  
    33                     if(!attr.match(/^#/)) 
    34                         fields[attr] = 1; 
     35                    if(!attr.match(/^#/)) // xml comment nodes 
     36                        searchFields.push(source.attrs[attr]); 
    3537            } 
    3638 
    37             for(var field in fields) { 
    38                 input = new dijit.form.TextBox({name:field, label:field}); 
    39                 dojo.byId('oils-acq-search-fields').appendChild(document.createTextNode(field)); 
     39            searchFields = searchFields.sort( 
     40                function(a,b) { 
     41                    if(a.label < b.label)  
     42                        return -1; 
     43                    if(a.label > b.label)  
     44                        return 1; 
     45                    return 0; 
     46                } 
     47            ); 
     48 
     49            for(var f in searchFields) { 
     50                var field = searchFields[f]; 
     51                if(dijit.byId('text_input_'+field.name)) 
     52                    continue; 
     53                input = new dijit.form.TextBox({name:field.name, label:field.label, id:'text_input_'+field.name}); 
     54                dojo.byId('oils-acq-search-fields').appendChild(document.createTextNode(field.label)); 
    4055                dojo.byId('oils-acq-search-fields').appendChild(input.domNode); 
    4156                dojo.byId('oils-acq-search-fields').appendChild(document.createElement('br')); 
     
    4560 
    4661        function doSearch() { 
    47             alert(bibSourceSelect.getValue()); 
     62 
     63            search = { 
     64                service : [], 
     65                username : [], 
     66                password : [], 
     67                search : {}, 
     68                limit : ${c.oils.acq.limit.value}, 
     69                offset : ${c.oils.acq.offset.value} 
     70            } 
     71 
     72            var selected = bibSourceSelect.getValue(); 
     73            for(var i = 0; i < selected.length; i++) { 
     74                search.service.push(selected[i]); 
     75                search.username.push(''); 
     76                search.password.push(''); 
     77            } 
     78 
     79            for(var f in searchFields) { 
     80                var field = searchFields[f]; 
     81                var input = dijit.byId('text_input_'+field.name); 
     82                if(input.getValue()) 
     83                    search.search[field.name] = input.getValue(); 
     84            } 
     85 
     86            alert(js2JSON(search)); 
     87            fieldmapper.standardRequest( 
     88                ['open-ils.search', 'open-ils.search.z3950.search_class'], 
     89                {   async: true, 
     90                    params: [user.authtoken, search], 
     91                    onresponse: handleResult, 
     92                    oncomplete: viewPicklist 
     93                } 
     94            ); 
    4895        } 
     96         
     97        function viewPicklist() { 
     98            location.href = '${c.oils.acq.prefix.value}/picklist/view/' + resultPicklist.id(); 
     99        } 
     100 
     101        var resultPicklist; 
     102        function handleResult(r) { 
     103            var result = r.recv().content(); 
     104            if(!resultPicklist) 
     105                createResultPicklist(); 
     106 
     107            for(var idx in result.records) { 
     108                var rec = result.records[idx]; 
     109                var lineitem =  new jub() 
     110 
     111                lineitem.picklist(resultPicklist.id()); 
     112                lineitem.source_label(result.service) 
     113                lineitem.marc(rec.marcxml) 
     114                lineitem.eg_bib_id(rec.bibid) 
     115 
     116                var id = fieldmapper.standardRequest( 
     117                    ['open-ils.acq', 'open-ils.acq.lineitem.create'], 
     118                    [user.authtoken, lineitem] 
     119                ); 
     120                alert('created id ' + id); 
     121            } 
     122        } 
     123 
     124        function createResultPicklist() { 
     125            resultPicklist = new acqpl(); 
     126            resultPicklist.name(''); 
     127            resultPicklist.owner(user.user.id()); 
     128 
     129            alert(js2JSON(resultPicklist)); 
     130 
     131            /* delete the old picklist with name = '' */ 
     132            var pl = fieldmapper.standardRequest( 
     133                ['open-ils.acq', 'open-ils.acq.picklist.name.retrieve'], 
     134                [user.authtoken, ''] 
     135            ); 
     136 
     137            if(pl) { 
     138                fieldmapper.standardRequest( 
     139                    ['open-ils.acq', 'open-ils.acq.picklist.delete'], 
     140                    [user.authtoken, pl.id()] 
     141                ); 
     142            } 
     143 
     144            resultPicklist.id( 
     145                fieldmapper.standardRequest( 
     146                    ['open-ils.acq', 'open-ils.acq.picklist.create'], 
     147                    [user.authtoken, resultPicklist] 
     148                ) 
     149            ); 
     150        } 
     151 
    49152    </script> 
    50153 
     
    52155        <div id='oils-acq-search-sources-block'> 
    53156            <div id='oils-acq-search-sources-label'>${_('Search Sources')}</div> 
    54             <select jsId="bibSourceSelect" dojoType="dijit.form.MultiSelect" value="evergreen">  
    55                 <option value='evergreen'>${_('Evergreen Catalog')}</option> 
     157            <select multiple='true' jsId="bibSourceSelect" dojoType="dojox.form.CheckedMultiSelect"> 
     158                <option value='native-evergreen-catalog'>${_('Evergreen Catalog')}</option> 
    56159            </select> 
    57160        </div>