You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/07/31 18:37:18 UTC

svn commit: r427162 - in /tapestry/tapestry4/trunk: src/site/apt/ tapestry-examples/TimeTracker/src/context/ tapestry-examples/TimeTracker/src/context/WEB-INF/ tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/ tapestry-framew...

Author: jkuhnert
Date: Mon Jul 31 09:37:17 2006
New Revision: 427162

URL: http://svn.apache.org/viewvc?rev=427162&view=rev
Log:
Fixed issues related to TAPESTRY-1031 which introduce a potentially controversial change to IComponent that
allows for retrieving/setting of some form of parent/child relationship in components, seperate from the logic
that is handled by container.

Added:
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/TestScript.script
Modified:
    tapestry/tapestry4/trunk/src/site/apt/download.apt
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IComponent.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRender.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IScript.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Script.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java

Modified: tapestry/tapestry4/trunk/src/site/apt/download.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/src/site/apt/download.apt?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/src/site/apt/download.apt (original)
+++ tapestry/tapestry4/trunk/src/site/apt/download.apt Mon Jul 31 09:37:17 2006
@@ -1,18 +1,18 @@
  ------
-Download Tapestry 4.1
+Download Tapestry 4.1.1
  ------
 Jesse Kuhnert
  ------
 18 June 2006
  ------
 
-Download Tapestry 4.1
+Download Tapestry 4.1.1
 
