Author: taylor
Date: Fri Mar 31 00:44:56 2006
New Revision: 390368

URL: http://svn.apache.org/viewcvs?rev=390368&view=rev
Log:
jsf support from Stevie Javascript Wonder

Modified:
    portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/jetspeed-ajax-api.js

Modified: 
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/jetspeed-ajax-api.js
URL: 
http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/jetspeed-ajax-api.js?rev=390368&r1=390367&r2=390368&view=diff
==============================================================================
--- 
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/jetspeed-ajax-api.js 
(original)
+++ 
portals/jetspeed-2/trunk/src/webapp/javascript/jetspeed/jetspeed-ajax-api.js 
Fri Mar 31 00:44:56 2006
@@ -24,6 +24,8 @@
     jetspeed = {} ;
 if ( ! jetspeed.om )
     jetspeed.om = {} ;
+if ( ! jetspeed.url )
+    jetspeed.url = {} ;
 if ( ! jetspeed.ui )
     jetspeed.ui = {} ;
 if ( ! jetspeed.ui.widget )
@@ -42,16 +44,6 @@
     }
 };
 
-jetspeed.basePortalUrl = function()
-{
-    return document.location.protocol + "//" + document.location.host ;
-}
-
-jetspeed.basePortalDesktopUrl = function()
-{
-    return jetspeed.basePortalUrl() + "/jetspeed" ;
-}
-
 jetspeed.page = null ;   // BOZO: is this it? one page at a time?
 jetspeed.initializeDesktop = function()
 {
@@ -64,10 +56,21 @@
 
 
 // ... jetspeed debug options
-//jetspeed.debugPortletEntityIdFilter = [ "dp-7" ]; // NOTE: uncomment causes 
only the listed portlets to be loaded; all others are ignored; for testing
+jetspeed.debug =
+{
+    retrievePsml: false,
+    setPortletContent: false,
+    doRenderDoAction: false,
+    postParseAnnotateHtml: false,
+    executeOnSubmit: false,
+    confirmOnSubmit: false,
+    createWindow: false
+}
+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.debugPortletWindowIcons = [ "text-x-generic.png", "text-html.png", 
"application-x-executable.png" ];
 jetspeed.debugPortletWindowThemes = [ "theme1", "theme2" ];
-//jetspeed.debugPortletDumpRawContent = [ "dp-7" ];
+//jetspeed.debugPortletDumpRawContent = [ "um-4", "dp-7", "jsfGuessNumber1", 
"jsfCalendar" ];    // "um-4", "dp-7", "jsfGuessNumber1", "jsfCalendar"
 
 jetspeed.testLoadPageCreateWidgetPortlets = function()
 {
@@ -94,49 +97,133 @@
                 portlet.createPortletWindow(portletWindowFactory,null,true);
             }
         }
-        for (var i = 0; i < createdPortlets.length; i++)
-            createdPortlets[i].retrievePortletContent();
+        jetspeed.doRenderAll( null, createdPortlets );
     }
 }
 
 
 // ... jetspeed.doRender
-jetspeed.doRender = function(url,portletEntityId,currentForm)
+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 )
     {
-        dojo.debug( "doRender [" + portletEntityId + "] url: " + url );
-        targetPortlet.retrievePortletContent(null, url, currentForm);
+        if ( jetspeed.debug.doRenderDoAction )
+            dojo.debug( "doRender [" + portletEntityId + "] url: " + url );
+        targetPortlet.retrievePortletContent( null, url, currentForm );
     }
 }
-jetspeed.doRenderAll = function(url)
+
+// ... jetspeed.doRenderAll
+jetspeed.doRenderAll = function( url, portletArray )
 {
-    var portlets = jetspeed.page.getPortlets();
-    var renderMsg = ""
-    var portletCount = 0;
-    for (var portletIndex in portlets)
+    var debugMsg = jetspeed.debug.doRenderDoAction;
+    if ( ! portletArray )
+        portletArray = jetspeed.page.getPortletArray();
+    var renderMsg = "";
+    for ( var i = 0; i < portletArray.length; i++ )
     {
-        var portlet = portlets[portletIndex];
-        if ( portletCount++ > 0 )
-            renderMsg = renderMsg + ", ";
-        renderMsg = renderMsg + portlet.entityId;
-        portlet.retrievePortletContent(null, url);
+        var portlet = portletArray[i];
+        if ( debugMsg )
+        {
+            if ( i > 0 ) renderMsg = renderMsg + ", ";
+            renderMsg = renderMsg + portlet.entityId;
+        }
+        portlet.retrievePortletContent( null, url );
     }
-    dojo.debug( "doRenderAll [" + renderMsg + "] url: " + url );
+    if ( debugMsg )
+        dojo.debug( "doRenderAll [" + renderMsg + "] url: " + url );
 }
 
 // ... jetspeed.doAction
