Author: jkuhnert
Date: Fri Apr 21 10:08:00 2006
New Revision: 395949

URL: http://svn.apache.org/viewcvs?rev=395949&view=rev
Log:
Started adding dojo hooks into script response rendering

Modified:
    
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
    
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IScriptProcessor.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/PageRenderSupport.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.jwc
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
    
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
    
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
    
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
    
tapestry/tapestry4/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
    
tapestry/tapestry4/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java

Modified: 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
 (original)
+++ 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/FormLinkRenderer.java
 Fri Apr 21 10:08:00 2006
@@ -91,7 +91,7 @@
                         null, null);
 
             String function = generateFormFunction(formName, l, anchor);
-            body.addBodyScript(function);
+            body.addBodyScript(linkComponent, function);
 
             if (hasBody)
                 writer.begin(getElement());

Modified: 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
 (original)
+++ 
tapestry/tapestry4/trunk/contrib/src/java/org/apache/tapestry/contrib/link/PopupLinkRenderer.java
 Fri Apr 21 10:08:00 2006
@@ -84,7 +84,7 @@
         builder.addln("newWindow.focus();");
         builder.end();
 
-        support.addBodyScript(builder.toString());
+        support.addBodyScript(component, builder.toString());
 
         return "javascript:" + functionName + "();";
     }

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IScriptProcessor.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IScriptProcessor.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IScriptProcessor.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/IScriptProcessor.java
 Fri Apr 21 10:08:00 2006
@@ -31,28 +31,74 @@
      * bodies; all are concatinated together to form a single block. The
      * [EMAIL PROTECTED] org.apache.tapestry.html.Body} component will 
write the body script contents
      * just inside the <code>&lt;body&gt;</code> tag.
+     * 
+     * @deprecated To be removed sometime after 4.1.
+     * @see [EMAIL PROTECTED] #addBodyScript(IComponent, String)}
      */
 
-    public void addBodyScript(String script);
+    void addBodyScript(String script);
 
     /**
+     * Adds scripting code to the main body. During the render, multiple 
scripts may render multiple
+     * bodies; all are concatinated together to form a single block. The
+     * [EMAIL PROTECTED] org.apache.tapestry.html.Body}&nbsp;component will 
write the body script contents
+     * just inside the <code>&lt;body&gt;</code> tag.
+     * 
+     * @param target
+     *          The component this script is being added for.
+     * @param script
+     *          The script to add to the body response.
+     */
+    void addBodyScript(IComponent target, String script);
+    
+    /**
      * Adds initialization script. Initialization script is executed once, 
when the containing page
      * loads. Initialization script content is written only after all HTML 
content that could be
-     * referenced from the script (in effect, just before the 
<code>&lt/body&gt; tag).
+     * referenced from the script (in effect, just before the 
<code>&lt/body&gt;</code> tag).
+     * 
+     * @deprecated To be removed sometime after 4.1.
+     * @see [EMAIL PROTECTED] #addInitializationScript(IComponent, String)}
      */
-    public void addInitializationScript(String script);
+    void addInitializationScript(String script);
 
     /**
+     * Adds initialization script. Initialization script is executed once, 
when the containing page
+     * loads. Initialization script content is written only after all HTML 
content that could be
+     * referenced from the script (in effect, just before the 
<code>&lt/body&gt;</code> tag).
+     * 
+     * @param target
+     *          The component the script is being added for.
+     * @param script
+     *          The script to add.
+     */
+    void addInitializationScript(IComponent target, String script);
+    
+    /**
      * Adds an external script. The processor is expected to ensure that 
external scripts are only
      * loaded a single time per page.
+     * 
+     * @deprecated To be removed sometime after 4.1
+     * @see [EMAIL PROTECTED] #addExternalScript(IComponent, Resource)}
      */
 
-    public void addExternalScript(Resource resource);
+    void addExternalScript(Resource resource);
 
     /**
+     * Adds an external script. The processor is expected to ensure that 
external scripts are only
+     * loaded a single time per page. The target will be checked to filter the 
scripts
+     * added for those types of responses that require them.
+     * 
+     * @param target
+     *          The component the script is being added for.
+     * @param resource
+     *          The external script to add.
+     */
+    void addExternalScript(IComponent target, Resource resource);
+    
+    /**
      * Ensures that the given string is unique. The string is either returned 
unchanged, or a suffix
      * is appended to ensure uniqueness.
      */
 
-    public String getUniqueString(String baseValue);
-}
\ No newline at end of file
+    String getUniqueString(String baseValue);
+}

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/PageRenderSupport.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/PageRenderSupport.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/PageRenderSupport.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/PageRenderSupport.java
 Fri Apr 21 10:08:00 2006
