]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/adv_global.js
added ability to clear search params before populating
[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         clearSearchParams();
80
81         var args = {};
82         args.page = MRESULT;
83         args[PARAM_ITEMFORM] = itemforms;
84         args[PARAM_ITEMTYPE] = itemtypes;
85         args[PARAM_LITFORM]     = litforms;
86         args[PARAM_AUDIENCE]    = audiences;
87         args[PARAM_LANGUAGE] = languages;
88         args[PARAM_SEARCHES]    = js2JSON(searches); /* break these out */
89         args[PARAM_DEPTH]               = depthSelGetDepth();
90         args[PARAM_LOCATION]    = depthSelGetNewLoc();
91         args[PARAM_SORT]                = sortby;
92         args[PARAM_SORT_DIR]    = sortdir;
93         args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;
94         args[PARAM_STYPE]               = "";
95         args[PARAM_TERM]                = "";
96
97         /* pubdate sorting causes a record (not metarecord) search */
98         if( sortby == SORT_TYPE_PUBDATE ) {
99                 args.page = RRESULT;
100                 args[PARAM_RTYPE] = RTYPE_MULTI;
101         }
102
103         goTo(buildOPACLink(args));
104 }
105
106
107 function advBuildSearchBlob() {
108
109         var searches;
110         var tbody    = $('adv_global_tbody');
111         var rows     = tbody.getElementsByTagName('tr');
112
113         for( var i in rows ) {
114
115                 var row = rows[i];
116                 if(!(row && typeof row == 'object')) continue;
117                 if(!row.getAttribute('type')) continue;
118                 
119                 var stype        = getSelectorVal($n(row, 'type'));
120                 var contains = getSelectorVal($n(row, 'contains'));
121                 var term                 = $n(row, 'term').value;
122                 if(!term) continue;
123
124                 var string = "";
125                 if(!searches) searches = {};
126                 if(searches[stype]) 
127                         string = searches[stype].term;
128                 else searches[stype] = {};
129
130                 switch(contains) {
131                         case 'contains' : 
132                                 string += " " + term; 
133                                 break;
134
135                         case 'nocontains' : {
136                                 var words = term.split(" ");
137                                         for( var i in words ) 
138                                                 string += " -" + words[i];
139                                 }
140                                 break;
141
142                         case 'exact' : 
143                                 if(term.indexOf('"') > -1) string += " " + term;
144                                 else string += " \"" + term + "\"";
145                                 break;
146                 }
147                 if(string) searches[stype].term = string;
148         }
149
150         return searches;
151 }
152
153
154
155