You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by sm...@apache.org on 2006/12/06 10:32:24 UTC
svn commit: r482987 - in
/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed: desktop/core.js
widget/HtmlFloatingPane.css widget/PortletWindow.js
Author: smilek
Date: Wed Dec 6 01:32:23 2006
New Revision: 482987
URL: http://svn.apache.org/viewvc?view=rev&rev=482987
Log:
added support for deeply nested psml layout fragments
Modified:
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/HtmlFloatingPane.css
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js
Modified: portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js?view=diff&rev=482987&r1=482986&r2=482987
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js Wed Dec 6 01:32:23 2006
@@ -30,7 +30,6 @@
dojo.require("dojo.collections.Set");
dojo.require("jetspeed.common");
-// ... testing
// ... jetspeed base objects
if ( ! window.jetspeed )
@@ -43,7 +42,6 @@
jetspeed.ui.widget = {} ;
-
// ... jetspeed.id
jetspeed.id =
{
@@ -759,7 +757,7 @@
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Portlet */ portlet )
{
- dojo.raise( "PortletSelectorContentListener notifyFailure url=" + requestUrl + " type=" + type + " error=" + error ) ;
+ dojo.raise( "PortletSelectorContentListener notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
}
};
@@ -786,7 +784,7 @@
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Page */ page )
{
- dojo.raise( "PageContentListenerUpdate notifyFailure url=" + requestUrl + " type=" + type + " error=" + error ) ;
+ dojo.raise( "PageContentListenerUpdate notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
}
};
@@ -928,14 +926,15 @@
var parsedRootLayoutFragment = this._parsePSML( psml );
// create layout model
- var portletsByPageColumn = this._layoutCreateModel( parsedRootLayoutFragment );
+ var portletsByPageColumn = {};
+ this.columnsStructure = this._layoutCreateModel( parsedRootLayoutFragment, null, portletsByPageColumn );
this.rootFragmentId = parsedRootLayoutFragment.id ;
// create columns
if ( jetspeed.prefs.windowTiling )
{
- this._createColumns( document.getElementById( jetspeed.id.DESKTOP ) );
+ this._createColumnsStart( document.getElementById( jetspeed.id.DESKTOP ) );
}
// create portlet windows
@@ -1200,91 +1199,107 @@
return ( rowA - rowB );
},
- _layoutCreateModel: function( parsedRootLayoutFragment )
- {
- var layoutFragment = parsedRootLayoutFragment;
- var portletsByPageColumn = {};
-
- // desktop layout handling rule:
- // in order to persist portlet positions, all layout fragments must span the entire width of the page
+ _layoutCreateModel: function( layoutFragment, parentColumn, portletsByPageColumn )
+ { // layoutFragmentParentColumnIndex, parentColumnsInLayout
+ var allColumnsStartIndex = this.columns.length;
+ var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( layoutFragment, parentColumn );
+ var columnsInLayoutLen = ( columnsInLayout == null ? 0 : columnsInLayout.length ) ;
- // does root fragment contain portlets only / layouts only / mix of layouts & portlets
if ( layoutFragment.layoutFragmentIndexes != null && layoutFragment.layoutFragmentIndexes.length > 0 )
- {
- if ( layoutFragment.columnSizes.length > 1 )
- { // root fragments with multiple columns can contain portlets only
- // since a nested layout has to appear in a particular column (thus diving one column in the outer fragment into n columns)
- this.noMovePersist = true;
- }
-
- if ( layoutFragment.otherFragmentIndexes == null || layoutFragment.otherFragmentIndexes.length == 0 )
- { // root fragment contains layout fragments only - ignore the root fragment
- for ( var i = 0 ; i < layoutFragment.layoutFragmentIndexes.length ; i++ )
- {
- var layoutChildFrag = layoutFragment.fragments[ layoutFragment.layoutFragmentIndexes[i] ];
- var hasNestedLayouts = this._layoutFragmentChildCollapse( layoutChildFrag );
- if ( hasNestedLayouts )
- this.noMovePersist = true;
- var pageColumnStartIndex = this.columns.length;
- var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( layoutChildFrag );
- this._layoutCreatePortletsModel( layoutChildFrag, columnsInLayout, pageColumnStartIndex, portletsByPageColumn );
+ { // layout contains child layout fragments
+ var currentClonedLayoutFragByCol = null;
+ var clonedLayoutFragmentCount = 0;
+ if ( layoutFragment.otherFragmentIndexes != null && layoutFragment.otherFragmentIndexes.length > 0 )
+ currentClonedLayoutFragByCol = new Array();
+
+ for ( var i = 0 ; i < columnsInLayoutLen ; i++ )
+ {
+ if ( currentClonedLayoutFragByCol != null )
+ currentClonedLayoutFragByCol.push( null );
+ columnsInLayout[i].columnContainer = true; // column cannot contain portlets
+ }
+ for ( var i = 0 ; i < layoutFragment.fragments.length ; i++ )
+ {
+ var childFrag = layoutFragment.fragments[ i ];
+ var childFragInColIndex = i;
+ if ( childFrag.properties && childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] >= 0 )
+ {
+ if ( childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] != null && childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] >= 0 )
+ childFragInColIndex = childFrag.properties[ jetspeed.id.PORTLET_PROP_COLUMN ] ;
+ }
+ if ( childFragInColIndex >= columnsInLayoutLen )
+ {
+ childFragInColIndex = ( columnsInLayoutLen > 0 ? ( columnsInLayoutLen -1 ) : 0 );
+ }
+
+ var currentClonedLayoutFragForCol = ( (currentClonedLayoutFragByCol == null) ? null : currentClonedLayoutFragByCol[ childFragInColIndex ] );
+ if ( childFrag.type == "layout" )
+ {
+ if ( currentClonedLayoutFragForCol != null )
+ {
+ this._layoutCreateModel( currentClonedLayoutFragForCol, columnsInLayout[childFragInColIndex], portletsByPageColumn ) ;
+ currentClonedLayoutFragByCol[ childFragInColIndex ] = null;
+ }
+ this._layoutCreateModel( childFrag, columnsInLayout[childFragInColIndex], portletsByPageColumn ) ;
+ }
+ else
+ {
+ if ( currentClonedLayoutFragForCol == null )
+ {
+ clonedLayoutFragmentCount++;
+ var clonedPortletLayout = {};
+ dojo.lang.mixin( clonedPortletLayout, layoutFragment );
+ clonedPortletLayout.fragments = new Array();
+ clonedPortletLayout.layoutFragmentIndexes = new Array();
+ clonedPortletLayout.otherFragmentIndexes = new Array();
+ clonedPortletLayout.documentOrderIndex = layoutFragment.fragments[i].documentOrderIndex;
+ clonedPortletLayout.clonedFromRootId = clonedPortletLayout.id;
+ clonedPortletLayout.clonedLayoutFragmentIndex = clonedLayoutFragmentCount;
+ clonedPortletLayout.columnSizes = [ "100" ];
+ clonedPortletLayout.columnSizesSum = [ 100 ];
+ clonedPortletLayout.id = clonedPortletLayout.id + "-jsclone_" + clonedLayoutFragmentCount;
+ currentClonedLayoutFragByCol[ childFragInColIndex ] = clonedPortletLayout;
+ currentClonedLayoutFragForCol = clonedPortletLayout;
+ }
+ currentClonedLayoutFragForCol.fragments.push( childFrag );
+ currentClonedLayoutFragForCol.otherFragmentIndexes.push( currentClonedLayoutFragForCol.fragments.length -1 );
}
}
- else
- { // mixed layout and portlet fragments - collapse portlet fragments in one or more clones of the root layout
- var currentClonedLayoutFragment = null;
- var clonedLayoutFragmentCount = 0;
- for ( var i = 0 ; i <= layoutFragment.fragments.length ; i++ ) // iterate one past the last index - to catch end currentClonedLayoutFragment
- { // fragments array is sorted by row, so a contiguous set of portlet fragments belong together in the same cloned layout fragment
- if ( currentClonedLayoutFragment != null && ( i == layoutFragment.fragments.length || layoutFragment.fragments[i].type == "layout" ) )
- {
- var pageColumnStartIndex = this.columns.length;
- var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( currentClonedLayoutFragment );
- this._layoutCreatePortletsModel( currentClonedLayoutFragment, columnsInLayout, pageColumnStartIndex, portletsByPageColumn );
- currentClonedLayoutFragment = null;
+ if ( currentClonedLayoutFragByCol != null )
+ {
+ for ( var i = 0 ; i < columnsInLayoutLen ; i++ )
+ {
+ var currentClonedLayoutFragForCol = currentClonedLayoutFragByCol[ i ];
+ if ( currentClonedLayoutFragForCol != null )
+ {
+ this._layoutCreateModel( currentClonedLayoutFragForCol, columnsInLayout[i], portletsByPageColumn ) ;
}
- if ( i < layoutFragment.fragments.length )
+ }
+ }
+ if ( layoutFragment.otherFragmentIndexes != null && layoutFragment.otherFragmentIndexes.length > 0 )
+ {
+ var correctedFragments = new Array();
+ for ( var i = 0 ; i < layoutFragment.fragments.length ; i++ )
+ {
+ var includeFrag = true;
+ for ( var j = 0 ; j < layoutFragment.otherFragmentIndexes.length ; j++ )
{
- if ( layoutFragment.fragments[i].type == "layout" )
- {
- var layoutChildFrag = layoutFragment.fragments[ i ]; // index was: layoutFragment.layoutFragmentIndexes[i]
- var hasNestedLayouts = this._layoutFragmentChildCollapse( layoutChildFrag );
- if ( hasNestedLayouts )
- this.noMovePersist = true;
- var pageColumnStartIndex = this.columns.length;
- var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( layoutChildFrag );
- this._layoutCreatePortletsModel( layoutChildFrag, columnsInLayout, pageColumnStartIndex, portletsByPageColumn );
- }
- else
+ if ( layoutFragment.otherFragmentIndexes[j] == i )
{
- if ( currentClonedLayoutFragment == null )
- {
- clonedLayoutFragmentCount++;
- var clonedPortletLayout = {};
- dojo.lang.mixin( clonedPortletLayout, layoutFragment );
- clonedPortletLayout.fragments = new Array();
- clonedPortletLayout.layoutFragmentIndexes = new Array();
- clonedPortletLayout.otherFragmentIndexes = new Array();
- clonedPortletLayout.documentOrderIndex = layoutFragment.fragments[i].documentOrderIndex;
- clonedPortletLayout.clonedFromRootId = clonedPortletLayout.id;
- clonedPortletLayout.clonedLayoutFragmentIndex = clonedLayoutFragmentCount;
- clonedPortletLayout.id = clonedPortletLayout.id + "-rootclone_" + clonedLayoutFragmentCount;
- currentClonedLayoutFragment = clonedPortletLayout ;
- }
- clonedPortletLayout.fragments.push( layoutFragment.fragments[i] );
- clonedPortletLayout.otherFragmentIndexes.push( clonedPortletLayout.fragments.length -1 );
+ includeFrag = false;
+ break;
}
}
+ if ( includeFrag )
+ correctedFragments.push( layoutFragment.fragments[ i ] );
}
+ layoutFragment.fragments = correctedFragments;
+ layoutFragment.otherFragmentIndexes = new Array();
}
}
- else if ( layoutFragment.otherFragmentIndexes != null && layoutFragment.otherFragmentIndexes.length > 0 )
- { // root fragment contains portlet fragments only
- var pageColumnStartIndex = this.columns.length;
- var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( layoutFragment );
- this._layoutCreatePortletsModel( layoutFragment, columnsInLayout, pageColumnStartIndex, portletsByPageColumn );
- }
- return portletsByPageColumn;
+ this._layoutCreatePortletsModel( layoutFragment, columnsInLayout, allColumnsStartIndex, portletsByPageColumn ) ;
+
+ return columnsInLayout;
},
_layoutFragmentChildCollapse: function( layoutFragment, targetLayoutFragment )
@@ -1317,7 +1332,7 @@
return hasNestedLayouts;
},
- _layoutRegisterAndCreateColumnsModel: function( layoutFragment )
+ _layoutRegisterAndCreateColumnsModel: function( layoutFragment, parentColumn )
{ // columnSizes: sizes, columnSizesSum: sizesSum
this.layouts[ layoutFragment.id ] = layoutFragment;
var columnsInLayout = new Array();
@@ -1333,6 +1348,12 @@
size = size - 1;
var colModelObj = new jetspeed.om.Column( i, layoutFragment.id, size, this.columns.length );
this.columns.push( colModelObj );
+ if ( parentColumn != null )
+ {
+ if ( parentColumn.columnChildren == null )
+ parentColumn.columnChildren = new Array();
+ parentColumn.columnChildren.push( colModelObj );
+ }
columnsInLayout.push( colModelObj );
}
}
@@ -1476,18 +1497,32 @@
return ( aZIndex - bZIndex );
},
- _createColumns: function( columnsParent )
+ _createColumnsStart: function( allColumnsParent )
{
- if ( ! this.columns || this.columns.length == 0 ) return;
+ if ( ! this.columnsStructure || this.columnsStructure.length == 0 ) return;
var columnContainer = document.createElement( "div" );
columnContainer.id = jetspeed.id.COLUMNS;
columnContainer.setAttribute( "id", jetspeed.id.COLUMNS );
- for ( var colIndex = 0 ; colIndex < this.columns.length ; colIndex++ )
+ for ( var colIndex = 0 ; colIndex < this.columnsStructure.length ; colIndex++ )
{
- var colObj = this.columns[colIndex];
- colObj.createColumn( columnContainer );
+ var colObj = this.columnsStructure[colIndex];
+ this._createColumns( colObj, columnContainer ) ;
}
- columnsParent.appendChild( columnContainer );
+ allColumnsParent.appendChild( columnContainer );
+ },
+
+ _createColumns: function( column, columnContainer )
+ {
+ column.createColumn() ;
+ if ( column.columnChildren != null && column.columnChildren.length > 0 )
+ {
+ for ( var colIndex = 0 ; colIndex < column.columnChildren.length ; colIndex++ )
+ {
+ var colObj = column.columnChildren[ colIndex ];
+ this._createColumns( colObj, column.domNode ) ;
+ }
+ }
+ columnContainer.appendChild( column.domNode );
},
_removeColumns: function( /* DOM Node */ preserveWindowNodesInNode )
{
@@ -1598,21 +1633,6 @@
}
return result;
},
-
- _debugDumpPortletZIndexInfo: function()
- {
- var portletArray = this._getPortletArrayByZIndex();
- var dumpMsg = "";
- for ( var i = 0; i < portletArray.length; i++ )
- {
- var portlet = portletArray[i];
- if ( i > 0 ) dumpMsg += ", ";
- var windowState = portlet.getLastSavedWindowState();
- var zIndex = ( windowState ? windowState.zIndex : "null" );
- dumpMsg += "[" + portlet.entityId + "] zIndex=" + zIndex;
- }
- return dumpMsg;
- },
_getPortletArrayByZIndex: function()
{
var portletArray = this.getPortletArray();
@@ -1747,6 +1767,19 @@
portlet._destroy();
}
},
+ debugDumpLastSavedWindowStateAllPortlets: function()
+ {
+ var portletArray = this.getPortletArray();
+ var dumpMsg = "";
+ for ( var i = 0; i < portletArray.length; i++ )
+ {
+ var portlet = portletArray[i];
+ if ( i > 0 ) dumpMsg += "\r\n";
+ var windowState = portlet.getLastSavedWindowState();
+ dumpMsg += "[" + portlet.name + "] " + jetspeed.printobj( windowState, true );
+ }
+ return dumpMsg;
+ },
debugDumpWindowStateAllPortlets: function()
{
dojo.debug("==== window-state all-portlets ====" );
@@ -2035,6 +2068,7 @@
size: null,
pageColumnIndex: null,
domNode: null,
+ columnContainer: false,
createColumn: function( columnContainer )
{
@@ -2047,7 +2081,8 @@
divElmt.style.minHeight = "40px";
divElmt.className = columnClass;
this.domNode = divElmt;
- columnContainer.appendChild( divElmt );
+ if ( columnContainer != null )
+ columnContainer.appendChild( divElmt );
},
containsNode: function( node )
{
@@ -2360,7 +2395,7 @@
getLastSavedWindowState: function()
{
if ( ! this.lastSavedWindowState )
- dojo.raise( "portlet.getLastSavedWindowState() is null - portlet not properly initialized." );
+ dojo.raise( "portlet.getLastSavedWindowState() is null - portlet (" + this.name + ") not properly initialized." );
return this.lastSavedWindowState;
},
getInitialWindowDimensions: function( dimensionsObj, reset )
@@ -2850,7 +2885,7 @@
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, domainModelObject )
{
- dojo.raise( "BasicContentListener notifyFailure url=" + requestUrl + " type=" + type + " error=" + error ) ;
+ dojo.raise( "BasicContentListener notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
}
};
@@ -2876,7 +2911,7 @@
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Portlet */ portlet )
{
- dojo.raise( "PortletContentListener notifyFailure url=" + requestUrl + " type=" + type + " error=" + error ) ;
+ dojo.raise( "PortletContentListener notifyFailure url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
}
};
@@ -2908,8 +2943,7 @@
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, /* Portlet */ portlet )
{
- dojo.raise( "PortletActionContentListener notifyFailure type=" + type ) ;
- dojo.debugShallow( error );
+ dojo.raise( "PortletActionContentListener notifyFailure type: " + type + jetspeed.url.formatBindError( error ) );
}
};
@@ -3507,7 +3541,7 @@
},
notifyFailure: function( /* String */ type, /* String */ error, /* String */ requestUrl, domainModelObject )
{
- dojo.raise( "PortletSelectorAjaxApiContentListener error [" + domainModelObject.toString() + "] url: " + requestUrl + " type: " + type + " error: " + error );
+ dojo.raise( "PortletSelectorAjaxApiContentListener error [" + domainModelObject.toString() + "] url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
},
parsePortlets: function( /* XMLNode */ node )
@@ -3647,6 +3681,19 @@
dumpClosure.dumpMsg = "column " + i + ": " + dumpClosure.dumpMsg;
dojo.debug( dumpClosure.dumpMsg );
}
+};
+
+jetspeed.ui.dumpPortletWindowWidgets = function()
+{
+ var portletWindows = jetspeed.ui.getAllPortletWindowWidgets();
+ var pwOut = "";
+ for ( var i = 0 ; i < portletWindows.length; i++ )
+ {
+ if ( i > 0 )
+ pwOut += ", ";
+ pwOut += portletWindows[i].widgetId;
+ }
+ dojo.debug( "PortletWindow widgets: " + pwOut );
};
jetspeed.ui.dumpPortletWindowWidgets = function()
Modified: portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/HtmlFloatingPane.css
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/HtmlFloatingPane.css?view=diff&rev=482987&r1=482986&r2=482987
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/HtmlFloatingPane.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/HtmlFloatingPane.css Wed Dec 6 01:32:23 2006
@@ -38,8 +38,10 @@
.dojoFloatingPane {
/* essential css */
position: absolute;
- overflow: hidden; /* dojo says 'visible' with this explanation "so drop shadow is displayed"" */
+ overflow-y: hidden; /* dojo says 'visible' with this explanation "so drop shadow is displayed"" */
/* we says 'hidden' cause IE likes to kindly expand div to fit content otherwise */
+ overflow-x: hidden;
+
z-index: 10;
/* styling css */
Modified: portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js?view=diff&rev=482987&r1=482986&r2=482987
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js Wed Dec 6 01:32:23 2006
@@ -1353,11 +1353,11 @@
if ( this.windowHeightToFit )
{
- this.domNode.style.overflow = "visible";
+ this.domNode.style.overflowY = "visible";
this.domNode.style.height = "";
}
else
- this.domNode.style.overflow = "hidden";
+ this.domNode.style.overflowY = "hidden";
if ( this.windowPositionStatic )
{
@@ -1382,12 +1382,12 @@
{
if ( this.windowHeightToFit )
{
- this.containerNode.style.overflow = "visible";
+ this.containerNode.style.overflowY = "visible";
this.containerNode.style.height = "";
}
else
{
- this.containerNode.style.overflow = "auto";
+ this.containerNode.style.overflowY = "auto";
}
if ( dojo.render.html.ie )
{
@@ -1852,29 +1852,43 @@
var inColIndex = this.portletWindow.getPageColumnIndex();
- this.columnsX = new Array( jetspeed.page.columns.length );
+ this.columnDimensions = new Array( jetspeed.page.columns.length );
for ( var i = 0 ; i < jetspeed.page.columns.length ; i++ )
{
- this.columnsX[ i ] = dojo.html.getAbsolutePosition( jetspeed.page.columns[i].domNode, true ).x;
+ var col = jetspeed.page.columns[i];
+ if ( ! col.columnContainer )
+ {
+ var colAbsPos = dojo.html.getAbsolutePosition( col.domNode, true );
+ var marginBox = dojo.html.getMarginBox( col.domNode );
+ this.columnDimensions[ i ] = { left: (colAbsPos.x), right: (colAbsPos.x + marginBox.width), top: (colAbsPos.y), bottom: (colAbsPos.y + marginBox.height) };
+ }
}
var inCol = ( inColIndex >= 0 ? jetspeed.page.columns[ inColIndex ] : null );
pwGhost.col = inCol;
}
- //dojo.debug( "PortletWindowDragMoveObject [" + this.portletWindow.widgetId + "] onDragStart: portletWindowNode.hasParent=" + dojo.dom.hasParent( portletWindowNode ) + " dragOffset.left=" + this.dragOffset.left + " dragOffset.top=" + this.dragOffset.top + " dragStartPosition.left=" + this.dragStartPosition.left + " dragStartPosition.top=" + this.dragStartPosition.top );
+ // debugging
+ /*
+ var posDump = "dragOffset={" + jetspeed.printobj(this.dragOffset,true) + "} dragStartPosition={" + jetspeed.printobj(this.dragStartPosition) + "}";
+ if ( this.windowPositionStatic )
+ {
+ for ( var i = 0; i < jetspeed.page.columns.length ; i++ )
+ {
+ posDump += " col[" + i + "]: {" + jetspeed.printobj( this.columnDimensions[i] ) + "}";
+ }
+ posDump += "}";
+ }
+ dojo.debug( "PortletWindowDragMoveObject [" + this.portletWindow.widgetId + "] onDragStart: portletWindowNode.hasParent=" + dojo.dom.hasParent( portletWindowNode ) + " " + posDump );
+ */
},
onDragMove: function( e )
{
- //jetspeed.widget.PortletWindowDragMoveObject.superclass.onDragMove.call( this, e );
- // BOZO: code copied from dojo.dnd.HtmlDragMoveObject.onDragMove
+ // NOTE: code copied from dojo.dnd.HtmlDragMoveObject.onDragMove
- var mouse = dojo.html.getCursorPosition(e);
this.updateDragOffset();
- var x = this.dragOffset.x + mouse.x;
- var y = this.dragOffset.y + mouse.y;
- //var x = mouse.x ;
- //var y = mouse.y ;
+ var x = this.dragOffset.x + e.pageX;
+ var y = this.dragOffset.y + e.pageY;
if (this.constrainToContainer) {
if (x < this.constraints.minX) { x = this.constraints.minX; }
@@ -1883,6 +1897,8 @@
if (y > this.constraints.maxY) { y = this.constraints.maxY; }
}
+ this.setAbsolutePosition(x, y);
+
if(!this.disableY) { this.dragClone.style.top = y + "px"; }
if(!this.disableX) { this.dragClone.style.left = x + "px"; }
@@ -1891,35 +1907,47 @@
if ( this.windowPositionStatic )
{
var colIndex = -1;
- for ( var i = jetspeed.page.columns.length-1 ; i >= 0 ; i-- )
+ //dojo.debug( "PortletWindowDragMoveObject onDragMove pick column: offsetWidth=" + this.domNode.offsetWidth + " offsetHeight=" + this.domNode.offsetHeight + " x=" + x + " y=" + y + " dragOffset.x=" + this.dragOffset.x + " dragOffset.y=" + this.dragOffset.y + " e.pageX=" + e.pageX + " e.pageY=" + e.pageY );
+ var offsetWidthHalf = this.domNode.offsetWidth / 2;
+ var offsetHeightHalf = this.domNode.offsetHeight / 2;
+ var noOfCols = jetspeed.page.columns.length;
+ for ( var i = 0 ; i < noOfCols ; i++ )
{
- //dojo.debug( "PortletWindowDragMoveObject onDragMove: col[" + i + "] columnsX=" + this.columnsX[i] + " this.domNode.offsetWidth/2=" + (this.domNode.offsetWidth/2) + " x=" + x );
- if ( ( x + ( this.domNode.offsetWidth / 2 ) ) >= this.columnsX[ i ] )
+ var colDims = this.columnDimensions[ i ];
+ if ( colDims != null )
{
- if ( y + ( this.domNode.offsetHeight / 2 ) >= dojo.html.getAbsolutePosition( jetspeed.page.columns[i].domNode, true ).y )
+ var xTest = x + offsetWidthHalf;
+ if ( xTest >= colDims.left && xTest <= colDims.right )
{
- colIndex = i;
- break;
+ var yTest = y + offsetHeightHalf;
+ if ( yTest >= colDims.top && yTest <= colDims.bottom )
+ {
+ colIndex = i;
+ break;
+ }
}
}
}
var col = ( colIndex >= 0 ? jetspeed.page.columns[ colIndex ] : null );
//if ( col != null )
- // dojo.debug( "PortletWindowDragMoveObject onDragMove: col[" + colIndex + "] columnsX=" + this.columnsX[colIndex] + " this.domNode.offsetWidth=" + this.domNode.offsetWidth + " x=" + x );
+ // dojo.debug( "PortletWindowDragMoveObject onDragMove: col[" + colIndex + "] {" + jetspeed.printobj( this.columnDimensions[colIndex] ) + "}" );
//else
- // dojo.debug( "PortletWindowDragMoveObject onDragMove: no col this.domNode.offsetWidth=" + this.domNode.offsetWidth + " x=" + x );
+ // dojo.debug( "PortletWindowDragMoveObject onDragMove: no column" );
- if ( pwGhost.col != col )
+ if ( pwGhost.col != col && col != null )
{
dojo.dom.removeNode( pwGhost );
pwGhost.col = col;
col.domNode.appendChild(pwGhost);
}
- var portletWindowsResult = jetspeed.ui.getPortletWindowChildren( col.domNode, pwGhost );
- var portletWindowsInCol = portletWindowsResult.portletWindowNodes;
-
- if ( portletWindowsInCol )
+ var portletWindowsResult = null, portletWindowsInCol = null;
+ if ( col != null )
+ {
+ portletWindowsResult = jetspeed.ui.getPortletWindowChildren( col.domNode, pwGhost );
+ portletWindowsInCol = portletWindowsResult.portletWindowNodes;
+ }
+ if ( portletWindowsInCol != null )
{
var ghostIndex = portletWindowsResult.matchIndex;
if ( ghostIndex > 0 )
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org