1 const rel_vert_pos_call_number_classification = 1;
2 const rel_vert_pos_call_number_prefix = 2;
3 const rel_vert_pos_call_number = 3;
4 const rel_vert_pos_call_number_suffix = 4;
10 if (typeof JSAN == 'undefined') { throw( $("commonStrings").getString('common.jsan.missing') ); }
11 JSAN.errorLevel = "die"; // none, warn, or die
12 JSAN.addRepository('/xul/server/');
13 JSAN.use('util.error'); g.error = new util.error();
14 g.error.sdump('D_TRACE','my_init() for cat/volume_editor.xul');
16 JSAN.use('OpenILS.data'); g.data = new OpenILS.data(); g.data.init({'via':'stash'});
17 JSAN.use('util.network'); g.network = new util.network();
19 JSAN.use('util.functional');
23 g.volumes = xul_param('volumes',{'stash_name':'volumes_temp','clear_xpcom':true}); //JSON2js( g.data.volumes_temp );
24 //g.data.volumes_temp = ''; g.data.stash('volumes_temp');
26 var rows = document.getElementById('rows');
30 for (var i = 0; i < g.volumes.length; i++) {
31 var row = document.createElement('row');
32 rows.appendChild(row);
33 var lib_label = document.createElement('label');
34 row.appendChild(lib_label);
35 var class_ml = g.render_class_menu(i);
36 class_ml.setAttribute('class','cn_class');
37 class_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_classification);
38 row.appendChild(class_ml);
39 var prefix_ml = g.render_prefix_menu(i);
40 prefix_ml.setAttribute('class','cn_prefix');
41 prefix_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_prefix);
42 row.appendChild(prefix_ml);
43 var label_tb = document.createElement('textbox');
44 label_tb.setAttribute('rel_vert_pos', rel_vert_pos_call_number);
45 row.appendChild(label_tb);
46 var suffix_ml = g.render_suffix_menu(i);
47 suffix_ml.setAttribute('class','cn_suffix');
48 suffix_ml.setAttribute('rel_vert_pos', rel_vert_pos_call_number_suffix);
49 row.appendChild(suffix_ml);
50 if (!first_tb) { first_tb = label_tb; }
52 var lib_id = g.volumes[i].owning_lib();
55 if (last_lib_seen != lib_id ) {
56 lib_label.setAttribute('value',g.data.hash.aou[ lib_id ].shortname() );
57 last_lib_seen = lib_id;
60 label_tb.setAttribute('value',g.volumes[i].label());
61 label_tb.setAttribute('onchange','try { var v = g.volumes['+i+']; v.ischanged("1"); v.label( this.value ); } catch(E) { alert(E); }');
64 first_tb.select(); first_tb.focus();
67 if (g.volumes.length > 0) {
69 JSAN.use('util.fm_utils');
71 // Get the default callnumber classification scheme from OU settings
72 g.label_class = g.data.hash.aous['cat.default_classification_scheme'];
74 // Assign a default value if none was returned
76 g.label_class = g.data.list.acnc[0].id();
79 // Find the pertinent orgs
82 for (var i = 0; i < g.volumes.length; i++) {
83 seen_ou[ g.volumes[i].owning_lib() ] = 1;
85 for (var i in seen_ou) {
89 for (var i = 0; i < ou_ids.length; i++) {
91 var org = g.data.hash.aou[ ou_ids[i] ];
92 if ( get_bool( g.data.hash.aout[ org.ou_type() ].can_have_vols() ) ) {
93 g.ou_ids.push( ou_ids[i] );
96 g.error.sdump('D_ERROR',E);
99 g.common_ancestor_ou_ids = util.fm_utils.find_common_aou_ancestors( g.ou_ids ).reverse();
104 cat.util.render_callnumbers_for_bib_menu('marc_cn',g.volumes[0].record(), g.label_class);
108 g.render_batch_button();
112 var err_msg = $("commonStrings").getFormattedString('common.exception', ['cat/volume_editor.xul', E]);
113 try { g.error.sdump('D_ERROR',err_msg); } catch(E) { dump(err_msg); dump(js2JSON(E)); }
118 g.stash_and_close = function() {
120 //g.data.volumes_temp = js2JSON( g.volumes );
121 //g.error.sdump('D_CAT','in modal window, g.data.volumes_temp = \n' + g.data.volumes_temp + '\n');
122 //g.data.stash('volumes_temp');
123 xulG.volumes = g.volumes;
124 xulG.update_these_volumes = 1;
125 xulG.auto_merge = document.getElementById('auto_merge').checked;
128 alert('FIXME: volume editor -> ' + E);
132 g.render_class_menu = function(vol_idx) {
133 var ml = cat.util.render_cn_class_menu(
135 typeof g.volumes[vol_idx].label_class() == 'object'
136 ? g.volumes[vol_idx].label_class().id()
137 : g.volumes[vol_idx].label_class()
142 g.volumes[vol_idx].ischanged(1);
143 g.volumes[vol_idx].label_class(ml.value);
150 g.render_prefix_menu = function(vol_idx) {
152 var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
153 ? g.volumes[vol_idx].owning_lib()
154 : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
156 var menulist = cat.util.render_cn_prefix_menu(
159 typeof g.volumes[vol_idx].prefix() == 'object'
160 ? g.volumes[vol_idx].prefix().id()
161 : g.volumes[vol_idx].prefix()
164 menulist.addEventListener(
167 g.volumes[vol_idx].ischanged(1);
168 g.volumes[vol_idx].prefix(menulist.value);
175 g.render_suffix_menu = function(vol_idx) {
177 var org = typeof g.volumes[vol_idx].owning_lib() == 'object'
178 ? g.volumes[vol_idx].owning_lib()
179 : g.data.hash.aou[ g.volumes[vol_idx].owning_lib() ];
181 var menulist = cat.util.render_cn_suffix_menu(
184 typeof g.volumes[vol_idx].suffix() == 'object'
185 ? g.volumes[vol_idx].suffix().id()
186 : g.volumes[vol_idx].suffix()
189 menulist.addEventListener(
192 g.volumes[vol_idx].ischanged(1);
193 g.volumes[vol_idx].suffix(menulist.value);
200 g.list_classes = function() {
201 var hbox = $('batch_class');
202 var ml = cat.util.render_cn_class_menu(
204 [ '<No Change>', false ]
207 ml.setAttribute('id','batch_class_menulist');
208 hbox.appendChild(ml);
211 g.list_prefixes = function() {
212 var hbox = $('batch_prefix');
213 var ml = cat.util.render_cn_prefix_menu(
214 g.common_ancestor_ou_ids,
216 [ '<No Change>', false ]
219 ml.setAttribute('id','batch_prefix_menulist');
220 hbox.appendChild(ml);
223 g.list_suffixes = function() {
224 var hbox = $('batch_suffix');
225 var ml = cat.util.render_cn_suffix_menu(
226 g.common_ancestor_ou_ids,
228 [ '<No Change>', false ]
231 ml.setAttribute('id','batch_suffix_menulist');
232 hbox.appendChild(ml);
235 g.render_batch_button = function() {
236 var hbox = $('batch_button_box');
237 var btn = document.createElement('button');
238 btn.setAttribute('id','batch_button');
239 btn.setAttribute('label',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.label'));
240 btn.setAttribute('accesskey',$('catStrings').getString('staff.cat.volume_copy_creator.my_init.btn.accesskey'));
241 btn.setAttribute('image','/xul/server/skin/media/images/down_arrow.gif');
242 hbox.appendChild(btn);
243 btn.addEventListener(
246 var nl = document.getElementsByTagName('textbox');
247 for (var i = 0; i < nl.length; i++) {
249 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number && !nl[i].disabled) {
250 var label = $('marc_cn').firstChild.value;
253 util.widgets.dispatch('change',nl[i]);
257 nl = document.getElementsByTagName('menulist');
258 for (var i = 0; i < nl.length; i++) {
260 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_classification && !nl[i].disabled) {
261 var value = $('batch_class_menulist').value;
262 if (!isNaN( Number(value) )) {
264 util.widgets.dispatch('command',nl[i]);
268 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_prefix && !nl[i].disabled) {
269 var value = $('batch_prefix_menulist').value;
270 if (!isNaN( Number(value) )) {
272 util.widgets.dispatch('command',nl[i]);
276 if (nl[i].getAttribute('rel_vert_pos')==rel_vert_pos_call_number_suffix && !nl[i].disabled) {
277 var value = $('batch_suffix_menulist').value;
278 if (!isNaN( Number(value) )) {
280 util.widgets.dispatch('command',nl[i]);