]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/bib_brief.js
Improve Firefox/XULRunner Support
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / cat / bib_brief.js
1 var docid;
2
3 function bib_brief_init(mode) {
4     try {
5
6         ui_init(); // JSAN, etc.
7
8         if (! mode) { mode = 'horizontal'; }
9
10         JSAN.use('OpenILS.data');
11         g.data = new OpenILS.data();
12         g.data.stash_retrieve();
13
14         docid = xul_param('docid');
15
16         // hackery if modal and invoked with util.window
17         var key = location.pathname + location.search + location.hash;
18         if (!docid
19             && typeof g.data.modal_xulG_stack != 'undefined'
20             && typeof g.data.modal_xulG_stack[key] != 'undefined'
21         ) {
22             var xulG = g.data.modal_xulG_stack[key][
23                 g.data.modal_xulG_stack[key].length - 1 ];
24             if (typeof xulG == 'object') {
25                 docid = xulG.docid;
26             }
27         }
28
29         JSAN.use('util.network'); g.network = new util.network();
30         JSAN.use('util.date');
31
32         document.getElementById('caption').setAttribute(
33             'tooltiptext',
34             document.getElementById('catStrings').getFormattedString(
35                 'staff.cat.bib_brief.record_id', [docid]
36             )
37         );
38
39         if (docid > -1) {
40
41             g.data.last_record = docid; g.data.stash('last_record');
42
43             g.network.simple_request(
44                 'MODS_SLIM_RECORD_RETRIEVE.authoritative',
45                 [ docid ],
46                 function (req) {
47                     try {
48                         g.mods = req.getResultObject();
49                         set_tab_name();
50                         g.network.simple_request(
51                             'FM_BRE_RETRIEVE_VIA_ID.authoritative',
52                             [ ses(), [ docid ] ],
53                             function (req2) {
54                                 try {
55                                     g.meta = req2.getResultObject()[0];
56                                     set_caption();
57                                     dynamic_grid_replacement(mode);
58                                     bib_brief_overlay({
59                                         'mvr' : g.mods,
60                                         'bre' : g.meta
61                                     });
62                                 } catch(E) {
63                                     alert('Error in bib_brief.js, '
64                                         + 'req handler 2: ' + E + '\n');
65                                 }
66                             }
67                         );
68                     } catch(E) {
69                         alert('Error in bib_brief.js, req handler 1: '
70                             + E + '\n');
71                     }
72                 }
73             );
74
75         } else {
76             var t = document.getElementById('caption').getAttribute('label');
77             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.noncat') + ' ';
78             document.getElementById('caption').setAttribute('style','background: red; color: white;');
79             document.getElementById('caption').setAttribute('label',t);
80         }
81
82     } catch(E) {
83         var err_msg = document.getElementById("commonStrings").getFormattedString('common.exception', ['cat/bib_brief.xul', E]);
84         try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); }
85         alert(err_msg);
86     }
87 }
88
89 function set_tab_name() {
90     try {
91         window.xulG.set_tab_name(g.mods.tcn());
92     } catch(E) {
93         dump('Error in bib_brief.js, set_tab_name(): ' + E + '\n');
94     }
95 }
96
97 function set_caption() {
98     try {
99         var t = document.getElementById('caption').getAttribute('label');
100         if (get_bool( g.meta.deleted() )) {
101             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.deleted') + ' ';
102             document.getElementById('caption').setAttribute('style','background: red; color: white;');
103         }
104         if ( ! get_bool( g.meta.active() ) ) {
105             t += ' ' + document.getElementById('catStrings').getString('staff.cat.bib_brief.inactive') + ' ';
106             document.getElementById('caption').setAttribute('style','background: red; color: white;');
107         }
108         document.getElementById('caption').setAttribute('label',t);
109
110     } catch(E) {
111         dump('Error in bib_brief.js, set_caption(): ' + E + '\n');
112     }
113 }
114
115 function unhide_add_volumes_button() {
116     if (xulG && typeof xulG == 'object' && typeof xulG['new_tab'] == 'function') {
117         document.getElementById('add_volumes').hidden = false;
118         document.getElementById('add_volumes_left_paren').hidden = false;
119         document.getElementById('add_volumes_right_paren').hidden = false;
120     }
121 }
122
123 function view_marc() {
124     try {
125         JSAN.use('util.window'); var win = new util.window();
126         if (docid < 0) {
127             alert(document.getElementById("catStrings").getString('staff.cat.bib_brief.noncat.alert'));
128         } else {
129             //win.open( urls.XUL_MARC_VIEW + '?noprint=1&docid=' + docid, 'marc_view', 'chrome,resizable,modal,width=400,height=400');
130             win.open( urls.XUL_MARC_VIEW, 'marc_view', 'chrome,resizable,modal,width=400,height=400',{'noprint':1,'docid':docid});
131         }
132     } catch(E) {
133         g.error.standard_unexpected_error_alert('spawning marc display',E);
134     }
135 }
136
137 function spawn_patron(span) {
138     try {
139         if (typeof window.xulG == 'object' && typeof window.xulG.set_patron_tab == 'function') {
140             window.xulG.set_patron_tab( {}, { 'id' : span.getAttribute('au_id') } );
141         } else {
142             copy_to_clipboard( span.textContent );
143         }
144     } catch(E) {
145         g.error.standard_unexpected_error_alert('spawning patron display',E);
146     }
147 }
148
149 function add_volumes() {
150     try {
151         var edit = 0;
152         try {
153             edit = g.network.request(
154                 api.PERM_MULTI_ORG_CHECK.app,
155                 api.PERM_MULTI_ORG_CHECK.method,
156                 [
157                     ses(),
158                     ses('staff_id'),
159                     [ ses('ws_ou') ],
160                     [ 'CREATE_VOLUME', 'CREATE_COPY' ]
161                 ]
162             ).length == 0 ? 1 : 0;
163         } catch(E) {
164             g.error.sdump('D_ERROR','batch permission check: ' + E);
165         }
166
167         if (edit==0) {
168             alert(document.getElementById('offlineStrings').getString('staff.circ.copy_status.add_volumes.perm_failure'));
169             return; // no read-only view for this interface
170         }
171
172         try {
173             JSAN.use('cat.util');
174             var cbsObj = cat.util.get_cbs_for_bre_id(docid);
175             if (cbsObj && cbsObj.can_have_copies() != get_db_true()) {
176                 alert(document.getElementById('offlineStrings').getFormattedString('staff.cat.bib_source.can_have_copies.false', [cbsObj.source()]));
177                 return;
178             }
179         } catch(E) {
180             g.error.sdump('D_ERROR','can have copies check: ' + E);
181             alert('Error in server/cat/bib_brief.js, add_volumes(): ' + E);
182             return;
183         }
184
185         var title = document.getElementById('offlineStrings').getFormattedString('staff.circ.copy_status.add_volumes.title', [docid]);
186
187         var url;
188         var unified_interface = String( g.data.hash.aous['ui.unified_volume_copy_editor'] ) == 'true';
189         if (unified_interface) {
190             var horizontal_interface = String( g.data.hash.aous['ui.cat.volume_copy_editor.horizontal'] ) == 'true';
191             url = window.xulG.url_prefix( horizontal_interface ? 'XUL_VOLUME_COPY_CREATOR_HORIZONTAL' : 'XUL_VOLUME_COPY_CREATOR' );
192         } else {
193             url = window.xulG.url_prefix('XUL_VOLUME_COPY_CREATOR_ORIGINAL');
194         }
195         var w = xulG.new_tab(
196             url,
197             { 'tab_name' : title },
198             { 'doc_id' : docid, 'ou_ids' : [ ses('ws_ou') ], 'reload_opac' : xulG.reload_opac }
199         );
200     } catch(E) {
201         alert('Error in server/cat/bib_brief.js, add_volumes(): ' + E);
202     }
203 }
204
205 function ui_init() {
206     if (typeof JSAN == 'undefined') {
207         throw(
208             document.getElementById("commonStrings").getString(
209                 'common.jsan.missing'
210             )
211         );
212     }
213     JSAN.errorLevel = "die"; // none, warn, or die
214     JSAN.addRepository('/xul/server/');
215     JSAN.use('util.error'); g.error = new util.error();
216     g.error.sdump('D_TRACE','my_init() for cat_bib_brief.xul');
217 }
218
219 function dynamic_grid_replacement(mode) {
220     var prefs = Components.classes[
221         '@mozilla.org/preferences-service;1'
222     ].getService(
223         Components.interfaces['nsIPrefBranch']
224     );
225     if (! prefs.prefHasUserValue(
226             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
227         )
228     ) {
229         return false;
230     }
231
232     var gridData = JSON2js(
233         prefs.getCharPref(
234             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
235         )
236     );
237
238     var grid = document.getElementById('bib_brief_grid');
239     if (!grid) { return false; }
240
241     JSAN.use('util.widgets');
242
243     util.widgets.remove_children(grid);
244
245     var columns = document.createElement('columns');
246     grid.appendChild(columns);
247
248     var maxColumns = 0;
249     for (var i = 0; i < gridData.length; i++) {
250         if (gridData[i].length > maxColumns) {
251             maxColumns = gridData[i].length;
252         }
253     }
254
255     for (var i = 0; i < maxColumns; i++) {
256         var columnA = document.createElement('column');
257         columns.appendChild(columnA);
258         var columnB = document.createElement('column');
259         columns.appendChild(columnB);
260     }
261
262     // Flex the column where the title usually goes
263     columns.firstChild.nextSibling.setAttribute('flex','1');
264
265     var rows = document.createElement('rows');
266     grid.appendChild(rows);
267
268 /*
269     <row id="bib_brief_grid_row1" position="1">
270         <label control="title" class="emphasis"
271             value="&staff.cat.bib_brief.title.label;"
272             accesskey="&staff.cat.bib_brief.title.accesskey;"/>
273         <textbox id="title"
274             name="title" readonly="true" context="clipboard"
275             class="plain" onfocus="this.select()"/>
276     </row>
277 */
278
279     var catStrings = document.getElementById('catStrings');
280
281     for (var i = 0; i < gridData.length; i++) {
282         var row = document.createElement('row');
283         row.setAttribute('id','bib_brief_grid_row'+i);
284         rows.appendChild(row);
285
286         for (var j = 0; j < gridData[i].length; j++) {
287             var name = gridData[i][j];
288
289             var label = document.createElement('label');
290             label.setAttribute('control',name);
291             label.setAttribute('class','emphasis');
292             label.setAttribute('value',
293                 catStrings.testString('staff.cat.bib_brief.'+name+'.label')
294                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.label')
295                 : name
296             );
297             label.setAttribute('accesskey',
298                 catStrings.testString('staff.cat.bib_brief.'+name+'.accesskey')
299                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.accesskey')
300                 : name
301             );
302             row.appendChild(label);
303
304             var textbox = document.createElement('textbox');
305             textbox.setAttribute('id',name);
306             textbox.setAttribute('name',name);
307             textbox.setAttribute('readonly','true');
308             textbox.setAttribute('context','clipboard');
309             textbox.setAttribute('class','plain');
310             textbox.setAttribute('onfocus','this.select()');
311             row.appendChild(textbox);
312         }
313     }
314     return true;
315 }
316