From 01d6e37d85ce9d6710a3716e78bb0b99d1e55fef Mon Sep 17 00:00:00 2001 From: erickson Date: Mon, 12 Jan 2009 16:03:34 +0000 Subject: [PATCH] allow the caller to define the field sort order, either a full list or the initial subset git-svn-id: svn://svn.open-ils.org/ILS/trunk@11796 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/web/js/dojo/openils/widget/EditDialog.js | 66 ++++++++++++++++++++--- 1 file changed, 60 insertions(+), 6 deletions(-) diff --git a/Open-ILS/web/js/dojo/openils/widget/EditDialog.js b/Open-ILS/web/js/dojo/openils/widget/EditDialog.js index 16966dfeb9..de254cf8f0 100644 --- a/Open-ILS/web/js/dojo/openils/widget/EditDialog.js +++ b/Open-ILS/web/js/dojo/openils/widget/EditDialog.js @@ -19,6 +19,7 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { 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. @@ -27,7 +28,7 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { startup : function() { this.inherited(arguments); this.fmClass = (this.fmObject) ? this.fmObject.classname : this.fmClass; - fmIDL = fieldmapper.IDL.fmclasses[this.fmClass]; + this.fmIDL = fieldmapper.IDL.fmclasses[this.fmClass]; var table = document.createElement('table'); var tbody = document.createElement('tbody'); @@ -35,12 +36,14 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { table.appendChild(tbody); this.limitPerms = []; - if(fmIDL.permacrud && fmIDL.permacrud[this.mode]) - this.limitPerms = fmIDL.permacrud[this.mode].perms; + if(this.fmIDL.permacrud && this.fmIDL.permacrud[this.mode]) + this.limitPerms = this.fmIDL.permacrud[this.mode].perms; - for(var f in fmIDL.fields) { - var field = fmIDL.fields[f]; - if(field.virtual) continue; + 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'); @@ -61,6 +64,57 @@ if(!dojo._hasResource['openils.widget.EditDialog']) { 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