@@ -32,5 +32,5 @@
      * <code>tapestry_preload[7].src</code>.
      */
 
-    public String getPreloadedImageReference(String url);
-}
\ No newline at end of file
+    String getPreloadedImageReference(String url);
+}

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.java 
(original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.java 
Fri Apr 21 10:08:00 2006
@@ -16,6 +16,7 @@
 
 import org.apache.hivemind.Resource;
 import org.apache.tapestry.AbstractComponent;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.PageRenderSupport;
@@ -59,10 +60,18 @@
 
     public void addInitializationScript(String script)
     {
-        _pageRenderSupport.addInitializationScript(script);
+        addInitializationScript(null, script);
     }
 
     /**
+     * [EMAIL PROTECTED]
+     */
+    public void addInitializationScript(IComponent target, String script)
+    {
+        _pageRenderSupport.addInitializationScript(target, script);
+    }
+    
+    /**
      * Adds additional scripting code to the page. This code will be added to 
a large block of
      * scripting code at the top of the page (i.e., the before the 
&lt;body&gt; tag).
      * <p>
@@ -81,10 +90,19 @@
 
     public void addBodyScript(String script)
     {
-        _pageRenderSupport.addBodyScript(script);
+        addBodyScript(null, script);
     }
 
     /**
+     * 
+     * [EMAIL PROTECTED]
+     */
+    public void addBodyScript(IComponent target, String script)
+    {
+        _pageRenderSupport.addBodyScript(target, script);
+    }
+    
+    /**
      * Used to include a script from an outside URL (the scriptLocation is a 
URL, probably obtained
      * from an asset. This adds an &lt;script src="..."&gt; tag before the 
main &lt;script&gt; tag.
      * The Body component ensures that each URL is included only once.
@@ -94,10 +112,19 @@
 
     public void addExternalScript(Resource scriptLocation)
     {
-        _pageRenderSupport.addExternalScript(scriptLocation);
+        addExternalScript(null, scriptLocation);
     }
 
     /**
+     * 
+     * [EMAIL PROTECTED]
+     */
+    public void addExternalScript(IComponent target, Resource scriptLocation)
+    {
+        _pageRenderSupport.addExternalScript(target, scriptLocation);
+    }
+    
+    /**
      * Retrieves the <code>Body</code> that was stored into the request cycle. 
This allows
      * components wrapped by the <code>Body</code> to locate it and access the 
services it
      * provides.
@@ -117,7 +144,7 @@
         super.prepareForRender(cycle);
 
         _pageRenderSupport = new PageRenderSupportImpl(getAssetFactory(), 
getResponse()
-                .getNamespace(), getLocation());
+                .getNamespace(), getLocation(), cycle.getResponseBuilder());
     }
 
     protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.jwc
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.jwc?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.jwc 
(original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Body.jwc 
Fri Apr 21 10:08:00 2006
@@ -34,5 +34,4 @@
  
   <inject property="assetFactory" object="infrastructure:assetFactory"/>
   <inject property="response" object="infrastructure:response"/>
-      
 </component-specification>

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/AbstractLinkComponent.java
 Fri Apr 21 10:08:00 2006
@@ -159,7 +159,7 @@
 
             buffer.append("}\n\n");
 
-            pageRenderSupport.addBodyScript(buffer.toString());
+            pageRenderSupport.addBodyScript(this, buffer.toString());
         }
 
         writer.attribute(attributeName, "javascript:" + wrapperFunctionName + 
"();");

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/ILinkRenderer.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/link/ILinkRenderer.java
 Fri Apr 21 10:08:00 2006
@@ -48,6 +48,6 @@
      * 
      **/
 
-    public void renderLink(IMarkupWriter writer, IRequestCycle cycle, 
ILinkComponent linkComponent);
+    void renderLink(IMarkupWriter writer, IRequestCycle cycle, ILinkComponent 
linkComponent);
 
 }

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
 Fri Apr 21 10:08:00 2006
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.apache.hivemind.Resource;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.IScriptProcessor;
 import org.apache.tapestry.coerce.ValueConverter;
@@ -92,17 +93,32 @@
 
     public void addBodyScript(String script)
     {
-        _processor.addBodyScript(script);
+        addBodyScript(null, script);
     }
