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