From c7604c78c6ba226e3afef6247d7fbb3369cb971a Mon Sep 17 00:00:00 2001 From: Joseph Lewis Date: Tue, 31 May 2011 19:19:57 -0600 Subject: [PATCH] Nearly finished with both of the asset_call_numbers all that is left is db updating, i18n and adding the stuff to the evergreen staff client. Oh, and perhaps some sql to auto-generate functions, although I can't seem to figure that one out yet. --- .../server/admin/asset_call_number.html | 106 ++++++++------ .../staff_client/server/admin/asset_call_number.js | 152 ++++++++++++++++++--- 2 files changed, 199 insertions(+), 59 deletions(-) diff --git a/Open-ILS/xul/staff_client/server/admin/asset_call_number.html b/Open-ILS/xul/staff_client/server/admin/asset_call_number.html index b01a5e5720..0e541753a4 100644 --- a/Open-ILS/xul/staff_client/server/admin/asset_call_number.html +++ b/Open-ILS/xul/staff_client/server/admin/asset_call_number.html @@ -16,63 +16,87 @@ -

Classification System Editor

-
- - - - +
- - - - - - - - - +
+
+

Classification System Editor

+
+
Name: - -
+ + + + + + + + - - - + + - - - + + - - - - -
- -
+ diff --git a/Open-ILS/xul/staff_client/server/admin/asset_call_number.js b/Open-ILS/xul/staff_client/server/admin/asset_call_number.js index 46d69dc380..5451da8c89 100644 --- a/Open-ILS/xul/staff_client/server/admin/asset_call_number.js +++ b/Open-ILS/xul/staff_client/server/admin/asset_call_number.js @@ -12,53 +12,169 @@ dojo.require('openils.widget.ProgressDialog'); dojo.require('openils.CGI') dojo.require('openils.PermaCrud'); + var numItems = 0; var authtoken; var user; -var classifications; -var normalizers = ['asset.label_normalizer']; //A list of normalizers for now... +var classifications; +var normalizers = ["asset.label_normalizer_dewey", "asset.label_normalizer_generic", "asset.label_normalizer_lc"] +var fields = [] -// Document elements, there must be a better way like JQuery... var accselect; var nameInput; +var normalizerSelect; +var inputArea; function init_asset_call() { - authtoken = new openils.CGI().param('ses') || dojo.cookie('ses'); classifications = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('acnc'); - + // Get names of all elements. accselect = document.getElementById('accselect'); nameInput = document.getElementById('nameInput'); + normalizerSelect = document.getElementById('normalizerSelect'); + inputArea = document.getElementById("inputArea"); + + // Fill in the listbox. + var i = -1; for(i in classifications) { var tmp = document.createElement('option'); tmp.text = classifications[i].name(); accselect.add(tmp, null); } - - - //TODO fetch normalizers. + + // If there is at least one element, set us up with that one first. + if(classifications.length > 0) { + select_asset_call_class(0); + } + // TODO fetch normalizers. + //normalizers = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('dbf'); + for( norm in normalizers ) { - alert(normalizers[norm]); + var tmp = document.createElement('option'); + names=normalizers[norm].split("_"); + tmp.text = names[names.length -1]; + tmp.value = normalizers[norm]; + normalizers[norm] = tmp + normalizerSelect.add(tmp, null); } - //Populate listbox. - - //Populate namefield. +} + +function select_asset_call_class(selection_index) { + dojo.removeClass("startHidden", "hidden"); - //Populate - nameField = document.getElementById('class_name'); + nameInput.value = classifications[selection_index].name(); + update_normalizer_list(classifications[selection_index].normalizer()); + clear_input_area(); + generate_fields(classifications[selection_index].field()); } -function select_asset_call_class(selection_index, selection_name) { - alert(selection_index); - nameField.value = selection_name; +function clear_input_area() { + inputArea.innerHTML = ""; } -function update_normalizer_list() { +/** + * Generates a list of input boxes for the fields given in a csv style + * list. + */ +function generate_fields(csv) { + fields = csv.split(","); + + for(f in fields) + append_input(fields[f]); +} + +var lastid = 'a'; +/** + * Appends an insert to the list of input boxes. + */ +function append_input(value) { + + nodevalue_dict = {} + current_inputs = dojo.query(".input"); + + current_inputs.forEach(function(node, index, arr){ + nodevalue_dict[node.id] = document.getElementById(node.id).value; + }); + + id = value; + if(value == null) { + value = ""; + lastid += 'a'; + id = lastid; + } + + // Add a new input after creating it. + + inputArea.innerHTML += "
\ +
"; + + current_inputs.forEach(function(node, index, arr){ + document.getElementById(node.id).value = nodevalue_dict[node.id]; + }); +} + +function remove_input(id) +{ + alert("editing"+id); + dojo.removeClass(id, "input"); + dojo.addClass(id, "hidden"); + dojo.byId(id).innerHTML = ""; +} + +function update_normalizer_list(toSelect) { //TODO fetch lists, and update with current + + for( norm in normalizers ) + if(normalizers[norm].value == toSelect) + normalizers[norm].selected = "selected"; + else + normalizers[norm].selected = ""; +} + +function generate_csv() { + csv = ""; + + dojo.query(".input").forEach(function(node, index, arr){ + + temp = document.getElementById(node.id).value; + temp = temp.replace(/[^A-Za-z0-9]+/, ''); + + if(temp != "") + if(csv == "") + csv += temp; + else + csv += ","+temp; + + }); + return csv; +} + +function submit_form() { + + name = nameInput.value; + norm = normalizerSelect.value; + csv = generate_csv(); + + classifications = new openils.PermaCrud({authtoken:authtoken}).retrieveAll('acnc'); + + //stolen code! + fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.org_unit.settings.update'], + { async: true, + params: [authtoken, osEditContextSelector.getValue(), obj], + oncomplete: function(r) { + var res = r.recv().content(); + if(e = openils.Event.parse(res)) + return alert(e); + osDraw(obj); + } + } + ); + } -- 2.11.0