-
+    
+    public void addBodyScript(IComponent target, String script)
+    {
+        _processor.addBodyScript(target, script);
+    }
+    
     public void addExternalScript(Resource resource)
     {
-        _processor.addExternalScript(resource);
+        addExternalScript(null, resource);
+    }
+    
+    public void addExternalScript(IComponent target, Resource resource)
+    {
+        _processor.addExternalScript(target, resource);
     }
 
     public void addInitializationScript(String script)
     {
-        _processor.addInitializationScript(script);
+        addInitializationScript(null, script);
+    }
+
+    public void addInitializationScript(IComponent target, String script)
+    {
+        _processor.addInitializationScript(target, script);
     }
 
     public String getUniqueString(String baseValue)

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/ResponseBuilder.java
 Fri Apr 21 10:08:00 2006
@@ -15,6 +15,7 @@
 
 import java.io.IOException;
 
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRender;
 import org.apache.tapestry.IRequestCycle;
@@ -25,6 +26,7 @@
  * with components for an ajax request library version and type.
  *
  * @author jkuhnert
+ * @since 4.1
  */
 public interface ResponseBuilder {
 
@@ -63,4 +65,35 @@
      */
     
     IMarkupWriter getWriter();
+    
+    /**
+     * Determines if the specified component should have its javascript 
+     * body added to the response.
+     * 
+     * @param target
+     *          The component to allow/disallow body script content from.
+     * @return True if the component script should be allowed.
+     */
+    boolean isBodyScriptAllowed(IComponent target);
+    
+    /**
+     * Determines if the specified component should have its javascript 
+     * initialization added to the response.
+     * 
+     * @param target
+     *          The component to allow/disallow initialization script content 
from.
+     * @return True if the component script should be allowed.
+     */
+    boolean isInitializationScriptAllowed(IComponent target);
+    
+    /**
+     * Determines if the specified component should have its javascript 
+     * external resource scripts added to the response.
+     * 
+     * @param target
+     *          The component to check for inclusion/exclusion.
+     * @return True if external scripts from this component should be added to
+     *          the response.
+     */
+    boolean isExternalScriptAllowed(IComponent target);
 }

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/DefaultResponseBuilder.java
 Fri Apr 21 10:08:00 2006
@@ -16,6 +16,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IPage;
 import org.apache.tapestry.IRender;
@@ -139,5 +140,29 @@
             return NullWriter.getSharedInstance();
         
         return _writer;
+    }
+
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isBodyScriptAllowed(IComponent target)
+    {
+        return true;
+    }
+
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isExternalScriptAllowed(IComponent target)
+    {
+        return true;
+    }
+
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isInitializationScriptAllowed(IComponent target)
+    {
+        return true;
     }
 }

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/services/impl/JSONResponseBuilder.java
 Fri Apr 21 10:08:00 2006
@@ -153,12 +153,36 @@
         
         render.render(_nullWriter, cycle);
     }
-
+    
     /**
      * [EMAIL PROTECTED]
      */
     public IMarkupWriter getWriter()
     {
         return _nullWriter;
+    }
+    
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isBodyScriptAllowed(IComponent target)
+    {
+        return false;
+    }
+
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isExternalScriptAllowed(IComponent target)
+    {
+        return false;
+    }
+
+    /** 
+     * [EMAIL PROTECTED]
+     */
+    public boolean isInitializationScriptAllowed(IComponent target)
+    {
+        return false;
     }
 }

Modified: 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
 Fri Apr 21 10:08:00 2006
@@ -24,11 +24,13 @@
 import org.apache.hivemind.Resource;
 import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.IAsset;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.PageRenderSupport;
 import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.asset.AssetFactory;
