From 40277fb6eb373b49ac0009f4664e232af13d1ded Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 12 Jan 2009 16:51:30 +0000 Subject: [PATCH] added a new editpane class, which models the basic edit table of key/value pairs, for use outside of a dialog. editdialog now uses the editpane as its content. git-svn-id: svn://svn.open-ils.org/ILS/trunk@11797 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/web/js/dojo/openils/widget/EditDialog.js | 100 ++----------------- Open-ILS/web/js/dojo/openils/widget/EditPane.js | 116 ++++++++++++++++++++++ 2 files changed, 124 insertions(+), 92 deletions(-) create mode 100644 Open-ILS/web/js/dojo/openils/widget/EditPane.js diff --git a/Open-ILS/web/js/dojo/openils/widget/EditDialog.js b/Open-ILS/web/js/dojo/openils/widget/EditDialog.js index de254cf8f0..9aa5b4df4c 100644 --- a/Open-ILS/web/js/dojo/openils/widget/EditDialog.js +++ b/Open-ILS/web/js/dojo/openils/widget/EditDialog.js @@ -1,11 +1,7 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { dojo.provide('openils.widget.EditDialog'); - dojo.require('openils.widget.AutoWidget'); - dojo.require('fieldmapper.Fieldmapper'); + dojo.require('openils.widget.EditPane'); dojo.require('dijit.Dialog'); - dojo.require('openils.Util'); - dojo.require('openils.User'); - dojo.require('fieldmapper.IDL'); /** @@ -27,93 +23,13 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { */ startup : function() { this.inherited(arguments); - this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass; - this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass]; - - var table = document.createElement('table'); - var tbody = document.createElement('tbody'); - this.domNode.appendChild(table); - table.appendChild(tbody); - - this.limitPerms = []; - if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode]) - this.limitPerms = this.fmIDL.permacrud[this.mode].perms; - - this._buildSortedFieldList() - - for(var f in this.sortedFieldList) { - var field = this.sortedFieldList[f]; - if(!field || field.virtual) continue; - - var row = document.createElement('tr'); - var nameTd = document.createElement('td'); - var valTd = document.createElement('td'); - - nameTd.appendChild(document.createTextNode(field.label)); - row.appendChild(nameTd); - row.appendChild(valTd); - tbody.appendChild(row); - - new openils.widget.AutoWidget({ - idlField : field, - fmObject : this.fmObject, - parentNode : valTd, - orgLimitPerms : this.limitPerms - }).build(); - } - - openils.Util.addCSSClass(table, 'oils-fm-edit-dialog'); - }, - - _buildSortedFieldList : function() { - this.sortedFieldList = []; - - if(this.fieldOrder) { - - for(var idx in this.fieldOrder) { - var name = this.fieldOrder[idx]; - for(var idx2 in this.fmIDL.fields) { - if(this.fmIDL.fields[idx2].name == name) { - this.sortedFieldList.push(this.fmIDL.fields[idx2]); - break; - } - } - } - - // if the user-defined order does not list all fields, - // shove the extras on the end. - var anonFields = []; - for(var idx in this.fmIDL.fields) { - var name = this.fmIDL.fields[idx].name; - if(this.fieldOrder.indexOf(name) < 0) { - anonFields.push(this.fmIDL.fields[idx]); - } - } - - anonFields = anonFields.sort( - function(a, b) { - if(a.label > b.label) return 1; - if(a.label < b.label) return -1; - return 0; - } - ); - - this.sortedFieldList = this.sortedFieldList.concat(anonFields); - - } else { - // no sort order defined, sort all fields on display label - - for(var f in this.fmIDL.fields) - this.sortedFieldList.push(this.fmIDL.fields[f]); - this.sortedFieldList = this.sortedFieldList.sort( - // by default, sort on label - function(a, b) { - if(a.label > b.label) return 1; - if(a.label < b.label) return -1; - return 0; - } - ); - } + var pane = new openils.widget.EditPane(); + pane.mode = this.mode; + pane.fmClass = this.fmClass; + pane.fmObject = this.fmObject; + pane.fieldOrder = this.fieldOrder; + pane.startup(); + this.domNode.appendChild(pane.domNode); } } ); diff --git a/Open-ILS/web/js/dojo/openils/widget/EditPane.js b/Open-ILS/web/js/dojo/openils/widget/EditPane.js new file mode 100644 index 0000000000..595fb9f29d --- /dev/null +++ b/Open-ILS/web/js/dojo/openils/widget/EditPane.js @@ -0,0 +1,116 @@ +if(!dojo._hasResource['openils.widget.EditPane']) { + dojo.provide('openils.widget.EditPane'); + dojo.require('openils.widget.AutoWidget'); + dojo.require('fieldmapper.Fieldmapper'); + dojo.require('dijit.layout.ContentPane'); + dojo.require('openils.Util'); + dojo.require('openils.User'); + dojo.require('fieldmapper.IDL'); + + dojo.declare( + 'openils.widget.EditPane', + [dijit.layout.ContentPane], + { + fmClass : '', + fmObject : null, + mode : 'update', + fieldOrder : null, // ordered list of field names, optional. + + /** + * Builds a basic table of key / value pairs. Keys are IDL display labels. + * Values are dijit's, when values set + */ + startup : function() { + this.inherited(arguments); + this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass; + this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass]; + + var table = document.createElement('table'); + var tbody = document.createElement('tbody'); + this.domNode.appendChild(table); + table.appendChild(tbody); + + this.limitPerms = []; + if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode]) + this.limitPerms = this.fmIDL.permacrud[this.mode].perms; + + this._buildSortedFieldList() + + for(var f in this.sortedFieldList) { + var field = this.sortedFieldList[f]; + if(!field || field.virtual) continue; + + var row = document.createElement('tr'); + var nameTd = document.createElement('td'); + var valTd = document.createElement('td'); + + nameTd.appendChild(document.createTextNode(field.label)); + row.appendChild(nameTd); + row.appendChild(valTd); + tbody.appendChild(row); + + new openils.widget.AutoWidget({ + idlField : field, + fmObject : this.fmObject, + parentNode : valTd, + orgLimitPerms : this.limitPerms + }).build(); + } + + openils.Util.addCSSClass(table, 'oils-fm-edit-dialog'); + }, + + _buildSortedFieldList : function() { + this.sortedFieldList = []; + + if(this.fieldOrder) { + + for(var idx in this.fieldOrder) { + var name = this.fieldOrder[idx]; + for(var idx2 in this.fmIDL.fields) { + if(this.fmIDL.fields[idx2].name == name) { + this.sortedFieldList.push(this.fmIDL.fields[idx2]); + break; + } + } + } + + // if the user-defined order does not list all fields, + // shove the extras on the end. + var anonFields = []; + for(var idx in this.fmIDL.fields) { + var name = this.fmIDL.fields[idx].name; + if(this.fieldOrder.indexOf(name) < 0) { + anonFields.push(this.fmIDL.fields[idx]); + } + } + + anonFields = anonFields.sort( + function(a, b) { + if(a.label > b.label) return 1; + if(a.label < b.label) return -1; + return 0; + } + ); + + this.sortedFieldList = this.sortedFieldList.concat(anonFields); + + } else { + // no sort order defined, sort all fields on display label + + for(var f in this.fmIDL.fields) + this.sortedFieldList.push(this.fmIDL.fields[f]); + this.sortedFieldList = this.sortedFieldList.sort( + // by default, sort on label + function(a, b) { + if(a.label > b.label) return 1; + if(a.label < b.label) return -1; + return 0; + } + ); + } + } + } + ); +} + -- 2.11.0