]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/bib_brief.js
Item Status->Alternate View support for the dynamic Record Summary
[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             netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
130             //win.open( urls.XUL_MARC_VIEW + '?noprint=1&docid=' + docid, 'marc_view', 'chrome,resizable,modal,width=400,height=400');
131             win.open( urls.XUL_MARC_VIEW, 'marc_view', 'chrome,resizable,modal,width=400,height=400',{'noprint':1,'docid':docid});
132         }
133     } catch(E) {
134         g.error.standard_unexpected_error_alert('spawning marc display',E);
135     }
136 }
137
138 function spawn_patron(span) {
139     try {
140         if (typeof window.xulG == 'object' && typeof window.xulG.set_patron_tab == 'function') {
141             window.xulG.set_patron_tab( {}, { 'id' : span.getAttribute('au_id') } );
142         } else {
143             copy_to_clipboard( span.textContent );
144         }
145     } catch(E) {
146         g.error.standard_unexpected_error_alert('spawning patron display',E);
147     }
148 }
149
150 function add_volumes() {
151     try {
152         var edit = 0;
153         try {
154             edit = g.network.request(
155                 api.PERM_MULTI_ORG_CHECK.app,
156                 api.PERM_MULTI_ORG_CHECK.method,
157                 [
158                     ses(),
159                     ses('staff_id'),
160                     [ ses('ws_ou') ],
161                     [ 'CREATE_VOLUME', 'CREATE_COPY' ]
162                 ]
163             ).length == 0 ? 1 : 0;
164         } catch(E) {
165             g.error.sdump('D_ERROR','batch permission check: ' + E);
166         }
167
168         if (edit==0) {
169             alert(document.getElementById('offlineStrings').getString('staff.circ.copy_status.add_volumes.perm_failure'));
170             return; // no read-only view for this interface
171         }
172
173         var title = document.getElementById('offlineStrings').getFormattedString('staff.circ.copy_status.add_volumes.title', [docid]);
174
175         var url;
176         var unified_interface = String( g.data.hash.aous['ui.unified_volume_copy_editor'] ) == 'true';
177         if (unified_interface) {
178             var horizontal_interface = String( g.data.hash.aous['ui.cat.volume_copy_editor.horizontal'] ) == 'true';
179             url = window.xulG.url_prefix( horizontal_interface ? urls.XUL_VOLUME_COPY_CREATOR_HORIZONTAL : urls.XUL_VOLUME_COPY_CREATOR );
180         } else {
181             url = window.xulG.url_prefix( urls.XUL_VOLUME_COPY_CREATOR_ORIGINAL );
182         }
183         var w = xulG.new_tab(
184             url,
185             { 'tab_name' : title },
186             { 'doc_id' : docid, 'ou_ids' : [ ses('ws_ou') ] }
187         );
188     } catch(E) {
189         alert('Error in server/cat/bib_brief.js, add_volumes(): ' + E);
190     }
191 }
192
193 function ui_init() {
194     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
195     if (typeof JSAN == 'undefined') {
196         throw(
197             document.getElementById("commonStrings").getString(
198                 'common.jsan.missing'
199             )
200         );
201     }
202     JSAN.errorLevel = "die"; // none, warn, or die
203     JSAN.addRepository('/xul/server/');
204     JSAN.use('util.error'); g.error = new util.error();
205     g.error.sdump('D_TRACE','my_init() for cat_bib_brief.xul');
206 }
207
208 function dynamic_grid_replacement(mode) {
209     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
210     var prefs = Components.classes[
211         '@mozilla.org/preferences-service;1'
212     ].getService(
213         Components.interfaces['nsIPrefBranch']
214     );
215     if (! prefs.prefHasUserValue(
216             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
217         )
218     ) {
219         return false;
220     }
221
222     var gridData = JSON2js(
223         prefs.getCharPref(
224             'oils.bib_brief.'+mode+'.dynamic_grid_replacement.data'
225         )
226     );
227
228     var grid = document.getElementById('bib_brief_grid');
229     if (!grid) { return false; }
230
231     JSAN.use('util.widgets');
232
233     util.widgets.remove_children(grid);
234
235     var columns = document.createElement('columns');
236     grid.appendChild(columns);
237
238     var maxColumns = 0;
239     for (var i = 0; i < gridData.length; i++) {
240         if (gridData[i].length > maxColumns) {
241             maxColumns = gridData[i].length;
242         }
243     }
244
245     for (var i = 0; i < maxColumns; i++) {
246         var columnA = document.createElement('column');
247         columns.appendChild(columnA);
248         var columnB = document.createElement('column');
249         columns.appendChild(columnB);
250     }
251
252     // Flex the column where the title usually goes
253     columns.firstChild.nextSibling.setAttribute('flex','1');
254
255     var rows = document.createElement('rows');
256     grid.appendChild(rows);
257
258 /*
259     <row id="bib_brief_grid_row1" position="1">
260         <label control="title" class="emphasis"
261             value="&staff.cat.bib_brief.title.label;"
262             accesskey="&staff.cat.bib_brief.title.accesskey;"/>
263         <textbox id="title"
264             name="title" readonly="true" context="clipboard"
265             class="plain" onfocus="this.select()"/>
266     </row>
267 */
268
269     var catStrings = document.getElementById('catStrings');
270
271     for (var i = 0; i < gridData.length; i++) {
272         var row = document.createElement('row');
273         row.setAttribute('id','bib_brief_grid_row'+i);
274         rows.appendChild(row);
275
276         for (var j = 0; j < gridData[i].length; j++) {
277             var name = gridData[i][j];
278
279             var label = document.createElement('label');
280             label.setAttribute('control',name);
281             label.setAttribute('class','emphasis');
282             label.setAttribute('value',
283                 catStrings.testString('staff.cat.bib_brief.'+name+'.label')
284                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.label')
285                 : name
286             );
287             label.setAttribute('accesskey',
288                 catStrings.testString('staff.cat.bib_brief.'+name+'.accesskey')
289                 ? catStrings.getString('staff.cat.bib_brief.'+name+'.accesskey')
290                 : name
291             );
292             row.appendChild(label);
293
294             var textbox = document.createElement('textbox');
295             textbox.setAttribute('id',name);
296             textbox.setAttribute('name',name);
297             textbox.setAttribute('readonly','true');
298             textbox.setAttribute('context','clipboard');
299             textbox.setAttribute('class','plain');
300             textbox.setAttribute('onfocus','this.select()');
301             row.appendChild(textbox);
302         }
303     }
304     return true;
305 }
306