-jetspeed.doAction = function(url,portletEntityId,currentForm)
+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 )
     {
-        dojo.debug( "doAction [" + portletEntityId + "] url: " + url + " form: 
" + currentForm);
-        targetPortlet.retrievePortletContent(new 
jetspeed.om.PortletActionContentListener(), url, currentForm);
+        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.doSubmitWindowState
+jetspeed.doSubmitWindowState = function()
+{
+    var portletArray = jetspeed.page.getPortletArray();
+    for ( var i = 0; i < portletArray.length; i++ )
+    {
+        var portlet = portletArray[i];
+        portlet.submitChangedWindowState();
     }
 }
 
+// ... 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()
 {
@@ -153,9 +240,8 @@
     }
 }
 
-
 // ... jetspeed.om.Page
-jetspeed.om.Page = function(pagePsmlPath, pageName, pageTitle)
+jetspeed.om.Page = function( pagePsmlPath, pageName, pageTitle )
 {
     this.psmlPath = pagePsmlPath ;
     if ( this.psmlPath == null )
@@ -173,10 +259,10 @@
 
     setPsmlPathFromDocumentUrl: function()
     {
-        var psmlPath = "/jetspeed/ajaxapi" ;
+        var psmlPath = jetspeed.url.path.AJAX_API ;
         var docPath = document.location.pathname ;
         
-        var contextAndServletPath = "/jetspeed/desktop" ;
+        var contextAndServletPath = jetspeed.url.path.DESKTOP ;
         var contextAndServletPathPos = docPath.indexOf( contextAndServletPath 
) ;
         if ( contextAndServletPathPos != -1 && docPath.length > ( 
contextAndServletPathPos + contextAndServletPath.length ) )
         {
@@ -184,17 +270,21 @@
         }
         this.psmlPath = psmlPath ;
     },
-
-    retrievePsml: function( pageContentListener )
+    
+    getPsmlUrl: function()
     {
-        var psmlUrl = null ;
         if ( this.psmlPath == null )
             this.setPsmlPathFromDocumentUrl() ;
 
-        var psmlUrl = jetspeed.basePortalUrl() + this.psmlPath ;
+        return jetspeed.url.basePortalUrl() + this.psmlPath ;
+    },
+    
+    retrievePsml: function( pageContentListener )
+    {
+        var psmlUrl = this.getPsmlUrl() ;
 
-        if ( djConfig.isDebug )
-            dojo.debug( "psml url: " + psmlUrl ) ;
+        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)
@@ -206,11 +296,15 @@
                 //dojo.debugShallow( type ) ;
                 //dojo.debug( "  evt:" );
                 //dojo.debugShallow( evt ) ;
-                page.getPortletsFromPSML(data);
+                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)
             {
@@ -228,7 +322,7 @@
         });            
     },
 
-    getPortletsFromPSML: function(psml)
+    getPortletsFromPSML: function( psml )
     {
         var lis = psml.getElementsByTagName("fragment");
         for( var x=0; x < lis.length; x++ )
@@ -443,23 +537,74 @@
                 }
             }
         }
+        else
+        {
+            op = null;
+        }
+        
+        if ( ! jetspeed.url.validateUrlStartsWithHttp( justTheUrl ) )
+            justTheUrl = null;
+
         return { url: justTheUrl, operation: op, portletEntityId: entityId };
     },
-
-    postParseAnnotateContent: function( /* DOMNode */ containerNode )
+    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(" );
+
+                // Clean up content: remove carraige returns
+                           var repl = new RegExp('[\n\r]', 'g');
+                           scriptText = scriptText.replace(repl, ';');  // 
otherwise ContentPane._executeScripts replaces linebreaks with " "
+
+                               // 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 self = this;
             var cNode = containerNode;
-            var formList = cNode.getElementsByTagName("form");
+            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 cFormActionType = null;
                     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 );
