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/09 06:07:59 UTC

svn commit: r484920 - /portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js

Author: smilek
Date: Fri Dec  8 21:07:59 2006
New Revision: 484920

URL: http://svn.apache.org/viewvc?view=rev&rev=484920
Log:
added support for page editor (customizer)

Modified:
    portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.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=484920&r1=484919&r2=484920
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/desktop/core.js Fri Dec  8 21:07:59 2006
@@ -87,11 +87,11 @@
     ACTION_NAME_MAXIMIZE: "maximized",
     ACTION_NAME_RESTORE: "normal",
     ACTION_NAME_PRINT: "print",
-    ACTION_NAME_CLOSE: "close",
     ACTION_NAME_EDIT: "edit",
     ACTION_NAME_VIEW: "view",
     ACTION_NAME_HELP: "help",
     ACTION_NAME_ADDPORTLET: "addportlet",
+    ACTION_NAME_REMOVEPORTLET: "removeportlet",
 
     ACTION_NAME_DESKTOP_TILE: "tile",
     ACTION_NAME_DESKTOP_UNTILE: "untile",
@@ -101,7 +101,10 @@
     PORTLET_ACTION_TYPE_MODE: "mode",
     PORTLET_ACTION_TYPE_STATE: "state",
 
-    MENU_WIDGET_ID_PREFIX: "jetspeed-menu-"
+    MENU_WIDGET_ID_PREFIX: "jetspeed-menu-",
+
+    PAGE_EDITOR_WIDGET_ID: "jetspeed-page-editor",
+    PAGE_EDITOR_INITIATE_PARAMETER: "editPage"
 };
 
 // ... jetspeed desktop preferences - defaults
@@ -669,6 +672,39 @@
     jetspeed.url.retrieveContent( { url: addPortletUrl, mimetype: mimetype }, contentListener, ajaxApiContext, jetspeed.debugContentDumpIds );
 };
 
+jetspeed.editPageInitiate = function()
+{
+    if ( ! jetspeed.page.editMode )
+    {
+        jetspeed.page.editMode = true;
+        var pageEditorWidget = dojo.widget.byId( jetspeed.id.PAGE_EDITOR_WIDGET_ID );
+        if ( pageEditorWidget == null )
+        {
+            pageEditorWidget = dojo.widget.createWidget( "jetspeed:PageEditor", { widgetId: jetspeed.id.PAGE_EDITOR_WIDGET_ID } );
+            var allColumnsContainer = document.getElementById( jetspeed.id.COLUMNS );
+            allColumnsContainer.insertBefore( pageEditorWidget.domNode, allColumnsContainer.firstChild );
+        }
+        else
+        {
+            pageEditorWidget.editPageShow();
+        }
+        jetspeed.page.syncPageControls();
+    }
+};
+jetspeed.editPageTerminate = function()
+{
+    if ( jetspeed.page.editMode )
+    {
+        jetspeed.page.editMode = false;
+        var pageEditorWidget = dojo.widget.byId( jetspeed.id.PAGE_EDITOR_WIDGET_ID );
+        if ( pageEditorWidget != null )
+        {
+            pageEditorWidget.editPageHide();
+        }
+        jetspeed.page.syncPageControls();
+    }
+};
+
 jetspeed.debugDumpForm = function( formNode )
 {
     if ( ! formNode ) return null ;
@@ -862,7 +898,8 @@
     columns: null,
     portlets: null,
 
-    noMovePersist: false,    // BOZO:NOW: observe this setting
+    editMode: false,
+    themeDefinitions: null,
 
     menus: null,
 
@@ -876,13 +913,6 @@
         }
         return "page-" + idsuffix;
     },
