portals-jetspeed-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tay...@apache.org
Subject svn commit: r391835 [1/2] - in /portals/jetspeed-2/trunk/src/webapp: decorations/layout/css/ desktop-themes/blue/ desktop-themes/blue/css/ desktop-themes/blue/images/ javascript/desktop/core/ javascript/desktop/widget/ javascript/desktop/windowicons/ j...
Date Wed, 05 Apr 2006 22:25:23 GMT
Author: taylor
Date: Wed Apr  5 15:25:16 2006
New Revision: 391835

URL: http://svn.apache.org/viewcvs?rev=391835&view=rev
Log:
CSS Style reconciliation 
Fixed support for general desktop theme styles
Added Blue Ocean and Tigris window themes ala Desktop
contribution from Stevie Javacript Wonder aka Steve Milek

Added:
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/banner_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/logo.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/selected_tab_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/tab_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/core.js
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowicons/jetspeed-desktop-window-visuals.zip   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowicons/test-window-icons.html
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/css/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/css/styles.css
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/button_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/close.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/customize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/close.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/maximize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/minimize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/refresh.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/desktop/restore.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/edit.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/footer_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/header_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/help.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_arrowdoc_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_arrowfolderclosed1_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_arrowfolderopen2_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_error_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_info_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_success_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/icon_warning_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/info.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/info1.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/leftnavbg.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/maximized.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/minimized.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/print.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/restore.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/subheader_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/title_background.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/blueocean/images/view.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/css/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/css/styles.css
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/close.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/customize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/close.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/maximize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/minimize.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/refresh.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/desktop/restore.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/edit.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/help.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_arrowdoc_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_arrowfolderclosed1_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_arrowfolderopen2_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_error_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_info_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_success_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/icon_warning_sml.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/info.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/info1.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/leftnavbg.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/maximized.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/minimized.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/nw_maj_rond.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/print.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/restore.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/sw_med_rond.gif   (with props)
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/tigris/images/view.gif   (with props)
Removed:
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/theme1/
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/windowthemes/theme2/
Modified:
    portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/PLT.C.4-Sections.css
    portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/html-tables.css
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.jsp
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.vm
    portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/css/styles.css
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.css
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.html
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlTaskBar.css
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortalTaskBar.js
    portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortletWindow.js

Modified: portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/PLT.C.4-Sections.css
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/PLT.C.4-Sections.css?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/PLT.C.4-Sections.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/PLT.C.4-Sections.css Wed Apr  5 15:25:16 2006
@@ -103,7 +103,7 @@
 .portlet-section-selected,
 .portlet-section-subheader,
 .portlet-section-footer,
