[open-ils-commits] r822 - conifer/branches/rel_1_6_0/xul/server/cat (dbs)
svn at svn.open-ils.org
svn at svn.open-ils.org
Thu Mar 4 21:34:49 EST 2010
Author: dbs
Date: 2010-03-04 21:34:47 -0500 (Thu, 04 Mar 2010)
New Revision: 822
Added:
conifer/branches/rel_1_6_0/xul/server/cat/z3950.js
Log:
Backport the rel_1_6 Z39.50 server-sorting functionality for our sanity.
Added: conifer/branches/rel_1_6_0/xul/server/cat/z3950.js
===================================================================
--- conifer/branches/rel_1_6_0/xul/server/cat/z3950.js (rev 0)
+++ conifer/branches/rel_1_6_0/xul/server/cat/z3950.js 2010-03-05 02:34:47 UTC (rev 822)
@@ -0,0 +1,1059 @@
+dump('entering cat.z3950.js\n');
+
+function $(id) { return document.getElementById(id); }
+
+if (typeof cat == 'undefined') cat = {};
+cat.z3950 = function (params) {
+ try {
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+ JSAN.use('util.error'); this.error = new util.error();
+ JSAN.use('util.network'); this.network = new util.network();
+ } catch(E) {
+ dump('cat.z3950: ' + E + '\n');
+ }
+}
+
+cat.z3950.prototype = {
+
+ 'creds_version' : 2,
+
+ 'number_of_result_sets' : 0,
+
+ 'result_set' : [],
+
+ 'limit' : 10,
+
+ 'init' : function( params ) {
+
+ try {
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+ JSAN.use('util.widgets');
+
+ var obj = this;
+
+ JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
+
+ obj.load_creds();
+
+ JSAN.use('circ.util');
+ var columns = circ.util.columns(
+ {
+ 'tcn' : { 'hidden' : false },
+ 'isbn' : { 'hidden' : false },
+ 'title' : { 'hidden' : false, 'flex' : '1' },
+ 'author' : { 'hidden' : false },
+ 'edition' : { 'hidden' : false },
+ 'pubdate' : { 'hidden' : false },
+ 'publisher' : { 'hidden' : false },
+ 'service' : { 'hidden' : false }
+ }
+ );
+
+ JSAN.use('util.list'); obj.list = new util.list('results');
+ obj.list.init(
+ {
+ 'columns' : columns,
+ 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
+ 'on_select' : function(ev) {
+ try {
+ JSAN.use('util.functional');
+ var sel = obj.list.retrieve_selection();
+ document.getElementById('sel_clip').setAttribute('disabled', sel.length < 1);
+ var list = util.functional.map_list(
+ sel,
+ function(o) { return o.getAttribute('retrieve_id'); }
+ );
+ obj.error.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) );
+ obj.controller.view.marc_import.disabled = false;
+ obj.controller.view.marc_import.setAttribute('retrieve_id',list[0]);
+ obj.data.init({'via':'stash'});
+ if (obj.data.marked_record) {
+ obj.controller.view.marc_import_overlay.disabled = false;
+ } else {
+ obj.controller.view.marc_import_overlay.disabled = true;
+ }
+ obj.controller.view.marc_import_overlay.setAttribute('retrieve_id',list[0]);
+ obj.controller.view.marc_view_btn.disabled = false;
+ obj.controller.view.marc_view_btn.setAttribute('retrieve_id',list[0]);
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_list_init.list_construction_error'),E);
+ }
+ },
+ }
+ );
+
+ JSAN.use('util.controller'); obj.controller = new util.controller();
+ obj.controller.init(
+ {
+ control_map : {
+ 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
+ 'sel_clip' : [ ['command'], function() { obj.list.clipboard(); } ],
+ 'cmd_z3950_csv_to_clipboard' : [ ['command'], function() { obj.list.dump_csv_to_clipboard(); } ],
+ 'cmd_z3950_csv_to_printer' : [ ['command'], function() { obj.list.dump_csv_to_printer(); } ],
+ 'cmd_z3950_csv_to_file' : [ ['command'], function() { obj.list.dump_csv_to_file( { 'defaultFileName' : 'z3950_results.txt' } ); } ],
+ 'cmd_broken' : [
+ ['command'],
+ function() { alert('Not Yet Implemented'); }
+ ],
+ 'result_message' : [['render'],function(e){return function(){};}],
+ 'clear' : [
+ ['command'],
+ function() {
+ obj.clear();
+ }
+ ],
+ 'save_creds' : [
+ ['command'],
+ function() {
+ obj.save_creds();
+ setTimeout( function() { obj.focus(); }, 0 );
+ }
+ ],
+ 'marc_view_btn' : [
+ ['render'],
+ function(e) {
+ e.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label'));
+ e.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey'));
+ }
+ ],
+ 'marc_view' : [
+ ['command'],
+ function(ev) {
+ try {
+ var n = obj.controller.view.marc_view_btn;
+ if (n.getAttribute('toggle') == '1') {
+ document.getElementById('deck').selectedIndex = 0;
+ n.setAttribute('toggle','0');
+ n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.marc_view.label'));
+ n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.marc_view.accesskey'));
+ document.getElementById('results').focus();
+ } else {
+ document.getElementById('deck').selectedIndex = 1;
+ n.setAttribute('toggle','1');
+ n.setAttribute('label', $("catStrings").getString('staff.cat.z3950.results_view.label'));
+ n.setAttribute('accesskey', $("catStrings").getString('staff.cat.z3950.results_view.accesskey'));
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+ var f = get_contentWindow(document.getElementById('marc_frame'));
+ var retrieve_id = n.getAttribute('retrieve_id');
+ var result_idx = retrieve_id.split('-')[0];
+ var record_idx = retrieve_id.split('-')[1];
+ f.xulG = { 'marcxml' : obj.result_set[result_idx].records[ record_idx ].marcxml };
+ f.my_init();
+ f.document.body.firstChild.focus();
+ }
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_view_error'),E);
+ }
+ },
+ ],
+ 'marc_import' : [
+ ['command'],
+ function() {
+ try {
+ var retrieve_id = obj.controller.view.marc_import.getAttribute('retrieve_id');
+ var result_idx = retrieve_id.split('-')[0];
+ var record_idx = retrieve_id.split('-')[1];
+ obj.spawn_marc_editor(
+ obj.result_set[ result_idx ].records[ record_idx ].marcxml,
+ obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */
+ );
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_error'),E);
+ }
+ },
+ ],
+ 'marc_import_overlay' : [
+ ['command'],
+ function() {
+ try {
+ var retrieve_id = obj.controller.view.marc_import_overlay.getAttribute('retrieve_id');
+ var result_idx = retrieve_id.split('-')[0];
+ var record_idx = retrieve_id.split('-')[1];
+ obj.spawn_marc_editor_for_overlay(
+ obj.result_set[ result_idx ].records[ record_idx ].marcxml,
+ obj.result_set[ result_idx ].records[ record_idx ].service /* FIXME: we want biblio_source here */
+ );
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.marc_import_overlay_error'),E);
+ }
+ },
+ ],
+ 'search' : [
+ ['command'],
+ function() {
+ obj.initial_search();
+ },
+ ],
+ 'raw_search' : [
+ ['command'],
+ function() {
+ var raw = window.prompt(
+ $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.msg'),
+ $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.default_value'),
+ $("catStrings").getString('staff.cat.z3950.initial_search.raw_prompt.title')
+ );
+ if (raw) obj.initial_raw_search(raw);
+ }
+ ],
+ 'page_next' : [
+ ['command'],
+ function() {
+ obj.page_next();
+ },
+ ],
+ 'toggle_form_btn' : [
+ ['render'],
+ function(e) {
+ e.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
+ e.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
+ e.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
+ }
+ ],
+ 'toggle_form' : [
+ ['command'],
+ function() {
+ var x = document.getElementById('top_pane');
+ document.getElementById('splitter_grippy2').doCommand();
+ var n = obj.controller.view.toggle_form_btn;
+ if (x.collapsed) {
+ n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif");
+ n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label'));
+ n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey'));
+ } else {
+ n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
+ n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
+ n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
+ }
+ },
+ ],
+ 'splitter_grippy2' : [
+ ['click'],
+ function() {
+ var x = document.getElementById('top_pane');
+ var n = obj.controller.view.toggle_form_btn;
+ if (x.collapsed) {
+ n.setAttribute('image',"/xul/server/skin/media/images/down_arrow.gif");
+ n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.label'));
+ n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.unhide_top_pane.accesskey'));
+ } else {
+ n.setAttribute('image',"/xul/server/skin/media/images/up_arrow.gif");
+ n.setAttribute('label',$("catStrings").getString('staff.cat.z3950.hide_top_pane.label'));
+ n.setAttribute('accesskey',$("catStrings").getString('staff.cat.z3950.hide_top_pane.accesskey'));
+ }
+ }
+ ],
+ 'service_rows' : [
+ ['render'],
+ function(e) {
+ return function() {
+ try {
+
+ function handle_switch(node) {
+ try {
+ $('search').setAttribute('disabled','true'); $('raw_search').setAttribute('disabled','true');
+ obj.active_services = [];
+ var snl = document.getElementsByAttribute('mytype','service_class');
+ for (var i = 0; i < snl.length; i++) {
+ var n = snl[i];
+ if (n.nodeName == 'checkbox') {
+ if (n.checked) obj.active_services.push( n.getAttribute('service') );
+ }
+ }
+ if (obj.active_services.length > 0) {
+ $('search').setAttribute('disabled','false');
+ }
+ if (obj.active_services.length == 1) {
+ if (obj.active_services[0] != 'native-evergreen-catalog') {
+ $('raw_search').setAttribute('disabled','false');
+ }
+ }
+ var nl = document.getElementsByAttribute('mytype','search_class');
+ for (var i = 0; i < nl.length; i++) { nl[i].disabled = true; }
+ var attrs = {};
+ for (var j = 0; j < obj.active_services.length; j++) {
+ if (obj.services[obj.active_services[j]]) for (var i in obj.services[obj.active_services[j]].attrs) {
+ var attr = obj.services[obj.active_services[j]].attrs[i];
+ if (! attrs[i]) {
+ attrs[i] = { 'labels' : {} };
+ }
+ if (attr.label) {
+ attrs[i].labels[ attr.label ] = true;
+ } else if (document.getElementById('commonStrings').testString('staff.z39_50.search_class.' + i)) {
+ attrs[i].labels[ document.getElementById('commonStrings').getString('staff.z39_50.search_class.' + i) ] = true;
+ } else if (attr.name) {
+ attrs[i].labels[ attr.name ] = true;
+ } else {
+ attrs[i].labels[ i ] = true;
+ }
+
+ }
+
+ }
+
+ function set_label(x,attr) {
+ var labels = [];
+ for (var j in attrs[attr].labels) {
+ labels.push(j);
+ }
+ if (labels.length > 0) {
+ x.setAttribute('value',labels[0]);
+ x.setAttribute('tooltiptext',labels.join(','));
+ if (labels.length > 1) x.setAttribute('class','multiple_labels');
+ }
+ }
+
+ for (var i in attrs) {
+ var x = document.getElementById(i + '_input');
+ if (x) {
+ x.disabled = false;
+ var y = document.getElementById(i + '_label',i);
+ if (y) set_label(y,i);
+ } else {
+ var rows = document.getElementById('query_inputs');
+ var row = document.createElement('row'); rows.appendChild(row);
+ var label = document.createElement('label');
+ label.setAttribute('id',i+'_label');
+ label.setAttribute('control',i+'_input');
+ label.setAttribute('search_class',i);
+ label.setAttribute('style','-moz-user-focus: ignore');
+ row.appendChild(label);
+ set_label(label,i);
+ label.addEventListener('click',function(ev){
+ var a = ev.target.getAttribute('search_class');
+ if (a) obj.default_attr = a;
+ },false
+ );
+ var tb = document.createElement('textbox');
+ tb.setAttribute('id',i+'_input');
+ tb.setAttribute('mytype','search_class');
+ tb.setAttribute('search_class',i);
+ row.appendChild(tb);
+ tb.addEventListener('keypress',function(ev) { return obj.handle_enter(ev); },false);
+ }
+ }
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.search_fields_error'),E);
+ }
+ }
+
+ document.getElementById('native-evergreen-catalog_service').addEventListener('command',handle_switch,false);
+
+ var robj = obj.network.simple_request(
+ 'RETRIEVE_Z3950_SERVICES',
+ [ ses() ]
+ );
+ if (typeof robj.ilsevent != 'undefined') throw(robj);
+ obj.services = robj;
+ var x = document.getElementById('service_rows');
+ var services = new Array();
+ for (var i in obj.services) {
+ var label;
+ if (obj.services[i].label) {
+ label = obj.services[i].label;
+ } else if (obj.services[i].name) {
+ label = obj.services[i].name;
+ } else {
+ label = i;
+ }
+ var j = [label, i];
+ services.push(j);
+ }
+ services.sort();
+ for (var j=0; j < services.length; j++) {
+ var i = services[j][1];
+ try {
+ if (i == 'native-evergreen-catalog') continue;
+ var r = document.createElement('row'); x.appendChild(r);
+ var cb = document.createElement('checkbox');
+ cb.setAttribute('label',services[j][0]);
+ cb.setAttribute('tooltiptext',i + ' : ' + obj.services[i].db + '@' + obj.services[i].host + ':' + obj.services[i].port);
+ cb.setAttribute('mytype','service_class'); cb.setAttribute('service',i);
+ cb.setAttribute('id',i+'_service'); r.appendChild(cb);
+ cb.addEventListener('command',handle_switch,false);
+ var username = document.createElement('textbox'); username.setAttribute('id',i+'_username');
+ if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) username.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].username);
+ r.appendChild(username);
+ if (typeof obj.services[i].auth != 'undefined') username.hidden = ! get_bool( obj.services[i].auth );
+ var password = document.createElement('textbox'); password.setAttribute('id',i+'_password');
+ if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[i]) password.setAttribute('value',obj.creds.hosts[ obj.data.server_unadorned ].services[i].password);
+ password.setAttribute('type','password'); r.appendChild(password);
+ if (typeof obj.services[i].auth != 'undefined') password.hidden = ! get_bool( obj.services[i].auth );
+ } catch(E) {
+ alert(E);
+ }
+ }
+ //obj.services[ 'native-evergreen-catalog' ] = { 'attrs' : { 'author' : {}, 'title' : {} } };
+ setTimeout(
+ function() {
+ if (obj.creds.hosts[ obj.data.server_unadorned ]) {
+ for (var i = 0; i < obj.creds.hosts[ obj.data.server_unadorned ].default_services.length; i++) {
+ var x = document.getElementById(obj.creds.hosts[ obj.data.server_unadorned ].default_services[i]+'_service');
+ if (x) x.checked = true;
+ }
+ } else if (obj.creds.default_service) {
+ var x = document.getElementById(obj.creds.default_service+'_service');
+ if (x) x.checked = true;
+ }
+ handle_switch();
+ },0
+ );
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.obj_controller_init.z39_service_error'),E);
+ }
+ }
+ }
+ ],
+ }
+ }
+ );
+
+ obj.controller.render();
+
+ setTimeout( function() { obj.focus(); }, 0 );
+
+ setInterval(
+ function() {
+ obj.data.init({'via':'stash'});
+ if (obj.data.marked_record) {
+ var sel = obj.list.retrieve_selection();
+ if (sel.length > 0) { obj.controller.view.marc_import_overlay.disabled = false; }
+ if ($("overlay_tcn_indicator")) {
+ if (obj.data.marked_record_mvr) {
+ $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.tcn.label',[obj.data.marked_record_mvr.tcn()]));
+ } else {
+ $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getFormattedString('staff.cat.z3950.marked_record_for_overlay_indicator.record_id.label',[obj.data.marked_record]));
+ }
+ }
+ } else {
+ obj.controller.view.marc_import_overlay.disabled = true;
+ if ($("overlay_tcn_indicator")) {
+ $("overlay_tcn_indicator").setAttribute('value',$("catStrings").getString('staff.cat.z3950.marked_record_for_overlay_indicator.no_record.label'));
+ }
+ }
+ }, 2000
+ );
+
+ } catch(E) {
+ this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n');
+ }
+ },
+
+ 'focus' : function() {
+ var obj = this;
+ var focus_me; var or_focus_me;
+ for (var i = 0; i < obj.active_services.length; i++) {
+ if (obj.creds.hosts[ obj.data.server_unadorned ] && obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ]) {
+ var x = obj.creds.hosts[ obj.data.server_unadorned ].services[ obj.active_services[i] ].default_attr;
+ if (x) { focus_me = x; break; }
+ }
+ if (obj.services[ obj.active_services[i] ]) for (var i in obj.services[ obj.active_services[i] ].attr) { or_focus_me = i; }
+ }
+ if (! focus_me) focus_me = or_focus_me;
+ var xx = document.getElementById(focus_me+'_input'); if (xx) xx.focus();
+ },
+
+ 'clear' : function() {
+ var obj = this;
+ var nl = document.getElementsByAttribute('mytype','search_class');
+ for (var i = 0; i < nl.length; i++) { nl[i].value = ''; nl[i].setAttribute('value',''); }
+ obj.focus();
+ },
+
+ 'search_params' : {},
+
+ 'initial_search' : function() {
+ try {
+ var obj = this;
+ obj.result_set = []; obj.number_of_result_sets = 0;
+ JSAN.use('util.widgets');
+ util.widgets.remove_children( obj.controller.view.result_message );
+ var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ if (obj.active_services.length < 1) {
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection')));
+ return;
+ }
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching')));
+ obj.search_params = {}; obj.list.clear();
+ obj.controller.view.page_next.disabled = true;
+ obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true');
+ obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true');
+ obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true');
+
+ obj.search_params.service_array = [];
+ obj.search_params.username_array = [];
+ obj.search_params.password_array = [];
+ for (var i = 0; i < obj.active_services.length; i++) {
+ obj.search_params.service_array.push( obj.active_services[i] );
+ obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value );
+ obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value );
+ }
+ obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length );
+ obj.search_params.offset = 0;
+
+ obj.search_params.search = {};
+ var nl = document.getElementsByAttribute('mytype','search_class');
+ var count = 0;
+ for (var i = 0; i < nl.length; i++) {
+ if (nl[i].disabled) continue;
+ if (nl[i].value == '') continue;
+ count++;
+ obj.search_params.search[ nl[i].getAttribute('search_class') ] = nl[i].value;
+ }
+ if (count>0) {
+ obj.search();
+ } else {
+ util.widgets.remove_children( obj.controller.view.result_message );
+ }
+ } catch(E) {
+ this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E);
+ }
+ },
+
+ 'initial_raw_search' : function(raw) {
+ try {
+ var obj = this;
+ obj.result_set = []; obj.number_of_result_sets = 0;
+ JSAN.use('util.widgets');
+ util.widgets.remove_children( obj.controller.view.result_message );
+ var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ if (obj.active_services.length < 1) {
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.no_search_selection')));
+ return;
+ }
+ if (obj.active_services.length > 1) {
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.too_many_selections')));
+ return;
+ }
+ if (obj.active_services[0] == 'native-evergreen-catalog') {
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.raw_search_unsupported_for_native_catalog')));
+ return;
+ }
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.initial_search.searching')));
+ obj.search_params = {}; obj.list.clear();
+ obj.controller.view.page_next.disabled = true;
+ obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','true');
+ obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','true');
+ obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','true');
+
+ obj.search_params.service_array = [];
+ obj.search_params.username_array = [];
+ obj.search_params.password_array = [];
+ for (var i = 0; i < obj.active_services.length; i++) {
+ obj.search_params.service_array.push( obj.active_services[i] );
+ obj.search_params.username_array.push( document.getElementById( obj.active_services[i]+'_username' ).value );
+ obj.search_params.password_array.push( document.getElementById( obj.active_services[i]+'_password' ).value );
+ }
+ obj.search_params.limit = Math.ceil( obj.limit / obj.active_services.length );
+ obj.search_params.offset = 0;
+
+ obj.search_params.query = raw;
+
+ obj.search();
+ } catch(E) {
+ this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.initial_search.failed_search'),E);
+ }
+ },
+
+ 'page_next' : function() {
+ try {
+ var obj = this;
+ JSAN.use('util.widgets');
+ util.widgets.remove_children( obj.controller.view.result_message );
+ var x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.page_next.more_results')));
+ obj.search_params.offset += obj.search_params.limit;
+ obj.search();
+ } catch(E) {
+ this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.page_next.subsequent_search_error'),E);
+ }
+ },
+
+ 'search' : function() {
+ try {
+ var obj = this;
+ var method;
+ if (typeof obj.search_params.query == 'undefined') {
+ method = 'FM_BLOB_RETRIEVE_VIA_Z3950_SEARCH';
+ obj.search_params.service = obj.search_params.service_array;
+ obj.search_params.username = obj.search_params.username_array;
+ obj.search_params.password = obj.search_params.password_array;
+ } else {
+ method = 'FM_BLOB_RETRIEVE_VIA_Z3950_RAW_SEARCH';
+ obj.search_params.service = obj.search_params.service_array[0];
+ obj.search_params.username = obj.search_params.username_array[0];
+ obj.search_params.password = obj.search_params.password_array[0];
+ }
+ obj.network.simple_request(
+ method,
+ [ ses(), obj.search_params ],
+ function(req) {
+ obj.handle_results(req.getResultObject())
+ }
+ );
+ document.getElementById('deck').selectedIndex = 0;
+ } catch(E) {
+ this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.search.search_error'),E);
+ }
+ },
+
+ 'handle_results' : function(results) {
+ var obj = this;
+ try {
+ JSAN.use('util.widgets');
+ util.widgets.remove_children( obj.controller.view.result_message ); var x;
+ if (results == null) {
+ x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ x.appendChild( document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.null_server_error')));
+ return;
+ }
+ if (typeof results.ilsevent != 'undefined') {
+ x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ x.appendChild( document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.server_error', [results.textcode, results.desc])));
+ return;
+ }
+ obj.controller.view.cmd_z3950_csv_to_file.setAttribute('disabled','false');
+ obj.controller.view.cmd_z3950_csv_to_clipboard.setAttribute('disabled','false');
+ obj.controller.view.cmd_z3950_csv_to_printer.setAttribute('disabled','false');
+ if (typeof results.length == 'undefined') results = [ results ];
+
+ var total_showing = 0;
+ var total_count = 0;
+ var tooltip_msg = '';
+
+ for (var i = 0; i < results.length; i++) {
+ if (results[i].query) {
+ tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.raw_query', [results[i].query]) + '\n';
+ }
+ if (results[i].count) {
+ if (results[i].records) {
+ var showing = obj.search_params.offset + results[i].records.length;
+ total_showing += obj.search_params.offset + results[i].records.length;
+ total_count += results[i].count;
+ tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_results', [(showing > results[i].count ? results[i].count : showing), results[i].count, results[i].service]) + '\n';
+ }
+ if (obj.search_params.offset + obj.search_params.limit <= results[i].count) {
+ obj.controller.view.page_next.disabled = false;
+ }
+ } else {
+ tooltip_msg += $("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(results[i].count ? results[i].count : 0)]) + '\n';
+ }
+ if (results[i].records) {
+ obj.result_set[ ++obj.number_of_result_sets ] = results[i];
+ obj.controller.view.marc_import.disabled = true;
+ obj.controller.view.marc_import_overlay.disabled = true;
+ var x = obj.controller.view.marc_view_btn;
+ if (x.getAttribute('toggle') == '0') x.disabled = true;
+ for (var j = 0; j < obj.result_set[ obj.number_of_result_sets ].records.length; j++) {
+ var f;
+ var n = obj.list.append(
+ {
+ 'retrieve_id' : String( obj.number_of_result_sets ) + '-' + String( j ),
+ 'row' : {
+ 'my' : {
+ 'mvr' : function(a){return a;}(obj.result_set[ obj.number_of_result_sets ].records[j].mvr),
+ 'service' : results[i].service
+ }
+ }
+ }
+ );
+ if (!f) { n.my_node.parentNode.focus(); f = n; }
+ }
+ } else {
+ x = document.createElement('description'); obj.controller.view.result_message.appendChild(x);
+ x.appendChild(
+ document.createTextNode($("catStrings").getString('staff.cat.z3950.handle_results.result_error'))
+ );
+ }
+ }
+ if (total_showing) {
+ x = document.createElement('description');
+ x.setAttribute('crop','end');
+ x.setAttribute('tooltiptext',tooltip_msg);
+ obj.controller.view.result_message.appendChild(x);
+ x.appendChild(
+ document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.showing_total_results',
+ [(total_showing > total_count ? total_count : total_showing), total_count]))
+ );
+ } else {
+ x = document.createElement('description');
+ x.setAttribute('crop','end');
+ x.setAttribute('tooltiptext',tooltip_msg);
+ obj.controller.view.result_message.appendChild(x);
+ x.appendChild(
+ document.createTextNode($("catStrings").getFormattedString('staff.cat.z3950.handle_results.num_of_results', [(total_count ? total_count : 0)]))
+ );
+ }
+
+ } catch(E) {
+ this.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.handle_results.search_result_error'),E);
+ }
+ },
+
+ 'replace_tab_with_opac' : function(doc_id) {
+ var opac_url = xulG.url_prefix( urls.opac_rdetail ) + '?r=' + doc_id;
+ var content_params = {
+ 'session' : ses(),
+ 'authtime' : ses('authtime'),
+ 'opac_url' : opac_url,
+ };
+ xulG.set_tab(
+ xulG.url_prefix(urls.XUL_OPAC_WRAPPER),
+ {'tab_name': $("catStrings").getString('staff.cat.z3950.replace_tab_with_opac.tab_name')},
+ content_params
+ );
+ },
+
+ 'spawn_marc_editor' : function(my_marcxml,biblio_source) {
+ var obj = this;
+ xulG.new_tab(
+ xulG.url_prefix(urls.XUL_MARC_EDIT),
+ { 'tab_name' : 'MARC Editor' },
+ {
+ 'record' : { 'marc' : my_marcxml },
+ 'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+ try {
+ JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+ } catch(E) {
+ alert(E);
+ }
+ },
+ 'save' : {
+ 'label' : 'Import Record',
+ 'func' : function (new_marcxml) {
+ try {
+ var r = obj.network.simple_request('MARC_XML_RECORD_IMPORT', [ ses(), new_marcxml, biblio_source ]);
+ if (typeof r.ilsevent != 'undefined') {
+ switch(Number(r.ilsevent)) {
+ case 1704 /* TCN_EXISTS */ :
+ var msg = $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.same_tcn', [r.payload.tcn]);
+ var title = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.title');
+ var btn1 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn1_overlay');
+ var btn2 = typeof r.payload.new_tcn == 'undefined' ? null : $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor.btn2_import', [r.payload.new_tcn]);
+ if (btn2) {
+ obj.data.init({'via':'stash'});
+ var robj = obj.network.simple_request(
+ 'PERM_CHECK',[
+ ses(),
+ obj.data.list.au[0].id(),
+ obj.data.list.au[0].ws_ou(),
+ [ 'ALLOW_ALT_TCN' ]
+ ]
+ );
+ if (typeof robj.ilsevent != 'undefined') {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.permission_error'),E);
+ }
+ if (robj.length != 0) btn2 = null;
+ }
+ var btn3 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor.btn3_cancel_import');
+ var p = obj.error.yns_alert(msg,title,btn1,btn2,btn3,$("catStrings").getString('staff.cat.z3950.spawn_marc_editor.confirm_action'));
+ obj.error.sdump('D_ERROR','option ' + p + 'chosen');
+ switch(p) {
+ case 0:
+ var r3 = obj.network.simple_request('MARC_XML_RECORD_UPDATE', [ ses(), r.payload.dup_record, new_marcxml, biblio_source ]);
+ if (typeof r3.ilsevent != 'undefined') {
+ throw(r3);
+ } else {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_overlay'));
+ return {
+ 'id' : r3.id(),
+ 'on_complete' : function() {
+ try {
+ obj.replace_tab_with_opac(r3.id());
+ } catch(E) {
+ alert(E);
+ }
+ }
+ };
+ }
+ break;
+ case 1:
+ var r2 = obj.network.request(
+ api.MARC_XML_RECORD_IMPORT.app,
+ api.MARC_XML_RECORD_IMPORT.method + '.override',
+ [ ses(), new_marcxml, biblio_source ]
+ );
+ if (typeof r2.ilsevent != 'undefined') {
+ throw(r2);
+ } else {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import_with_new_tcn'));
+ return {
+ 'id' : r2.id(),
+ 'on_complete' : function() {
+ try {
+ obj.replace_tab_with_opac(r2.id());
+ } catch(E) {
+ alert(E);
+ }
+ }
+ };
+ }
+ break;
+ case 2:
+ default:
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_cancelled'));
+ break;
+ }
+ break;
+ default:
+ throw(r);
+ break;
+ }
+ } else {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.successful_import'));
+ return {
+ 'id' : r.id(),
+ 'on_complete' : function() {
+ try {
+ obj.replace_tab_with_opac(r.id());
+ } catch(E) {
+ alert(E);
+ }
+ }
+ };
+ }
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor.import_error'),E);
+ }
+ }
+ }
+ }
+ );
+ },
+
+ 'confirm_overlay' : function(record_ids) {
+ var obj = this; // JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
+ var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
+ top_xml += '<description>'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.description')+'</description>';
+ top_xml += '<hbox><button id="lead" disabled="false" label="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.lead.label')+'" name="fancy_submit"';
+ top_xml += ' accesskey="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.lead.accesskey')+'"/>';
+ top_xml += ' <button label="'+$("catStrings").getString('staff.cat.z3950.confirm_overlay.cancel.label')+'" accesskey="'+
+ $("catStrings").getString('staff.cat.z3950.confirm_overlay.cancel.accesskey')+'" name="fancy_cancel"/></hbox></vbox>';
+
+ var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
+ xml += '<table width="100%"><tr valign="top">';
+ for (var i = 0; i < record_ids.length; i++) {
+ xml += '<td nowrap="nowrap"><iframe src="' + urls.XUL_BIB_BRIEF;
+ xml += '?docid=' + record_ids[i] + '"/></td>';
+ }
+ xml += '</tr><tr valign="top">';
+ for (var i = 0; i < record_ids.length; i++) {
+ xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px;" flex="1" src="' + urls.XUL_MARC_VIEW + '?docid=' + record_ids[i] + ' "/></td>';
+ }
+ xml += '</tr></table></form>';
+ // data.temp_merge_top = top_xml; data.stash('temp_merge_top');
+ // data.temp_merge_mid = xml; data.stash('temp_merge_mid');
+ JSAN.use('util.window'); var win = new util.window();
+ var fancy_prompt_data = win.open(
+ urls.XUL_FANCY_PROMPT,
+ // + '?xml_in_stash=temp_merge_mid'
+ // + '&top_xml_in_stash=temp_merge_top'
+ // + '&title=' + window.escape('Record Overlay'),
+ 'fancy_prompt', 'chrome,resizable,modal,width=700,height=500',
+ { 'top_xml' : top_xml, 'xml' : xml, 'title' : $("catStrings").getString('staff.cat.z3950.confirm_overlay.title') }
+ );
+ //data.stash_retrieve();
+ if (fancy_prompt_data.fancy_status == 'incomplete') { alert($("catStrings").getString('staff.cat.z3950.confirm_overlay.aborted')); return false; }
+ return true;
+ },
+
+ 'spawn_marc_editor_for_overlay' : function(my_marcxml,biblio_source) {
+ var obj = this;
+ obj.data.init({'via':'stash'});
+ if (!obj.data.marked_record) {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.try_again'));
+ return;
+ }
+
+ xulG.new_tab(
+ xulG.url_prefix(urls.XUL_MARC_EDIT),
+ { 'tab_name' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.tab_name') },
+ {
+ 'record' : { 'marc' : my_marcxml },
+ 'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
+ try {
+ JSAN.use('cat.util'); cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
+ } catch(E) {
+ alert(E);
+ }
+ },
+ 'save' : {
+ 'label' : $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_record_label'),
+ 'func' : function (new_marcxml) {
+ try {
+ if (! obj.confirm_overlay( [ obj.data.marked_record ] ) ) { return; }
+ var r = obj.network.simple_request('MARC_XML_RECORD_REPLACE', [ ses(), obj.data.marked_record, new_marcxml, biblio_source ]);
+ if (typeof r.ilsevent != 'undefined') {
+ switch(Number(r.ilsevent)) {
+ case 1704 /* TCN_EXISTS */ :
+ var msg = $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor_for_overlay.same_tcn', [r.payload.tcn]);
+ var title = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.import_collision');
+ var btn1 = typeof r.payload.new_tcn == 'undefined' ? null : $("catStrings").getFormattedString('staff.cat.z3950.spawn_marc_editor_for_overlay.btn1_overlay', [r.payload.new_tcn]);
+ if (btn1) {
+ var robj = obj.network.simple_request(
+ 'PERM_CHECK',[
+ ses(),
+ obj.data.list.au[0].id(),
+ obj.data.list.au[0].ws_ou(),
+ [ 'ALLOW_ALT_TCN' ]
+ ]
+ );
+ if (typeof robj.ilsevent != 'undefined') {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.permission_error'),E);
+ }
+ if (robj.length != 0) btn1 = null;
+ }
+ var btn2 = $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.btn2_cancel');
+ var p = obj.error.yns_alert(msg,title,btn1,btn2,null, $("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.confirm_action'));
+ obj.error.sdump('D_ERROR','option ' + p + 'chosen');
+ switch(p) {
+ case 0:
+ var r2 = obj.network.request(
+ api.MARC_XML_RECORD_REPLACE.app,
+ api.MARC_XML_RECORD_REPLACE.method + '.override',
+ [ ses(), obj.data.marked_record, new_marcxml, biblio_source ]
+ );
+ if (typeof r2.ilsevent != 'undefined') {
+ throw(r2);
+ } else {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.successful_overlay_with_new_TCN'));
+ return {
+ 'id' : r2.id(),
+ 'on_complete' : function() {
+ try {
+ obj.replace_tab_with_opac(r2.id());
+ } catch(E) {
+ alert(E);
+ }
+ }
+ };
+ }
+ break;
+ case 1:
+ default:
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.cancelled_overlay'));
+ break;
+ }
+ break;
+ default:
+ throw(r);
+ break;
+ }
+ } else {
+ alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.success_overlay'));
+ return {
+ 'id' : r.id(),
+ 'on_complete' : function() {
+ try {
+ obj.replace_tab_with_opac(r.id());
+ } catch(E) {
+ alert(E);
+ }
+ }
+ };
+ }
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.spawn_marc_editor_for_overlay.overlay_error'),E);
+ }
+ }
+ }
+ }
+ );
+ },
+
+
+ 'load_creds' : function() {
+ var obj = this;
+ try {
+ obj.creds = { 'version' : g.save_version, 'services' : {}, 'hosts' : {} };
+ /*
+ {
+ 'version' : xx,
+ 'default_service' : xx,
+ 'services' : {
+
+ 'xx' : {
+ 'username' : xx,
+ 'password' : xx,
+ 'default_attr' : xx,
+ },
+
+ 'xx' : {
+ 'username' : xx,
+ 'password' : xx,
+ 'default_attr' : xx,
+ },
+ },
+ // new in version 2
+ 'hosts' : {
+ 'xxxx' : {
+ 'default_services' : [ xx, ... ],
+ 'services' : {
+
+ 'xx' : {
+ 'username' : xx,
+ 'password' : xx,
+ 'default_attr' : xx,
+ },
+
+ 'xx' : {
+ 'username' : xx,
+ 'password' : xx,
+ 'default_attr' : xx,
+ },
+ },
+ }
+ }
+ }
+ */
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+ JSAN.use('util.file'); var file = new util.file('z3950_store');
+ if (file._file.exists()) {
+ var creds = file.get_object(); file.close();
+ if (typeof creds.version != 'undefined') {
+ if (creds.version >= obj.creds_version) { /* so apparently, this guy is assuming that future versions will be backwards compatible */
+ if (typeof creds.hosts == 'undefined') creds.hosts = {};
+ obj.creds = creds;
+ }
+ }
+ }
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.load_creds.z3950_cred_error'),E);
+ }
+ },
+
+ 'save_creds' : function () {
+ try {
+ var obj = this;
+ if (typeof obj.creds.hosts == 'undefined') obj.creds.hosts = {};
+ if (typeof obj.creds.hosts[ obj.data.server_unadorned ] == 'undefined') obj.creds.hosts[ obj.data.server_unadorned ] = { 'services' : {} };
+ obj.creds.hosts[ obj.data.server_unadorned ].default_services = obj.active_services;
+ for (var i = 0; i < obj.creds.hosts[ obj.data.server_unadorned ].default_services.length; i++) {
+ var service = obj.creds.hosts[ obj.data.server_unadorned ].default_services[i];
+ if (typeof obj.creds.hosts[ obj.data.server_unadorned ].services[ service ] == 'undefined') {
+ obj.creds.hosts[ obj.data.server_unadorned ].services[ service ] = {}
+ }
+ obj.creds.hosts[ obj.data.server_unadorned ].services[service].username = document.getElementById(service + '_username').value;
+ obj.creds.hosts[ obj.data.server_unadorned ].services[service].password = document.getElementById(service + '_password').value;
+ if (obj.default_attr) {
+ obj.creds.hosts[ obj.data.server_unadorned ].services[service].default_attr = obj.default_attr;
+ }
+ }
+ obj.creds.version = obj.creds_version;
+ netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
+ JSAN.use('util.file'); var file = new util.file('z3950_store');
+ file.set_object(obj.creds);
+ file.close();
+ } catch(E) {
+ obj.error.standard_unexpected_error_alert($("catStrings").getString('staff.cat.z3950.save_creds.z3950_cred_error'),E);
+ }
+ },
+
+ 'handle_enter' : function(ev) {
+ var obj = this;
+ if (ev.target.tagName != 'textbox') return;
+ if (ev.keyCode == 13 /* enter */ || ev.keyCode == 77 /* enter on a mac */) setTimeout( function() { obj.initial_search(); }, 0);
+ },
+}
+
+dump('exiting cat.z3950.js\n');
More information about the open-ils-commits
mailing list