-
-    getPageDocumentUrl: function( pathOverride )
-    {
-        var docPath = document.location.pathname ;
-        
-        var contextAndServletPath = jetspeed.url.path.DESKTOP ;
-    },
     
     setPsmlPathFromDocumentUrl: function()
     {
@@ -927,7 +957,7 @@
 
         // create layout model
         var portletsByPageColumn = {};
-        this.columnsStructure = this._layoutCreateModel( parsedRootLayoutFragment, null, portletsByPageColumn );
+        this.columnsStructure = this._layoutCreateModel( parsedRootLayoutFragment, null, portletsByPageColumn, true );
 
         this.rootFragmentId = parsedRootLayoutFragment.id ;
 
@@ -979,6 +1009,15 @@
 
         // render page buttons
         this.renderPageControls();
+        this.syncPageControls();
+
+        // detect edit mode force - likely to be temporary
+        var pageEditorInititate = jetspeed.url.getQueryParameter( document.location.href, jetspeed.id.PAGE_EDITOR_INITIATE_PARAMETER );
+        if ( ( pageEditorInititate != null && pageEditorInititate == "true" ) || this.actions[ jetspeed.id.ACTION_NAME_VIEW ] != null )
+        {
+            if ( this.actions != null && ( this.actions[ jetspeed.id.ACTION_NAME_EDIT ] != null || this.actions[ jetspeed.id.ACTION_NAME_VIEW ] != null ) )
+                jetspeed.editPageInitiate();
+        }
     },
     _parsePSML: function( psml )
     {
@@ -1199,10 +1238,13 @@
         return ( rowA - rowB );
     },
 
-    _layoutCreateModel: function( layoutFragment, parentColumn, portletsByPageColumn )
+    _layoutCreateModel: function( layoutFragment, parentColumn, portletsByPageColumn, omitLayoutHeader )
     {  // layoutFragmentParentColumnIndex, parentColumnsInLayout
         var allColumnsStartIndex = this.columns.length;
-        var columnsInLayout = this._layoutRegisterAndCreateColumnsModel( layoutFragment, parentColumn );
+        var colModelResult = this._layoutRegisterAndCreateColumnsModel( layoutFragment, parentColumn, omitLayoutHeader );
+        var columnsInLayout = colModelResult.columnsInLayout;
+        if ( colModelResult.addedLayoutHeaderColumn )
+            allColumnsStartIndex++;
         var columnsInLayoutLen = ( columnsInLayout == null ? 0 : columnsInLayout.length ) ;
 
         if ( layoutFragment.layoutFragmentIndexes != null && layoutFragment.layoutFragmentIndexes.length > 0 )
@@ -1231,16 +1273,16 @@
                 {
                     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 ) ;
+                        this._layoutCreateModel( currentClonedLayoutFragForCol, columnsInLayout[childFragInColIndex], portletsByPageColumn, true ) ;
                         currentClonedLayoutFragByCol[ childFragInColIndex ] = null;
                     }
-                    this._layoutCreateModel( childFrag, columnsInLayout[childFragInColIndex], portletsByPageColumn ) ;
+                    this._layoutCreateModel( childFrag, columnsInLayout[childFragInColIndex], portletsByPageColumn, false ) ;
                 }
                 else
                 {
@@ -1272,7 +1314,7 @@
                     var currentClonedLayoutFragForCol = currentClonedLayoutFragByCol[ i ];
                     if ( currentClonedLayoutFragForCol != null )
                     {
-                        this._layoutCreateModel( currentClonedLayoutFragForCol, columnsInLayout[i], portletsByPageColumn ) ;
+                        this._layoutCreateModel( currentClonedLayoutFragForCol, columnsInLayout[i], portletsByPageColumn, true ) ;
                     }
                 }
             }
@@ -1332,15 +1374,28 @@
         return hasNestedLayouts;
     },
 
