+++ /dev/null
-/*
- Fieldmapper object table
-*/
-
-var ID_GEN = 1;
-
-
-
-function drawFMObjectTable( args ) {
-
- var destination = args.dest;
- var obj = args.obj;
-
- if( typeof destination == 'string' )
- destination = $(destination);
- var builder = new FMObjectBuilder(obj, args);
-
- destination.appendChild(builder.build());
- return builder;
-}
-
-
-/* Constructor for the builder object */
-function FMObjectBuilder( obj, args ) {
- this.obj = obj;
- this.table = elem('table');
- this.thead = elem('thead');
- this.tbody = elem('tbody');
- this.thead_tr = elem('tr');
- this.subtables = [];
- this.display = args.display;
- this.selectCol = args.selectCol;
- this.moneySummaryRow = args.moneySummaryRow;
- this.selectColName = args.selectColName;
- this.selectAllName = args.selectAllName;
- this.selectNoneName = args.selectNoneName;
- this.rows = [];
- if(!this.display) this.display = {};
-
- this.table.appendChild(this.thead);
- this.table.appendChild(this.tbody);
- this.thead.appendChild(this.thead_tr)
-
- addCSSClass(this.table, 'fm_table');
- addCSSClass(this.table, 'sortable');
- this.table.id = 'fm_table_' + (ID_GEN++);
-}
-
-
-FMObjectBuilder.prototype.getSelected = function() {
- var objs = [];
- for( var i = 0; i < this.rows.length; i++ ) {
- var r = $(this.rows[i]);
- if( $n(r,'selected') && $n(r,'selected').checked )
- objs.push(this.obj[i]);
- }
- return objs;
-}
-
-/* Builds the table */
-FMObjectBuilder.prototype.build = function() {
- var o = this.obj;
-
- if( instanceOf(this.obj, Array) )
- o = this.obj[0];
- else this.obj = [this.obj];
-
- if( o ) {
-
- this.setKeys(o);
- if( this.selectCol ) {
- var obj = this;
- var td = elem('td',null,this.selectColName);
-
- var all = elem('a',{href:'javascript:void(0);','class':'fm_select_link' }, this.selectAllName);
- var none = elem('a',{href:'javascript:void(0);', 'class':'fm_select_link'}, this.selectNoneName);
-
- all.onclick = function(){obj.selectAll()};
- none.onclick = function(){obj.selectNone()};
-
- td.appendChild(all);
- td.appendChild(none);
- this.thead_tr.appendChild(td);
- }
-
- if (this.moneySummaryRow) {
- this.moneySummaryRow = elem('tr');
-
- if( this.selectCol )
- this.moneySummaryRow.appendChild(elem('td'));
-
- for( var i = 0; i < this.keys.length; i++ ) {
- var key = this.keys[i];
-
- var td = elem('td');
- td.setAttribute('name', this.table.id + key);
-
- if (this.money && grep(this.money,function(i){return (i==key)}) )
- td.appendChild(text('0.00'));
-
- this.moneySummaryRow.appendChild(td);
- }
-
- this.tbody.appendChild(this.moneySummaryRow);
- }
-
- for( var i = 0; i < this.keys.length; i++ )
- this.thead_tr.appendChild(elem('td',null,this.keys[i]));
-
- for( var i = 0; i < this.obj.length; i++ )
- this.buildObjectRow(this.obj[i]);
- }
-
- return this.table;
-}
-
-
-FMObjectBuilder.prototype.selectAll = function() {
- for( var i = 0; i < this.rows.length; i++ ) {
- var r = $(this.rows[i]);
- $n(r,'selected').checked = true;
- }
-}
-
-FMObjectBuilder.prototype.selectNone = function() {
- for( var i = 0; i < this.rows.length; i++ ) {
- var r = $(this.rows[i]);
- $n(r,'selected').checked = false;
- }
-}
-
-
-/* */
-FMObjectBuilder.prototype.setKeys = function(o) {
- var sortme = false;
- if( this.display[o.classname] ) {
- this.keys = this.display[o.classname].fields;
- this.bold = this.display[o.classname].bold;
- this.money = this.display[o.classname].money;
- }
-
- if(!this.keys && FM_TABLE_DISPLAY[o.classname])
- this.keys = FM_TABLE_DISPLAY[o.classname].fields;
-
- if(!this.bold && FM_TABLE_DISPLAY[o.classname])
- this.bold = FM_TABLE_DISPLAY[o.classname].bold;
-
- if(!this.money && FM_TABLE_DISPLAY[o.classname])
- this.money = FM_TABLE_DISPLAY[o.classname].money;
-
- if(!this.keys) {
- this.keys = fmclasses[o.classname];
- sortme = true;
- }
-
- if(sortme) this.keys = this.keys.sort();
-}
-
-/* use this method to insert object rows after the table has been rendered */
-FMObjectBuilder.prototype.add = function(obj) {
- this.obj.push(obj);
- this.buildObjectRow(obj);
-}
-
-/* Inserts one row into the table to represent a single object */
-FMObjectBuilder.prototype.buildObjectRow = function(obj) {
- var row = elem('tr');
- row.id = 'fm_table_' + (ID_GEN++);
- this.rows.push(row.id);
-
- if(this.selectCol) {
- var td = elem('td');
- td.appendChild(elem('input',{type:'checkbox',name:'selected'}));
- row.appendChild(td);
- }
-
- for( var i = 0; i < this.keys.length; i++ ) {
- var td = elem('td');
- var data = obj[this.keys[i]]();
- data = this.munge(data);
- this.fleshData(td, data, this.keys[i]);
- row.appendChild(td);
- }
- this.tbody.appendChild(row);
- if (this.moneySummaryRow) this.tbody.appendChild(this.moneySummaryRow);
-}
-
-FMObjectBuilder.prototype.munge = function(data) {
- if(!data) return;
- if(typeof data == 'string') {
- if( data.match(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/) ) {
- data = data.replace(/T/,' ');
- data = data.replace(/:\d{2}-.*/,'');
- }
- }
-
- return data;
-}
-
-
-FMObjectBuilder.prototype.dataName = function(data) {
- var name;
- if( this.display[data.classname] )
- name = this.display[data.classname].name;
-
- if(!name && FM_TABLE_DISPLAY[data.classname])
- name = FM_TABLE_DISPLAY[data.classname].name;
-
- if(!name) name = 'id';
-
- return data[name]();
- return name;
-}
-
-
-FMObjectBuilder.prototype.fleshData = function(td, data, key) {
- if(data == null) data = '';
-
- if( typeof data == 'object' ) {
- var atext;
-
- if( data._isfieldmapper )
- atext = this.dataName(data);
-
- else if (instanceOf(data, Array) )
- atext = data.length;
-
- if( atext ) {
-
- var master = this;
- var expand = function () {
- var buildme = true;
- var row = td.parentNode.nextSibling;
- if( row && row.getAttribute('subrow') == key) buildme = false;
- master.hideSubTables();
- if(buildme) master.buildSubTable(td, data, key);
- };
-
- var a = elem('a',{href:'javascript:void(0);'});
- a.onclick = expand;
- a.appendChild(text(atext));
- td.appendChild(a);
-
- } else {
- td.appendChild(text(''));
- }
-
- } else {
- if (this.money && grep(this.money,function(i){return (i==key)}) ) {
- td.setAttribute('align', 'right');
- data = parseFloat(data).toFixed(2);
-
- if (isNaN(data)) data = '0.00';
-
- if (this.moneySummaryRow) {
- var summary_td = $n(this.moneySummaryRow, this.table.id + key);
- summary_td.innerHTML = parseFloat(parseFloat(summary_td.innerHTML) + parseFloat(data)).toFixed(2);
- }
- }
-
- if( this.bold && grep(this.bold,function(i){return (i==key)}) ) {
- var span = elem('span',{'class':'fm_table_bold'}, data);
- td.appendChild(span);
- } else {
- td.appendChild(text( data ));
- }
- }
-}
-
-FMObjectBuilder.prototype.hideSubTables = function() {
-
- /* clear out any existing subrows */
- for( var i = 0; i < this.tbody.childNodes.length; i++ ) {
- var r = this.tbody.childNodes[i];
- if( r.getAttribute('subrow') )
- this.tbody.removeChild(r);
- }
-
- /* un-style any selected tds */
- var tds = this.tbody.getElementsByTagName('td');
- for( i = 0; i < tds.length; i++ )
- removeCSSClass( tds[i], 'fm_selected' );
-}
-
-FMObjectBuilder.prototype.buildSubTable = function(td, obj, key) {
-
- var left = parseInt(td.offsetLeft);
- var div = elem('div');
- var row = elem('tr');
- var subtd= elem('td');
-
- if( td.parentNode.nextSibling )
- this.tbody.insertBefore(row, td.parentNode.nextSibling);
- else
- this.tbody.appendChild(row);
-
- row.appendChild(subtd);
- row.setAttribute('subrow', key);
- subtd.appendChild(div);
-
- addCSSClass(td, 'fm_selected');
- subtd.setAttribute('colspan',this.keys.length);
- if(this.selectCol)
- subtd.setAttribute('colspan',this.keys.length + 1);
-
- subtd.setAttribute('style', 'width: 100%; padding-left:'+left+'px;');
- var builder = drawFMObjectTable({dest:div, obj:obj, display:this.display});
- builder.table.setAttribute('style', 'width: auto;');
- addCSSClass(builder.table, 'fm_selected');
-
- var newleft = left - (builder.table.clientWidth / 2) + (td.clientWidth / 2);
-
- if( newleft < left ) {
- if( newleft < 0 ) newleft = 0;
- newleft = parseInt(newleft);
- var style = subtd.getAttribute('style');
- style = style.replace(new RegExp(left), newleft);
- subtd.setAttribute('style', style);
- }
-}
-
-
-
-