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 2007/05/30 10:21:36 UTC
svn commit: r542774 - in
/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed: common.js
desktop/core.js widget/PortletWindow.js
Author: smilek
Date: Wed May 30 01:21:32 2007
New Revision: 542774
URL: http://svn.apache.org/viewvc?view=rev&rev=542774
Log:
addresses JS2-698 (Minimized mode functions only in un-tiled state on desktop), JS2-697 (Maximized mode overlaps as popup on desktop) and JS2-695 (The Desktop does NOT support the no-action layouts) - lots of changes related to minimize/maximize/restore of PortletWindows (addressing many long standing issues)
Modified:
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/common.js
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js
Modified: portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/common.js
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/common.js?view=diff&rev=542774&r1=542773&r2=542774
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/common.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/common.js Wed May 30 01:21:32 2007
@@ -659,37 +659,46 @@
//dojo.debugShallow( type ) ;
//dojo.debug( " http:" );
//dojo.debugShallow( http ) ;
- var dmId = null;
- if ( this.debugContentDumpIds )
+ try
{
- dmId = ( ( this.domainModelObject && dojo.lang.isFunction( this.domainModelObject.getId ) ) ? this.domainModelObject.getId() : "" );
- for ( var debugContentIndex = 0 ; debugContentIndex < this.debugContentDumpIds.length; debugContentIndex++ )
+ var dmId = null;
+ if ( this.debugContentDumpIds )
{
- if ( dmId.match( new RegExp( this.debugContentDumpIds[ debugContentIndex ] ) ) )
+ dmId = ( ( this.domainModelObject && dojo.lang.isFunction( this.domainModelObject.getId ) ) ? this.domainModelObject.getId() : "" );
+ for ( var debugContentIndex = 0 ; debugContentIndex < this.debugContentDumpIds.length; debugContentIndex++ )
{
- if ( dojo.lang.isString( data ) )
- dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] content: " + data );
- else
+ if ( dmId.match( new RegExp( this.debugContentDumpIds[ debugContentIndex ] ) ) )
{
- var textContent = dojo.dom.innerXML( data );
- if ( ! textContent )
- textContent = ( data != null ? "!= null (IE no XMLSerializer)" : "null" );
- dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] xml-content: " + textContent );
+ if ( dojo.lang.isString( data ) )
+ dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] content: " + data );
+ else
+ {
+ var textContent = dojo.dom.innerXML( data );
+ if ( ! textContent )
+ textContent = ( data != null ? "!= null (IE no XMLSerializer)" : "null" );
+ dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] xml-content: " + textContent );
+ }
}
}
}
+ if ( this.contentListener && dojo.lang.isFunction( this.contentListener.notifySuccess ) )
+ {
+ this.contentListener.notifySuccess( data, this.url, this.domainModelObject, http ) ;
+ }
+ else
+ {
+ dmId = ( ( this.domainModelObject && dojo.lang.isFunction( this.domainModelObject.getId ) ) ? this.domainModelObject.getId() : "" );
+ dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] no valid contentListener" );
+ }
+ if ( this.hideLoadingIndicator )
+ jetspeed.url.loadingIndicatorHide();
}
- if ( this.contentListener && dojo.lang.isFunction( this.contentListener.notifySuccess ) )
- {
- this.contentListener.notifySuccess( data, this.url, this.domainModelObject, http ) ;
- }
- else
+ catch(e)
{
- dmId = ( ( this.domainModelObject && dojo.lang.isFunction( this.domainModelObject.getId ) ) ? this.domainModelObject.getId() : "" );
- dojo.debug( "retrieveContent [" + ( dmId ? dmId : this.url ) + "] no valid contentListener" );
+ if ( this.hideLoadingIndicator )
+ jetspeed.url.loadingIndicatorHide();
+ throw e;
}
- if ( this.hideLoadingIndicator )
- jetspeed.url.loadingIndicatorHide();
},
error: function( type, error )
@@ -699,12 +708,21 @@
//dojo.debugShallow( type ) ;
//dojo.debug( " error:" );
//dojo.debugShallow( error ) ;
- if ( this.contentListener && dojo.lang.isFunction( this.contentListener.notifyFailure ) )
+ try
+ {
+ if ( this.contentListener && dojo.lang.isFunction( this.contentListener.notifyFailure ) )
+ {
+ this.contentListener.notifyFailure( type, error, this.url, this.domainModelObject );
+ }
+ if ( this.hideLoadingIndicator )
+ jetspeed.url.loadingIndicatorHide();
+ }
+ catch(e)
{
- this.contentListener.notifyFailure( type, error, this.url, this.domainModelObject );
+ if ( this.hideLoadingIndicator )
+ jetspeed.url.loadingIndicatorHide();
+ throw e;
}
- if ( this.hideLoadingIndicator )
- jetspeed.url.loadingIndicatorHide();
}
});
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=542774&r1=542773&r2=542774
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js Wed May 30 01:21:32 2007
@@ -187,6 +187,7 @@
setPortletContent: false,
doRenderDoAction: false,
postParseAnnotateHtml: false,
+ postParseAnnotateHtmlDisableAnchors: false,
confirmOnSubmit: false,
createWindow: false,
initializeWindowState: false,
@@ -1138,6 +1139,7 @@
shortTitle: null,
layoutDecorator: null,
portletDecorator: null,
+ layoutActionsDisabled: false,
layouts: null,
columns: null,
@@ -1330,7 +1332,16 @@
dojo.raise( "No root fragment in PSML." );
return null;
}
-
+
+ var rootFragNameAttr = rootFragment.getAttribute( "name" );
+ if ( rootFragNameAttr != null )
+ {
+ rootFragNameAttr = rootFragNameAttr.toLowerCase();
+ if ( rootFragNameAttr.indexOf( "noactions" ) != -1 )
+ {
+ this.layoutActionsDisabled = true;
+ }
+ }
var parsedRootLayoutFragment = this._parsePSMLLayoutFragment( rootFragment, 0 ); // rootFragment must be a layout fragment - /portal requires this as well
return parsedRootLayoutFragment;
},
@@ -2816,6 +2827,7 @@
var cNode = containerNode;
var formList = cNode.getElementsByTagName( "form" );
var debugOn = jetspeed.debug.postParseAnnotateHtml;
+ var disableAnchorConversion = jetspeed.debug.postParseAnnotateHtmlDisableAnchors;
if ( formList )
{
for ( var i = 0 ; i < formList.length ; i++ )
@@ -2837,7 +2849,7 @@
// ^^^ formBind serves as an event hook up - retained ref is not needed
if ( debugOn )
- dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] adding FormBind (portlet-" + submitOperation + ") and setting form action to: " + replacementActionUrl );
+ dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] adding FormBind (" + submitOperation + ") for form with action: " + cFormAction );
}
else if ( cFormAction == null || cFormAction.length == 0 )
{
@@ -2863,7 +2875,9 @@
var aHref = aNode.href;
var parsedPseudoUrl = jetspeed.portleturl.parseContentUrlForDesktopActionRender( aHref );
- var replacementHref = jetspeed.portleturl.generateJSPseudoUrlActionRender( parsedPseudoUrl );
+ var replacementHref = null;
+ if ( ! disableAnchorConversion )
+ replacementHref = jetspeed.portleturl.generateJSPseudoUrlActionRender( parsedPseudoUrl );
if ( ! replacementHref )
{
@@ -3557,13 +3571,13 @@
if ( parsedPseudoUrl.operation == jetspeed.portleturl.PORTLET_REQUEST_ACTION || parsedPseudoUrl.operation == jetspeed.portleturl.PORTLET_REQUEST_RENDER )
{
if ( jetspeed.debug.doRenderDoAction )
- dojo.debug( "PortletActionContentListener extracted from javascript-pseudo-url: " + portletContent + " url: " + parsedPseudoUrl.url + " operation: " + parsedPseudoUrl.operation + " entity-id: " + parsedPseudoUrl.portletEntityId ) ;
+ dojo.debug( "PortletActionContentListener " + parsedPseudoUrl.operation + "-url in response body: " + portletContent + " url: " + parsedPseudoUrl.url + " entity-id: " + parsedPseudoUrl.portletEntityId ) ;
renderUrl = parsedPseudoUrl.url;
}
else
{
if ( jetspeed.debug.doRenderDoAction )
- dojo.debug( "PortletActionContentListener: " + portletContent )
+ dojo.debug( "PortletActionContentListener other-url in response body: " + portletContent )
renderUrl = portletContent;
if ( renderUrl )
{
@@ -4378,11 +4392,14 @@
notifySuccess: function( /* String */ data, /* String */ requestUrl, domainModelObject )
{
dojo.lang.mixin( domainModelObject.portlet.lastSavedWindowState, this.changedState );
- jetspeed.url.checkAjaxApiResponse( requestUrl, data, true, ("move-portlet [" + domainModelObject.portlet.entityId + "]"), jetspeed.debug.submitChangedWindowState );
+ var reportError = false;
+ if ( djConfig.isDebug && jetspeed.debug.submitChangedWindowState )
+ reportError = true;
+ jetspeed.url.checkAjaxApiResponse( requestUrl, data, reportError, ("move-portlet [" + domainModelObject.portlet.entityId + "]"), jetspeed.debug.submitChangedWindowState );
},
notifyFailure: function( /* String */ type, /* Object */ error, /* String */ requestUrl, domainModelObject )
{
- dojo.raise( "submitChangedWindowState error [" + domainModelObject.entityId + "] url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
+ dojo.debug( "submitChangedWindowState error [" + domainModelObject.entityId + "] url: " + requestUrl + " type: " + type + jetspeed.url.formatBindError( error ) );
}
};
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=542774&r1=542773&r2=542774
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/widget/PortletWindow.js Wed May 30 01:21:32 2007
@@ -712,6 +712,26 @@
}
this._getActionMenuPopupWidget().onOpen( evt );
},
+ windowActionMenuIsEmpty: function()
+ {
+ var currentPortletActionState = null;
+ var currentPortletActionMode = null;
+ if ( this.portlet )
+ {
+ currentPortletActionState = this.portlet.getCurrentActionState();
+ currentPortletActionMode = this.portlet.getCurrentActionMode();
+ }
+ var actionMenuIsEmpty = true;
+ for ( var actionName in this.actionMenus )
+ {
+ var menuitem = this.actionMenus[ actionName ];
+ if ( this._isWindowActionEnabled( actionName, currentPortletActionState, currentPortletActionMode ) )
+ {
+ actionMenuIsEmpty = true;
+ break;
+ }
+ }
+ },
windowActionProcess: function( /* String */ actionName, evt )
{ // evt arg is needed only for opening action menu
//dojo.debug( "windowActionProcess [" + ( this.portlet ? this.portlet.entityId : this.widgetId ) + ( this.portlet ? (" / " + this.widgetId) : "" ) + "]" + " actionName=" + actionName );
@@ -753,10 +773,17 @@
}
else if ( actionName == jetspeed.id.ACTION_NAME_RESTORE )
{ // if minimized, make no associated content request - just notify server of change
+ var deferRestoreWindow = false;
if ( this.portlet )
{
- if ( this.windowState == jetspeed.id.ACTION_NAME_MAXIMIZE )
+ if ( this.windowState == jetspeed.id.ACTION_NAME_MAXIMIZE || this.needsRenderOnRestore )
{
+ if ( this.needsRenderOnRestore )
+ {
+ deferRestoreWindow = true;
+ this.restoreOnNextRender = true;
+ this.needsRenderOnRestore = false;
+ }
this.portlet.renderAction( actionName );
}
else
@@ -764,7 +791,10 @@
jetspeed.changeActionForPortlet( this.portlet.getId(), jetspeed.id.ACTION_NAME_RESTORE, null );
}
}
- this.restoreWindow();
+ if ( ! deferRestoreWindow )
+ {
+ this.restoreWindow();
+ }
if ( ! this.portlet )
{
this.windowActionButtonSync();
@@ -819,29 +849,33 @@
}
else if ( actionName == jetspeed.id.ACTION_NAME_MENU )
{
- enabled = true;
+ if ( this.windowState != jetspeed.id.ACTION_NAME_MAXIMIZE || this.windowActionMenuIsEmpty() )
+ enabled = true;
}
else if ( jetspeed.prefs.windowActionDesktop[ actionName ] != null )
{
- if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_EXPAND )
- {
- if ( ! this.windowHeightToFit )
- enabled = true;
- }
- else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_NORMAL )
- {
- if ( this.windowHeightToFit )
- enabled = true;
- }
- else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_TILE && jetspeed.prefs.windowTiling )
+ if ( this.windowState != jetspeed.id.ACTION_NAME_MAXIMIZE )
{
- if ( ! this.windowPositionStatic )
- enabled = true;
- }
- else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_UNTILE )
- {
- if ( this.windowPositionStatic )
- enabled = true;
+ if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_EXPAND )
+ {
+ if ( ! this.windowHeightToFit )
+ enabled = true;
+ }
+ else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_HEIGHT_NORMAL )
+ {
+ if ( this.windowHeightToFit )
+ enabled = true;
+ }
+ else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_TILE && jetspeed.prefs.windowTiling )
+ {
+ if ( ! this.windowPositionStatic )
+ enabled = true;
+ }
+ else if ( actionName == jetspeed.id.ACTION_NAME_DESKTOP_UNTILE )
+ {
+ if ( this.windowPositionStatic )
+ enabled = true;
+ }
}
}
else if ( this.portlet )
@@ -969,7 +1003,10 @@
this.drag = new jetspeed.widget.PortletWindowDragMoveSource( this );
if ( this.constrainToContainer )
this.drag.constrainTo();
- this.drag.setDragHandle( this.titleBar );
+ if ( ! this.portlet || ! jetspeed.page.layoutActionsDisabled )
+ this.setTitleBarDragging( true );
+ else
+ this.setTitleBarDragging( false );
}
this.domNode.id = this.widgetId; // BOZO: must set the id here - it gets defensively cleared by dojo
@@ -981,14 +1018,28 @@
this.portletInitialized = true;
- var initWindowState = this.getInitProperty( jetspeed.id.PORTLET_PROP_WINDOW_STATE );
+ var initWindowState = null;
+ if ( this.portlet )
+ initWindowState = this.portlet.getCurrentActionState();
+ else
+ initWindowState = this.getInitProperty( jetspeed.id.PORTLET_PROP_WINDOW_STATE );
if ( initWindowState == jetspeed.id.ACTION_NAME_MINIMIZE )
{
this.minimizeWindow();
this.windowActionButtonSync();
+ this.needsRenderOnRestore = true;
+ }
+ else if ( initWindowState == jetspeed.id.ACTION_NAME_MAXIMIZE )
+ { // needs delay so that widths are fully realized before maximize occurs
+ dojo.lang.setTimeout( this, this._postCreateMaximizeWindow, 1500 );
}
},
-
+ _postCreateMaximizeWindow: function()
+ {
+ this.maximizeWindow();
+ this.windowActionButtonSync();
+ },
+
// dojo.widget.ContentPane protocol
loadContents: function()
{ // do nothing
@@ -1027,6 +1078,10 @@
minimizeWindow: function( evt )
{
+ if ( this.windowState == jetspeed.id.ACTION_NAME_MAXIMIZE )
+ {
+ this.restoreWindow( evt );
+ }
this._setLastPositionInfo();
this.containerNode.style.display = "none";
@@ -1037,6 +1092,10 @@
},
maximizeWindow: function( evt )
{
+ if ( this.windowState == jetspeed.id.ACTION_NAME_MINIMIZE )
+ {
+ this.restoreWindow( evt );
+ }
var tiledStateIsChanging = this.windowPositionStatic;
this._setLastPositionInfo( tiledStateIsChanging, true );
@@ -1046,6 +1105,10 @@
this.domNode.style.position = "absolute";
jetspeedDesktop.appendChild( this.domNode );
}
+
+ // disable resize and drag
+ this.setTitleBarDragging( false );
+
jetspeed.widget.PortletWindow.superclass.bringToTop.call( this, evt );
// hardcoded to fill document.body width leaving 1px on each side
@@ -1083,6 +1146,9 @@
this.windowPositionStatic = ( this.lastWindowPositionStatic != null ? this.lastWindowPositionStatic : false );
}
+ if ( ! this.portlet || ! jetspeed.page.layoutActionsDisabled )
+ this.setTitleBarDragging( true );
+
this.containerNode.style.display = "";
this.resizeBar.style.display = "";
@@ -1125,6 +1191,8 @@
this.resizeTo( lpiWidth, lpiHeight, true );
+ this._adjustPositionToDesktopState();
+
this.windowState = jetspeed.id.ACTION_NAME_RESTORE; // "normal"
},
getLastPositionInfo: function()
@@ -1192,6 +1260,27 @@
}
},
+ setTitleBarDragging: function( enableDrag )
+ {
+ if ( enableDrag )
+ {
+ if ( this.normalTitleBarCursor != null )
+ this.titleBar.style.cursor = this.normalTitleBarCursor;
+ if ( this.resizeHandle )
+ this.resizeHandle.domNode.style.display="";
+ this.drag.setDragHandle( this.titleBar );
+ }
+ else
+ {
+ if ( this.normalTitleBarCursor == null )
+ this.normalTitleBarCursor = dojo.html.getComputedStyle( this.titleBar, "cursor" );
+ this.titleBar.style.cursor = "default";
+ if ( this.resizeHandle )
+ this.resizeHandle.domNode.style.display="none";
+ this.drag.setDragHandle( null );
+ }
+ },
+
bringToTop: function( evt )
{
var beforeZIndex = this.domNode.style.zIndex;
@@ -1275,6 +1364,8 @@
this.resizeTo( null, null, true );
+ this._adjustPositionToDesktopState();
+
if ( ! suppressSubmitChange && this.portlet )
this.portlet.submitChangedWindowState();
},
@@ -1289,7 +1380,12 @@
//dojo.debug( "makeHeightVariable [" + this.widgetId + "] prev w=" + domNodePrevMarginBox.width + " h=" + domNodePrevMarginBox.height + " new w=" + domNodeMarginBox.width + " h=" + domNodeMarginBox.height );
//dojo.debug( "makeHeightVariable [" + this.widgetId + "] containerNode PREV style.width=" + this.containerNode.style.width + " style.height=" + this.containerNode.style.height );
- this.resizeTo( null, null, true );
+
+ var domNodeMarginBox = dojo.html.getMarginBox( this.domNode ) ;
+ var w = domNodeMarginBox.width;
+ var h = domNodeMarginBox.height + 3; // the plus 3 is mysteriously useful for avoiding initial scrollbar
+
+ this.resizeTo( w, h, true );
if ( dojo.render.html.ie )
dojo.lang.setTimeout( this, this._IEPostResize, 10 );
@@ -1367,8 +1463,7 @@
if ( h < ( this.lostHeight + 60 ) )
{
h = this.lostHeight + 60;
- }
-
+ }
dojo.html.setMarginBox( this.domNode, { height: h } );
dojo.html.setMarginBox( this.containerNode, { height: h-this.lostHeight } );
@@ -1734,6 +1829,12 @@
if ( this.portlet )
this.portlet.postParseAnnotateHtml( this.containerNode );
+
+ if ( this.restoreOnNextRender )
+ {
+ this.restoreOnNextRender = false;
+ this.restoreWindow();
+ }
},
setPortletTitle: function( newPortletTitle )
{
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org