]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/bibs_abreast.js
Improve Firefox/XULRunner Support
[Evergreen.git] / Open-ILS / xul / staff_client / server / cat / bibs_abreast.js
1 var error;
2 var network;
3 var record_ids;
4 var lead_record;
5
6 function my_init() {
7     try {
8         if (typeof JSAN == 'undefined') { throw( "The JSAN library object is missing."); }
9         JSAN.errorLevel = "die"; // none, warn, or die
10         JSAN.addRepository('/xul/server/');
11         JSAN.use('util.error'); error = new util.error();
12         error.sdump('D_TRACE','my_init() for bibs_abreast.xul');
13         JSAN.use('util.functional');
14         JSAN.use('util.widgets');
15         JSAN.use('cat.util');
16         JSAN.use('util.network');
17
18         network = new util.network();
19
20         record_ids = xul_param('record_ids') || [];
21         record_ids = util.functional.unique_list_values( record_ids );
22
23         // Merge UI 
24         if (xul_param('merge')) {
25             var x = document.getElementById('merge_bar');
26             x.hidden = false;
27             var y = document.getElementById('merge_button');
28             y.addEventListener('command', merge_records, false);
29             var z = document.getElementById('cancel_button');
30             z.addEventListener('command', function() {
31                 x.hidden = true;
32                 y.disabled = true;
33                 var merge_bars = util.widgets.find_descendants_by_name(document,'merge_bar');
34                 for (var i = 0; i < merge_bars.length; i++) { merge_bars[i].hidden = true; }
35             }, false);
36         }
37
38         // Display the records
39         for (var i = 0; i < record_ids.length; i++) {
40             render_bib(record_ids[i]);
41         }
42
43         /*if (typeof window.xulG == 'object' && typeof window.xulG.set_tab_name == 'function') {
44             try { window.xulG.set_tab_name('Test'); } catch(E) { alert(E); }
45         }*/
46
47     } catch(E) {
48         try { error.standard_unexpected_error_alert('main/test.xul',E); } catch(F) { alert(E); }
49     }
50 }
51
52 function render_bib(record_id) {
53     var main = document.getElementById('main');
54     var template = main.firstChild;
55     var new_node = template.cloneNode(true);
56     main.appendChild(new_node);
57     new_node.hidden = false;
58
59     var splitter_template = template.nextSibling;
60     var splitter = splitter_template.cloneNode(true);
61     main.appendChild(splitter);
62     splitter.hidden = false;
63
64     render_bib_brief(new_node,record_id);
65
66     var xul_deck = util.widgets.find_descendants_by_name(new_node,'bib_deck')[0];
67     var deck = new util.deck(xul_deck);
68
69     // merge UI
70     if (xul_param('merge')) {
71         var merge_bar = util.widgets.find_descendants_by_name(new_node,'merge_bar')[0];
72         merge_bar.hidden = false;
73         var lead_button = util.widgets.find_descendants_by_name(new_node,'lead_button')[0];
74         lead_button.addEventListener('click', function() {
75             lead_record = record_id;
76             dump('record_id = ' + record_id + '\n');
77             document.getElementById('merge_button').disabled = false;
78         }, false);
79     }
80
81     // remove_me button
82     var remove_me = util.widgets.find_descendants_by_name(new_node,'remove_me')[0];
83     remove_me.addEventListener('command', function() {
84         if (lead_record == record_id) {
85             lead_record = undefined;
86             document.getElementById('merge_button').disabled = true;
87         }
88         record_ids = util.functional.filter_list( record_ids, function(o) { return o != record_id; } );
89         main.removeChild(new_node);
90         main.removeChild(splitter);
91         if (main.childNodes.length == 4) {
92             document.getElementById('merge_bar').hidden = true;
93             document.getElementById('merge_button').disabled = true;
94             var merge_bars = util.widgets.find_descendants_by_name(document,'merge_bar');
95             for (var i = 0; i < merge_bars.length; i++) { merge_bars[i].hidden = true; }
96         }
97         if (main.childNodes.length == 2) { xulG.close_tab(); }
98     }, false);
99
100     // radio buttons
101     var view_bib = util.widgets.find_descendants_by_name(new_node,'view_bib')[0];
102     var edit_bib = util.widgets.find_descendants_by_name(new_node,'edit_bib')[0];
103     var holdings = util.widgets.find_descendants_by_name(new_node,'holdings')[0];
104
105     view_bib.addEventListener('command', function() {
106         set_view_pane(deck,record_id);
107     }, false); 
108
109     edit_bib.addEventListener('command', function() {
110         set_edit_pane(deck,record_id);
111     }, false); 
112
113     holdings.addEventListener('command', function() {
114         set_item_pane(deck,record_id);
115     }, false); 
116
117     set_view_pane(deck,record_id);
118
119 }
120
121 function render_bib_brief(new_node,record_id) {
122     // iframe
123     var bib_brief = util.widgets.find_descendants_by_name(new_node,'bib_brief')[0];
124     bib_brief.setAttribute('src', urls.XUL_BIB_BRIEF_VERTICAL);
125     get_contentWindow(bib_brief).xulG = { 'docid' : record_id };
126 }
127
128 function set_view_pane(deck,record_id) {
129     deck.set_iframe( urls.XUL_MARC_VIEW, {}, { 'docid' : record_id } );
130 }
131
132 function set_item_pane(deck,record_id) {
133     var my_xulG = { 'docid' : record_id }; for (var i in xulG) { my_xulG[i] = xulG[i]; }
134     deck.set_iframe( urls.XUL_COPY_VOLUME_BROWSE, {}, my_xulG );
135 }
136
137 function set_edit_pane(deck,record_id) {
138     var my_xulG = {
139         'record' : { 'url' : '/opac/extras/supercat/retrieve/marcxml/record/' + record_id, "id": record_id, "rtype": "bre" },
140         'fast_add_item' : function(doc_id,cn_label,cp_barcode) {
141             try {
142                 return cat.util.fast_item_add(doc_id,cn_label,cp_barcode);
143             } catch(E) {
144                 alert('Error in bibs_abreast.js, set_edit_pane, fast_item_add: ' + E);
145             }
146         },
147         'save' : {
148             'label' : document.getElementById('offlineStrings').getString('cat.save_record'),
149             'func' : function (new_marcxml) {
150                 try {
151                     var r = network.simple_request('MARC_XML_RECORD_UPDATE', [ ses(), record_id, new_marcxml ]);
152                     if (typeof r.ilsevent != 'undefined') {
153                         throw(r);
154                     } else {
155                         return {
156                             'id' : r.id(),
157                             'oncomplete' : function() {}
158                         };
159                     }
160                 } catch(E) {
161                     alert('Error in bibs_abreast.js, set_edit_pane, save: ' + E);
162                 }
163             }
164         },
165         'lock_tab' : xulG.lock_tab(),
166         'unlock_tab' : xulG.unlock_tab()
167     };
168     for (var i in xulG) { my_xulG[i] = xulG[i]; }
169     deck.set_iframe( urls.XUL_MARC_EDIT, {}, my_xulG );
170 }
171
172 function merge_records() {
173     try {
174         var robj = network.simple_request('MERGE_RECORDS',
175             [
176                 ses(),
177                 lead_record,
178                 util.functional.filter_list( record_ids,
179                     function(o) {
180                         return o != lead_record;
181                     }
182                 )
183             ]
184         );
185         if (typeof robj.ilsevent != 'undefined') {
186             switch(Number(robj.ilsevent)) {
187                 case 5000 /* PERM_FAILURE */: break;
188                 default: throw(robj);
189             }
190         }
191         if (typeof xulG.on_merge == 'function') {
192             xulG.on_merge(robj);
193         }
194         var opac_url = xulG.url_prefix('opac_rdetail') + lead_record;
195         var content_params = {
196             'session' : ses(),
197             'authtime' : ses('authtime'),
198             'opac_url' : opac_url,
199         };
200         xulG.set_tab(
201             xulG.url_prefix('XUL_OPAC_WRAPPER'),
202             {'tab_name':'Retrieving title...'},
203             content_params
204         );
205     } catch(E) {
206         alert('Error in bibs_abreast.js, merge_records(): ' + E);
207     }
208 }