]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/cat/opac.js
Fast single item add from within marc editor. Good for home users, but all cataloger...
[working/Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / cat / opac.js
1 var docid; var marc_html; var top_pane; var bottom_pane; var opac_frame; var opac_url;
2
3 var marc_view_reset = true;
4 var marc_edit_reset = true;
5 var copy_browser_reset = true;
6 var hold_browser_reset = true;
7
8 function $(id) { return document.getElementById(id); }
9
10 function my_init() {
11         try {
12                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
13                 if (typeof JSAN == 'undefined') { throw(document.getElementById('offlineStrings').getString('common.jsan.missing')); }
14                 JSAN.errorLevel = "die"; // none, warn, or die
15                 JSAN.addRepository('..');
16                 JSAN.use('util.error'); g.error = new util.error();
17                 g.error.sdump('D_TRACE','my_init() for cat/opac.xul');
18
19                 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
20                 XML_HTTP_SERVER = g.data.server_unadorned;
21
22         //JSAN.addRepository('http://' + g.data.server_unadorned + '/xul/server/');
23         //JSAN._loadJSFromUrl('http://' + g.data.server_unadorned + '/xul/server/cat/util.js');
24
25                 JSAN.use('util.network'); g.network = new util.network();
26
27                 g.cgi = new CGI();
28                 try { authtime = g.cgi.param('authtime') || xulG.authtime; } catch(E) { g.error.sdump('D_ERROR',E); }
29                 try { docid = g.cgi.param('docid') || xulG.docid; } catch(E) { g.error.sdump('D_ERROR',E); }
30                 try { opac_url = g.cgi.param('opac_url') || xulG.opac_url; } catch(E) { g.error.sdump('D_ERROR',E); }
31
32                 JSAN.use('util.deck');
33                 top_pane = new util.deck('top_pane');
34                 bottom_pane = new util.deck('bottom_pane');
35
36                 set_opac();
37
38         } catch(E) {
39                 var err_msg = document.getElementById("offlineStrings").getFormattedString("common.exception", ["cat/opac.xul", E]);
40                 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
41                 alert(err_msg);
42         }
43 }
44
45 function set_brief_view() {
46         var url = xulG.url_prefix( urls.XUL_BIB_BRIEF ) + '?docid=' + window.escape(docid); 
47         dump('spawning ' + url + '\n');
48         top_pane.set_iframe( 
49                 url,
50                 {}, 
51                 { 
52                         'set_tab_name' : function(n) { 
53                                 if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
54                                         try { window.xulG.set_tab_name(document.getElementById('offlineStrings').getFormattedString("cat.bib_record", [n])); } catch(E) { alert(E); }
55                                 } else {
56                                         dump('no set_tab_name\n');
57                                 }
58                         }
59                 }  
60         );
61 }
62
63 function set_marc_view() {
64         g.view = 'marc_view';
65         if (marc_view_reset) {
66                 bottom_pane.reset_iframe( xulG.url_prefix( urls.XUL_MARC_VIEW ) + '?docid=' + window.escape(docid),{},xulG);
67         marc_view_reset = false;
68         } else {
69                 bottom_pane.set_iframe( xulG.url_prefix( urls.XUL_MARC_VIEW ) + '?docid=' + window.escape(docid),{},xulG);
70         }
71 }
72
73 function set_marc_edit() {
74         g.view = 'marc_edit';
75         var a = xulG.url_prefix( urls.XUL_MARC_EDIT );
76         var b = {};
77         var c = {
78                         'record' : { 'url' : '/opac/extras/supercat/retrieve/marcxml/record/' + docid },
79             /* // FIXME - disable this until we find a good way of pulling remote JSAN libraries into chrome
80             'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
81                 try {
82                     JSAN.use('cat.util'); return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
83                 } catch(E) {
84                     alert(E);
85                 }
86             },
87             */
88                         'save' : {
89                                 'label' : document.getElementById('offlineStrings').getString('cat.save_record'),
90                                 'func' : function (new_marcxml) {
91                                         try {
92                                                 var r = g.network.simple_request('MARC_XML_RECORD_UPDATE', [ ses(), docid, new_marcxml ]);
93                         marc_view_reset = true;
94                         copy_browser_reset = true;
95                         hold_browser_reset = true;
96                                                 if (typeof r.ilsevent != 'undefined') {
97                                                         throw(r);
98                                                 } else {
99                                                         alert(document.getElementById('offlineStrings').getString("cat.save.success"));
100                             return {
101                                 'id' : r.id(),
102                                 'oncomplete' : function() {}
103                             };
104                                                 }
105                                         } catch(E) {
106                                                         g.error.standard_unexpected_error_alert(document.getElementById('offlineStrings').getString("cat.save.failure"), E);
107                                         }
108                                 }
109                         }
110                 };
111         if (marc_edit_reset) {
112                 bottom_pane.reset_iframe( a,b,c );
113         marc_edit_reset = false;
114         } else {
115                 bottom_pane.set_iframe( a,b,c );
116         }
117 }
118
119 function set_copy_browser() {
120         g.view = 'copy_browser';
121         if (copy_browser_reset) {
122                 bottom_pane.reset_iframe( xulG.url_prefix( urls.XUL_COPY_VOLUME_BROWSE ) + '?docid=' + window.escape(docid),{},xulG);
123         copy_browser_reset =false;
124         } else {
125                 bottom_pane.set_iframe( xulG.url_prefix( urls.XUL_COPY_VOLUME_BROWSE ) + '?docid=' + window.escape(docid),{},xulG);
126         }
127 }
128
129 function set_hold_browser() {
130         g.view = 'hold_browser';
131         if (hold_browser_reset) {
132                 bottom_pane.reset_iframe( xulG.url_prefix( urls.XUL_HOLDS_BROWSER ) + '?docid=' + window.escape(docid),{},xulG);
133         hold_browser_reset = false;
134         } else {
135                 bottom_pane.set_iframe( xulG.url_prefix( urls.XUL_HOLDS_BROWSER ) + '?docid=' + window.escape(docid),{},xulG);
136         }
137 }
138
139 function set_opac() {
140         g.view = 'opac';
141         try {
142                 var content_params = { 
143                         'show_nav_buttons' : true,
144                         'show_print_button' : true,
145                         'passthru_content_params' : { 
146                                 'authtoken' : ses(), 
147                                 'authtime' : ses('authtime'),
148                                 'window_open' : function(a,b,c) {
149                                         try {
150                                                 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
151                                                 return window.open(a,b,c);
152                                         } catch(E) {
153                                                 g.error.standard_unexpected_error_alert('window_open',E);
154                                         }
155                                 }
156                         },
157                         'on_url_load' : function(f) {
158                                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
159                                 var win;
160                                 try {
161                                         if (typeof f.contentWindow.wrappedJSObject.attachEvt != 'undefined') {
162                                                 win = f.contentWindow.wrappedJSObject;
163                                         } else {
164                                                 win = f.contentWindow;
165                                         }
166                                 } catch(E) {
167                                         win = f.contentWindow;
168                                 }
169                                 win.attachEvt("rdetail", "recordRetrieved",
170                                         function(id){
171                                                 try {
172                                                         if (docid == id) return;
173                                                         docid = id;
174                                                         refresh_display(id);
175                                                 } catch(E) {
176                                                         g.error.standard_unexpected_error_alert('rdetail -> recordRetrieved',E);
177                                                 }
178                                         }
179                                 );
180                                 
181                                 g.f_record_start = null; g.f_record_prev = null; g.f_record_next = null; g.f_record_end = null;
182                                 $('record_start').disabled = true; $('record_next').disabled = true;
183                                 $('record_prev').disabled = true; $('record_end').disabled = true;
184                                 $('record_pos').setAttribute('value','');
185
186                                 win.attachEvt("rdetail", "nextPrevDrawn",
187                                         function(rIndex,rCount){
188                                                 $('record_pos').setAttribute('value', document.getElementById('offlineStrings').getFormattedString('cat.record.counter', [(1+rIndex), rCount ? rCount : 1]));
189                                                 if (win.rdetailNext) {
190                                                         g.f_record_next = function() { 
191                                                                 g.view_override = g.view; 
192                                                                 win.rdetailNext(); 
193                                                         }
194                                                         $('record_next').disabled = false;
195                                                 }
196                                                 if (win.rdetailPrev) {
197                                                         g.f_record_prev = function() { 
198                                                                 g.view_override = g.view; 
199                                                                 win.rdetailPrev(); 
200                                                         }
201                                                         $('record_prev').disabled = false;
202                                                 }
203                                                 if (win.rdetailStart) {
204                                                         g.f_record_start = function() { 
205                                                                 g.view_override = g.view; 
206                                                                 win.rdetailStart(); 
207                                                         }
208                                                         $('record_start').disabled = false;
209                                                 }
210                                                 if (win.rdetailEnd) {
211                                                         g.f_record_end = function() { 
212                                                                 g.view_override = g.view; 
213                                                                 win.rdetailEnd(); 
214                                                         }
215                                                         $('record_end').disabled = false;
216                                                 }
217                                         }
218                                 );
219                         },
220                         'url_prefix' : xulG.url_prefix,
221                 };
222                 if (opac_url) { content_params.url = opac_url; } else { content_params.url = xulG.url_prefix( urls.browser ); }
223                 browser_frame = bottom_pane.set_iframe( xulG.url_prefix(urls.XUL_BROWSER) + '?name=Catalog', {}, content_params);
224         /* // Remember to use the REMOTE_BROWSER if we ever try to move this to remote xul again
225                 browser_frame = bottom_pane.set_iframe( xulG.url_prefix(urls.XUL_REMOTE_BROWSER) + '?name=Catalog', {}, content_params);
226         */
227         } catch(E) {
228                 g.error.sdump('D_ERROR','set_opac: ' + E);
229         }
230 }
231
232 function bib_in_new_tab() {
233         try {
234                 var url = browser_frame.contentWindow.g.browser.controller.view.browser_browser.contentWindow.wrappedJSObject.location.href;
235                 var content_params = { 'session' : ses(), 'authtime' : ses('authtime'), 'opac_url' : url };
236                 xulG.new_tab(xulG.url_prefix(urls.XUL_OPAC_WRAPPER), {}, content_params);
237         } catch(E) {
238                 g.error.sdump('D_ERROR',E);
239         }
240 }
241
242 function remove_me() {
243         var url = xulG.url_prefix( urls.XUL_BIB_BRIEF ) + '?docid=' + window.escape(docid);
244         dump('removing ' + url + '\n');
245         try { top_pane.remove_iframe( url ); } catch(E) { dump(E + '\n'); }
246         $('nav').setAttribute('hidden','true');
247 }
248
249 function add_to_bucket() {
250         JSAN.use('util.window'); var win = new util.window();
251         win.open(
252                 xulG.url_prefix(urls.XUL_RECORD_BUCKETS_QUICK)
253                 + '?record_ids=' + js2JSON( [ docid ] ),
254                 'sel_bucket_win' + win.window_name_increment(),
255                 'chrome,resizable,modal,center'
256         );
257 }
258
259 function mark_for_overlay() {
260         g.data.marked_record = docid;
261         g.data.stash('marked_record');
262         var robj = g.network.simple_request('MODS_SLIM_RECORD_RETRIEVE.authoritative',[docid]);
263     if (typeof robj.ilsevent == 'undefined') {
264         g.data.marked_record_mvr = robj;
265     } else {
266         g.data.marked_record_mvr = null;
267                 g.error.standard_unexpected_error_alert('in mark_for_overlay',robj);
268     }
269     g.data.stash('marked_record_mvr');
270     if (g.data.marked_record_mvr) {
271         alert(document.getElementById('offlineStrings').getFormattedString('cat.opac.record_marked_for_overlay.tcn.alert',[ g.data.marked_record_mvr.tcn() ]));
272     } else {
273         alert(document.getElementById('offlineStrings').getFormattedString('cat.opac.record_marked_for_overlay.record_id.alert',[ g.data.marked_record  ]));
274     }
275 }
276
277 function delete_record() {
278         if (g.error.yns_alert(
279                 document.getElementById('offlineStrings').getFormattedString('cat.opac.delete_record.confirm', [docid]),
280                 document.getElementById('offlineStrings').getString('cat.opac.delete_record'),
281                 document.getElementById('offlineStrings').getString('cat.opac.delete'),
282                 document.getElementById('offlineStrings').getString('cat.opac.cancel'),
283                 null,
284                 document.getElementById('offlineStrings').getString('cat.opac.record_deleted.confirm')) == 0) {
285                 var robj = g.network.simple_request('FM_BRE_DELETE',[ses(),docid]);
286                 if (typeof robj.ilsevent != 'undefined') {
287                         alert(document.getElementById('offlineStrings').getFormattedString('cat.opac.record_deleted.error',  [docid, robj.textcode, robj.desc]) + '\n');
288                 } else {
289                         alert(document.getElementById('offlineStrings').getString('cat.opac.record_deleted'));
290                         refresh_display(docid);
291                 }
292         }
293 }
294
295 function undelete_record() {
296     if (g.error.yns_alert(
297                 document.getElementById('offlineStrings').getFormattedString('cat.opac.undelete_record.confirm', [docid]),
298                 document.getElementById('offlineStrings').getString('cat.opac.undelete_record'),
299                 document.getElementById('offlineStrings').getString('cat.opac.undelete'),
300                 document.getElementById('offlineStrings').getString('cat.opac.cancel'),
301                 null,
302                 document.getElementById('offlineStrings').getString('cat.opac.record_undeleted.confirm')) == 0) {
303
304         var robj = g.network.simple_request('FM_BRE_UNDELETE',[ses(),docid]);
305         if (typeof robj.ilsevent != 'undefined') {
306                         alert(document.getElementById('offlineStrings').getFormattedString('cat.opac.record_undeleted.error',  [docid, robj.textcode, robj.desc]) + '\n');
307         } else {
308                         alert(document.getElementById('offlineStrings').getString('cat.opac.record_undeleted'));
309                         refresh_display(docid);
310         }
311     }
312 }
313
314 function refresh_display(id) {
315         try { 
316         marc_view_reset = true;
317         marc_edit_reset = true;
318         copy_browser_reset = true;
319         hold_browser_reset = true;
320                 while(top_pane.node.lastChild) top_pane.node.removeChild( top_pane.node.lastChild );
321                 var children = bottom_pane.node.childNodes;
322                 for (var i = 0; i < children.length; i++) {
323                         if (children[i] != browser_frame) bottom_pane.node.removeChild(children[i]);
324                 }
325
326                 set_brief_view();
327                 $('nav').setAttribute('hidden','false');
328                 var settings = g.network.simple_request(
329                         'FM_AUS_RETRIEVE',
330                         [ ses(), g.data.list.au[0].id() ]
331                 );
332                 var view = settings['staff_client.catalog.record_view.default'];
333                 if (g.view_override) {
334                         view = g.view_override;
335                         g.view_override = null;
336                 }
337                 switch(view) {
338                         case 'marc_view' : set_marc_view(); break;
339                         case 'marc_edit' : set_marc_edit(); break;
340                         case 'copy_browser' : set_copy_browser(); break;
341                         case 'hold_browser' : set_hold_browser(); break;
342                         case 'opac' :
343                         default: set_opac(); break;
344                 }
345         } catch(E) {
346                 g.error.standard_unexpected_error_alert('in refresh_display',E);
347         }
348 }
349
350 function set_default() {
351         var robj = g.network.simple_request(
352                 'FM_AUS_UPDATE',
353                 [ ses(), g.data.list.au[0].id(), { 'staff_client.catalog.record_view.default' : g.view } ]
354         )
355         if (typeof robj.ilsevent != 'undefined') {
356                 if (robj.ilsevent != 0) g.error.standard_unexpected_error_alert(document.getElementById('offlineStrings').getString('cat.preference.error'), robj);
357         }
358 }
359
360