-.portlet-section-text,
+.portlet-section-text
 {
     font-family: Verdana, Helvetica, Arial, sans-serif;
     voice-family: "\"}\"";

Modified: portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/html-tables.css
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/html-tables.css?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/html-tables.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/decorations/layout/css/html-tables.css Wed Apr  5 15:25:16 2006
@@ -18,12 +18,12 @@
  *  Standardized Table formating for portlets.
  */
 
-.portlet th, td, input {
+.portlet th, .portlet td, .portlet input {
     font-family: Verdana, Helvetica, Arial, sans-serif;
     font-size: small;
 }
 
-.portlet table, th, td {
+.portlet table, .portlet th, .portlet td {
     vertical-align: top;
     font-size: small;
     border: none;

Modified: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.jsp
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.jsp?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.jsp (original)
+++ portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.jsp Wed Apr  5 15:25:16 2006
@@ -21,27 +21,23 @@
 
 <html>   <!-- NOTE: do not use strict doctype - see dojo svn log for FloatingPane.js -->
 <head>
-<link rel="stylesheet" type="text/css" media="screen, projection" href="desktop-themes/blue/css/styles.css"/>
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+<meta http-equiv="Content-style-type" content="text/css" />
 
+<!-- 
+  DOJO Config Script ( djConfig )
+  -->
 <script type="text/javascript">
-
-    var djConfig = {isDebug: true};
-    djConfig.debugAtAllCosts = true;     <!-- needed for js debuggers (both venkman and visual studio) -->
+    var djConfig = {isDebug: false};
+    // djConfig.debugAtAllCosts = true;     
+    // needed for js debuggers (both venkman and visual studio)
     djConfig.baseScriptUri = '<%= desktop.getPortalResourceUrl("/javascript/dojo/") %>' ;
     {
         var tEnds = djConfig.baseScriptUri.indexOf(";jsessionid=");
         if (tEnds > 0) djConfig.baseScriptUri = djConfig.baseScriptUri.substring(0, tEnds);
     }
-
-	function doRender(url,portletEntityId)
-	{
-        jetspeed.doRender(url,portletEntityId);
-	}
-    function doAction(url, portletEntityId, currentForm)
-    {
-        jetspeed.doAction(url,portletEntityId, currentForm);
-    }	    
 </script>
+
 <!-- 
   DOJO Script
   -->
@@ -57,9 +53,13 @@
     dojo.require("dojo.widget.Manager");
     dojo.require("dojo.widget.TaskBar");
     dojo.require("dojo.widget.FloatingPane");
-    dojo.require("dojo.fx.*");
+    dojo.require("dojo.widget.Menu2");
+    dojo.require("dojo.fx.html");
 
     dojo.hostenv.setModulePrefix('jetspeed.ui.widget', '../desktop/widget');
+    dojo.hostenv.setModulePrefix('jetspeed.desktop', '../desktop/core');
+
+    dojo.require("jetspeed.desktop.core");
 
     dojo.require("jetspeed.ui.widget.PortalTaskBar");
     dojo.require("jetspeed.ui.widget.PortletWindow");
@@ -69,16 +69,23 @@
 <script language="JavaScript" type="text/javascript">
     dojo.widget.manager.registerWidgetPackage('jetspeed.ui.widget');
 </script>
-<!-- 
-  Jetspeed Script
-  -->
-<script type="text/javascript" src="<%= desktop.getPortalResourceUrl("/javascript/jetspeed/jetspeed-ajax-api.js") %>"></script>
 
+<!-- <base> tag must appear after dojo load in IE6 ( see http://trac.dojotoolkit.org/ticket/557 ) -->
+<base id="basetag" href="<%= desktop.getPortalResourceUrl("/") %>"> <!-- http://localhost:8080/jetspeed/ -->
+<link rel="stylesheet" type="text/css" media="screen, projection" href="desktop-themes/blue/css/styles.css"/>
 <script language="JavaScript" type="text/javascript">
     function init()
     {
         jetspeed.initializeDesktop();
     }
+    function doRender(url,portletEntityId)
+    {
+        jetspeed.doRender(url,portletEntityId);
+    }
+    function doAction(url, portletEntityId, currentForm)
+    {
+        jetspeed.doAction(url,portletEntityId, currentForm);
+    }
     dojo.event.connect(dojo, "loaded", "init");
 </script>
 <style>
@@ -89,52 +96,8 @@
     height: 100%;
     /*overflow: hidden;*/  /* erase window level scrollbars */
     margin: 0 0 0 0;
-    font-family: Arial, Helvetica, sans-serif;
-}
-body { padding: 10px 10px 100px 10px; }
-
-<!-- below styles are for jetspeed.ui.PortletDivWindow; jetspeed.ui.PortletDivWindow is for testing purposes only at this point -->
-.portletBody{
-	border: 3px solid #EEE;
-	background: #FFF;
-	margin: 5px;
-}
-
-.portletFrame{
-	border : 1px solid #79A7E2;
-	overflow: hidden;
-}
-
-.portletHeader{
-	cursor: move;
-	background: #EFF5FF;
-	height: 1.8em;
-	overflow: hidden;
-}
-.portletHeader .showHide{
-	width: 16px;
-	height: 16px;
-	cursor: pointer;
-	float: left;
-	padding: 2px 0 0 2px;
-}
-.portletHeader .title{
-	font-weight: bold;
-	padding-top: 2px;
-	line-height: 1.4em;
-	color: #00368F;
-}
-.portletHeader .title a{
-	color: #00368F;
-}
-.portletHeader .title a:hover{
-	color: #F60;
-}
-.portletHeader .close{
-	float: right;
-	padding: 2px 2px 2px 0;
-	cursor: pointer;
 }
+/* body { padding: 10px 10px 100px 10px; } */
 
 </style>
 
@@ -144,30 +107,10 @@
 <body id="jetspeedDesktop" class="layout-blue">
 <div class="layout-blue">
 
-<!--
-<div dojoType="FloatingPane"
-	title="Layout window w/shadow"
-	constrainToContainer="true"
-	hasShadow="true"
-	resizable="true"
-	displayMinimizeAction="true"
-	displayMaximizeAction="true"
-	contentWrapper="layout"
-	style="width: 300px; height: 200px; top: 600px; left: 400px;"
->
-	<div dojoType="ContentPane" layoutAlign="top" style="border: solid white;">TOP</div>
-	<div dojoType="ContentPane" layoutAlign="bottom" style="border: solid white;">BOTTOM</div>
-	<div dojoType="ContentPane" layoutAlign="left" style="border: solid white;">LEFT</div>
-	<div dojoType="ContentPane" layoutAlign="right" style="border: solid white;">RIGHT</div>
-	<div dojoType="ContentPane" layoutAlign="client" style="border: solid white;">CENTER</div>
-</div>
--->
 
 <!-- Start Taskbar -->
-<!-- <div dojoType="TaskBar" id="jetspeedTaskbar" style="background-color: #666; width: 100%; bottom: 5px; height: 100px"> -->
-    <!-- <button onclick="jetspeed.testLoadPageCreateDivPortlets()">Portal (DIV)</button>
-    <button onclick="jetspeed.testLoadPageCreateWidgetPortlets()">Portal (WIDGET)</button> -->
-<!-- </div> -->
+<div dojoType="PortalTaskBar" id="jetspeedTaskbar" style="background-color: #666; width: 100%; bottom: 5px; height: 100px">
+</div>
 <!-- End Taskbar -->
 </div>
 </body>

Modified: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.vm
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.vm?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.vm (original)
+++ portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/blue.vm Wed Apr  5 15:25:16 2006
@@ -16,31 +16,23 @@
 
 <html>     <!-- NOTE: do not use strict doctype - see dojo svn log for FloatingPane.js -->
 <head>
-<link rel="stylesheet" type="text/css" media="screen, projection" href="desktop-themes/blue/css/styles.css"/>
-<script type="text/javascript">
+<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
+<meta http-equiv="Content-style-type" content="text/css" />
 
-    var djConfig = {isDebug: true};
-    djConfig.debugAtAllCosts = true;   <!-- needed for js debuggers (both venkman and visual studio) -->
+<!-- 
+  DOJO Config Script ( djConfig )
+  -->
+<script type="text/javascript">
+    var djConfig = {isDebug: false};
+    // djConfig.debugAtAllCosts = true;   
+    // needed for js debuggers (both venkman and visual studio)
     djConfig.baseScriptUri = '$jetspeedDesktop.getPortalResourceUrl("/javascript/dojo/")';
     {
         var tEnds = djConfig.baseScriptUri.indexOf(";jsessionid=");
         if (tEnds > 0) djConfig.baseScriptUri = djConfig.baseScriptUri.substring(0, tEnds);
     }
-        
-    str.lastIndexOf(end) == str.length - end.length;
-
-
-    if ( djConfig.baseScriptUri
-
-	    function doRender(url,portletEntityId) 
-	    {
-            jetspeed.doRender(url,portletEntityId);
-    	}
-		    function doAction(url, portletEntityId, currentForm)
-		    {
-		            jetspeed.doAction(url,portletEntityId, currentForm);
-		    }
 </script>
+
 <!-- 
   DOJO Script
   -->
@@ -56,9 +48,13 @@
     dojo.require("dojo.widget.Manager");
     dojo.require("dojo.widget.TaskBar");
  	dojo.require("dojo.widget.FloatingPane");
-    dojo.require("dojo.fx.*");
+    dojo.require("dojo.widget.Menu2");
+    dojo.require("dojo.fx.html");
 
     dojo.hostenv.setModulePrefix('jetspeed.ui.widget', '../desktop/widget');
+    dojo.hostenv.setModulePrefix('jetspeed.desktop', '../desktop/core');
+
+    dojo.require("jetspeed.desktop.core");
 
     dojo.require("jetspeed.ui.widget.PortalTaskBar");
     dojo.require("jetspeed.ui.widget.PortletWindow");
@@ -68,16 +64,23 @@
 <script language="JavaScript" type="text/javascript">
     dojo.widget.manager.registerWidgetPackage('jetspeed.ui.widget');
 </script>
-<!-- 
-  Jetspeed Script
-  -->
-<script type="text/javascript" src='$jetspeedDesktop.getPortalResourceUrl("/javascript/jetspeed/jetspeed-ajax-api.js")'"></script>
 
+<!-- <base> tag must appear after dojo load in IE6 ( see http://trac.dojotoolkit.org/ticket/557 ) -->
+<base href="$jetspeedDesktop.getPortalResourceUrl('/')"> <!-- http://localhost:8080/jetspeed/ -->
+<link rel="stylesheet" type="text/css" media="screen, projection" href="desktop-themes/blue/css/styles.css"/>
 <script language="JavaScript" type="text/javascript">
     function init()
     {
         jetspeed.initializeDesktop();
     }
+    function doRender(url,portletEntityId)
+    {
+        jetspeed.doRender(url,portletEntityId);
+    }
+    function doAction(url, portletEntityId, currentForm)
+    {
+        jetspeed.doAction(url,portletEntityId, currentForm);
+    }
     dojo.event.connect(dojo, "loaded", "init");
 </script>
 <style>
@@ -88,52 +91,8 @@
     height: 100%;
     /*overflow: hidden;*/  /* erase window level scrollbars */
     margin: 0 0 0 0;
-    font-family: Arial, Helvetica, sans-serif;
-}
-body { padding: 10px 10px 100px 10px; }
-
-<!-- below styles are for jetspeed.ui.PortletDivWindow; jetspeed.ui.PortletDivWindow is for testing purposes only at this point -->
-.portletBody{
-	border: 3px solid #EEE;
-	background: #FFF;
-	margin: 5px;
-}
-
-.portletFrame{
-	border : 1px solid #79A7E2;
-	overflow: hidden;
-}
-
-.portletHeader{
-	cursor: move;
-	background: #EFF5FF;
-	height: 1.8em;
-	overflow: hidden;
-}
-.portletHeader .showHide{
-	width: 16px;
-	height: 16px;
-	cursor: pointer;
-	float: left;
-	padding: 2px 0 0 2px;
-}
-.portletHeader .title{
-	font-weight: bold;
-	padding-top: 2px;
-	line-height: 1.4em;
-	color: #00368F;
-}
-.portletHeader .title a{
-	color: #00368F;
-}
-.portletHeader .title a:hover{
-	color: #F60;
-}
-.portletHeader .close{
-	float: right;
-	padding: 2px 2px 2px 0;
-	cursor: pointer;
 }
+/* body { padding: 10px 10px 100px 10px; } */
 
 </style>
 
@@ -144,10 +103,8 @@
 <div class="layout-blue">
 
 <!-- Start Taskbar -->
-<!-- <div dojoType="TaskBar" id="jetspeedTaskbar" style="background-color: #666; width: 100%; bottom: 5px; height: 100px"> -->
-    <!-- <button onclick="jetspeed.testLoadPageCreateDivPortlets()">Portal (DIV)</button>
-    <button onclick="jetspeed.testLoadPageCreateWidgetPortlets()">Portal (WIDGET)</button> -->
-<!-- </div> -->
+<div dojoType="PortalTaskBar" id="jetspeedTaskbar" style="background-color: #666; width: 100%; bottom: 5px; height: 100px">
+</div>
 <!-- End Taskbar -->
 </div>
 </body>

Modified: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/css/styles.css
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/css/styles.css?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/css/styles.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/css/styles.css Wed Apr  5 15:25:16 2006
@@ -14,7 +14,15 @@
 limitations under the License.
 */
 
-@import url("../../../layout/css/portal-standard.css");
+@import url("../../../decorations/layout/css/portal-standard.css");
+
+DIV.portlet
+{
+    margin: 0px;    /* necessary to override margin settings from decorations/layout/css/standard-columns.css */
+}
+
+
+/*  begin layout decorator blueocean  */
 
 body {
     font-family: Verdana, Helvetica, Arial, sans-serif;
@@ -343,3 +351,4 @@
    display: inline;
 }
 
+/*  end layout decorator blueocean  */

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/banner_background.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/banner_background.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/banner_background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/logo.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/logo.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/logo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby_background.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby_background.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/poweredby_background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/selected_tab_background.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/selected_tab_background.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/selected_tab_background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/tab_background.gif
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/tab_background.gif?rev=391835&view=auto
==============================================================================
Binary file - no diff available.

Propchange: portals/jetspeed-2/trunk/src/webapp/desktop-themes/blue/images/tab_background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/core.js
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/core.js?rev=391835&view=auto
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/core.js (added)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/desktop/core/core.js Wed Apr  5 15:25:16 2006
@@ -0,0 +1,1159 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * jetspeed is the root variable of (almost all) our public symbols.
+ */
+
+dojo.provide("jetspeed.desktop.core");
+
+// ... jetspeed base objects
+if ( ! window.jetspeed )
+    jetspeed = {} ;
+if ( ! jetspeed.om )
+    jetspeed.om = {} ;
+if ( ! jetspeed.url )
+    jetspeed.url = {} ;
+if ( ! jetspeed.ui )
+    jetspeed.ui = {} ;
+if ( ! jetspeed.ui.widget )
+    jetspeed.ui.widget = {} ;
+
+
+// ... jetspeed version
+jetspeed.version = 
+{
+    major: 2, minor: 1, patch: 0, flag: "dev",
+    revision: "",
+    toString: function() 
+    {
+        with (jetspeed.version) 
+        {
+            return major + "." + minor + "." + patch + flag + " (" + revision + ")";
+        }
+    }
+};
+
+// ... jetspeed.id
+jetspeed.id =
+{
+    DESKTOP: "jetspeedDesktop",
+    TASKBAR: "jetspeedTaskbar",
+    PORTLET_STYLE_CLASS: "portlet"
+};
+
+// ... jetspeed desktop preferences
+jetspeed.prefs = 
+{
+    windowTiling: false
+    
+};
+
+// ... jetspeed debug options
+jetspeed.debug =
+{
+    pageLoad: true,
+    retrievePsml: false,
+    setPortletContent: false,
+    doRenderDoAction: false,
+    postParseAnnotateHtml: false,
+    executeOnSubmit: false,
+    confirmOnSubmit: false,
+    createWindow: false,
+    initializeWindowState: false,
+    submitChangedWindowState: 0
+};
+jetspeed.debugPsmlDumpContent = false;
+//jetspeed.debugPortletEntityIdFilter = [ "dp-7", "um-3", "um-4" ]; // NOTE: uncomment causes only the listed portlets to be loaded; all others are ignored; for testing
+//jetspeed.debugPortletEntityIdFilter = [ "dp-12" ];
+jetspeed.debugPortletWindowIcons = [ "text-x-generic.png", "text-html.png", "application-x-executable.png" ];
+jetspeed.debugPortletWindowThemes = [ "tigris", "blueocean" ];
+//jetspeed.debugPortletDumpRawContent = [ "dp-7" ]; // , "dp-7", "jsfGuessNumber1", "jsfCalendar" ];    // "um-4", "dp-7", "jsfGuessNumber1", "jsfCalendar"
+//jetspeed.debugPortletDumpRawContent = [ "*" ];
+
+
+// ... load page /portlets
+jetspeed.page = null ;   // BOZO: is this it? one page at a time?
+jetspeed.initializeDesktop = function()
+{
+    jetspeed.loadPage();
+    //jetspeed.currentTaskbar = new jetspeed.ui.PortalTaskBar() ;
+};
+jetspeed.loadPage = function()
+{
+    jetspeed.page = new jetspeed.om.Page() ;
+    jetspeed.page.retrievePsml( new jetspeed.om.PageContentListenerCreateWidget() ) ;
+};
+jetspeed.loadPortletWindows = function( /* Portlet[] */ portletArray, portletWindowFactory )
+{
+    if ( ! portletArray )
+        portletArray = jetspeed.page.getPortletArrayByZIndex();
+    if ( portletArray )
+    {
+        var createdPortlets = [];
+        for ( var i = 0; i < portletArray.length; i++ )
+        {
+            var portlet = portletArray[i];
+            if ( jetspeed.debugPortletEntityIdFilter )
+            {
+                if (! dojo.lang.inArray(jetspeed.debugPortletEntityIdFilter, portlet.entityId))
+                    portlet = null;
+            }
+            if (portlet)
+            {
+                createdPortlets.push(portlet);
+                portlet.createPortletWindow(portletWindowFactory,null,true);
+            }
+        }
+        jetspeed.doRenderAll( null, createdPortlets, true );
+    }
+};
+
+// ... jetspeed.doRender
+jetspeed.renderForm = null;
+jetspeed.doRender = function( url, portletEntityId, currentForm )
+{
+    if ( ! currentForm )
+        currentForm = jetspeed.renderForm;
+    jetspeed.renderForm = null;
+    var targetPortlet = jetspeed.page.getPortlet( portletEntityId );
+    if ( targetPortlet )
+    {
+        if ( jetspeed.debug.doRenderDoAction )
+            dojo.debug( "doRender [" + portletEntityId + "] url: " + url );
+        targetPortlet.retrievePortletContent( null, url, currentForm );
+    }
+};
+
+// ... jetspeed.doRenderAll
+jetspeed.doRenderAll = function( url, portletArray, isPageLoad )
+{
+    var debugMsg = jetspeed.debug.doRenderDoAction;
+    var debugPageLoad = jetspeed.debug.pageLoad && isPageLoad;
+    if ( ! portletArray )
+        portletArray = jetspeed.page.getPortletArray();
+    var renderMsg = "";
+    for ( var i = 0; i < portletArray.length; i++ )
+    {
+        var portlet = portletArray[i];
+        if ( debugMsg || debugPageLoad )
+        {
+            if ( i > 0 ) renderMsg = renderMsg + ", ";
+            renderMsg = renderMsg + portlet.entityId;
+            if ( debugPageLoad )
+                renderMsg = renderMsg + " " + portlet.title;
+        }
+        portlet.retrievePortletContent( null, url );
+    }
+    if ( debugMsg )
+        dojo.debug( "doRenderAll [" + renderMsg + "] url: " + url );
+    else if ( debugPageLoad )   // this.getPsmlUrl() ;
+        dojo.debug( "doRenderAll page-url: " + jetspeed.page.getPsmlUrl() + " portlets: [" + renderMsg + "]" + ( url ? ( " url: " + url ) : "" ) );
+};
+
+// ... jetspeed.doAction
+jetspeed.actionForm = null;
+jetspeed.doAction = function( url, portletEntityId, currentForm )
+{
+    if ( ! currentForm )
+        currentForm = jetspeed.actionForm;
+    jetspeed.actionForm = null;
+    var targetPortlet = jetspeed.page.getPortlet( portletEntityId );
+    if ( targetPortlet )
+    {
+        if ( jetspeed.debug.doRenderDoAction )
+        {
+            if ( !currentForm )
+                dojo.debug( "doAction [" + portletEntityId + "] url: " + url + " form: null" );
+            else
+                dojo.debug( "doAction [" + portletEntityId + "] url: " + url + " form: " + jetspeed.debugDumpForm( currentForm ) );
+        }
+        targetPortlet.retrievePortletContent( new jetspeed.om.PortletActionContentListener(), url, currentForm );
+    }
+};
+jetspeed.debugDumpForm = function( formNode )
+{
+    if ( ! formNode ) return null ;
+    var formDump = formNode.toString() ;
+    if ( formNode.name )
+        formDump += " name=" + formNode.name;
+    if ( formNode.id )
+        formDump += " id=" + formNode.id;
+    var queryString = dojo.io.encodeForm( formNode );
+    formDump += " data=" + queryString; 
+    return formDump;
+};
+
+
+// ... jetspeed.url
+jetspeed.url.path =
+{
+    JETSPEED: "/jetspeed",
+    AJAX_API: "/jetspeed/ajaxapi",
+    DESKTOP: "/jetspeed/desktop",
+    PORTLET: "/jetspeed/portlet"
+};
+jetspeed.url.scheme =
+{   // used to make jetspeed.url.validateUrlStartsWithHttp cleaner
+    HTTP_PREFIX: "http://",
+    HTTP_PREFIX_LEN: "http://".length,
+    HTTPS_PREFIX: "https://",
+    HTTPS_PREFIX_LEN: "https://".length
+};
+jetspeed.url.basePortalUrl = function()
+{
+    return document.location.protocol + "//" + document.location.host ;
+};
+jetspeed.url.basePortalDesktopUrl = function()
+{
+    return jetspeed.url.basePortalUrl() + jetspeed.url.path.JETSPEED ;
+};
+jetspeed.url.validateUrlStartsWithHttp = function( url )
+{
+    if ( url )
+    {
+        var len = url.length;
+        var hSLen = jetspeed.url.scheme.HTTPS_PREFIX_LEN;
+        if ( len > hSLen )  // has to be at least longer than as https://
+        {
+            var hLen = jetspeed.url.scheme.HTTP_PREFIX_LEN;
+            if ( url.substring( 0, hLen ) == jetspeed.url.scheme.HTTP_PREFIX )
+                return true;
+            if ( url.substring( 0, hSLen ) == jetspeed.url.scheme.HTTPS_PREFIX )
+                return true;
+        }
+    }
+    return false;
+};
+
+// ... jetspeed.om.PageContentListenerCreateWidget
+jetspeed.om.PageContentListenerCreateWidget = function()
+{
+};
+jetspeed.om.PageContentListenerCreateWidget.prototype =
+{
+    notifySuccess: function( /* Page */ page )
+    {
+        jetspeed.loadPortletWindows();
+    },
+    notifyFailure: function( /* String */ type, /* String */ error, /* Page */ page )
+    {
+        alert( "PageContentListenerCreateWidget notifyFailure type=" + type + " error=" + error ) ;
+    }
+};
+
+// ... jetspeed.om.Page
+jetspeed.om.Page = function( pagePsmlPath, pageName, pageTitle )
+{
+    this.psmlPath = pagePsmlPath ;
+    if ( this.psmlPath == null )
+        this.setPsmlPathFromDocumentUrl() ;
+    this.name = pageName ;
+    this.title = pageTitle ;
+    this.portlets = [] ;
+};
+jetspeed.om.Page.prototype =
+{
+    psmlPath: null,
+    name: null,
+    title: null,
+    portlets: null,
+
+    setPsmlPathFromDocumentUrl: function()
+    {
+        var psmlPath = jetspeed.url.path.AJAX_API ;
+        var docPath = document.location.pathname ;
+        
+        var contextAndServletPath = jetspeed.url.path.DESKTOP ;
+        var contextAndServletPathPos = docPath.indexOf( contextAndServletPath ) ;
+        if ( contextAndServletPathPos != -1 && docPath.length > ( contextAndServletPathPos + contextAndServletPath.length ) )
+        {
+            psmlPath = psmlPath + docPath.substring( contextAndServletPathPos + contextAndServletPath.length ) ;
+        }
+        this.psmlPath = psmlPath ;
+    },
+    
+    getPsmlUrl: function()
+    {
+        if ( this.psmlPath == null )
+            this.setPsmlPathFromDocumentUrl() ;
+
+        return jetspeed.url.basePortalUrl() + this.psmlPath ;
+    },
+    
+    retrievePsml: function( pageContentListener )
+    {
+        var psmlUrl = this.getPsmlUrl() ;
+
+        if ( jetspeed.debug.retrievePsml )
+            dojo.debug( "retrievePsml url: " + psmlUrl ) ;
+
+        var page = this ;  // NOTE: bind calls like this cannot generally be further encapsulated due to need for a closure
+        dojo.io.bind({     //       (in this case page and pageContentListener locals create a closure due to their use in load/error functions)
+            url: psmlUrl,
+            load: function(type, data, evt)
+            {
+                //dojo.debug( "r e t r i e v e P s m l . l o a d" ) ;
+                //dojo.debug( "  type:" );
+                //dojo.debugShallow( type ) ;
+                //dojo.debug( "  evt:" );
+                //dojo.debugShallow( evt ) ;
+                if ( jetspeed.debugPsmlDumpContent )
+                {
+                    dojo.debug( "retrievePsml content: " + dojo.dom.innerXML( data ) );
+                }
+                page.getPortletsFromPSML( data );
+                if ( pageContentListener && dojo.lang.isFunction( pageContentListener.notifySuccess ) )
+                {
+                    pageContentListener.notifySuccess(page);
+                    }
+            },
+            error: function(type, error)
+            {
+                //dojo.debug( "r e t r i e v e P s m l . e r r o r" ) ;
+                //dojo.debug( "  type:" );
+                //dojo.debugShallow( type ) ;
+                //dojo.debug( "  error:" );
+                //dojo.debugShallow( error ) ;
+                if ( pageContentListener && dojo.lang.isFunction( pageContentListener.notifyFailure ) )
+                {
+                    pageContentListener.notifyFailure(type, error, page);
+                }
+            },
+            mimetype: "text/xml"
+        });            
+    },
+
+    getPortletsFromPSML: function( psml )
+    {
+        var lis = psml.getElementsByTagName("fragment");
+        for( var x=0; x < lis.length; x++ )
+        {
+            var fragType = lis[x].getAttribute("type");
+            if ( fragType == "portlet" )
+            {
+                var portletName = lis[x].getAttribute("name");
+                var portletEntityId = lis[x].getAttribute("id");
+                var portlet = new jetspeed.om.Portlet( portletName, portletEntityId ) ;
+
+                var props = lis[x].getElementsByTagName("property");
+                for( var propsIdx=0; propsIdx < props.length; propsIdx++ )
+                {
+                    var propName = props[propsIdx].getAttribute("name") ;
+                    var propValue = props[propsIdx].getAttribute("value") ;
+                    portlet.putProperty( propName, propValue ) ;
+                }
+                this.putPortlet( portlet ) ;
+            }
+        }
+    },
+
+    _portletZIndexCompare: function( portletA, portletB )
+    {   // uses saved state only - does not check with window widget
+        var aZIndex = null;
+        var bZIndex = null;
+        var windowState = null;
+        windowState = portletA.getLastSavedWindowState();
+        aZIndex = windowState.zIndex;
+        windowState = portletB.getLastSavedWindowState();
+        bZIndex = windowState.zIndex;
+        if ( aZIndex && ! bZIndex )
+            return -1;
+        else if ( bZIndex && ! aZIndex )
+            return 1;
+        else if ( aZIndex == bZIndex )
+            return 0;
+        return ( aZIndex - bZIndex );
+    },
+
+    _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();
+        portletArray.sort( this._portletZIndexCompare );
+        return portletArray;
+    },
+    getPortletArrayList: function()
+    {
+        var portletArrayList = new dojo.collections.ArrayList();
+        for (var portletIndex in this.portlets)
+        {
+            var portlet = this.portlets[portletIndex];
+            portletArrayList.add(portlet);
+        }
+        return portletArrayList;
+    },
+    getPortletArray: function()
+    {
+        if (! this.portlets) return null ;
+        var portletArray = [];
+        for (var portletIndex in this.portlets)
+        {
+            var portlet = this.portlets[portletIndex];
+            portletArray.push(portlet);
+        }
+        return portletArray;
+    },
+    getPortlets: function()
+    {
+        if (this.portlets)
+            return dojo.lang.shallowCopy(this.portlets) ;
+        return null ;
+    },
+    getPortlet: function( /* String */ portletEntityId )
+    {
+        if (this.portlets && portletEntityId)
+            return this.portlets[portletEntityId];
+        return null;
+    },
+    putPortlet: function( /* Portlet */ portlet )
+    {
+        if (!portlet) return ;
+        if (! this.portlets) this.portlets = [] ;
+        this.portlets[ portlet.entityId ] = portlet ;
+    },
+    removePortlet: function( /* Portlet */ portlet )
+    {
+        if (! portlet || ! this.portlets) return ;
+        delete this.portlets[ portlet.entityId ] ;
+    },
+    _destroyPortlets: function()
+    {
+        for (var portletIndex in this.portlets)
+        {
+            var portlet = this.portlets[portletIndex];
+            portlet._destroy();
+        }
+    },
+    debugDumpWindowStateAllPortlets: function()
+    {
+        dojo.debug("==== window-state all-portlets ====" );
+        for (var portletIndex in this.portlets)
+        {
+            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];
+                }
+            }
+            dojo.debug( dumpMsg );
+        }
+    },
+    resetWindowLayout: function()
+    {
+        for (var portletIndex in this.portlets)
+        {
+            var portlet = this.portlets[portletIndex];
+            portlet.submitChangedWindowState( false, true );
+        }
+        this.reload();
+    },
+    reload: function()
+    {
+        this._destroyPortlets();
+        jetspeed.loadPage();
+    }
+};
+
+// ... jetspeed.om.PortletContentListener
+jetspeed.om.PortletContentListener = function()
+{
+};
+jetspeed.om.PortletContentListener.prototype =
+{
+    notifySuccess: function( /* String */ portletContent, /* String */ requestUrl, /* Portlet */ portlet )
+    {
+        portlet.setPortletContent( portletContent, requestUrl );
+    },
+    notifyFailure: function( /* String */ type, /* String */ error, /* Portlet */ portlet )
+    {
+        alert( "PortletContentListener notifyFailure type=" + type + " error=" + error ) ;
+    }
+};
+
+// ... jetspeed.om.PortletContentListener
+jetspeed.om.PortletActionContentListener = function()
+{
+};
+jetspeed.om.PortletActionContentListener.prototype =
+{
+    notifySuccess: function( /* String */ portletContent, /* String */ requestUrl, /* Portlet */ portlet )
+    {
+        var renderUrl = null;
+        var parsedPseudoUrl = portlet.parseJSPseudoUrlActionRender( portletContent );
+        if ( parsedPseudoUrl.operation == portlet.PORTLET_REQUEST_ACTION || parsedPseudoUrl.operation == portlet.PORTLET_REQUEST_RENDER )
+        {
+            //dojo.debug( "PortletActionContentListener extracted from javascript-pseudo-url: " + portletContent + "  url: " + parsedPseudoUrl.url + " operation: " + parsedPseudoUrl.operation + " entity-id: " + parsedPseudoUrl.portletEntityId ) ;
+            renderUrl = parsedPseudoUrl.url;
+        }
+        else
+        {
+            //dojo.debug( "PortletActionContentListener: " + portletContent ) ;
+            renderUrl = portletContent;
+        }
+        if ( renderUrl )
+        {
+            jetspeed.doRenderAll( renderUrl );    // render all portlets
+            //  portlet.retrievePortletContent(null,renderUrl);    // render just the one portlet
+        }        
+    },
+    notifyFailure: function( /* String */ type, /* String */ error, /* Portlet */ portlet )
+    {
+        alert( "PortletActionContentListener notifyFailure type=" + type ) ;
+        dojo.debugShallow( error );
+    }
+};
+
+
+// ... jetspeed.om.PortletWindowFactory
+jetspeed.om.PortletWindowFactory = function()
+{
+};
+jetspeed.om.PortletWindowFactory.prototype =
+{
+    create: function( /* Portlet */ portlet )
+    {
+        return jetspeed.ui.createPortletWindowWidget(portlet);
+    }
+};
+
+
+// ... jetspeed.om.Portlet
+jetspeed.om.Portlet = function( /* String */ portletName, /* String */ portletEntityId, /* String */ portletTitle )
+{
+    this.name = portletName;
+    this.entityId = portletEntityId;
+    if (portletTitle == null && portletName)
+    {
+        var re = (/^[^:]*:*/);
+        portletTitle = portletName.replace( re, "" );
+    }
+    this.title = portletTitle;
+    this.properties = {};
+};
+jetspeed.om.Portlet.prototype =   /* defining prototypes like this is not cool if the object uses dojo.inherits (this would replace pt)  */
+{                                 /* dojo.lang.extend would allow this syntax instead of [<type>.prototype.<propname> = <propval>]*      */
+    name: null,
+    entityId: null,
+    title: null,
+    
+    windowFactory: null,
+
+    windowWidgetId: null,
+    
+    lastSavedWindowState: null,
+
+    JAVASCRIPT_ACTION_PREFIX: "javascript:doAction(",
+    JAVASCRIPT_RENDER_PREFIX: "javascript:doRender(",
+    JAVASCRIPT_ARG_QUOTE: "&" + "quot;",
+    PORTLET_REQUEST_ACTION: "action",
+    PORTLET_REQUEST_RENDER: "render",
+    
+
+    parseJSPseudoUrlActionRender: function( /* String */ javascriptPseudoUrl )
+    {
+        var op = null;
+        var justTheUrl = javascriptPseudoUrl;
+        var entityId = null;
+        var argsSuffix = null;
+        if ( javascriptPseudoUrl && javascriptPseudoUrl.length > this.JAVASCRIPT_ACTION_PREFIX.length && javascriptPseudoUrl.indexOf( this.JAVASCRIPT_ACTION_PREFIX ) == 0 )
+        {   // annotate away javascript invocation in form action
+            justTheUrl = null;
+            op = this.PORTLET_REQUEST_ACTION;
+            argsSuffix = javascriptPseudoUrl.substring( this.JAVASCRIPT_ACTION_PREFIX.length );
+        }
+        else if ( javascriptPseudoUrl && javascriptPseudoUrl.length > this.JAVASCRIPT_RENDER_PREFIX.length && javascriptPseudoUrl.indexOf( this.JAVASCRIPT_RENDER_PREFIX ) == 0 )
+        {
+            justTheUrl = null;
+            op = this.PORTLET_REQUEST_RENDER;
+            argsSuffix = javascriptPseudoUrl.substring( this.JAVASCRIPT_RENDER_PREFIX.length );
+        }
+        if ( argsSuffix )
+        {
+            var quoteDelim = "\"";
+            var argsEnd = argsSuffix.lastIndexOf( quoteDelim );
+            var altargsEnd = argsSuffix.lastIndexOf( this.JAVASCRIPT_ARG_QUOTE );
+            if ( altargsEnd > argsEnd )
+            {
+                quoteDelim = this.JAVASCRIPT_ARG_QUOTE;
+                argsEnd = altargsEnd;
+            }
+            if ( argsEnd >= 0 )
+            {
+                argsSuffix = dojo.string.trim( argsSuffix.substring( 0, argsEnd + quoteDelim.length ) );
+                var argsData = argsSuffix.split( quoteDelim );
+                if ( argsData && argsData.length >=4 )
+                {
+                    justTheUrl = argsData[1];
+                    entityId = argsData[3];
+                }
+            }
+        }
+        else
+        {
+            op = null;
+        }
+        
+        if ( ! jetspeed.url.validateUrlStartsWithHttp( justTheUrl ) )
+            justTheUrl = null;
+
+        return { url: justTheUrl, operation: op, portletEntityId: entityId };
+    },
+    preParseAnnotateHtml: function( /* String */ portletContent )
+    {   // deal with embedded script tags -  /=/=/=/=/=  taken from dojo ContentPane.js  splitAndFixPaths()  =/=/=/=/=/
+        var scripts = [];
+        var remoteScripts = [];
+        // cut out all script tags, stuff them into scripts array
+		var match = [];
+		while ( match )
+        {
+			match = portletContent.match(/<script([^>]*)>([\s\S]*?)<\/script>/i);
+			if(!match){ break; }
+			if(match[1]){
+				attr = match[1].match(/src=(['"]?)([^"']*)\1/i);
+				if ( attr )
+                {
+					// remove a dojo.js or dojo.js.uncompressed.js from remoteScripts
+					if ( (attr[2].search(/\/?\bdojo.js(?:\.uncompressed.js)?/i) != -1) && (dojo.hostenv.getBaseScriptUri() == attr[2].match(/[.\/]*/)[0]) )
+					{	
+						dojo.debug("Security note! inhibit:"+attr[2]+" from  beeing loaded again.");
+					}
+                    else
+                    {
+						remoteScripts.push( attr[2] );
+					}
+				}
+			}
+			if ( match[2] )
+            {
+                // get rid of html comment blanket
+                var scriptText = match[2].replace(/^\s*<!--/, "");
+                scriptText = scriptText.replace(/-->\s*$/, "");
+
+                scriptText = scriptText.replace(/function\s+([a-zA-Z_][a-zA-Z0-9_]*)\s*\(/g, "window.$1 = function(" );
+
+				// strip out all djConfig variables from script tags nodeValue
+				// this is ABSOLUTLY needed as reinitialize djConfig after dojo is initialised
+				// makes a dissaster greater than Titanic                
+				scripts.push(scriptText.replace(/(?:var )?\bdjConfig\b(?:[\s]*=[\s]*\{[^}]+\}|\.[\w]*[\s]*=[\s]*[^;\n]*)?;?|dojo.hostenv.writeIncludes\(\s*\);?/g, ""));
+			}
+			portletContent = portletContent.replace(/<script[^>]*>[\s\S]*?<\/script>/i, "");
+		}
+        //     /=/=/=/=/=  end of taken from dojo ContentPane.js  splitAndFixPaths()  =/=/=/=/=/
+        //dojo.debug( "preParse  scripts: " + ( scripts ? scripts.length : "0" ) + " remoteScripts: " + ( remoteScripts ? remoteScripts.length : "0" ) );
+        return { portletContent: portletContent, scripts: scripts, remoteScripts: remoteScripts };
+    },
+    postParseAnnotateHtml: function( /* DOMNode */ containerNode )
+    {   
+        if ( containerNode )
+        {
+            var cNode = containerNode;
+            var formList = cNode.getElementsByTagName( "form" );
+            var debugOn = jetspeed.debug.postParseAnnotateHtml;
+            if ( formList )
+            {
+                for ( var i = 0 ; i < formList.length ; i++ )
+                {
+                    var cForm = formList[i];                    
+                    var cFormAction = cForm.action;
+                    var cFormPortletEntityId = this.entityId;  // BOZO:can I assume that it is always my entity-id (ignoring the one in parsedPseudoUrl)
+
+                    var parsedPseudoUrl = this.parseJSPseudoUrlActionRender( cFormAction );
+                    
+                    var submitOperation = parsedPseudoUrl.operation;
+
+                    if ( submitOperation == this.PORTLET_REQUEST_ACTION || submitOperation == this.PORTLET_REQUEST_RENDER )
+                    {
+                        var replacementActionUrl = this._generateJSPseudoUrlActionRender( parsedPseudoUrl );
+                        if ( replacementActionUrl == cFormAction )
+                        {
+                            if ( debugOn )
+                                dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] adding onSubmit (portlet-" + submitOperation + ") and leaving form action as is: " + cFormAction );
+                        }
+                        else
+                        {
+                            cForm.action = replacementActionUrl;
+                            if ( debugOn )
+                                dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] adding onSubmit (portlet-" + submitOperation + ") and changing form action attribute from: " + cFormAction + " to: " +  replacementActionUrl );
+                        }
+                        this._addOnSubmitActionRender( cForm, cFormPortletEntityId, submitOperation );
+                    }
+                    else
+                    {
+                        if ( djConfig.isDebug )  // want to see this, for now
+                            dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] form action attribute doesn't match annotation criteria, leaving as is: " + cFormAction ) ;
+                    }
+                }
+            }
+            var aList = cNode.getElementsByTagName( "a" );
+            if ( aList )
+            {
+                for ( var i = 0 ; i < aList.length ; i++ )
+                {
+                    var aNode = aList[i];
+                    var aHref = aNode.href;
+                    
+                    var parsedPseudoUrl = this.parseJSPseudoUrlActionRender( aHref );
+                    var replacementHref = this._generateJSPseudoUrlActionRender( parsedPseudoUrl );
+
+                    if ( ! replacementHref )
+                    {
+                        if ( debugOn )
+                            dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] leaving href as is: " + aHref );
+                    }
+                    else if ( replacementHref == aHref )
+                    {
+                        if ( debugOn )
+                            dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] href parsed and regenerated identically: " + aHref );
+                    }
+                    else
+                    {
+                        if ( debugOn )
+                            dojo.debug( "postParseAnnotateHtml [" + this.entityId + "] href parsed, replacing: " + aHref + " with: " + replacementHref );
+                        aNode.href = replacementHref;
+                    }
+                }
+            }
+        }
+    },
+
+    _addOnSubmitActionRender: function( cForm, cFormPortletEntityId, submitOperation )
+    {   // NOTE: must be broken out of loop to caputure separate instances of closure variables
+        var self = this;
+        dojo.event.connect(cForm, "onsubmit", function(e) {
+            var abort = false;
+            if ( jetspeed.debug.executeOnSubmit || jetspeed.debug.confirmOnSubmit )
+            {
+                var submitMsg = "execute onsubmit : " + jetspeed.debugDumpForm( cForm );
+                if ( jetspeed.debug.executeOnSubmit )
+                    dojo.debug( submitMsg );
+                if ( jetspeed.debug.confirmOnSubmit )
+                {
+                    if ( e )
+                    {
+                        if ( ! confirm( "Hit OK to submit, or hit Cancel: " + submitMsg ) )
+                        {
+                            abort = true;
+                            e.preventDefault();
+                        }
+                    }
+                    else
+                    {
+                        alert( "Hit OK to submit (cannot be cancelled): " + submitMsg );
+                    }
+                }
+            }
+            if ( ! abort )
+            {
+                if ( submitOperation == self.PORTLET_REQUEST_ACTION )
+                {
+                    jetspeed.actionForm = cForm;
+                }
+                else
+                {
+                    jetspeed.renderForm = cForm;
+                }
+            }
+        });
+    },
+    _generateJSPseudoUrlActionRender: function( parsedPseudoUrl )
+    {   // NOTE: no form can be passed in one of these
+        if ( ! parsedPseudoUrl || ! parsedPseudoUrl.url || ! parsedPseudoUrl.portletEntityId ) return null;
+        var hrefJScolon = "javascript:";
+        var badnews = false;
+        if ( parsedPseudoUrl.operation == this.PORTLET_REQUEST_ACTION )
+            hrefJScolon += "doAction(\"";
+        else if ( parsedPseudoUrl.operation == this.PORTLET_REQUEST_RENDER )
+            hrefJScolon += "doRender(\"";
+        else badnews = true;
+        if ( badnews ) return null;
+        hrefJScolon += parsedPseudoUrl.url + "\",\"" + parsedPseudoUrl.portletEntityId + "\")"
+        return hrefJScolon;
+    },
+
+    getPortletWindow: function()
+    {
+        if ( this.windowWidgetId )
+            return dojo.widget.byId( this.windowWidgetId );
+        return null;
+    },
+    getCurrentWindowState: function( /* boolean */ volatileOnly )
+    {
+        var windowWidget = this.getPortletWindow();
+        if ( ! windowWidget ) return null;
+
+        var rawState = null;
+        if ( volatileOnly )
+            rawState = windowWidget.getCurrentVolatileWindowState();
+        else
+            rawState = windowWidget.getCurrentWindowState();
+
+        var currentState = {};
+        var pxre = (/px/i);
+        for ( var stateKey in rawState )
+        {
+            currentState[stateKey] = new String( rawState[stateKey] ).replace( pxre, "" );
+        }
+        return currentState;
+    },
+    getLastSavedWindowState: function()
+    {
+        if ( ! this.lastSavedWindowState )
+            this._initializeWindowState();
+        return this.lastSavedWindowState;
+    },
+    _getChangedWindowState: function( /* boolean */ volatileOnly )
+    {
+        var lastSaved = this.getLastSavedWindowState();
+        var hasChange = false;
+        var zIndexTrack = ! jetspeed.prefs.windowTiling;
+        var zIndexChange = false;
+
+        if ( lastSaved && dojo.lang.isEmpty( lastSaved ) )
+        {
+            lastSaved = null;
+            volatileOnly = false;  // so that current state we obtain is the full representation
+        }
+        var currentState = this.getCurrentWindowState( volatileOnly );
+        if ( ! lastSaved )
+        {
+            var result = { state: currentState };
+            if ( zIndexTrack )
+                result.zIndexChanged = true;   // BOZO: this could lead to an early submission for each portlet (may not be too cool?)
+            return result;
+        }
+        
+        for (var stateKey in currentState)
+        {
+            //if ( stateKey == "zIndex" )
+            //    dojo.debug( "portlet zIndex compare [" + this.entityId + "]  " + ( currentState[stateKey] ? currentState[stateKey] : "null" ) + " != " + ( lastSaved[stateKey] ? lastSaved[stateKey] : "null" ) );
+            if ( currentState[stateKey] != lastSaved[stateKey] )
+            {
+                hasChange = true;
+
+                //dojo.debug( "portlet [" + this.entityId + "] windowstate changed: " + stateKey + "  " + ( currentState[stateKey] ? currentState[stateKey] : "null" ) + " != " + ( lastSaved[stateKey] ? lastSaved[stateKey] : "null" ) ) ;
+
+                if ( ! zIndexTrack )
+                    break;
+                else if ( stateKey == "zIndex" )
+                    zIndexChange = true;
+            }
+        }
+        if ( hasChange )
+        {
+            var result = { state: currentState };
+            if ( zIndexTrack )
+                result.zIndexChanged = zIndexChange;
+            return result;
+        }
+        return null;
+    },
+    
+    _initializeWindowState: function( /* boolean */ reset )
+    {
+        var initialWindowState = {};
+        
+        var portletWidth = this.getProperty( "width" );
+        if ( ! reset && portletWidth != null && portletWidth > 0 )
+            initialWindowState.width = Math.floor( portletWidth );
+        else if ( reset )
+            initialWindowState.width = -1;
+    
+        var portletHeight = this.getProperty( "height" );
+        if ( ! reset && portletHeight != null && portletHeight > 0  )
+            initialWindowState.height = Math.floor( portletHeight );
+        else if ( reset )
+            initialWindowState.height = -1;
+        
+        var portletLeft = this.getProperty( "x" );
+        if ( ! reset && portletLeft != null && portletLeft >= 0 )
+            initialWindowState.left = Math.floor( ( (portletLeft > 0) ? portletLeft : 0 ) );
+        else if ( reset )
+            initialWindowState.left = -1;
+
+        var portletTop = this.getProperty( "y" );
+        if ( ! reset && portletTop != null && portletTop >= 0 )
+            initialWindowState.top = Math.floor( ( (portletTop > 0) ? portletTop : 0 ) );
+        else
+            initialWindowState.top = -1;
+
+        var portletZIndex = this.getProperty( "z" );
+        if ( ! reset && portletZIndex != null && portletZIndex >= 0 )
+            initialWindowState.zIndex = Math.floor( portletZIndex );
+        else if ( reset )
+            initialWindowState.zIndex = -1;
+
+        if ( jetspeed.debug.initializeWindowState )
+            dojo.debug( "initializeWindowState [" + this.entityId + "] z=" + initialWindowState.zIndex + " x=" + initialWindowState.left + " y=" + initialWindowState.top + " width=" + initialWindowState.width + " height=" + initialWindowState.height );
+
+        this.lastSavedWindowState = initialWindowState;
+
+        return initialWindowState;
+    },
+    createPortletWindow: function(portletWindowFactory, portletContentListener, doNotRetrieveContent)
+    {
+        if ( portletWindowFactory == null )
+            portletWindowFactory = new jetspeed.om.PortletWindowFactory() ;
+
+        this.windowFactory = portletWindowFactory ;
+        this.windowWidgetId = portletWindowFactory.create( this ) ;
+
+        if (! doNotRetrieveContent)
+            this.retrievePortletContent(portletContentListener) ;
+    },
+
+    getPortletUrl: function(renderUrl)
+    {
+        var queryString = "?entity=" + this.entityId + "&portlet=" + this.name + "&encoder=desktop";
+        if (renderUrl)
+            return renderUrl + queryString;
+        return jetspeed.url.basePortalUrl() + jetspeed.url.path.PORTLET + queryString;
+    },
+
+    submitChangedWindowState: function( /* boolean */ volatileOnly, /* boolean */ reset )
+    {
+        var changedStateResult = null;
+        if ( reset )
+            changedStateResult = { state: this._initializeWindowState( true ) };
+        else
+            changedStateResult = this._getChangedWindowState( volatileOnly );
+        if ( changedStateResult )
+        {
+            var changedState = changedStateResult.state;
+            var portlet = this;
+            var queryString = "?action=move&id=" + this.entityId;
+
+            if ( changedState.zIndex != null )
+                queryString += "&z=" + changedState.zIndex;
+            if ( changedState.width != null )
+                queryString += "&width=" + changedState.width;
+            if ( changedState.height != null )
+                queryString += "&height=" + changedState.height;
+            if ( changedState.left != null )
+                queryString += "&x=" + changedState.left;
+            if ( changedState.top != null )
+                queryString += "&y=" + changedState.top;
+
+            var psmlMoveActionUrl = jetspeed.page.getPsmlUrl() + queryString;
+            dojo.io.bind({
+                url: psmlMoveActionUrl,
+                load: function( type, data, evt )
+                {
+                    if ( jetspeed.debug.submitChangedWindowState )
+                        dojo.debug( "submitChangedWindowState [" + portlet.entityId + "] query: " + queryString + ( jetspeed.debug.submitChangedWindowState > 1 ? (" content: " + data) : "" ) );
+                    dojo.lang.mixin( portlet.lastSavedWindowState, changedState );
+                },
+                error: function( type, error )
+                {
+                    dojo.debug( "submitChangedWindowState error [" + portlet.entityId + "] url: " + psmlMoveActionUrl + " type: " + type + " error: " + error );
+                },
+                mimetype: "text/html"
+            });
+
+            if ( ! volatileOnly && ! reset )
+            {
+                if ( ! jetspeed.prefs.windowTiling && changedStateResult.zIndexChanged )  // current condition for whether 
+                {                                                                         // volatile (zIndex) changes are possible
+                    var portletArrayList = jetspeed.page.getPortletArrayList();
+                    var autoUpdatePortlets = dojo.collections.Set.difference( portletArrayList, [ this ] );
+                    if ( ! portletArrayList || ! autoUpdatePortlets || ((autoUpdatePortlets.count + 1) != portletArrayList.count) )
+                        dojo.raise( "Portlet.submitChangedWindowState invalid conditions for starting auto update" );
+                    else if ( autoUpdatePortlets && autoUpdatePortlets.count > 0 )
+                    {
+                        dojo.lang.forEach( autoUpdatePortlets.toArray(),
+                                function(portlet) { portlet.submitChangedWindowState( true ); } );
+                    }
+                }
+            }
+        }
+    },
+
+    retrievePortletContent: function( portletContentListener, renderOrActionUrl, actionForm )
+    {
+        if ( portletContentListener == null )
+            portletContentListener = new jetspeed.om.PortletContentListener() ;
+        var portlet = this ;
+        var requestUrl = portlet.getPortletUrl( renderOrActionUrl ) ;
+        dojo.io.bind({
+            formNode: actionForm,
+            url: requestUrl,
+            load: function( type, data, evt )
+            {
+                //dojo.debug( "loaded content for url: " + this.url );
+                //dojo.debug( "r e t r i e v e P o r t l e t C o n t e n t . l o a d" ) ;
+                //dojo.debug( "  type:" );
+                //dojo.debugShallow( type ) ;
+                //dojo.debug( "  evt:" );
+                //dojo.debugShallow( evt ) ;
+
+                if ( jetspeed.debugPortletDumpRawContent )
+                {
+                    if ( dojo.lang.inArray( jetspeed.debugPortletDumpRawContent, portlet.entityId ) || dojo.lang.inArray( jetspeed.debugPortletDumpRawContent, "*" ) )
+                        dojo.debug( "retrievePortletContent [" + portlet.entityId + "] content: " + data );
+                }
+                if ( portletContentListener && dojo.lang.isFunction( portletContentListener.notifySuccess ) )
+                {
+                    portletContentListener.notifySuccess( data, requestUrl, portlet ) ;
+                }
+            },
+            error: function( type, error )
+            {
+                //dojo.debug( "r e t r i e v e P o r t l e t C o n t e n t . e r r o r" ) ;
+                //dojo.debug( "  type:" );
+                //dojo.debugShallow( type ) ;
+                //dojo.debug( "  error:" );
+                //dojo.debugShallow( error ) ;
+                if ( portletContentListener && dojo.lang.isFunction( portletContentListener.notifyFailure ) )
+                {
+                    portletContentListener.notifyFailure( type, error, portlet );
+                }
+            },
+            mimetype: "text/html"
+        });     
+
+    },
+    setPortletContent: function(portletContent, renderUrl)
+    {
+        var windowWidget = this.getPortletWindow();
+        if ( windowWidget )
+        {
+            windowWidget.setPortletContent( portletContent, renderUrl );
+        }
+    },
+
+    putProperty: function(name, value)
+    {
+        this.properties[name] = value;
+    },
+    getProperty: function(name)
+    {
+        return this.properties[name];
+    },
+    removeProperty: function(name)
+    {
+        delete properties[name];
+    },
+    _destroy: function()
+    {
+        var windowWidget = this.getPortletWindow();
+        if ( windowWidget )
+        {
+            windowWidget.closeWindow();
+        }
+    }
+};
+
+
+// ... jetspeed.ui methods
+jetspeed.ui.createPortalTaskBar = function( taskbarParameters )
+{
+    if ( ! taskbarParameters )
+        taskbarParameters = {};
+    if ( ! taskbarParameters.widgetId )
+        taskbarParameters.widgetId = jetspeed.id.TASKBAR;
+    
+    var nWidget = dojo.widget.createWidget( 'PortalTaskBar', taskbarParameters );
+    nWidget.domNode.style.cssText = "background-color: #666; width: 100%; bottom: 5px; height: 100px";
+
+    var addToElmt = document.getElementById( jetspeed.id.DESKTOP );
+    addToElmt.appendChild( nWidget.domNode );
+};
+
+jetspeed.ui.createPortletWindowWidget = function(/* Portlet */ portletObj, portletParameters)
+{
+    if ( ! portletParameters )
+        portletParameters = {};
+    portletParameters.portlet = portletObj;
+    // NOTE: other parameters, such as widgetId could be set here (to override what PortletWindow does)
+    var nWidget = dojo.widget.createWidget( 'PortletWindow', portletParameters );
+    
+    var addToElmt = document.getElementById( jetspeed.id.DESKTOP );
+    addToElmt.appendChild( nWidget.domNode );
+
+    return nWidget.widgetId;
+};
+
+jetspeed.ui.getDefaultFloatingPaneTemplate = function()
+{
+    return new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), "jetspeed/javascript/desktop/widget/HtmlFloatingPane.html");   // BOZO: improve this junk
+};
+jetspeed.ui.getDefaultFloatingPaneTemplateCss = function()
+{
+    return new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), "jetspeed/javascript/desktop/widget/HtmlFloatingPane.css");   // BOZO: improve this junk
+};
+
+
+// ... fade-in convenience methods (work with set of nodes)
+jetspeed.ui.fadeIn = function(nodes, duration, displayStyleValue)
+{
+    jetspeed.ui.fade(nodes, duration, displayStyleValue, 0, 1);
+};
+jetspeed.ui.fadeOut = function(nodes, duration)
+{
+    jetspeed.ui.fade(nodes, duration, "none", 1, 0);
+};
+jetspeed.ui.fade = function(nodes, duration, displayStyleValue, startOpac, endOpac)
+{
+    if ( nodes.length > 0 )
+    {   // mimick dojo.fx.html.fade, but for all objects together
+        for ( var i = 0 ; i < nodes.length ; i++ )
+        {
+            dojo.fx.html._makeFadeable(nodes[i]);
+            if (displayStyleValue != "none")
+                nodes[i].style.display = displayStyleValue ;
+        }
+        var anim = new dojo.animation.Animation(
+		                new dojo.math.curves.Line([startOpac],[endOpac]),
+		                duration, 0);
+	    dojo.event.connect(anim, "onAnimate", function(e) {
+            for ( var mi = 0 ; mi < nodes.length ; mi++ )
+            {
+                dojo.style.setOpacity(nodes[mi], e.x);
+	        }});
+        
+        if (displayStyleValue == "none")
+        {
+            dojo.event.connect(anim, "onEnd", function(e) {
+			    for ( var mi = 0 ; mi < nodes.length ; mi++ )
+                    nodes[mi].style.display = displayStyleValue ;
+		    });
+        }
+        anim.play(true);
+    }
+};

