]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/skin/default/js/advanced.js
added pub date sorting to rresult page and made a way to get there from the advanced...
[Evergreen.git] / Open-ILS / web / opac / skin / default / js / advanced.js
1 /* advanced search interface */
2
3 attachEvt("common", "run", advInit);
4
5 /* tests the cookie rresult stuff 
6
7 function advTestCookie() {
8         var ids = [ 
9                 40791, 40792, 40793, 40794, 40795, 40797, 40798, 40799, 362178, 362179, 
10                 362180, 362170, 338215, 333398, 329010, 17, 362182, 362183, 362184, 362185 ];
11
12         cookieManager.write(COOKIE_RIDS, js2JSON(ids), '+1h');
13         var a = {};
14         a.page = RRESULT;
15         a[PARAM_RTYPE] = RTYPE_COOKIE;
16         goTo(buildOPACLink(a));
17 }
18 */
19
20
21
22 function advInit() { 
23         $('advanced.wizard.contains').focus();
24         depthSelInit(); 
25
26         var wiz = [
27                 'advanced.wizard.contains',
28                 'advanced.wizard.nocontains',
29                 'advanced.wizard.exact',
30                 'search_type_selector',
31                 'advanced.wizard.form_selector' ];
32         for( var node in wiz ) 
33                 setEnterFunc( $(wiz[node]), advWizardRun );
34
35         var ref = [
36                 'advanced.refined.title_contains',
37                 'advanced.refined.author_contains',
38                 'advanced.refined.subject_contains',
39                 'advanced.refined.series_contains',
40                 'advanced.refined.form_selector',
41                 'advanced.refined.series_type',
42                 'advanced.refined.subject_type',
43                 'advanced.refined.author_type',
44                 'advanced.refined.title_type' ];
45         for( var i in ref ) 
46                 setEnterFunc( $(ref[i]), advRefinedRun );
47
48         setEnterFunc($('opac.advanced.quick.isbn'), advISBNRun );
49         setEnterFunc($('opac.advanced.quick.issn'), advISSNRun );
50         setEnterFunc( $n( $('advanced.marc.tbody'), 'advanced.marc.value'), advMARCRun );
51 }
52
53
54 function advWizardRun() {
55         var contains = $('advanced.wizard.contains').value;
56         var nocontains = $('advanced.wizard.nocontains').value; 
57         var exact       = $('advanced.wizard.exact').value; 
58         var form                = getSelectorVal($('advanced.wizard.form_selector'));
59         var type                = getSelectorVal($('search_type_selector'));
60         var sort                = getSelectorVal($('advanced.wizard.sort_by'));
61         var sortdir     = getSelectorVal($('advanced.wizard.sort_dir'));
62
63         var arg = {};
64         arg.page = MRESULT;
65         arg[PARAM_FORM]         = form;
66         arg[PARAM_STYPE]                = type;
67         arg[PARAM_OFFSET]               = 0;
68         arg[PARAM_DEPTH]                = depthSelGetDepth();
69         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
70         arg[PARAM_TERM]         = advBuildSearch( contains, nocontains, exact );
71         arg[PARAM_SORT]         = sort;
72         arg[PARAM_SORT_DIR]     = sortdir;
73
74         if( sort == SORT_TYPE_PUBDATE ) {
75                 arg.page = RRESULT;
76                 arg[PARAM_RTYPE]        = type;
77         }
78
79         goTo(buildOPACLink(arg));
80 }
81
82 function advBuildSearch( contains, nocontains, exact ) {
83         var string = "";
84         if(contains) string = contains;
85
86         if( exact ) {
87                 if(exact.indexOf('"') > -1) string += " " + exact;
88                 else string += " \"" + exact + "\"";
89         }
90
91         if(nocontains) {
92                 var words = nocontains.split(" ");
93                 for( var i in words ) 
94                         string += " -" + words[i];
95         }
96         return string;
97 }
98
99
100 function advRefinedRun() {
101         var title       = $('advanced.refined.title_contains').value;
102         var author      = $('advanced.refined.author_contains').value;
103         var subject = $('advanced.refined.subject_contains').value;
104         var series      = $('advanced.refined.series_contains').value;
105         var form = getSelectorVal($('advanced.refined.form_selector'));
106         var sort                = getSelectorVal($('advanced.refined.sort_by'));
107         var sortdir     = getSelectorVal($('advanced.refined.sort_dir'));
108
109         var blob = {};
110         title = advRefinedTerm('title', title);
111         author = advRefinedTerm('author', author);
112         subject = advRefinedTerm('subject', subject);
113         series = advRefinedTerm('series', series);
114
115         if(title) { blob.title = {}; blob.title.term =  title; }
116         if(author) { blob.author = {}; blob.author.term = author;}
117         if(subject) { blob.subject = {}; blob.subject.term = subject;}
118         if(series) { blob.series = {}; blob.series.term = series; }
119
120         var arg                                 = {};
121         arg.page                                        = MRESULT;
122         arg[PARAM_FORM]         = form;
123         arg[PARAM_STYPE]                = "";
124         arg[PARAM_TERM]         = "";
125         arg[PARAM_ADVTERM]      = js2JSON(blob);
126         arg[PARAM_DEPTH]                = depthSelGetDepth();
127         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
128         arg[PARAM_OFFSET]               = 0;
129         arg[PARAM_ADVTYPE]      = ADVTYPE_MULTI;
130         arg[PARAM_SORT]         = sort;
131         arg[PARAM_SORT_DIR]     = sortdir;
132
133         goTo(buildOPACLink(arg));
134
135 }
136
137 function advISBNRun() {
138         var isbn = $('opac.advanced.quick.isbn').value;
139         if(!isbn) return;
140         var arg                                 = {};
141         arg.page                                        = MRESULT;
142         arg[PARAM_STYPE]                = "";
143         arg[PARAM_TERM]         = "";
144         arg[PARAM_ADVTERM]      = isbn;
145         arg[PARAM_OFFSET]               = 0;
146         arg[PARAM_ADVTYPE]      = ADVTYPE_ISBN;
147         goTo(buildOPACLink(arg));
148 }
149
150 function advISSNRun() {
151         var issn = $('opac.advanced.quick.issn').value;
152         if(!issn) return;
153         var arg                                 = {};
154         arg.page                                        = MRESULT;
155         arg[PARAM_STYPE]                = "";
156         arg[PARAM_TERM]         = "";
157         arg[PARAM_ADVTERM]      = issn;
158         arg[PARAM_OFFSET]               = 0;
159         arg[PARAM_ADVTYPE]      = ADVTYPE_ISSN;
160         goTo(buildOPACLink(arg));
161 }
162
163
164 function advRefinedTerm( type, term ) {
165         var t = getSelectorVal($('advanced.refined.' + type + '_type'));
166         var string;
167
168         if( t == 'contains' ) string = advBuildSearch( term );
169         else if( t == 'nocontains' ) string = advBuildSearch( null, term );
170         else if( t == 'exact' ) string = advBuildSearch( null, null, term );
171
172         return string;
173 }
174
175
176 function advAddMARC() {
177         $('advanced.marc.tbody').insertBefore(
178                 $('advanced.marc.template').cloneNode(true),
179                 $('advanced.marc.submit.row'));
180 }
181
182 function advMARCRun() {
183
184         var t = $('advanced.marc.tbody');
185         var searches = [];
186         /*
187         for( var c in t.childNodes ) {
188                 var child = t.childNodes[c];
189                 if(child.nodeName == 'tr') {
190                         alert("hi");
191                         var val = advExtractMARC(child);
192                         if(val) searches.push(val);
193                 }
194         }
195         */
196
197         var children = t.getElementsByTagName('tr');
198         for( var c in children ) {
199                 var child = children[c];
200                 if(!(child && child.innerHTML)) continue;
201                 var val = advExtractMARC(child);
202                 if(val) searches.push(val);
203         }
204
205         if(searches.length == 0) return;
206
207         var arg = {};
208         arg.page = MRESULT;
209         arg[PARAM_FORM] = 'all'
210         arg[PARAM_STYPE] = "";
211         arg[PARAM_OFFSET] = 0;
212         arg[PARAM_DEPTH]        = depthSelGetDepth();
213         arg[PARAM_LOCATION]     = depthSelGetNewLoc();
214         arg[PARAM_ADVTERM] = js2JSON(searches);
215         arg[PARAM_ADVTYPE] = ADVTYPE_MARC;
216         arg[PARAM_TERM] = "";
217
218         goTo(buildOPACLink(arg));
219 }
220
221
222 /* EXAMPLE => {"term":"0516011901","restrict":[{"tag":"020","subfield":"a"}]} */
223 function advExtractMARC(row) {
224         if(!row || row.id == 'advanced.marc.submit.row') return null;
225         var term = $n(row, 'advanced.marc.value').value;
226         if(!term) return null;
227
228         var subfield = $n(row, 'advanced.marc.subfield').value;
229         if(!subfield) subfield = "_";
230
231         var tag = $n(row, 'advanced.marc.tag').value;
232         if(!tag) return null;
233
234         return { 'term' : term, 'restrict' :  [ { 'tag' : tag, 'subfield' : subfield } ] };
235 }
236