]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/search_form.js
Patch from Craig Ricciuto to bring i18n to the patron staff client interfaces
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / search_form.js
1 dump('entering patron/search_form.js\n');
2
3 if (typeof patron == 'undefined') patron = {};
4 patron.search_form = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8         this.w = window;
9 }
10
11 patron.search_form.prototype = {
12
13         'init' : function( params ) {
14
15                 var obj = this;
16
17                 JSAN.use('OpenILS.data'); this.OpenILS = {}; 
18                 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
19
20                 JSAN.use('util.controller'); obj.controller = new util.controller();
21                 obj.controller.init(
22                         {
23                                 control_map : {
24                                         'cmd_broken' : [
25                                                 ['command'],
26                                                 function() { alert($("commonStrings").getString('common.unimplemented')); }
27                                         ],
28                                         'cmd_patron_search_submit' : [
29                                                 ['command'],
30                                                 function() {
31                                                         obj.submit();
32                                                 }
33                                         ],
34                                         'cmd_patron_search_clear' : [
35                                                 ['command'],
36                                                 function() { 
37                                                         obj.controller.render(); 
38                                                         window.xulG.clear_left_deck();
39                                                 }
40                                         ],
41                                         'family_name' : [
42                                                 ['render'],
43                                                 function(e) {
44                                                         return function() {
45                                                                 if (params.query&&params.query.family_name) {
46                                                                         e.setAttribute('value',params.query.family_name);
47                                                                         e.value = params.query.family_name;
48                                                                 } else {
49                                                                         e.value = '';
50                                                                 }
51                                                         };
52                                                 }
53                                         ],
54                                         'first_given_name' : [
55                                                 ['render'],
56                                                 function(e) {
57                                                         return function() {
58                                                                 if (params.query&&params.query.first_given_name) {
59                                                                         e.setAttribute('value',params.query.first_given_name);
60                                                                         e.value = params.query.first_given_name;
61                                                                 } else {
62                                                                         e.value = '';
63                                                                 }
64                                                         };
65                                                 }
66                                         ],
67                                         'second_given_name' : [
68                                                 ['render'],
69                                                 function(e) {
70                                                         return function() {
71                                                                 if (params.query&&params.query.second_given_name) {
72                                                                         e.setAttribute('value',params.query.second_given_name);
73                                                                         e.value = params.query.second_given_name;
74                                                                 } else {
75                                                                         e.value = '';
76                                                                 }
77                                                         };
78                                                 }
79                                         ],
80                                         'email' : [
81                                                 ['render'],
82                                                 function(e) {
83                                                         return function() {
84                                                                 if (params.query&&params.query.email) {
85                                                                         e.setAttribute('value',params.query.email);
86                                                                         e.value = params.query.email;
87                                                                 } else {
88                                                                         e.value = '';
89                                                                 }
90                                                         };
91                                                 }
92                                         ],
93                                         'phone' : [
94                                                 ['render'],
95                                                 function(e) {
96                                                         return function() {
97                                                                 if (params.query&&params.query.phone) {
98                                                                         e.setAttribute('value',params.query.phone);
99                                                                         e.value = params.query.phone;
100                                                                 } else {
101                                                                         e.value = '';
102                                                                 }
103                                                         };
104                                                 }
105                                         ],
106                                         'ident' : [
107                                                 ['render'],
108                                                 function(e) {
109                                                         return function() {
110                                                                 if (params.query&&params.query.ident) {
111                                                                         e.setAttribute('value',params.query.ident);
112                                                                         e.value = params.query.ident;
113                                                                 } else if (params.query&&params.query.ident_value) {
114                                                                         e.setAttribute('value',params.query.ident_value);
115                                                                         e.value = params.query.ident_value;
116                                                                 } else if (params.query&&params.query.ident_value2) {
117                                                                         e.setAttribute('value',params.query.ident_value2);
118                                                                         e.value = params.query.ident_value2;
119                                                                 } else {
120                                                                         e.value = '';
121                                                                 }
122                                                         };
123                                                 }
124                                         ],
125                                         'street1' : [
126                                                 ['render'],
127                                                 function(e) {
128                                                         return function() {
129                                                                 if (params.query&&params.query.street1) {
130                                                                         e.setAttribute('value',params.query.street1);
131                                                                         e.value = params.query.street1;
132                                                                 } else {
133                                                                         e.value = '';
134                                                                 }
135                                                         };
136                                                 }
137                                         ],
138                                         'street2' : [
139                                                 ['render'],
140                                                 function(e) {
141                                                         return function() {
142                                                                 if (params.query&&params.query.street2) {
143                                                                         e.setAttribute('value',params.query.street2);
144                                                                         e.value = params.query.street2;
145                                                                 } else {
146                                                                         e.value = '';
147                                                                 }
148                                                         };
149                                                 }
150                                         ],
151                                         'city' : [
152                                                 ['render'],
153                                                 function(e) {
154                                                         return function() {
155                                                                 if (params.query&&params.query.city) {
156                                                                         e.setAttribute('value',params.query.city);
157                                                                         e.value = params.query.city;
158                                                                 } else {
159                                                                         e.value = '';
160                                                                 }
161                                                         };
162                                                 }
163                                         ],
164                                         'state' : [
165                                                 ['render'],
166                                                 function(e) {
167                                                         return function() {
168                                                                 if (params.query&&params.query.state) {
169                                                                         e.setAttribute('value',params.query.state);
170                                                                         e.value = params.query.state;
171                                                                 } else {
172                                                                         e.value = '';
173                                                                 }
174                                                         };
175                                                 }
176                                         ],
177                                         'post_code' : [
178                                                 ['render'],
179                                                 function(e) {
180                                                         return function() {
181                                                                 if (params.query&&params.query.post_code) {
182                                                                         e.setAttribute('value',params.query.post_code);
183                                                                         e.value = params.query.post_code;
184                                                                 } else {
185                                                                         e.value = '';
186                                                                 }
187                                                         };
188                                                 }
189                                         ],
190                                         'inactive' : [ ['render'], function(e) { 
191                             return function() {}; 
192                         } 
193                     ],
194                     'search_depth' : [ ['render'],function(e) {
195                             return function() {};
196                         }
197                     ],
198                                 }
199                         }
200                 );
201
202                 obj.controller.render();
203                 var nl = document.getElementsByTagName('textbox');
204                 for (var i = 0; i < nl.length; i++) {
205                         nl[i].addEventListener('keypress',function(ev){
206                                 if (ev.target.tagName != 'textbox') return;
207                                 if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
208                         },false);
209                 }
210                 document.getElementById('family_name').focus();
211
212         JSAN.use('util.file'); JSAN.use('util.widgets'); JSAN.use('util.functional');
213         util.widgets.remove_children(obj.controller.view.search_depth);
214         var ml = util.widgets.make_menulist(
215             util.functional.map_list( obj.OpenILS.data.list.aout, 
216                 function(el,idx) {
217                     return [ el.opac_label(), el.depth() ]
218                 }
219             ).sort(
220                 function(a,b) {
221                     if (a[1] < b[1]) return -1;
222                     if (a[1] > b[1]) return 1;
223                     return 0;
224                 }
225             )
226         );
227         ml.addEventListener('command', function() {
228                 ml.parentNode.setAttribute('value',ml.value);
229                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
230                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
231             }, false
232         );
233         ml.setAttribute('id','search_depth_ml');
234         obj.controller.view.search_depth.appendChild(ml);
235
236                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
237                 util.widgets.load_attributes(file);
238                 ml.value = ml.getAttribute('value');
239                 if (! ml.value) {
240                         ml.value = 0
241                         ml.setAttribute('value',ml.value);
242                 }
243
244         var cb = obj.controller.view.inactive;
245         cb.addEventListener('command',function() { 
246                 cb.setAttribute('value',cb.checked ? "true" : "false");
247                 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
248                 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
249             }, false
250         );
251         cb.checked = cb.getAttribute('value') == "true" ? true : false;
252
253         },
254
255         'on_submit' : function(q) {
256                 var msg = 'Query = ' + q;
257                 this.error.sdump('D_PATRON', msg);
258         },
259
260         'submit' : function() {
261                 window.xulG.clear_left_deck();
262                 var obj = this;
263                 var query = {};
264                 for (var i = 0; i < obj.controller.render_list.length; i++) {
265                 var id = obj.controller.render_list[i][0];
266                 var node = document.getElementById(id);
267                         if (node && node.value != '') {
268                                 if (id == 'inactive') {
269                                         query[id] = node.getAttribute('value');
270                                         obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + node.getAttribute('value') + '\n');
271                 } else {
272                     if (id == 'search_depth') {
273                         query[id] = node.firstChild.getAttribute('value'); 
274                                 } else {
275                                         var value = node.value.replace(/^\s+/,'').replace(/[\\\s]+$/,'');
276                                         //value = value.replace(/\d/g,'');
277                                         switch(id) {
278                                                 case 'family_name' :
279                                                 case 'first_given_name' :
280                                                 case 'second_given_name' :
281                                                         value = value.replace(/^\W+/g,'').replace(/\W+$/g,'');
282                                                 break;
283                                         }
284                                         if (value != '') {
285                                                 query[id] = value;
286                                                 obj.error.sdump('D_DEBUG','id = ' + id + '  value = ' + value + '\n');
287                                         }
288                                 }
289                 }
290                         }
291                 }
292                 if (typeof obj.on_submit == 'function') {
293                         obj.on_submit(query);
294                 }
295                 if (typeof window.xulG == 'object' 
296                         && typeof window.xulG.on_submit == 'function') {
297                         obj.error.sdump('D_PATRON','patron.search_form: Calling external .on_submit()\n');
298                         window.xulG.on_submit(query);
299                 } else {
300                         obj.error.sdump('D_PATRON','patron.search_form: No external .on_query()\n');
301                 }
302         },
303
304 }
305
306 dump('exiting patron/search_form.js\n');