1 dump('entering patron/search_form.js\n');
3 if (typeof patron == 'undefined') patron = {};
4 patron.search_form = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
11 patron.search_form.prototype = {
13 'init' : function( params ) {
16 obj.event_listeners = new EventListenerList();
18 // The bulk of params.query is getting parsed/rendered by obj.controller.init below, and will be reconstituted from possibly modified XUL elements upon Submit.
19 // But we're going to let search_limit and search_sort be configurable now by those spawning this interface, and let's assume there are no corresponding widgets for now.
20 // I'm going to place them into the "obj" scope for this instance.
21 obj.search_limit = params.query.search_limit;
22 obj.search_sort = (typeof params.query.search_sort === 'undefined') ?
24 JSON2js( params.query.search_sort ); // Let's assume this is encoded as JSON
26 JSAN.use('OpenILS.data'); this.OpenILS = {};
27 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
29 JSAN.use('util.controller'); obj.controller = new util.controller();
35 function() { alert($("commonStrings").getString('common.unimplemented')); }
37 'cmd_patron_search_submit' : [
43 'cmd_patron_search_clear' : [
46 obj.controller.render();
47 window.xulG.clear_left_deck();
54 if (params.query&¶ms.query.family_name) {
55 e.setAttribute('value',params.query.family_name);
56 e.value = params.query.family_name;
63 'first_given_name' : [
67 if (params.query&¶ms.query.first_given_name) {
68 e.setAttribute('value',params.query.first_given_name);
69 e.value = params.query.first_given_name;
76 'second_given_name' : [
80 if (params.query&¶ms.query.second_given_name) {
81 e.setAttribute('value',params.query.second_given_name);
82 e.value = params.query.second_given_name;
93 if (params.query&¶ms.query.alias) {
94 e.setAttribute('value',params.query.alias);
95 e.value = params.query.alias;
106 if (params.query&¶ms.query.usrname) {
107 e.setAttribute('value',params.query.usrname);
108 e.value = params.query.usrname;
119 if (params.query&¶ms.query.card) {
120 e.setAttribute('value',params.query.card);
121 e.value = params.query.card;
132 if (params.query&¶ms.query.email) {
133 e.setAttribute('value',params.query.email);
134 e.value = params.query.email;
145 if (params.query&¶ms.query.phone) {
146 e.setAttribute('value',params.query.phone);
147 e.value = params.query.phone;
158 if (params.query&¶ms.query.ident) {
159 e.setAttribute('value',params.query.ident);
160 e.value = params.query.ident;
161 } else if (params.query&¶ms.query.ident_value) {
162 e.setAttribute('value',params.query.ident_value);
163 e.value = params.query.ident_value;
164 } else if (params.query&¶ms.query.ident_value2) {
165 e.setAttribute('value',params.query.ident_value2);
166 e.value = params.query.ident_value2;
177 if (params.query&¶ms.query.street1) {
178 e.setAttribute('value',params.query.street1);
179 e.value = params.query.street1;
190 if (params.query&¶ms.query.street2) {
191 e.setAttribute('value',params.query.street2);
192 e.value = params.query.street2;
203 if (params.query&¶ms.query.city) {
204 e.setAttribute('value',params.query.city);
205 e.value = params.query.city;
216 if (params.query&¶ms.query.state) {
217 e.setAttribute('value',params.query.state);
218 e.value = params.query.state;
229 if (params.query&¶ms.query.post_code) {
230 e.setAttribute('value',params.query.post_code);
231 e.value = params.query.post_code;
238 'profile' : [ ['render'], function(e) {
239 return function() {};
242 'inactive' : [ ['render'], function(e) {
243 return function() {};
246 'search_depth' : [ ['render'],function(e) {
247 return function() {};
254 obj.controller.render();
255 var nl = document.getElementsByTagName('textbox');
256 for (var i = 0; i < nl.length; i++) {
257 obj.event_listeners.add(nl[i], 'keypress', function(ev) {
258 if (ev.target.tagName != 'textbox') return;
259 if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.submit(); }, 0);
262 document.getElementById('family_name').focus();
264 JSAN.use('util.file'); JSAN.use('util.widgets'); JSAN.use('util.functional');
265 util.widgets.remove_children(obj.controller.view.search_depth);
266 var ml = util.widgets.make_menulist(
267 util.functional.map_list( obj.OpenILS.data.list.my_aou,
269 return [ el.name(), el.id() ]
273 if (a[1] < b[1]) return -1;
274 if (a[1] > b[1]) return 1;
279 obj.event_listeners.add(ml, 'command', function() {
280 ml.parentNode.setAttribute('value',ml.value);
281 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
282 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
285 ml.setAttribute('id','search_depth_ml');
286 obj.controller.view.search_depth.appendChild(ml);
288 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
289 util.widgets.load_attributes(file);
290 ml.value = ml.getAttribute('value');
293 ml.setAttribute('value',ml.value);
296 var cb = obj.controller.view.inactive;
297 obj.event_listeners.add(cb, 'command',function() {
298 cb.setAttribute('value',cb.checked ? "true" : "false");
299 var file = new util.file('patron_search_prefs.'+obj.OpenILS.data.server_unadorned);
300 util.widgets.save_attributes(file, { 'search_depth_ml' : [ 'value' ], 'inactive' : [ 'value' ] });
303 cb.checked = cb.getAttribute('value') == "true" ? true : false;
305 /* Populate the Patron Profile filter, if it exists */
306 if (obj.controller.view.profile) {
307 util.widgets.remove_children(obj.controller.view.profile);
308 var profile_ml = util.widgets.make_menulist(
309 util.functional.map_list( obj.OpenILS.data.list.pgt,
311 return [ el.name(), el.id() ]
315 if (a[0] < b[0]) return -1;
316 if (a[0] > b[0]) return 1;
321 obj.event_listeners.add(profile_ml, 'command', function() {
322 profile_ml.parentNode.setAttribute('value', profile_ml.value);
325 profile_ml.setAttribute('id','profile_ml');
327 /* Add an empty menu item as the default profile */
328 var empty = document.createElement('menuitem');
329 profile_ml.firstChild.insertBefore(empty, profile_ml.firstChild.firstChild);
330 empty.setAttribute('label', '');
331 empty.setAttribute('value', '');
332 obj.controller.view.profile.appendChild(profile_ml);
333 profile_ml.value = profile_ml.getAttribute('value');
337 'cleanup' : function() {
339 obj.controller.cleanup();
340 obj.event_listeners.removeAll();
343 'on_submit' : function(q) {
344 var msg = 'Query = ' + q;
345 this.error.sdump('D_PATRON', msg);
348 'submit' : function() {
349 window.xulG.clear_left_deck();
352 for (var i = 0; i < obj.controller.render_list.length; i++) {
353 var id = obj.controller.render_list[i][0];
354 var node = document.getElementById(id);
355 if (node && node.value != '') {
356 if (id == 'inactive') {
357 query[id] = node.getAttribute('value');
358 obj.error.sdump('D_DEBUG','id = ' + id + ' value = ' + node.getAttribute('value') + '\n');
359 } else if (id == 'profile') {
360 query[id] = node.firstChild.getAttribute('value');
361 obj.error.sdump('D_DEBUG','id = ' + id + ' value = ' + node.getAttribute('value') + '\n');
363 if (id == 'search_depth') {
364 query[id] = node.firstChild.getAttribute('value');
366 var value = node.value.replace(/^\s+/,'').replace(/[\\\s]+$/,'');
367 //value = value.replace(/\d/g,'');
370 case 'first_given_name' :
371 case 'second_given_name' :
372 value = value.replace(/^[\d\s]+/g,'').replace(/[\d\s]+$/g,'')
377 obj.error.sdump('D_DEBUG','id = ' + id + ' value = ' + value + '\n');
383 if (typeof obj.on_submit == 'function') {
384 obj.on_submit(query,obj.search_limit,obj.search_sort);
386 if (typeof window.xulG == 'object'
387 && typeof window.xulG.on_submit == 'function') {
388 obj.error.sdump('D_PATRON','patron.search_form: Calling external .on_submit()\n');
389 window.xulG.on_submit(query,obj.search_limit,obj.search_sort);
391 obj.error.sdump('D_PATRON','patron.search_form: No external .on_query()\n');
397 dump('exiting patron/search_form.js\n');