+import org.apache.tapestry.services.ResponseBuilder;
 
 /**
  * Implementation of [EMAIL PROTECTED] org.apache.tapestry.PageRenderSupport}. 
The
@@ -43,6 +45,8 @@
 
     private final Location _location;
 
+    private final ResponseBuilder _builder;
+    
     // Lines that belong inside the onLoad event handler for the <body> tag.
     private StringBuffer _initializationScript;
 
@@ -71,18 +75,20 @@
     private final IdAllocator _idAllocator;
 
     private final String _preloadName;
-
-    public PageRenderSupportImpl(AssetFactory assetFactory, String namespace, 
Location location)
+    
+    public PageRenderSupportImpl(AssetFactory assetFactory, String namespace, 
+            Location location, ResponseBuilder builder)
     {
         Defense.notNull(assetFactory, "assetService");
-
+        
         _assetFactory = assetFactory;
         _location = location;
         _idAllocator = new IdAllocator(namespace);
-
+        _builder = builder;
+        
         _preloadName = (namespace.equals("") ? "tapestry" : namespace) + 
"_preload";
     }
-
+    
     /**
      * Returns the location, which may be used in error messages. In practical 
terms, this is the
      * location of the [EMAIL PROTECTED] 
org.apache.tapestry.html.Body}&nbsp;component.
@@ -123,26 +129,48 @@
 
         return reference;
     }
-
+    
     public void addBodyScript(String script)
     {
+        addBodyScript(null, script);
+    }
+
+    public void addBodyScript(IComponent target, String script)
+    {
+        if (!_builder.isBodyScriptAllowed(target)) return;
+        
         if (_bodyScript == null)
             _bodyScript = new StringBuffer(script.length());
 
         _bodyScript.append(script);
     }
-
+    
     public void addInitializationScript(String script)
     {
+        addInitializationScript(null, script);
+    }
+
+    public void addInitializationScript(IComponent target, String script)
+    {
+        if (!_builder.isInitializationScriptAllowed(target)) return;
+        
         if (_initializationScript == null)
             _initializationScript = new StringBuffer(script.length() + 1);
 
         _initializationScript.append(script);
         _initializationScript.append('\n');
     }
-
+    
     public void addExternalScript(Resource scriptLocation)
     {
+        addExternalScript(null, scriptLocation);
+
+    }
+    
+    public void addExternalScript(IComponent target, Resource scriptLocation)
+    {
+        if (!_builder.isExternalScriptAllowed(target)) return;
+        
         if (_externalScripts == null)
             _externalScripts = new ArrayList();
 
@@ -239,9 +267,13 @@
         writer.attribute("language", "JavaScript");
         writer.attribute("type", "text/javascript");
         writer.printRaw("<!--\n");
-
+        
+        writer.printRaw("dojo.event.connect(window, 'onload', function(e) 
{\n");
+        
         writer.printRaw(_initializationScript.toString());
-
+        
+        writer.printRaw("});");
+        
         writer.printRaw("\n// -->");
         writer.end();
     }

Modified: 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/junit/script/MockScriptProcessor.java
 Fri Apr 21 10:08:00 2006
@@ -18,6 +18,7 @@
 import java.util.List;
 
 import org.apache.hivemind.Resource;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IScriptProcessor;
 import org.apache.tapestry.util.IdAllocator;
 
@@ -39,12 +40,17 @@
 
     public void addBodyScript(String script)
     {
+        addBodyScript(null, script);
+    }
+
+    public void addBodyScript(IComponent target, String script)
+    {
         if (_body == null)
             _body = new StringBuffer();
 
         _body.append(script);
     }
-
+    
     public String getBody()
     {
         if (_body == null)
@@ -55,12 +61,17 @@
 
     public void addInitializationScript(String script)
     {
+        addInitializationScript(null, script);
+    }
+
+    public void addInitializationScript(IComponent target, String script)
+    {
         if (_initialization == null)
             _initialization = new StringBuffer();
 
         _initialization.append(script);
     }
-
+    
     public String getInitialization()
     {
         if (_initialization == null)
@@ -70,6 +81,11 @@
     }
 
     public void addExternalScript(Resource scriptResource)
+    {
+        addExternalScript(null, scriptResource);
+    }
+    
+    public void addExternalScript(IComponent target, Resource scriptResource)
     {
         if (_externalScripts == null)
             _externalScripts = new ArrayList();

Modified: 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
 (original)
+++ 
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/util/TestPageRenderSupport.java
 Fri Apr 21 10:08:00 2006
@@ -26,6 +26,8 @@
 import org.apache.tapestry.asset.AssetFactory;
 import org.apache.tapestry.markup.AsciiMarkupFilter;
 import org.apache.tapestry.markup.MarkupWriterImpl;
+import org.apache.tapestry.services.ResponseBuilder;
+import org.apache.tapestry.services.impl.DefaultResponseBuilder;
 import org.easymock.MockControl;
 
 /**
@@ -71,6 +73,11 @@
         return new MarkupWriterImpl("text/html", new PrintWriter(_writer), new 
AsciiMarkupFilter());
     }
 
+    private ResponseBuilder newBuilder(IMarkupWriter writer)
+    {
+        return new DefaultResponseBuilder(writer);
+    }
+    
     private void assertOutput(String[] expectedLines)
     {
         StringBuffer buffer = new StringBuffer();
@@ -105,7 +112,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, 
newBuilder(null));
 
         assertSame(l, prs.getLocation());
 
@@ -121,7 +128,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, 
newBuilder(writer));
 
         assertEquals("tapestry_preload[0].src", 
prs.getPreloadedImageReference("/foo/bar.gif"));
         assertEquals("tapestry_preload[1].src", 
prs.getPreloadedImageReference("/zip/zap.png"));
@@ -152,7 +159,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, 
"NAMESPACE", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, 
"NAMESPACE", l, newBuilder(writer));
 
         assertEquals("NAMESPACE_preload[0].src", 
prs.getPreloadedImageReference("/foo/bar.gif"));
 
@@ -176,7 +183,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, 
newBuilder(writer));
 
         prs.addBodyScript("myBodyScript();");
 
@@ -196,7 +203,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, 
newBuilder(null));
 
         assertEquals("foo", prs.getUniqueString("foo"));
         assertEquals("foo_0", prs.getUniqueString("foo"));
@@ -213,7 +220,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, 
"NAMESPACE", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, 
"NAMESPACE", l, newBuilder(null));
 
         assertEquals("fooNAMESPACE", prs.getUniqueString("foo"));
         assertEquals("fooNAMESPACE_0", prs.getUniqueString("foo"));
@@ -231,7 +238,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(factory, "", l, 
newBuilder(writer));
 
         prs.addInitializationScript("myInitializationScript1();");
         prs.addInitializationScript("myInitializationScript2();");
@@ -240,7 +247,9 @@
 
         assertOutput(new String[]
         { "<script language=\"JavaScript\" type=\"text/javascript\"><!--",
-                "myInitializationScript1();", "myInitializationScript2();", 
"", "// --></script>" });
+                "dojo.event.connect(window, 'onload', function(e) {",
+                "myInitializationScript1();", "myInitializationScript2();", 
+                "});", "// --></script>" });
 
         verifyControls();
     }
@@ -269,7 +278,7 @@
 
         replayControls();
 
-        PageRenderSupportImpl prs = new PageRenderSupportImpl(assetFactory, 
"", null);
+        PageRenderSupportImpl prs = new PageRenderSupportImpl(assetFactory, 
"", null, newBuilder(writer));
 
         prs.addExternalScript(script1);
         prs.addExternalScript(script2);

Modified: 
tapestry/tapestry4/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
 (original)
+++ 
tapestry/tapestry4/trunk/portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java
 Fri Apr 21 10:08:00 2006
@@ -66,14 +66,14 @@
 
         String namespace = _response.getNamespace();
 
-        PageRenderSupportImpl support = new PageRenderSupportImpl(
-                _assetFactory, namespace, null);
-
-        TapestryUtils.storePageRenderSupport(cycle, support);
-
         IMarkupWriter nested = writer.getNestedWriter();
         
         ResponseBuilder builder = new DefaultResponseBuilder(nested);
+        
+        PageRenderSupportImpl support = new PageRenderSupportImpl(
+                _assetFactory, namespace, null, builder);
+
+        TapestryUtils.storePageRenderSupport(cycle, support);
         
         builder.renderResponse(cycle);
         

Modified: 
tapestry/tapestry4/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
URL: 
http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java?rev=395949&r1=395948&r2=395949&view=diff
==============================================================================
--- 
tapestry/tapestry4/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
 (original)
+++ 
tapestry/tapestry4/trunk/portlet/src/test/org/apache/tapestry/portlet/TestPortletRenderer.java
 Fri Apr 21 10:08:00 2006
@@ -28,6 +28,7 @@
 import org.apache.tapestry.NestedMarkupWriter;
 import org.apache.tapestry.asset.AssetFactory;
 import org.apache.tapestry.markup.MarkupWriterSource;
+import org.apache.tapestry.services.impl.DefaultResponseBuilder;
 import org.apache.tapestry.util.ContentType;
 import org.apache.tapestry.util.PageRenderSupportImpl;
 import org.apache.tapestry.web.WebResponse;
@@ -99,6 +100,11 @@
 
     private IRequestCycle newCycle(String pageName, IPage page)
     {
+        return newCycle(pageName, page, null);
+    }
+    
+    private IRequestCycle newCycle(String pageName, IPage page, IMarkupWriter 
writer)
+    {
         MockControl control = newControl(IRequestCycle.class);
         IRequestCycle cycle = (IRequestCycle) control.getMock();
 
@@ -113,7 +119,7 @@
         // We can check that an instance of PageRenderSupport is passed in, but
         // we can't (easily) check thta it's configured the way we want.
         cycle.setAttribute("org.apache.tapestry.PageRenderSupport", new 
PageRenderSupportImpl(
-                newAssetFactory(), "", null));
+                newAssetFactory(), "", null, new 
DefaultResponseBuilder(writer)));
         control.setMatcher(new AggregateArgumentsMatcher(new ArgumentMatcher[]
         { null, new TypeMatcher() }));
         



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

Reply via email to