@@ -469,20 +614,104 @@
 
                     if ( submitOperation == this.PORTLET_REQUEST_ACTION || 
submitOperation == this.PORTLET_REQUEST_RENDER )
                     {
-                        //dojo.debug( "postParseAnnotateContent " + 
this.entityId + " adding onSubmit (portlet-" + submitOperation + ") and 
changing form action attribute from: " + cFormAction + " to: " +  newActionUrl 
);
-                        cForm.action = newActionUrl;
-                        dojo.event.connect(cForm, "onsubmit", function(e) {
-                            e.preventDefault();
-                            if ( submitOperation == 
self.PORTLET_REQUEST_ACTION )
-                                doAction( cForm.action, cFormPortletEntityId, 
cForm);
-                            else
-                                doRender( cForm.action, cFormPortletEntityId, 
cForm);
-                        });
+                        cForm.action = this._generateJSPseudoUrlActionRender( 
parsedPseudoUrl );
+                        if ( debugOn )
+                            dojo.debug( "postParseAnnotateHtml [" + 
this.entityId + "] adding onSubmit (portlet-" + submitOperation + ") and 
changing form action attribute from: " + cFormAction + " to: " +  newActionUrl 
);
+                        this._addOnSubmitActionRender( cForm, 
cFormPortletEntityId, submitOperation );
+                    }
+                    else
+                    {
+                        if ( debugOn )
+                            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;
+    },
+
     getCurrentWindowState: function()
     {
         if ( ! this.windowObj ) return null;
@@ -514,19 +743,55 @@
         var queryString = "?entity=" + this.entityId + "&portlet=" + this.name 
+ "&encoder=desktop";
         if (renderUrl)
             return renderUrl + queryString;
-        return jetspeed.basePortalUrl() + "/jetspeed/portlet" + queryString;
+        return jetspeed.url.basePortalUrl() + jetspeed.url.path.PORTLET + 
queryString;
+    },
+
+    submitChangedWindowState: function()
+    {
+        var changedState = this.getChangedWindowState();
+        if ( changedState )
+        {
+            var portlet = this;
+            var queryString = "?action=move&id=" + this.entityId;
+
+            var pxre = (/px/i);
+            if ( changedState.zIndex )
+                queryString += "&z=" + changedState.zIndex;
+            if ( changedState.width )  //width, height, left, top, zIndex
+                queryString += "&width=" + changedState.width.replace( pxre, 
"" );
+            if ( changedState.height )
+                queryString += "&height=" + changedState.height.replace( pxre, 
"" );
+            if ( changedState.left )
+                queryString += "&x=" + changedState.left.replace( pxre, "" );
+            if ( changedState.top )
+                queryString += "&y=" + changedState.top.replace( pxre, "" );
+
+            var psmlMoveActionUrl = jetspeed.page.getPsmlUrl() + queryString;
+            dojo.io.bind({
+                url: psmlMoveActionUrl,
+                load: function( type, data, evt )
+                {
+                    dojo.debug( "submitChangedWindowState [" + 
portlet.entityId + "] url: " + psmlMoveActionUrl + " content: " + data );
+                },
+                error: function( type, error )
+                {
+                    dojo.debug( "submitChangedWindowState error [" + 
portlet.entityId + "] url: " + psmlMoveActionUrl + " type: " + type + " error: 
" + error );
+                },
+                mimetype: "text/html"
+            });
+        }
     },
 
-    retrievePortletContent: 
function(portletContentListener,renderOrActionUrl,actionForm)
+    retrievePortletContent: function( portletContentListener, 
renderOrActionUrl, actionForm )
     {
         if ( portletContentListener == null )
             portletContentListener = new jetspeed.om.PortletContentListener() ;
         var portlet = this ;
-        var requestUrl = portlet.getPortletUrl(renderOrActionUrl);
+        var requestUrl = portlet.getPortletUrl( renderOrActionUrl ) ;
         dojo.io.bind({
             formNode: actionForm,
             url: requestUrl,
-            load: function(type, data, evt)
+            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" ) ;
@@ -537,15 +802,15 @@
 
                 if ( jetspeed.debugPortletDumpRawContent )
                 {
-                    if (dojo.lang.inArray(jetspeed.debugPortletDumpRawContent, 
portlet.entityId))
-                        dojo.debug( portlet.entityId + " content: " + data);  
+                    if ( dojo.lang.inArray( 
jetspeed.debugPortletDumpRawContent, portlet.entityId ) )
+                        dojo.debug( "retrievePortletContent [" + 
portlet.entityId + "] content: " + data );
                 }
                 if ( portletContentListener && dojo.lang.isFunction( 
portletContentListener.notifySuccess ) )
                 {
-                    portletContentListener.notifySuccess(data, requestUrl, 
portlet);
+                    portletContentListener.notifySuccess( data, requestUrl, 
portlet ) ;
                 }
             },
-            error: function(type, error)
+            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:" );
@@ -554,7 +819,7 @@
                 //dojo.debugShallow( error ) ;
                 if ( portletContentListener && dojo.lang.isFunction( 
portletContentListener.notifyFailure ) )
                 {
-                    portletContentListener.notifyFailure(type, error, portlet);
+                    portletContentListener.notifyFailure( type, error, portlet 
);
                 }
             },
             mimetype: "text/html"
@@ -587,8 +852,8 @@
 jetspeed.ui.PortalTaskBar = function()
 {
     var tbProps = {};
-    tbProps.templateCssPath = new 
dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/widget/HtmlTaskBar.css") ;
-    tbProps.templatePath = new dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/widget/HtmlTaskBarItemTemplate.html") ;
+    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();
@@ -642,7 +907,7 @@
     if (windowtheme)
     {
         this.portletWindowTheme = windowtheme ;
-        this.templateCssPath = new 
dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowthemes/" + windowtheme + "/" + windowtheme + 
".css");   // BOZO: improve this junk
+        this.templateCssPath = new 
dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowthemes/" + windowtheme + "/" + windowtheme + 
".css");   // BOZO: improve this junk
     }
     this.templatePath = jetspeed.ui.getDefaultFloatingPaneTemplate();
 
@@ -655,9 +920,9 @@
         }
     }
     if ( windowicon )
