1 dump('entering cat.z3950.js\n');
3 if (typeof cat == 'undefined') cat = {};
4 cat.z3950 = function (params) {
6 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
7 JSAN.use('util.error'); this.error = new util.error();
8 JSAN.use('util.network'); this.network = new util.network();
10 dump('cat.z3950: ' + E + '\n');
14 cat.z3950.prototype = {
16 'init' : function( params ) {
19 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
20 JSAN.use('util.widgets');
24 JSAN.use('circ.util');
25 var columns = circ.util.columns(
27 'tcn' : { 'hidden' : false },
28 'isbn' : { 'hidden' : false },
29 'title' : { 'hidden' : false, 'flex' : '1' },
30 'author' : { 'hidden' : false },
31 'edition' : { 'hidden' : false },
32 'pubdate' : { 'hidden' : false },
33 'publisher' : { 'hidden' : false },
37 JSAN.use('util.list'); obj.list = new util.list('results');
41 'map_row_to_column' : circ.util.std_map_row_to_column(),
42 'on_select' : function(ev) {
44 JSAN.use('util.functional');
45 var sel = obj.list.retrieve_selection();
46 var list = util.functional.map_list(
48 function(o) { return o.getAttribute('retrieve_id'); }
50 obj.error.sdump('D_TRACE','cat/z3950: selection list = ' + js2JSON(list) );
51 obj.controller.view.marc_import.disabled = false;
52 obj.controller.view.marc_import.setAttribute('retrieve_id',list[0]);
61 document.getAnonymousNodes(document.getElementById('c1'))[0].addEventListener(
65 document.getAnonymousNodes(document.getElementById('c2'))[0]
69 document.getAnonymousNodes(document.getElementById('c2'))[0].addEventListener(
73 document.getAnonymousNodes(document.getElementById('c1'))[0]
78 JSAN.use('util.controller'); obj.controller = new util.controller();
84 function() { alert('Not Yet Implemented'); }
86 'result_message' : [['render'],function(e){return function(){};}],
87 'server' : [['render'],function(e){return function(){};}],
88 'database' : [['render'],function(e){return function(){};}],
89 'port' : [['render'],function(e){return function(){};}],
90 'username' : [['render'],function(e){return function(){};}],
91 'password' : [['render'],function(e){return function(){};}],
99 if (ev.keyCode && ev.keyCode == 13) {
100 obj.asc_search_async();
111 obj.spawn_marc_editor(
113 obj.controller.view.marc_import.getAttribute('retrieve_id')
121 obj.asc_search_async();
131 if (ev.keyCode && ev.keyCode == 13) {
132 obj.raw_search_async();
143 obj.raw_search_async();
146 // 'menu_placeholder' : [
149 // return function() {
150 // util.widgets.remove_children(e);
151 // var ml = util.widgets.make_menulist( [
152 // [ 'OCLC', 'oclc' ],
155 // ml.setAttribute('flex','1');
156 // e.appendChild(ml);
157 // /* An experiment with virtual events. I could just use a named function
158 // instead of defining one inline, and then call that once to set things
159 // up, and let the event handler call it the rest of the time. */
160 // ml.addEventListener(
161 // 'set_server_details',
163 // /* FIXME - get these values from server */
164 // switch(ev.target.value) {
166 // obj.controller.view.server.value = 'zcat.oclc.org';
167 // obj.controller.view.server.disabled = true;
168 // obj.controller.view.database.value = 'OLUCWorldCat';
169 // obj.controller.view.database.disabled = true;
170 // obj.controller.view.port.value = '210';
171 // obj.controller.view.port.disabled = true;
172 // obj.controller.view.username.value = '****';
173 // obj.controller.view.username.disabled = true;
174 // obj.controller.view.password.value = '****';
175 // obj.controller.view.password.disabled = true;
176 // //obj.controller.view.raw_string.value = 'DISABLED';
177 // //obj.controller.view.raw_string.disabled = true;
178 // //obj.controller.view.raw_search.disabled = true;
179 // //obj.controller.view.asc_id.value = '';
180 // //obj.controller.view.asc_id.disabled = false;
181 // //obj.controller.view.asc_search.disabled = false;
184 // obj.controller.view.server.disabled = false;
185 // obj.controller.view.database.disabled = false;
186 // obj.controller.view.server.disabled = false;
187 // obj.controller.view.port.disabled = false;
188 // obj.controller.view.username.value = '';
189 // obj.controller.view.username.disabled = false;
190 // obj.controller.view.password.value = '';
191 // obj.controller.view.password.disabled = false;
192 // //obj.controller.view.raw_string.value = '';
193 // //obj.controller.view.raw_string.disabled = false;
194 // //obj.controller.view.raw_search.disabled = false;
195 // //obj.controller.view.asc_id.value = 'DISABLED';
196 // //obj.controller.view.asc_id.disabled = true;
197 // //obj.controller.view.asc_search.disabled = true;
203 // ml.addEventListener(
205 // function(ev) { util.widgets.dispatch('set_server_details', ev.target); },
208 // setTimeout( function() { util.widgets.dispatch('set_server_details',ml); }, 0 );
209 // obj.controller.view.server_menu = ml;
217 obj.controller.render();
218 obj.controller.view.server.value = 'zcat.oclc.org';
219 obj.controller.view.server.disabled = true;
220 obj.controller.view.database.value = 'OLUCWorldCat';
221 obj.controller.view.database.disabled = true;
222 obj.controller.view.port.value = '210';
223 obj.controller.view.port.disabled = true;
224 obj.controller.view.username.value = '';
225 obj.controller.view.username.disabled = false;
226 obj.controller.view.password.value = '';
227 obj.controller.view.password.disabled = false;
230 this.error.sdump('D_ERROR','cat.z3950.init: ' + E + '\n');
234 'store_disable_search_buttons' : function() {
236 JSAN.use('util.widgets');
237 util.widgets.store_disable(
238 obj.controller.view.asc_search,
239 obj.controller.view.raw_search
241 util.widgets.disable(
242 obj.controller.view.asc_search,
243 obj.controller.view.raw_search
247 'restore_enable_search_buttons' : function() {
249 JSAN.use('util.widgets');
250 util.widgets.restore_disable(
251 obj.controller.view.asc_search,
252 obj.controller.view.raw_search
256 'asc_search_async' : function() {
259 var search = obj.controller.view.asc_id.value;
260 obj.error.sdump('D_TRACE','search string: ' + search);
261 JSAN.use('util.widgets');
262 util.widgets.remove_children( obj.controller.view.result_message );
263 obj.controller.view.result_message.appendChild(
264 document.createTextNode( 'Searching...' )
266 obj.store_disable_search_buttons();
268 obj.network.simple_request(
269 'FM_BLOB_RETRIEVE_VIA_Z3950_TCN',
270 [ ses(), search, 'oclc', obj.controller.view.username.value, obj.controller.view.password.value ],
272 obj.handle_results(req.getResultObject())
273 obj.restore_enable_search_buttons();
277 this.error.sdump('D_ERROR',E);
283 'raw_search_async' : function() {
286 var search = obj.controller.view.raw_string.value;
287 obj.error.sdump('D_TRACE','search string: ' + search);
288 JSAN.use('util.widgets');
289 util.widgets.remove_children( obj.controller.view.result_message );
290 obj.controller.view.result_message.appendChild(
291 document.createTextNode( 'Searching...' )
293 obj.store_disable_search_buttons();
294 if (!Number(obj.controller.view.server_menu.value)) {
299 'service':obj.controller.view.server_menu.value,
307 'server':obj.controller.view.server.value,
308 'prt':obj.controller.view.port.value,
309 'db':obj.controller.view.database.value,
310 'username':obj.controller.view.username.value,
311 'password':obj.controller.view.password.value
316 obj.network.simple_request(
317 'FM_BLOB_RETRIEVE_VIA_Z3950_RAW',
320 obj.handle_results(req.getResultObject())
321 obj.restore_enable_search_buttons();
325 this.error.sdump('D_ERROR',E);
330 'handle_results' : function(results) {
332 JSAN.use('util.widgets');
333 util.widgets.remove_children( obj.controller.view.result_message );
334 if (results == null) {
335 obj.controller.view.result_message.appendChild(
336 document.createTextNode( 'Server Error: ' + api.FM_BLOB_RETRIEVE_VIA_Z3950_TCN.method + ' returned null' )
341 obj.controller.view.result_message.appendChild(
342 document.createTextNode( results.count + (results.count == 1 ? ' result ' : ' results ') + 'found. ' )
345 if (results.records) {
346 obj.controller.view.result_message.appendChild(
347 document.createTextNode( results.records.length + (results.records.length == 1 ? ' result' : ' results') + ' retrieved. ')
349 obj.results = results;
350 obj.list.clear(); obj.controller.view.marc_import.disabled = true;
351 for (var i = 0; i < obj.results.records.length; i++) {
357 'mvr' : function(a){return a;}(obj.results.records[i].mvr),
364 obj.controller.view.result_message.appendChild(
365 document.createTextNode( 'Too many results to retrieve. ')
370 'spawn_marc_editor' : function(my_marcxml) {
373 xulG.url_prefix(urls.XUL_MARC_EDIT),
374 { 'tab_name' : 'MARC Editor' },
376 'record' : { 'marc' : my_marcxml },
378 'label' : 'Import Record',
379 'func' : function (new_marcxml) {
381 var r = obj.network.simple_request('MARC_XML_RECORD_IMPORT', [ ses(), new_marcxml ]);
382 if (typeof r.ilsevent != 'undefined') {
384 case 1704 /* TCN_EXISTS */ :
385 var msg = 'A record with with TCN ' + r.payload.tcn + ' already exists.\nFIXME: add record summary here';
386 var title = 'Import Collision';
387 var btn1 = 'Overlay';
388 var btn2 = typeof r.payload.new_tcn == 'undefined' ? null : 'Import with alternate TCN ' + r.payload.new_tcn;
389 var btn3 = 'Cancel Import';
390 var p = obj.error.yns_alert(msg,title,btn1,btn2,btn3,'Check here to confirm this action');
391 obj.error.sdump('D_ERROR','option ' + p + 'chosen');
394 var r3 = obj.network.simple_request('MARC_XML_RECORD_UPDATE', [ ses(), r.payload.dup_record, new_marcxml ]);
395 if (typeof r3.ilsevent != 'undefined') {
398 alert('Record successfully overlayed.');
399 xulG.set_tab('data:text/plain,' + window.escape('FIXME: Show the record we just overlayed in the opac.'),{'tab_name':'opac goes here'},{});
403 var r2 = obj.network.request(
404 api.MARC_XML_RECORD_IMPORT.app,
405 api.MARC_XML_RECORD_IMPORT.method + '.override',
406 [ ses(), new_marcxml ]
408 if (typeof r2.ilsevent != 'undefined') {
411 alert('Record successfully imported with alternate TCN.');
412 xulG.set_tab('data:text/plain,' + window.escape('FIXME: Show the record we just imported in the opac.'),{'tab_name':'opac goes here'},{});
417 alert('Record import cancelled');
426 alert('Record successfully imported.');
427 xulG.set_tab('data:text/plain,' + window.escape('FIXME: Show the record we just imported in the opac.'),{'tab_name':'opac goes here'},{});
430 obj.error.standard_unexpected_error_alert('Record not likely imported.',E);
440 dump('exiting cat.z3950.js\n');