-    _layoutRegisterAndCreateColumnsModel: function( layoutFragment, parentColumn )
+    _layoutRegisterAndCreateColumnsModel: function( layoutFragment, parentColumn, omitLayoutHeader )
     {   // columnSizes: sizes, columnSizesSum: sizesSum
         this.layouts[ layoutFragment.id ] = layoutFragment;
+        var addedLayoutHeaderColumn = false;
         var columnsInLayout = new Array();
-        if ( jetspeed.prefs.windowTiling )
+        if ( jetspeed.prefs.windowTiling && layoutFragment.columnSizes.length > 0 )
         {
             var subOneLast = false;
-            if ( layoutFragment.columnSizesSum == 100 )
+            if ( parentColumn == null && layoutFragment.columnSizesSum == 100 )
                 subOneLast = true;
+            
+            if ( parentColumn != null && ! omitLayoutHeader )
+            {
+                var layoutHeaderColModelObj = new jetspeed.om.Column( 0, layoutFragment.id, ( subOneLast ? layoutFragment.columnSizesSum-1 : layoutFragment.columnSizesSum ), this.columns.length );
+                layoutHeaderColModelObj.layoutHeader = true;
+                this.columns.push( layoutHeaderColModelObj );
+                if ( parentColumn.columnChildren == null )
+                    parentColumn.columnChildren = new Array();
+                parentColumn.columnChildren.push( layoutHeaderColModelObj );
+                addedLayoutHeaderColumn = true;
+            }
+            
             for ( var i = 0 ; i < layoutFragment.columnSizes.length ; i++ )
             {
                 var size = layoutFragment.columnSizes[i];
@@ -1357,7 +1412,7 @@
                 columnsInLayout.push( colModelObj );
             }
         }
-        return columnsInLayout;
+        return { columnsInLayout: columnsInLayout, addedLayoutHeaderColumn: addedLayoutHeaderColumn };
     },
     _layoutCreatePortletsModel: function( layoutFragment, columnsInLayout, pageColumnStartIndex, portletsByPageColumn )
     {
@@ -1439,7 +1494,7 @@
                         var portletPageColumnIndex = pageColumnStartIndex + new Number( portletColumnIndex );
                         portletPageColumnKey = portletPageColumnIndex.toString();
                     }
-                    var portlet = new jetspeed.om.Portlet( pFrag.name, pFrag.id, null, pFrag.properties, pFrag.actions, pFrag.currentActionState, pFrag.currentActionMode, pFrag.decorator ) ;
+                    var portlet = new jetspeed.om.Portlet( pFrag.name, pFrag.id, null, pFrag.properties, pFrag.actions, pFrag.currentActionState, pFrag.currentActionMode, pFrag.decorator );
                     portlet.initialize();
 
                     this.putPortlet( portlet ) ;
@@ -1767,7 +1822,38 @@
             portlet._destroy();
         }
     },
-    debugDumpLastSavedWindowStateAllPortlets: function()
+
+    debugLayoutInfo: function()
+    {
+        var dumpMsg = "";
+        var i = 0;
+        for ( var layoutId in this.layouts )
+        {
+            if ( i > 0 ) dumpMsg += "\r\n";
+            dumpMsg += "layout[" + layoutId + "]: " + jetspeed.printobj( this.layouts[ layoutId ], true, true, true );
+            i++;
+        }
+        return dumpMsg;
+    },
+    debugColumnInfo: function()
+    {
+        var dumpMsg = "";
+        for ( var i = 0; i < this.columns.length; i++ )
+        {
+            if ( i > 0 ) dumpMsg += "\r\n";
+            dumpMsg += this.columns[i].toString();
+        }
+        return dumpMsg;
+    },
+    debugDumpLastSavedWindowState: function()
+    {
+        return this._debugDumpLastSavedWindowStateAllPortlets( true );
+    },
+    debugDumpWindowState: function()
+    {
+        return this._debugDumpLastSavedWindowStateAllPortlets( false );
+    },
+    debugPortletActions: function()
     {
         var portletArray = this.getPortletArray();
         var dumpMsg = "";
@@ -1775,33 +1861,35 @@
         {
             var portlet = portletArray[i];
             if ( i > 0 ) dumpMsg += "\r\n";
-            var windowState = portlet.getLastSavedWindowState();
-            dumpMsg += "[" + portlet.name + "] " + jetspeed.printobj( windowState, true );
+            dumpMsg += "portlet [" + portlet.name + "] actions: {";
+            for ( var actionKey in portlet.actions )
+                dumpMsg += actionKey + "={" + jetspeed.printobj( portlet.actions[actionKey], true ) + "} ";
+            dumpMsg += "}";
         }
         return dumpMsg;
     },
