You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by mt...@apache.org on 2007/05/05 00:00:27 UTC
svn commit: r535417 - in /incubator/xap/trunk/codebase/src/xap:
bridges/dojo/TableBridge.js widgets/dojo/TreeTable.js
Author: mturyn
Date: Fri May 4 17:00:27 2007
New Revision: 535417
URL: http://svn.apache.org/viewvc?view=rev&rev=535417
Log:
Has a work-around for IE6/7 not doing well when adding rows to an originally-empty table.
Modified:
incubator/xap/trunk/codebase/src/xap/bridges/dojo/TableBridge.js
incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js
Modified: incubator/xap/trunk/codebase/src/xap/bridges/dojo/TableBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/bridges/dojo/TableBridge.js?view=diff&rev=535417&r1=535416&r2=535417
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/bridges/dojo/TableBridge.js (original)
+++ incubator/xap/trunk/codebase/src/xap/bridges/dojo/TableBridge.js Fri May 4 17:00:27 2007
@@ -148,7 +148,6 @@
}
else if (childPeer instanceof xap.widgets.dojo.TableRow){
this.getPeer().insertRow(childPeer,-1);
- this.getPeer().onRowInserted(childPeer, -1) ;
}
};
Modified: incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js?view=diff&rev=535417&r1=535416&r2=535417
==============================================================================
--- incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js (original)
+++ incubator/xap/trunk/codebase/src/xap/widgets/dojo/TreeTable.js Fri May 4 17:00:27 2007
@@ -86,6 +86,7 @@
+ '</div>'
+ '<div dojoAttachPoint="scrollDiv" style="overflow:auto;width:100%;height:100%;">'
+ '<table dojoAttachPoint="table" style="height:100%;">'
+ + '<thead dojoAttachPoint="spacerRow"></thead>'
+ '<tbody></tbody>'
+ '</table>'
+ '</div>'
@@ -113,18 +114,19 @@
/**
* Rebuild just the rows of the table, typically called after sorting.
*/
- _rebuildRowsLater : function(){
+ _rebuildRowsLater : function(delay){
//if a full rebuild is pending don't bother
if (!this._rebuildTableTask && !this._rebuildRowsTask){
- this._rebuildRowsTask = dojo.lang.setTimeout(this, this._rebuildRows, 0);
+ var theDelay = delay || 0 ;
+ this._rebuildRowsTask = dojo.lang.setTimeout(this, this._rebuildRows, delay);
}
},
/**
* Rebuilds the entire table from scratch, should be a very rare occurence.
*/
- _rebuildTableLater: function(){
+ _rebuildTableLater: function(delay){
//cancel any partial rebuild tasks
if (this._rebuildRowsTask){
@@ -137,8 +139,9 @@
}
//if not already scheduled then schedule it
+ var theDelay = delay || 0 ;
if (!this._rebuildTableTask){
- this._rebuildTableTask = dojo.lang.setTimeout(this, this._rebuildTable, 0);
+ this._rebuildTableTask = dojo.lang.setTimeout(this, this._rebuildTable, theDelay);
}
},
@@ -260,8 +263,10 @@
this.pullback() ;
}
}
- window.clearTimeout(this._resizeTableTask);
- this._resizeTableTask = null;
+ if( this._resizeTableTask ){
+ window.clearTimeout(this._resizeTableTask);
+ this._resizeTableTask = null;
+ }
},
_fixColumnWidths : function(){
@@ -371,8 +376,10 @@
for (var i =0; i<this._rows.length; i++){
this._rebuildRow(this._rows[i], 0);
}
- window.clearTimeout(this._rebuildRowsTask);
- this._rebuildRowsTask = null;
+ if( this._rebuildRowsTask ){
+ window.clearTimeout(this._rebuildRowsTask);
+ this._rebuildRowsTask = null;
+ }
// resize columns in the case of new rows added
// ---absolutely avoid this if we've just sorted.
@@ -383,6 +390,7 @@
this._resizeTable();
}
this._recolorAlternateRows();
+ this._redoSplitterStyling(1000) ;
},
/**
@@ -488,8 +496,10 @@
//if we have no width wait for onResized()
if (!wh.width){
- window.clearTimeout(this._rebuildTableTask);
- this._rebuildTableTask = null;
+ if(this._rebuildTableTask){
+ window.clearTimeout(this._rebuildTableTask);
+ this._rebuildTableTask = null;
+ }
return;
}
this._initialResizePending = false;
@@ -497,10 +507,12 @@
this._rebuildHead();
this._rebuildBody();
-
- window.clearTimeout(this._rebuildTableTask);
- this._rebuildTableTask = null;
+ if( this._rebuildTableTask ){
+ window.clearTimeout(this._rebuildTableTask);
+ this._rebuildTableTask = null;
+ }
this._resizeTable();
+
if(dojo.render.html.ie){
this.pullback() ;
@@ -629,7 +641,7 @@
// We're now in much the same situation as at a drag end:
// we need to resize headers and body cells according to the
// new columns:
- this._endSizing() ;
+ this._reconcileHeaderAndBodyColumns() ;
if(dojo.render.html.ie){
this.pullback() ;
}
@@ -668,6 +680,9 @@
var ht = this.domNode.clientHeight - this.headerDiv.clientHeight;
if ( ht > 0 ) contentHt = ht + "px";
this.scrollDiv.style.height = contentHt;
+ if( this.columnsSizer ){
+ this._renewColumnSizers() ;
+ }
}
},
/**
@@ -732,7 +747,18 @@
//at the right spot. Gets kind of tricky for nested rows and such,
//in that case you need to insert relative to a sibling
// TODO: maybe resize the columns when stuff is added
- this._rebuildRowsLater();
+
+ // TODO important: find out why the first row
+ // added to an IE table created with no rows
+ // gets messed-up column widths:
+ if(!this._created
+ || !dojo.render.html.ie
+ ||this._rows.length>1
+ ){
+ this._rebuildRowsLater();
+ } else {
+ this._rebuildTableLater(500);
+ }
},
_rowRemoved: function(row){
@@ -816,11 +842,6 @@
//event hook
},
- onRowInserted : function(rowWidget, index){
- this._recolorAlternateRows();
- this._redoSplitterStyling(1000) ;
- //event hook
- },
onScrollCallback : function(event){
if (this.scrollDiv){
@@ -1049,9 +1070,15 @@
_redoSplitterStyling: function(delay){
if( delay != undefined ){
- dojo.lang.setTimeout(this,this._redoSplitterStyling,delay) ;
+ this._redoSplitterStylingTask
+ = dojo.lang.setTimeout(this,this._redoSplitterStyling,delay) ;
return ;
}
+
+ if( this._redoSplitterStylingTask ){
+ window.clearTimeout(this._redoSplitterStylingTask) ;
+ this._redoSplitterStylingTask = null ;
+ }
var sizer = this.columnsSizer ;
@@ -1111,7 +1138,8 @@
_hideSplitterPanelsAndShowSizers: function(delay){
if( delay != undefined ){
- dojo.lang.setTimeout(this,this._hideSplitterPanelsAndShowSizers,delay) ;
+ this._hideSplitterPanelsAndShowSizersTask
+ = dojo.lang.setTimeout(this,this._hideSplitterPanelsAndShowSizers,delay) ;
return ;
}
// Don't bother if there are no columns or,
@@ -1123,6 +1151,10 @@
return ;
}
+ if( this._hideSplitterPanelsAndShowSizersTask ){
+ window.clearTimeout(this._hideSplitterPanelsAndShowSizersTask ) ;
+ this._hideSplitterPanelsAndShowSizersTask = null ;
+ }
var sizer = this.columnsSizer ;
var parent = this.columnsSizer.domNode ;
@@ -1195,11 +1227,11 @@
},
onEndSizing: function(){
- dojo.lang.setTimeout(this,this._endSizing,10) ;
+ dojo.lang.setTimeout(this,this._reconcileHeaderAndBodyColumns,10) ;
},
- _endSizing: function(){
+ _reconcileHeaderAndBodyColumns: function(){
dojo.html.removeClass( this.columnsSizer.virtualSizer, "xapTableMovingSizer" ) ;
this.columnsSizer._layoutPanels() ;
@@ -1429,7 +1461,9 @@
this.domNode.appendChild(td);
td.style.whiteSpace = "nowrap";
td.style.overflow = "hidden";
-
+ cell.style.whiteSpace = "nowrap";
+ cell.style.overflow = "hidden";
+
var hAlignment = null ;
if ( cell.style.textAlign ) {
hAlignment = cell.style.textAlign;