Modified: portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.css
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.css?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.css Wed Apr  5 15:25:16 2006
@@ -100,6 +100,6 @@
 	/* styling css */
 	background-color: ThreeDFace;
     padding: 8px;   /* doesn't work!  can't figure out why */
-	font-family: Verdana, Helvetica, Garamond, sans-serif;
-	font-size: 12px;
+	/*font-family: Verdana, Helvetica, Garamond, sans-serif;
+	font-size: 12px;*/
 }

Modified: portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.html
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.html?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.html (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlFloatingPane.html Wed Apr  5 15:25:16 2006
@@ -12,9 +12,8 @@
 	  	<div class="dojoFloatingPaneTitleText" dojoAttachPoint="titleBarText">${this.title}</div>
 	</div>
 
-    <div dojoAttachPoint="containerNodeWrapper"
-		style="position: relative; height: 100%; width: 100%; overflow: hidden;">
-		<div dojoAttachPoint="containerNode" class="dojoFloatingPaneClient"></div>
+    <div dojoAttachPoint="containerNodeWrapper" style="position: relative; height: 100%; width: 100%; overflow: hidden;">
+        <div dojoAttachPoint="containerNode" class="dojoFloatingPaneClient"></div>
 	</div>
 
     <!--

Modified: portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlTaskBar.css
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlTaskBar.css?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlTaskBar.css (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/HtmlTaskBar.css Wed Apr  5 15:25:16 2006
@@ -1,19 +1,4 @@
 
-.classA {
-    background-image: url(../windowicons/blue-metalic-28.jpg);
-    background-repeat: no-repeat;
-	border: outset 2px;
-	display: inline;
-    /*position: fixed;*/
-    /*overflow: visible;*/
-	margin-right: 5px;
-	cursor: pointer;
-	height: 28px;
-	width: 200px;
-	font-size: 8pt;
-	white-space: nowrap;
-	text-align: center;
-}
 .dojoTaskBarItem {
     background-image: url(../windowicons/blue-metalic-28.jpg);
     background-repeat: no-repeat;
@@ -66,7 +51,7 @@
 }
 
 .dojoTaskBarItem a {
-	 color: black;
+	color: black;
 	text-decoration: none;
 }
 

Modified: portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortalTaskBar.js
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortalTaskBar.js?rev=391835&r1=391834&r2=391835&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortalTaskBar.js (original)
+++ portals/jetspeed-2/trunk/src/webapp/javascript/desktop/widget/PortalTaskBar.js Wed Apr  5 15:25:16 2006
@@ -2,6 +2,7 @@
 dojo.provide("jetspeed.ui.widget.PortalTaskBar");
 dojo.provide("jetspeed.ui.widget.PortalTaskBarItem");
 
+dojo.require("jetspeed.desktop.core");
 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.FloatingPane");
 
@@ -9,46 +10,96 @@
 {    
     this.widgetType = "PortalTaskBar";
 
-    dojo.widget.html.FloatingPane.call(this);
+    dojo.widget.html.FloatingPane.call( this );
 
     //dojo.widget.TaskBar.call(this);  // can't call with 'this' since the widgetType will kill it  2006-03-31
 
     this.titleBarDisplay = "none";
-}
+};
 
 dojo.inherits(jetspeed.ui.widget.PortalTaskBar, dojo.widget.html.FloatingPane);
 
 dojo.lang.extend(jetspeed.ui.widget.PortalTaskBar, {
-    addChild: function(child)
-                {
-                    var tbiProps = {windowId: child.widgetId, caption: child.title, iconSrc: child.iconSrc, widgetId: child.widgetId + "_tbi" } ;
-                    dojo.lang.mixin(tbiProps, this.taskbarProps) ;
-                    var tbi = dojo.widget.createWidget("PortalTaskBarItem", tbiProps);
-                    jetspeed.ui.widget.PortalTaskBar.superclass.addChild.call(this,tbi);
-                    //dojo.debug( "PortalTaskBarItem  widgetId=" + tbi.widgetId + " domNode.id=" + tbi.domNode.id + " child.domNode.id=" + child.widgetId ) ;
-                }
+
+    // dojo.widget.Widget create protocol
+    postMixInProperties: function( args, fragment, parentComp )
+    {
+        jetspeed.ui.widget.PortalTaskBar.superclass.postMixInProperties.call( this );
+
+        //if ( ! this.widgetId )
+        //    this.widgetId = jetspeed.id.TASKBAR;
+
+        var tbProps = {};
+        tbProps.templateCssPath = new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), "jetspeed/javascript/desktop/widget/HtmlTaskBar.css") ;
+        tbProps.templatePath = new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), "jetspeed/javascript/desktop/widget/HtmlTaskBarItemTemplate.html") ;
+        // BOZO: improve this junk ^^^ 
+
+        this.templatePath = jetspeed.ui.getDefaultFloatingPaneTemplate();
+        this.templateCssPath = jetspeed.ui.getDefaultFloatingPaneTemplateCss();   // BOZO: this currently is responsible for assuring that 
+                                                                                  //       the base FloatingPane styles get included;
+                                                                                  //       so, if the taskbar is not included and/or an override
+                                                                                  //       css file is needed, the base FloatingPane styles may be absent
+        this.taskbarProps = tbProps ;
+    },
+
+    // dojo.widget.Widget create protocol
+    postCreate: function( args, fragment, parentComp )
+    {
+        jetspeed.ui.widget.PortalTaskBar.superclass.postCreate.call( this );
+        
+        //this.domNode.id = "jetspeedTaskbar";  // BOZO: must set the id here - it gets defensively cleared by dojo
+        //this.domNode.style.cssText = "background-color: #666; width: 100%; bottom: 5px; height: 100px";
+        if ( ! this.domNode.id )
+            this.domNode.id = this.widgetId;
+        dojo.debug( "PortalTaskBar.postCreate  widgetId=" + this.widgetId + " domNode.id=" + this.domNode.id );
+
+        this.contextMenuCreate();
+    },
+
+    addChild: function( child )
+    {
+        var tbiProps = {windowId: child.widgetId, caption: child.title, iconSrc: child.iconSrc, widgetId: child.widgetId + "_tbi" } ;
+        dojo.lang.mixin(tbiProps, this.taskbarProps) ;
+        var tbi = dojo.widget.createWidget("PortalTaskBarItem", tbiProps);
+        jetspeed.ui.widget.PortalTaskBar.superclass.addChild.call(this,tbi);
+        //dojo.debug( "PortalTaskBarItem  widgetId=" + tbi.widgetId + " domNode.id=" + tbi.domNode.id + " child.domNode.id=" + child.widgetId ) ;
+    },
+    contextMenuCreate: function()
+    {
+        var taskBarContextMenu = dojo.widget.createWidget( "PopupMenu2", { id: "m1", targetNodeIds: [ this.domNode.id ], contextMenuForWindow: false }, null );
+        var resetLayoutMenuItem = dojo.widget.createWidget( "MenuItem2", { id: "menu-item1", caption: "Reset Window Layout"} );
+        
+        dojo.event.connect( resetLayoutMenuItem, "onClick", function(e) { jetspeed.page.resetWindowLayout(); } );
+        taskBarContextMenu.addChild( resetLayoutMenuItem );
+        document.body.appendChild( taskBarContextMenu.domNode );
+    }
 });
 
