]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/adv_global.js
supporting code for the newer advanced search interface
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / adv_global.js
1
2 attachEvt("common", "run", advgInit);
3
4 function advgInit() {
5
6         $n($('adv_global_tbody'), 'term').focus();
7
8         var extras = [ 
9                 FETCH_LIT_FORMS, 
10                 FETCH_ITEM_FORMS, 
11                 FETCH_ITEM_TYPES, 
12                 FETCH_AUDIENCES ];
13
14         for( var x in extras ) {
15
16                 var req = new Request(extras[x]);
17
18                 if(x == 0) req.request.sel = $('adv_global_lit_form');
19                 if(x == 1) req.request.sel = $('adv_global_item_form');
20                 if(x == 2) req.request.sel = $('adv_global_item_type');
21                 if(x == 3) req.request.sel = $('adv_global_audience');
22
23                 req.callback(advDrawBibExtras);
24                 req.send();
25         }
26 }
27
28 function advDrawBibExtras(r) {
29         var data = r.getResultObject();
30         var sel = r.sel;
31
32         data = data.sort( /* sort alphabetically */
33                 function(a,b) { 
34                         if( a.value() < b.value() ) return -1;
35                         if( a.value() > b.value() ) return 1;
36                         return 0;
37                 }
38         );
39
40         for( var d in data ) {
41                 var thing = data[d];
42                 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
43                 opt.setAttribute('title', thing.value());
44         }
45 }
46
47 function advSelToStringList(sel) {
48         var list = getSelectedList(sel);
49         var vals = [];
50         for( var i = 0; i < list.length; i++ ) {
51                 var str = list[i];
52                 for( var j = 0; j < str.length; j++ )
53                         vals.push(str.charAt(j));
54         }
55         return vals.toString();
56 }
57
58 function advGetVisSelectorVals(id) {
59         var basic = id + '_basic';
60         if(! $(id).className.match(/hide_me/)) 
61                 return advSelToStringList($(id));
62         return advSelToStringList($(basic));
63 }
64
65 function advSubmitGlobal() {
66         
67         var sortdir = getSelectorVal($('adv_global_sort_dir'));
68         var sortby  = getSelectorVal($('adv_global_sort_by'));
69
70         var litforms  = advGetVisSelectorVals('adv_global_lit_form');
71         var itemforms = advGetVisSelectorVals('adv_global_item_form');
72         var itemtypes = advGetVisSelectorVals('adv_global_item_type');
73         var audiences = advGetVisSelectorVals('adv_global_audience');
74         var languages = advGetVisSelectorVals('adv_global_lang');       
75
76         var searches = advBuildSearchBlob();
77         if(!searches) return;
78
79         var args = {};
80         args.page = MRESULT;
81         args[PARAM_ITEMFORM] = itemforms;
82         args[PARAM_ITEMTYPE] = itemtypes;
83         args[PARAM_LITFORM]     = litforms;
84         args[PARAM_AUDIENCE]    = audiences;
85         args[PARAM_LANGUAGE] = languages;
86         args[PARAM_SEARCHES]    = js2JSON(searches); /* break these out */
87         args[PARAM_OFFSET]      = 0;
88         args[PARAM_DEPTH]               = depthSelGetDepth();
89         args[PARAM_LOCATION]    = depthSelGetNewLoc();
90         args[PARAM_SORT]                = sortby;
91         args[PARAM_SORT_DIR]    = sortdir;
92         args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;
93         args[PARAM_STYPE]               = "";
94         args[PARAM_TERM]                = "";
95
96         /* pubdate sorting causes a record (not metarecord) search */
97         if( sortby == SORT_TYPE_PUBDATE ) {
98                 args.page = RRESULT;
99                 args[PARAM_RTYPE] = RTYPE_MULTI;
100         }
101
102         goTo(buildOPACLink(args));
103 }
104
105
106 function advBuildSearchBlob() {
107
108         var searches;
109         var tbody    = $('adv_global_tbody');
110         var rows     = tbody.getElementsByTagName('tr');
111
112         for( var i in rows ) {
113
114                 var row = rows[i];
115                 if(!(row && typeof row == 'object')) continue;
116                 if(!row.getAttribute('type')) continue;
117                 
118                 var stype        = getSelectorVal($n(row, 'type'));
119                 var contains = getSelectorVal($n(row, 'contains'));
120                 var term                 = $n(row, 'term').value;
121                 if(!term) continue;
122
123                 var string = "";
124                 if(!searches) searches = {};
125                 if(searches[stype]) 
126                         string = searches[stype].term;
127                 else searches[stype] = {};
128
129                 switch(contains) {
130                         case 'contains' : 
131                                 string += " " + term; 
132                                 break;
133
134                         case 'nocontains' : {
135                                 var words = term.split(" ");
136                                         for( var i in words ) 
137                                                 string += " -" + words[i];
138                                 }
139                                 break;
140
141                         case 'exact' : 
142                                 if(term.indexOf('"') > -1) string += " " + term;
143                                 else string += " \"" + term + "\"";
144                                 break;
145                 }
146                 if(string) searches[stype].term = string;
147         }
148
149         return searches;
150 }
151
152
153
154