]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/adv_global.js
stripping single quotes in searches
[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         var input = $n($('adv_global_trow'), 'term');
28         input.focus();
29         setEnterFunc(input, advSubmitGlobal);
30 }
31
32 function advAddGblRow() {
33         var tbody = $("adv_global_tbody");
34         var newrow = $("adv_global_trow").cloneNode(true);
35         tbody.insertBefore(newrow, $("adv_global_addrow"));
36         var input = $n(newrow, "term");
37         input.value = "";
38         setEnterFunc(input, advSubmitGlobal);
39         $n(newrow, 'type').focus();
40 }
41
42 function advDrawBibExtras(r) {
43         var data = r.getResultObject();
44         var sel = r.sel;
45
46         data = data.sort( /* sort alphabetically */
47                 function(a,b) { 
48                         if( a.value() < b.value() ) return -1;
49                         if( a.value() > b.value() ) return 1;
50                         return 0;
51                 }
52         );
53
54         for( var d = 0; d < data.length; d++ ) {
55                 var thing = data[d];
56                 var opt = insertSelectorVal( sel, -1, thing.value(), thing.code() );
57                 opt.setAttribute('title', thing.value());
58         }
59 }
60
61 function advSelToStringList(sel) {
62         var list = getSelectedList(sel);
63         var vals = [];
64         for( var i = 0; i < list.length; i++ ) {
65                 var str = list[i];
66                 for( var j = 0; j < str.length; j++ ) {
67                         if(str.charAt(j) == ' ') continue;
68                         vals.push(str.charAt(j));
69                 }
70         }
71         return vals.toString();
72 }
73
74 function advGetVisSelectorVals(id) {
75         var basic = id + '_basic';
76         if(! $(id).className.match(/hide_me/)) 
77                 return advSelToStringList($(id));
78         return advSelToStringList($(basic));
79 }
80
81 function advSubmitGlobal() {
82         
83         var sortdir = getSelectorVal($('adv_global_sort_dir'));
84         var sortby  = getSelectorVal($('adv_global_sort_by'));
85
86         var litforms  = advGetVisSelectorVals('adv_global_lit_form');
87         var itemforms = advGetVisSelectorVals('adv_global_item_form');
88         var itemtypes = advGetVisSelectorVals('adv_global_item_type');
89         var audiences = advGetVisSelectorVals('adv_global_audience');
90         var languages = getSelectedList($('adv_global_lang')) + '';     
91
92         var searches = advBuildSearchBlob();
93         if(!searches) return;
94
95         clearSearchParams();
96
97         var args = {};
98         args.page = MRESULT;
99         args[PARAM_ITEMFORM] = itemforms;
100         args[PARAM_ITEMTYPE] = itemtypes;
101         args[PARAM_LITFORM]     = litforms;
102         args[PARAM_AUDIENCE]    = audiences;
103         args[PARAM_LANGUAGE] = languages;
104         args[PARAM_SEARCHES]    = js2JSON(searches); /* break these out */
105         args[PARAM_DEPTH]               = depthSelGetDepth();
106         args[PARAM_LOCATION]    = depthSelGetNewLoc();
107         args[PARAM_SORT]                = sortby;
108         args[PARAM_SORT_DIR]    = sortdir;
109         args[PARAM_ADVTYPE]     = ADVTYPE_MULTI;
110         args[PARAM_STYPE]               = "";
111         args[PARAM_TERM]                = "";
112
113         /* pubdate sorting causes a record (not metarecord) search */
114         if( sortby == SORT_TYPE_PUBDATE ) {
115                 args.page = RRESULT;
116                 args[PARAM_RTYPE] = RTYPE_MULTI;
117         }
118
119         goTo(buildOPACLink(args));
120 }
121
122
123 function advBuildSearchBlob() {
124
125         var searches;
126         var tbody    = $('adv_global_tbody');
127         var rows     = tbody.getElementsByTagName('tr');
128
129         for( var i = 0; i < rows.length; i++ ) {
130
131                 var row = rows[i];
132                 if(!(row && typeof row == 'object')) continue;
133                 if(!row.getAttribute('type')) continue;
134                 
135                 var stype        = getSelectorVal($n(row, 'type'));
136                 var contains = getSelectorVal($n(row, 'contains'));
137                 var term                 = $n(row, 'term').value;
138                 if(!term) continue;
139
140                 var string = "";
141                 if(!searches) searches = {};
142                 if(searches[stype]) 
143                         string = searches[stype].term;
144                 else searches[stype] = {};
145
146                 switch(contains) {
147                         case 'contains' : 
148                                 string += " " + term; 
149                                 break;
150
151                         case 'nocontains' : {
152                                 var words = term.split(" ");
153                                         for( var i in words ) 
154                                                 string += " -" + words[i];
155                                 }
156                                 break;
157
158                         case 'exact' : 
159                                 if(term.indexOf('"') > -1) string += " " + term;
160                                 else string += " \"" + term + "\"";
161                                 break;
162                 }
163                 if(string) {
164                         string = string.replace(/'/,'');
165                         searches[stype].term = string;
166                 }
167         }
168
169         return searches;
170 }
171
172
173
174