-  If you are looking for the official jar-only form of Tapestry 4.1 they can be downloaded here 
+  If you are looking for the official jar-only form of Tapestry 4.1, they can be downloaded here 
   {{http://tapestry.apache.org/download.html}}.
   
   The Tapestry snapshot builds are currently available via the ibiblio maven2 and apache.org snapshot 
-  repositories. To download the official 4.1 release you shouldn't need to change your pom settings at 
+  repositories. To download the current 4.1.1 SNAPSHOT release you shouldn't need to change your pom settings at 
   all, other than including the right artifacts to download Tapestry.
   
   In order to download the snapshot release versions of Tapestry you will need to add the following repository
@@ -39,13 +39,13 @@
 <dependency>
     <groupId>org.apache.tapestry</groupId>
     <artifactId>tapestry-framework</artifactId>
-    <version>4.1.0-SNAPSHOT</version>
+    <version>4.1.1-SNAPSHOT</version>
 </dependency>
 <dependency>
     <groupId>org.apache.tapestry</groupId>
     <artifactId>tapestry-annotations</artifactId>
-    <version>4.1.0-SNAPSHOT</version>
+    <version>4.1.1-SNAPSHOT</version>
 </dependency>
 +---------------------------------------------------------
 
-  Tapestry 4.1 is distributed under the {{{http://tapestry.apache.org/license.html} Apache License, version 2.0}}.
+  Tapestry 4.1.1 is distributed under the {{{http://tapestry.apache.org/license.html} Apache License, version 2.0}}.

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/Home.html Mon Jul 31 09:37:17 2006
@@ -72,4 +72,13 @@
 	</span>
 </div>
 
+<div jwcid="textListen@Any">This is some text at the bottom of the screen.</div>
+
+<div jwcid="refresh@Any">
+	<span jwcid="@If" condition="ognl:eventReceived">
+		<p>I must have been refreshed!</p>
+		<span jwcid="@Script" script="TestScript.script" />
+	</span>
+</div>
+
 </span>

Added: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/TestScript.script
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/TestScript.script?rev=427162&view=auto
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/TestScript.script (added)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/context/WEB-INF/TestScript.script Mon Jul 31 09:37:17 2006
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<!DOCTYPE script PUBLIC
+  "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
+  "http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
+<script>
+    <initialization>
+        alert("I'm a script, I work..\nHooray!");
+    </initialization>
+</script>
\ No newline at end of file

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java Mon Jul 31 09:37:17 2006
@@ -18,6 +18,7 @@
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.annotations.Component;
 import org.apache.tapestry.annotations.EventListener;
+import org.apache.tapestry.annotations.InitialValue;
 import org.apache.tapestry.annotations.InjectObject;
 import org.apache.tapestry.annotations.Persist;
 import org.apache.tapestry.dojo.form.Autocompleter;
@@ -85,6 +86,11 @@
     
     public abstract String getFeedback();
     
+    @InitialValue("ognl:false")
+    public abstract boolean isEventReceived();
+    
+    public abstract void setEventReceived(boolean value);
+    
     /**
      * Selection model for projects.
      * @return
@@ -108,6 +114,13 @@
     
     public void linkUpdateClicked()
     {
+    }
+    
+    @EventListener(events = "onclick", elements = "textListen")
+    public void textSelected(IRequestCycle cycle)
+    {
+        setEventReceived(true);
+        cycle.getResponseBuilder().updateComponent("refresh");
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/AbstractComponent.java Mon Jul 31 09:37:17 2006
@@ -149,6 +149,9 @@
 
     private IContainedComponent _containedComponent;
     
+    /** @since 4.1 */
+    private IComponent _parent;
+    
     public void addAsset(String name, IAsset asset)
     {
         Defense.notNull(name, "name");
@@ -184,13 +187,13 @@
     public void addBody(IRender element)
     {
         Defense.notNull(element, "element");
-
-        // TODO: Tweak the ordering of operations inside the PageLoader so that this
-        // check is allowable. Currently, the component is entering active state
-        // before it loads its template.
-
-        // checkActiveLock();
-
+        
+        // Check to set parent/child relationships on components where the container
+        // logic doesn't always make sense.
+        
+        if (IComponent.class.isAssignableFrom(element.getClass()))
+            ((IComponent)element).setParent(this);
+        
         // Should check the specification to see if this component
         // allows body. Curently, this is checked by the component
         // in render(), which is silly.
@@ -220,6 +223,16 @@
         _body[_bodyCount++] = element;
     }
 
+    public IComponent getParent()
+    {
+        return _parent;
+    }
+    
+    public void setParent(IComponent parent)
+    {
+        _parent = parent;
+    }
+    
     /**
      * Invokes {@link #finishLoad()}. Subclasses may overide as needed, but must invoke this
      * implementation. {@link BaseComponent} loads its HTML template.

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IComponent.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IComponent.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IComponent.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IComponent.java Mon Jul 31 09:37:17 2006
@@ -64,7 +64,21 @@
      */
 
     void addBody(IRender element);
-
+    
+    /**
+     * When {@link IComponent} instances are added to a {@link IComponent}s body, this method
+     * should be called to tell the instance who encloses them.
+     * 
+     * @param parent The component that contains this instance as a body element.
+     */
+    void setParent(IComponent parent);
+    
+    /**
+     * If this instance has a containing parent returns that instance.
+     * @return The containing parent, if any.
+     */
+    IComponent getParent();
+    
     /**
      * Returns the asset map for the component, which may be empty but will not be null.
      * <p>

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRender.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRender.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRender.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IRender.java Mon Jul 31 09:37:17 2006
@@ -41,4 +41,5 @@
      **/
 
     void render(IMarkupWriter writer, IRequestCycle cycle);
+    
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IScript.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IScript.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IScript.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IScript.java Mon Jul 31 09:37:17 2006
@@ -49,8 +49,27 @@
      * creating new output symbols
      * 
      * @see TapestryUtils#getPageRenderSupport(IRequestCycle, Object)
-     *
+     * @deprecated To be removed in Tapestry 4.2. 
+     *              Use the new {@link #execute(IComponent, IRequestCycle, IScriptProcessor, Map)} method instead.
      */
 
     void execute(IRequestCycle cycle, IScriptProcessor processor, Map symbols);
+    
+    /**
+     * Executes the script, which will read and modify the symbols {@link Map}.  The
+     * script works with the {@link IScriptProcessor} to get the generated JavaScript
+     * included on the page.
+     * 
+     * @param target The component this script is being executed by/for
+     * @param cycle the current request cycle
+     * @param processor an object that processes the results of the script, typically
+     * an instance of {@link org.apache.tapestry.html.Body}
+     * @param symbols Map of input symbols; execution of the script may modify the map,
+     * creating new output symbols
+     * 
+     * @see TapestryUtils#getPageRenderSupport(IRequestCycle, Object)
+     *
+     */
+
+    void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols);
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/ImageSubmit.jwc Mon Jul 31 09:37:17 2006
@@ -61,7 +61,7 @@
   	</description>
   </parameter>
   
-  <parameter name="action" deprecated="yes">
+  <parameter name="action" >
       <description>
           A listener that is notified if this component is triggered
           just before the form's listener, after all components 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/LinkSubmit.jwc Mon Jul 31 09:37:17 2006
@@ -36,7 +36,7 @@
       </description>
   </parameter>
   
-  <parameter name="action" deprecated="yes">
+  <parameter name="action" >
       <description>
           A listener that is notified if this component is triggered
           just before the form's listener, after all components 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/Submit.jwc Mon Jul 31 09:37:17 2006
@@ -55,7 +55,7 @@
           A listener that is notified if this component is triggered.
       </description>
   </parameter>
-  <parameter name="action" deprecated="yes">
+  <parameter name="action">
       <description>
           A listener that is notified if this component is triggered
           just before the form's listener, after all components 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Script.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Script.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Script.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/html/Script.java Mon Jul 31 09:37:17 2006
@@ -149,10 +149,10 @@
         {
             PageRenderSupport pageRenderSupport = TapestryUtils
                     .getPageRenderSupport(cycle, this);
-
+            
             _symbols = getInputSymbols();
-
-            getParsedScript().execute(cycle, pageRenderSupport, _symbols);
+            
+            getParsedScript().execute(this, cycle, pageRenderSupport, _symbols);
         }
 
         // Render the body of the Script;

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/InitToken.java Mon Jul 31 09:37:17 2006
@@ -39,11 +39,11 @@
         if (buffer != null) throw new IllegalArgumentException();
 
         StringBuffer useBuffer = new StringBuffer(_bufferLengthHighwater);
-
+        
         writeChildren(useBuffer, session);
-
+        
         session.addInitializationScript(useBuffer.toString());
-
+        
         // Store the buffer length from this run for the next run, since its
         // going to be approximately the right size.
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ParsedScript.java Mon Jul 31 09:37:17 2006
@@ -18,6 +18,7 @@
 
 import org.apache.hivemind.Location;
 import org.apache.hivemind.Resource;
+import org.apache.tapestry.IComponent;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.IScript;
 import org.apache.tapestry.IScriptProcessor;
@@ -69,7 +70,19 @@
 
         writeChildren(null, session);
     }
+    
+    /**
+     * {@inheritDoc}
+     */
+    public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor,
+            Map symbols)
+    {
+        ScriptSession session = new ScriptSessionImpl(_scriptResource, target, cycle,
+                processor, _evaluator, _valueConverter, symbols);
 
+        writeChildren(null, session);
+    }
+    
     /**
      * Does nothing; never invoked.
      */

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/script/ScriptSessionImpl.java Mon Jul 31 09:37:17 2006
@@ -51,12 +51,29 @@
     /** @since 4.0 */
     private ValueConverter _valueConverter;
 
+    private IComponent _component;
+    
+    public ScriptSessionImpl(Resource scriptTemplateResource,
+            IRequestCycle cycle, IScriptProcessor processor,
+            ExpressionEvaluator evaluator, ValueConverter valueConverter,
+            Map symbols)
+    {
+        _scriptTemplateResource = scriptTemplateResource;
+        _cycle = cycle;
+        _processor = processor;
+        _symbols = symbols;
+        _evaluator = evaluator;
+        _valueConverter = valueConverter;
+    }
+    
     public ScriptSessionImpl(Resource scriptTemplateResource,
+            IComponent component, 
             IRequestCycle cycle, IScriptProcessor processor,
             ExpressionEvaluator evaluator, ValueConverter valueConverter,
             Map symbols)
     {
         _scriptTemplateResource = scriptTemplateResource;
+        _component = component;
         _cycle = cycle;
         _processor = processor;
         _symbols = symbols;
@@ -93,7 +110,7 @@
 
     public void addBodyScript(String script)
     {
-        addBodyScript(null, script);
+        addBodyScript(_component, script);
     }
     
     public void addBodyScript(IComponent target, String script)
@@ -103,7 +120,7 @@
     
     public void addExternalScript(Resource resource)
     {
-        addExternalScript(null, resource);
+        addExternalScript(_component, resource);
     }
     
     public void addExternalScript(IComponent target, Resource resource)
@@ -113,7 +130,7 @@
 
     public void addInitializationScript(String script)
     {
-        addInitializationScript(null, script);
+        addInitializationScript(_component, script);
     }
 
     public void addInitializationScript(IComponent target, String script)

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java Mon Jul 31 09:37:17 2006
@@ -135,6 +135,7 @@
         Map parms = new HashMap();
         DirectEventServiceParameter dsp =
             new DirectEventServiceParameter(component, new Object[] {}, new String[] {}, false);
+        
         String url = _eventEngine.getLink(false, dsp).getURL();
         
         PageRenderSupport prs = TapestryUtils.getPageRenderSupport(cycle, component);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventInvoker.java Mon Jul 31 09:37:17 2006
@@ -49,6 +49,7 @@
     /**
      * Causes the configured listeners for the passed component to
      * be invoked.
+     * 
      * @param component
      *          The component that recieved the invocations.
      * @param cycle
@@ -76,7 +77,7 @@
         
         if (hasElementEvents(targetId)) {
             
-            ComponentEventProperty prop = getElementEvents(id);
+            ComponentEventProperty prop = getElementEvents(targetId);
             invokeListeners(prop, component, cycle, event);
         }
     }
@@ -92,8 +93,18 @@
             if (container == null) // only IPage has no container
                 container = component; 
             
-            IActionListener listener = 
-                container.getListeners().getListener(eventListener.getMethodName());
+            IActionListener listener = null;
+            
+            if (container.getListeners().canProvideListener(eventListener.getMethodName())) {
+                
+                listener = container.getListeners().getListener(eventListener.getMethodName());
+                
+            } else if (container.getPage().getListeners().canProvideListener(eventListener.getMethodName())) {
+                
+                listener = container.getPage().getListeners().getListener(eventListener.getMethodName());
+                
+            }
+            
             _invoker.invokeListener(listener, container, cycle);
         }
     }
@@ -258,7 +269,7 @@
     }
     
     /**
-     * Gets event properties fro the specified component, creates a new
+     * Gets event properties for the specified component, creates a new
      * instance if one doesn't exist already.
      * 
      * @param id The component id 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/DojoAjaxResponseBuilder.java Mon Jul 31 09:37:17 2006
@@ -465,7 +465,17 @@
         if (target == null) 
             return false;
         
-        return _parts.contains(getComponentId(target));
+        String id = getComponentId(target);
+        
+        if (_parts.contains(id))
+            return true;
+        
+        IComponent parent = target.getParent();
+        
+        if (parent != null)
+            return contains(parent);
+        
+        return false;
     }
     
     /**

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/util/PageRenderSupportImpl.java Mon Jul 31 09:37:17 2006
@@ -156,7 +156,7 @@
         
         if (_initializationScript == null)
             _initializationScript = new StringBuffer(script.length() + 1);
-
+        
         _initializationScript.append(script);
         _initializationScript.append('\n');
     }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tapestry/core.js Mon Jul 31 09:37:17 2006
@@ -138,6 +138,13 @@
         	}
     	}
     	
+    	if (djConfig["isDebug"]) {
+    		var content=tapestry.html.getContentAsString(element);
+    		dojo.log.debug("Received element content for id <" + id + "> of:\n" + content);
+    		node.innerHTML=content;
+    		return;
+    	}
+    	
     	node.innerHTML=tapestry.html.getContentAsString(element);
 	},
 	

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/DirectEventServiceTest.java Mon Jul 31 09:37:17 2006
@@ -473,4 +473,4 @@
     {
         expect(direct.isStateful()).andReturn(isStateful);
     }
-}
\ No newline at end of file
+}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/LinkSubmitTest.java Mon Jul 31 09:37:17 2006
@@ -59,6 +59,15 @@
             symbols.put("href", "HREF");
         }
 
+        public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols)
+        {
+            assertNotNull(cycle);
+            assertNotNull(processor);
+            assertNotNull(symbols);
+
+            symbols.put("href", "HREF");
+        }
+        
         public Resource getScriptResource()
         {
             return null;

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/MockForm.java Mon Jul 31 09:37:17 2006
@@ -407,4 +407,20 @@
     {
         
     }
+
+    /** 
+     * {@inheritDoc}
+     */
+    public IComponent getParent()
+    {
+        return null;
+    }
+
+    /** 
+     * {@inheritDoc}
+     */
+    public void setParent(IComponent parent)
+    {
+        
+    }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/html/ScriptTest.java Mon Jul 31 09:37:17 2006
@@ -57,6 +57,11 @@
             _symbols = symbols;
         }
 
+        public void execute(IComponent target, IRequestCycle cycle, IScriptProcessor processor, Map symbols)
+        {
+            _symbols = symbols;
+        }
+        
         public Resource getScriptResource()
         {
             // TODO Auto-generated method stub
@@ -68,7 +73,7 @@
     /**
      * No input symbols, no informal parameters.
      */
-    public void testMinimalRender()
+    public void test_Minimal_Render()
     {
         IScriptSource source = newScriptSource();
         IScript script = newScript();
@@ -96,7 +101,7 @@
         
         trainGetScript(source, scriptLocation, script);
 
-        script.execute(cycle, support, new HashMap());
+        script.execute(component, cycle, support, new HashMap());
 
         trainResponseBuilder(cycle, writer);
         
@@ -113,7 +118,7 @@
         verify();
     }
 
-    public void testWithSymbolsMap()
+    public void test_With_Symbols_Map()
     {
         IScriptSource source = newScriptSource();
         MockScript script = new MockScript();
@@ -159,7 +164,7 @@
         assertNotSame(baseSymbols, script._symbols);
     }
 
-    public void testWithSymbolsMapAndInformalParameters()
+    public void test_With_Symbols_Map_And_Informal_Parameters()
     {
         IScriptSource source = newScriptSource();
         MockScript script = new MockScript();
@@ -211,7 +216,7 @@
         assertSame(script._symbols, component.getSymbols());
     }
 
-    public void testRewinding()
+    public void test_Rewinding()
     {
         IMarkupWriter writer = newWriter();
         IRequestCycle cycle = newCycle(true, writer);
@@ -232,7 +237,7 @@
         verify();
     }
 
-    public void testMultiParamException() 
+    public void test_MultiParam_Exception() 
     {
     	IScriptSource source = newScriptSource();
         
@@ -266,7 +271,7 @@
         verify();
     }
     
-    public void testIAssetParamRender()
+    public void test_IAsset_ParamRender()
     {
         IScriptSource source = newScriptSource();
         IScript script = newScript();
@@ -293,7 +298,7 @@
         
         trainGetScript(source, scriptLocation, script);
         
-        script.execute(cycle, support, new HashMap());
+        script.execute(component, cycle, support, new HashMap());
         
         trainResponseBuilder(cycle, writer);
         

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventInvokerTest.java Mon Jul 31 09:37:17 2006
@@ -46,7 +46,7 @@
 public class ComponentEventInvokerTest extends BaseComponentTestCase
 {
     
-    public void testEventProperties()
+    public void test_Event_Properties()
     {
         ComponentEventInvoker invoker = new ComponentEventInvoker();
         
@@ -68,7 +68,7 @@
         assertEquals(listeners.size(), 0);
     }
     
-    public void testInvokeComponentListener()
+    public void test_Invoke_Component_Listener()
     {
         IRequestCycle cycle = newCycle();
         IComponent comp = newComponent();
@@ -92,6 +92,10 @@
         
         expect(comp.getListeners()).andReturn(listenerMap);
         
+        expect(listenerMap.canProvideListener("fooListener")).andReturn(Boolean.TRUE);
+        
+        expect(comp.getListeners()).andReturn(listenerMap);
+        
         expect(listenerMap.getListener("fooListener")).andReturn(listener);
         
         listenerInvoker.invokeListener(listener, comp, cycle);
@@ -103,7 +107,7 @@
         verify();
     }
     
-    public void testInvokeElementListener()
+    public void test_Invoke_Element_Listener()
     {
         IRequestCycle cycle = newCycle();
         IComponent comp = newComponent();
@@ -127,6 +131,10 @@
         
         expect(comp.getListeners()).andReturn(listenerMap);
         
+        expect(listenerMap.canProvideListener("fooListener")).andReturn(Boolean.TRUE);
+        
+        expect(comp.getListeners()).andReturn(listenerMap);
+        
         expect(listenerMap.getListener("fooListener")).andReturn(listener);
         
         listenerInvoker.invokeListener(listener, comp, cycle);
@@ -138,7 +146,7 @@
         verify();
     }
     
-    public void testInvokeFormListener()
+    public void test_Invoke_Form_Listener()
     {
         IRequestCycle cycle = newCycle();
         IForm form = newForm();

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java?rev=427162&r1=427161&r2=427162&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/DojoAjaxResponseBuilderTest.java Mon Jul 31 09:37:17 2006
@@ -74,7 +74,7 @@
         _writer.reset();
     }
     
-    public void testNullRender() 
+    public void test_Null_Render() 
     {
         IRender render = newMock(IRender.class);
         IRequestCycle cycle = newMock(IRequestCycle.class);
@@ -92,7 +92,7 @@
         assertSame(builder.getWriter(), null);
     }
     
-    public void testNormalRender()
+    public void test_Normal_Render()
     {
         IRender render = newMock(IRender.class);
         IRequestCycle cycle = newMock(IRequestCycle.class);
@@ -111,7 +111,7 @@
         assertSame(builder.getWriter(), writer);
     }
     
-    public void testNullContains() 
+    public void test_Null_Contains() 
     {
         ResponseBuilder builder = new DojoAjaxResponseBuilder(null, null);
         
@@ -122,7 +122,7 @@
         verify();
     }
     
-    public void testPartialRender()
+    public void test_Partial_Render()
     {
         IRender render = newMock(IRender.class);
         
@@ -162,7 +162,7 @@
         assertSame(builder.getWriter(), writer);
     }
     
-    public void testAllowedScripts()
+    public void test_Allowed_Scripts()
     {
         IComponent comp = newMock(IComponent.class);
         List parts = new ArrayList();
@@ -172,10 +172,14 @@
         
         expect(comp.getClientId()).andReturn("comp");
         
+        expect(comp.getParent()).andReturn(null);
+        
         expect(comp.getClientId()).andReturn("comp1");
         
         expect(comp.getClientId()).andReturn("comp");
         
+        expect(comp.getParent()).andReturn(null);
+        
         replay();
         
         assertFalse(builder.isBodyScriptAllowed(comp));
@@ -185,7 +189,7 @@
         verify();
     }
     
-    public void testWriteBodyScript()
+    public void test_Write_Body_Script()
     {
         MarkupFilter filter = new UTFMarkupFilter();
         PrintWriter writer = newPrintWriter();
@@ -233,7 +237,7 @@
         verify();
     }
     
-    public void testWriteExternalScripts()
+    public void test_Write_External_Scripts()
     {
         MarkupFilter filter = new UTFMarkupFilter();
         PrintWriter writer = newPrintWriter();
@@ -270,7 +274,7 @@
         verify();
     }
     
-    public void testWriteInitializationScript()
+    public void test_Write_Initialization_Script()
     {
         MarkupFilter filter = new UTFMarkupFilter();
         PrintWriter writer = newPrintWriter();