-        this.iconSrc =  new dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowicons/" + windowicon ) ;
+        this.iconSrc =  new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowicons/" + windowicon ) ;
     else
-        this.iconSrc =  new dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowicons/document.gif" ) ;
+        this.iconSrc =  new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/windowicons/document.gif" ) ;
 
     //dojo.debug("PortletWidgetWindow  widgetId=" + this.widgetId + "  
windowtheme=" + windowtheme + "  templateCssPath=" + this.templateCssPath);
 
@@ -768,6 +1033,8 @@
     if ( dojo.render.html.mozilla )  // dojo.render.html.ie
     {
         this.hasShadow = "true";
+        //        dojo.debug( "nWidget.domNode.cssText: " + 
+        //nWidget.domNode.style = "overflow: visible;";   // so that drop 
shadow is displayed
     }
 
     var nWidget = dojo.widget.createWidget('FloatingPane', this);
@@ -775,12 +1042,40 @@
     nWidget.domNode.id = this.widgetId;  // BOZO: must set the id here - it 
gets defensively cleared by dojo
     if ( this.portletWindowTheme )
         nWidget.domNode.className = this.portletWindowTheme + " " + 
nWidget.domNode.className ;
-    nWidget.domNode.style.width = "280px";
-    nWidget.domNode.style.height = "200px";
-    // NOTE: the width/height specified get updated when the size is changed 
by the user
-    nWidget.domNode.style.left = (((this.getNextIndex() -2) * 30 ) + 200) + 
"px";
-    nWidget.domNode.style.top = (((this.getNextIndex() -2) * 30 ) + 170) + 
"px";
+
+    var portletWidth = this.portlet.getProperty( "width" );
+    if ( portletWidth && portletWidth > 0 ) portletWidth = 
Math.floor(portletWidth) + "px";
+    else portletWidth = "280px";
+    nWidget.domNode.style.width = portletWidth;
+
+    var portletHeight = this.portlet.getProperty( "height" );
+    if ( portletHeight && portletHeight > 0 ) portletHeight = 
Math.floor(portletHeight) + "px";
+    else portletHeight = "200px";
+    nWidget.domNode.style.height = portletHeight;
+    
+    var portletLeft = this.portlet.getProperty( "x" );
+    if ( portletLeft && portletLeft > 0 ) portletLeft = 
Math.floor(portletLeft) + "px";
+    else portletLeft = (((this.getNextIndex() -2) * 30 ) + 200) + "px";
+    nWidget.domNode.style.left = portletLeft;
+
+    var portletTop = this.portlet.getProperty( "y" );
+    if ( portletTop && portletTop > 0 ) portletTop = Math.floor(portletTop) + 
"px";
+    else portletTop = (((this.getNextIndex() -2) * 30 ) + 170) + "px";
+    nWidget.domNode.style.top =  portletTop;
+
+    if ( jetspeed.debug.createWindow )
+        dojo.debug( "createWindow [" + this.portlet.entityId + "]" + " width=" 
+ portletWidth + " height=" + portletHeight + " left=" + portletLeft + " top=" 
+ portletTop ) ;
+
+    dojo.event.connect(nWidget.domNode, "onDragStart", function(e) {
+                        //e.preventDefault();
+                        dojo.debug( "ondragstart" ) ;
+                        });
     
