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