+
+
+
 jetspeed.ui.widget.PortalTaskBarItem = function(){
     
-	dojo.widget.html.TaskBarItem(this);
+	dojo.widget.html.TaskBarItem( this );
     
     this.widgetType = "PortalTaskBarItem";
-}
+};
 dojo.inherits(jetspeed.ui.widget.PortalTaskBarItem, dojo.widget.html.TaskBarItem);
 
 dojo.lang.extend(jetspeed.ui.widget.PortalTaskBarItem, {
-    fillInTemplate: function() {
+    fillInTemplate: function()
+    {
         var tdNode = this.domNode.getElementsByTagName( "td" )[0];
 		if ( this.iconSrc != '' ) {
 			var img = document.createElement("img");
 			img.src = this.iconSrc;
-			tdNode.appendChild(img);
+			tdNode.appendChild( img );
 		}
-		tdNode.appendChild(document.createTextNode(this.caption));
-		dojo.html.disableSelection(this.domNode);
+		tdNode.appendChild( document.createTextNode( this.caption ) );
+		dojo.html.disableSelection( this.domNode );
 	},
-    onClick: function() {
+    onClick: function()
+    {
         var showWindow = this.window;
         var showWindowNode = showWindow.domNode;
         var btnNode = this.domNode;



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


Mime
View raw message