+    dojo.event.connect(nWidget.domNode, "onDragEnd", function(e) {
+                        //e.preventDefault();
+                        dojo.debug( "ondragend" ) ;
+                        });
+
     this.titleDim(nWidget, true);
 
     var addToElmt = document.getElementById("jetspeedDesktop");
@@ -796,28 +1091,42 @@
     var cWinState = {};
     cWinState.zIndex = this.windowWidget.domNode.style.zIndex;
     cWinState.width = this.windowWidget.domNode.style.width;
-    cWinState.height = this.windowWidget.domNode.style.heigth;
+    cWinState.height = this.windowWidget.domNode.style.height;
     cWinState.left = this.windowWidget.domNode.style.left;
     cWinState.top = this.windowWidget.domNode.style.top;
     return cWinState;
 }
-jetspeed.ui.PortletWidgetWindow.prototype.setPortletContent = 
function(html,url)
+jetspeed.ui.PortletWidgetWindow.prototype.setPortletContent = function( html, 
url )
 {
     if (this.windowWidget)
     {
-        this.windowWidget.setContent( { titles: [], scripts: [], linkStyles: 
[], styles: [], remoteScripts: [], xml: html.toString(), url: url } );
-        this.portlet.postParseAnnotateContent( this.windowWidget.containerNode 
);
+        var preParsePortletResult = this.portlet.preParseAnnotateHtml( 
html.toString() );
+        //this.windowWidget.executeScripts = true;
+        var setContentObj = { titles: [], scripts: 
preParsePortletResult.scripts, linkStyles: [], styles: [], remoteScripts: 
preParsePortletResult.remoteScripts, xml: preParsePortletResult.portletContent, 
url: url };
+
+        this.windowWidget.setContent( setContentObj );
+
+        if ( jetspeed.debug.setPortletContent && setContentObj.scripts && 
setContentObj.scripts.length > 0 )
+        {
+            for ( var i = 0 ; i < setContentObj.scripts.length; i++ )
+            {
+                dojo.debug( "setPortletContent [" + this.portlet.entityId + "] 
script: " + setContentObj.scripts[i] );
+            }
+        }
+        this.windowWidget._executeScripts( setContentObj );
+
+        this.portlet.postParseAnnotateHtml( this.windowWidget.containerNode );
     }
 }
 
 // ... jetspeed.ui methods
 jetspeed.ui.getDefaultFloatingPaneTemplate = function()
 {
-    return new dojo.uri.Uri(jetspeed.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/widget/HtmlFloatingPane.html");   // BOZO: improve 
this junk
+    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.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/widget/HtmlFloatingPane.css");   // BOZO: improve 
this junk
+    return new dojo.uri.Uri(jetspeed.url.basePortalDesktopUrl(), 
"jetspeed/javascript/desktop/widget/HtmlFloatingPane.css");   // BOZO: improve 
this junk
 }
 
 
@@ -859,3 +1168,49 @@
         anim.play(true);
     }
 }
+
+
+
+
+/*
+
+jetspeed.ui.PortletWindowDragMoveSource = function(node, type){
+       dojo.dnd.HtmlDragSource.call(this, node, type);
+}
+
+dojo.inherits(dojo.dnd.HtmlDragMoveSource, dojo.dnd.HtmlDragSource);
+
+dojo.lang.extend(dojo.dnd.HtmlDragMoveSource, {
+       onDragStart: function(){
+               var dragObj =  new dojo.dnd.HtmlDragMoveObject(this.dragObject, 
this.type);
+
+               if (this.constrainToContainer) {
+                       dragObj.constrainTo(this.constrainingContainer);
+               }
+               return dragObj;
+       }
+});
+
+dojo.dnd.HtmlDragMoveObject = function(node, type){
+       dojo.dnd.HtmlDragObject.call(this, node, type);
+}
+
+dojo.inherits(dojo.dnd.HtmlDragMoveObject, dojo.dnd.HtmlDragObject);
+
+dojo.lang.extend(dojo.dnd.HtmlDragMoveObject, {
+       onDragEnd: function(e){
+               // shortly the browser will fire an onClick() event,
+               // but since this was really a drag, just squelch it
+               dojo.event.connect(this.domNode, "onclick", this, 
"squelchOnClick");
+       },
+       
+       onDragStart: function(e){
+
+               dojo.html.clearSelection();
+
+
+
+...
+
+
+*/



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to