-    debugDumpWindowStateAllPortlets: function()
+    _debugDumpLastSavedWindowStateAllPortlets: function( useLastSaved )
     {
-        dojo.debug("==== window-state all-portlets ====" );
-        for (var portletIndex in this.portlets)
+        var portletArray = this.getPortletArray();
+        var dumpMsg = "";
+        for ( var i = 0; i < portletArray.length; i++ )
         {
-            var portlet = this.portlets[portletIndex];
-            var portletWindowState = portlet.getCurrentWindowState();
-            var dumpMsg = "portlet " + portlet.entityId + " : ";    
-            if ( ! portletWindowState )
-                dumpMsg = dumpMsg + "null window state";
-            else
-            {   
-                var propCount = 0;
-                for (var propName in portletWindowState)
-                {
-                    if (propCount++ > 0) dumpMsg = dumpMsg + ", ";
-                    dumpMsg = dumpMsg + propName + "=" + portletWindowState[propName];
-                }
+            var portlet = portletArray[i];
+            if ( i > 0 ) dumpMsg += "\r\n";
+            var windowState = null;
+            try
+            {
+                if ( useLastSaved )
+                    windowState = portlet.getLastSavedWindowState();
+                else
+                    windowState = portlet.getCurrentWindowState();
             }
-            dojo.debug( dumpMsg );
+            catch (e) { }
+            dumpMsg += "[" + portlet.name + "] " + ( (windowState == null) ? "null" : jetspeed.printobj( windowState, true ) );
         }
+        return dumpMsg;
     },
+
     resetWindowLayout: function()
     {
         for (var portletIndex in this.portlets)
@@ -1923,6 +2011,37 @@
     },
 
     // ... page buttons
+    syncPageControls: function()
+    {
+        if ( this.actionButtons == null ) return;
+        for ( var actionName in this.actionButtons )
+        {
+            var enabled = false;
+            if ( actionName == jetspeed.id.ACTION_NAME_EDIT )
+            {
+                if ( ! this.editMode )
+                    enabled = true;
+            }
+            else if ( actionName == jetspeed.id.ACTION_NAME_VIEW )
+            {
+                if ( this.editMode )
+                    enabled = true;
+            }
+            else if ( actionName == jetspeed.id.ACTION_NAME_ADDPORTLET )
+            {
+                if ( ! this.editMode )
+                    enabled = true;
+            }
+            else
+            {
+                enabled = true;
+            }
+            if ( enabled )
+                this.actionButtons[ actionName ].style.display = "";
+            else
+                this.actionButtons[ actionName ].style.display = "none";
+        }
+    },
     renderPageControls: function()
     {
         var actionButtonNames = [];
@@ -1930,11 +2049,28 @@
         {
             for ( var actionName in this.actions )
             {
+                if ( actionName != jetspeed.id.ACTION_NAME_HELP )
+                {   // ^^^ page help is currently not supported
+                    actionButtonNames.push( actionName );
+                }
                 if ( actionName == jetspeed.id.ACTION_NAME_EDIT )
                 {
                     actionButtonNames.push( jetspeed.id.ACTION_NAME_ADDPORTLET );
                 }
-                actionButtonNames.push( actionName );
+            }
+            if ( this.actions[ jetspeed.id.ACTION_NAME_EDIT ] != null )
+            {
+                if ( this.actions[ jetspeed.id.ACTION_NAME_VIEW ] == null )
+                {
+                    actionButtonNames.push( jetspeed.id.ACTION_NAME_VIEW );
+                }
+            }
+            if ( this.actions[ jetspeed.id.ACTION_NAME_VIEW ] != null )
+            {
+                if ( this.actions[ jetspeed.id.ACTION_NAME_EDIT ] == null )
+                {
+                    actionButtonNames.push( jetspeed.id.ACTION_NAME_EDIT );
+                }
             }
         }
 
@@ -1979,8 +2115,15 @@
         if ( actionName == null ) return;
         if ( actionName == jetspeed.id.ACTION_NAME_ADDPORTLET )
         {
-            var addportletPageUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.DESKTOP + "/system/customizer/selector.psml?jspage=" + this.getPath();
-            jetspeed.changeActionForPortlet( this.rootFragmentId, null, jetspeed.id.ACTION_NAME_EDIT, new jetspeed.om.PageChangeActionContentListener( addportletPageUrl ) );
+            this.addPortletInitiate();
+        }
+        else if ( actionName == jetspeed.id.ACTION_NAME_EDIT )
+        {
+            jetspeed.editPageInitiate();
+        }
+        else if ( actionName == jetspeed.id.ACTION_NAME_VIEW )
+        {
+            jetspeed.editPageTerminate();
         }
         else
         {
@@ -1998,6 +2141,22 @@
         return this.actions[ name ];
     },
 
+    // ... add portlet
+    addPortletInitiate: function()
+    {
+        var addportletPageUrl = jetspeed.url.basePortalUrl() + jetspeed.url.path.DESKTOP + "/system/customizer/selector.psml?jspage=" + this.getPath();
+        jetspeed.changeActionForPortlet( this.rootFragmentId, null, jetspeed.id.ACTION_NAME_EDIT, new jetspeed.om.PageChangeActionContentListener( addportletPageUrl ) );
+    },
+
+    // ... edit mode
+    setPageModePortletActions: function( /* Portlet */ portlet )
+    {
+        if ( portlet == null || portlet.actions == null ) return;
+        if ( portlet.actions[ jetspeed.id.ACTION_NAME_REMOVEPORTLET ] == null )
+        {
+            portlet.actions[ jetspeed.id.ACTION_NAME_REMOVEPORTLET ] = { id: jetspeed.id.ACTION_NAME_REMOVEPORTLET };
+        }
+    },
 
     // ... page url access
 
@@ -2005,6 +2164,23 @@
     {
         return jetspeed.url.path.SERVER + jetspeed.url.path.DESKTOP + this.getPath();
     },
+    getPageDirectory: function()
+    {
+        var pageDir = "/";
+        var pagePath = this.getPath();
+        if ( pagePath != null )
+        {
+            var lastSep = pagePath.lastIndexOf( "/" );
+            if ( lastSep != -1 )
+            {
+                if ( (lastSep +1) < pagePath.length )
+                    pageDir = pagePath.substring( 0, lastSep +1 );
+                else
+                    pageDir = pagePath;
+            }
+        }
+        return pageDir;
+    },
 
     equalsPageUrl: function( url )
     {
@@ -2068,17 +2244,26 @@
     size: null,
     pageColumnIndex: null,
     domNode: null,
+
     columnContainer: false,
+    layoutHeader: false,
 
     createColumn: function( columnContainer )
     {
         var columnClass = "desktopColumn" ;
         if ( this.isStartOfColumnSet() && this.getPageColumnIndex() > 0 )
-            columnClass = "desktopColumnClear" ;
+            columnClass = "desktopColumnClear";
         var divElmt = document.createElement( "div" );
         divElmt.setAttribute( "columnIndex", this.getPageColumnIndex() );
         divElmt.style.width = this.size + "%";
-        divElmt.style.minHeight = "40px";
+        if ( this.layoutHeader )
+        {
+            columnClass = "desktopLayoutHeader";
+        }
+        else
+        {
+            divElmt.style.minHeight = "40px";
+        }
         divElmt.className = columnClass;
         this.domNode = divElmt;
         if ( columnContainer != null )
@@ -2097,7 +2282,18 @@
     {
         return this.layoutColumnIndex == 0;
     },
-
+    toString: function()
+    {
+        var out = "column[" + this.pageColumnIndex + "]";
+        out += " layoutCol=" + this.layoutColumnIndex + " layoutId=" + this.layoutId + " size=" + this.size + ( this.columnChildren == null ? "" : ( " column-child-count=" + this.columnChildren.length ) ) + ( this.columnContainer ? " colContainer=true" : "" ) + ( this.layoutHeader ? " layoutHeader=true" : "" );
+        if ( this.domNode != null )
+        {
+            var colAbsPos = dojo.html.getAbsolutePosition( this.domNode, true );
+            var marginBox = dojo.html.getMarginBox( this.domNode );
+            out += " dims={" + "left:" + (colAbsPos.x) + ", right:" + (colAbsPos.x + marginBox.width) + ", top:" + (colAbsPos.y) + ", bottom:" + (colAbsPos.y + marginBox.height) + "}";
+        }
+        return out;
+    },
     getId: function()  // jetspeed.om.Id protocol
     {
         return this.layoutId + "_" + this.layoutColumnIndex;
@@ -2136,6 +2332,8 @@
     else
         this.actions = {};
 
+    jetspeed.page.setPageModePortletActions( this );
+
     this.currentActionState = currentActionState;
     this.currentActionMode = currentActionMode;
 
@@ -2730,6 +2928,12 @@
 
         this.currentActionState = currentActionState;
         this.currentActionMode = currentActionMode;
+
+        this.syncActions();
+    },
+    syncActions: function()
+    {
+        jetspeed.page.setPageModePortletActions( this );
         var windowWidget = this.getPortletWindow();
         if ( windowWidget )
         {



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org