Author: drobiazko
Date: Sun Aug 30 16:13:34 2009
New Revision: 809368

URL: http://svn.apache.org/viewvc?rev=809368&view=rev
Log:
TAP5-801: Add Trigger component to trigger a component event during rendering

Added:
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
   (with props)
    
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.xdoc
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
   (with props)
    
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/TriggerDemo.tml
Modified:
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
    
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java?rev=809368&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
 Sun Aug 30 16:13:34 2009
@@ -0,0 +1,48 @@
+// Copyright 2009 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry5.corelib.components;
+
+import org.apache.tapestry5.BindingConstants;
+import org.apache.tapestry5.ComponentResources;
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.RenderSupport;
+import org.apache.tapestry5.annotations.Parameter;
+import org.apache.tapestry5.ioc.annotations.Inject;
+
+/**
+ * Triggers an arbitrary event during rendering. This is often useful to add 
JavaScript 
+ * to a page or a component (via calls to the {...@link RenderSupport} 
environmental).
+ * 
+ * @since 5.2.0
+ */
+public class Trigger
+{
+    @Parameter(defaultPrefix = BindingConstants.LITERAL)
+    private String event;
+
+    @Inject
+    private ComponentResources resources;
+
+    String defaultEvent() 
+    {
+        return this.resources.getId();
+    }
+
+    boolean beginRender(MarkupWriter writer) 
+    {
+        this.resources.triggerEvent(this.event, new Object[] { writer }, null);
+        return false;
+    }
+    
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.xdoc
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.xdoc?rev=809368&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.xdoc
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Trigger.xdoc
 Sun Aug 30 16:13:34 2009
@@ -0,0 +1,61 @@
+<document>
+    <body>
+
+        <section name="Examples">
+
+            <p>
+                In this example, we are showing how to trigger an event from 
the template of a page. When the following page is rendered
+                the both instances of the component Trigger publish an 
arbitrary event. 
+            </p>
+
+            <subsection name="TriggerDemo.tml">
+                <source><![CDATA[
+<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>
+    <body>
+        <h1>Trigger Demo</h1>
+        
+        <p> ... </p>
+
+        <t:trigger event="addAdditionalScriptLinks"/>
+
+        <p> ... </p>
+        
+        <t:trigger event="provideAdditionalMarkup"/>
+    </body>
+</html>
+]]></source>
+
+                <p>
+                    Inside the handler method for the event 
<em>addAdditionalScriptLinks</em> we add a link to a JavaScript file.
+                    The handler method for the event 
<em>provideAdditionalMarkup</em> provides some additional markup. 
+                    The MarkupWriter is passed as the event context.
+                </p>
+
+
+            </subsection>
+
+            <subsection name="TriggerDemo.java">
+                <source><![CDATA[
+public class TriggerDemo
+{
+    
+    @Environmental
+    private RenderSupport renderSupport;
+    
+    public void onAddAdditionalScriptLinks()
+    {
+        renderSupport.addScriptLink("scripts.js");
+    }
+    
+    public void onProvideAdditionalMarkup(MarkupWriter writer)
+    {   
+        writer.writeRaw("Hello.");
+    }
+}
+]]></source>
+            </subsection>
+
+        </section>
+
+    </body>
+</document>
\ No newline at end of file

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java?rev=809368&r1=809367&r2=809368&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/IntegrationTests.java
 Sun Aug 30 16:13:34 2009
@@ -3146,4 +3146,13 @@
 
         assertTextPresent("Apr 6, 1978");
     }
+    
+    @Test
+    public void trigger_demo()
+    {
+        start("Trigger Demo");
+
+        assertAttribute(String.format("//scri...@src='%s']/@src", 
"some_additional_scripts.js"), "some_additional_scripts.js");
+        assertTextPresent("Event 'provideAdditionalMarkup' handled.");
+    }
 }

Modified: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java?rev=809368&r1=809367&r2=809368&view=diff
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
 (original)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
 Sun Aug 30 16:13:34 2009
@@ -385,7 +385,10 @@
                      "Annotation to map a field to a specific session 
attribute"),
 
             new Item("BeanEditCalendarDemo", "BeanEditor / Calendar Demo",
-                     "Use of calendar properties inside BeanEditor and 
BeanDisplay")
+                     "Use of calendar properties inside BeanEditor and 
BeanDisplay"),
+
+                     new Item("TriggerDemo", "Trigger Demo",
+                              "Use of Trigger component")
 
     );
 

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java?rev=809368&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
 Sun Aug 30 16:13:34 2009
@@ -0,0 +1,22 @@
+package org.apache.tapestry5.integration.app1.pages;
+
+import org.apache.tapestry5.MarkupWriter;
+import org.apache.tapestry5.RenderSupport;
+import org.apache.tapestry5.annotations.Environmental;
+
+public class TriggerDemo
+{
+    @Environmental
+    private RenderSupport renderSupport;
+    
+    public void onAddAdditionalScriptLinks()
+    {
+        renderSupport.addScriptLink("some_additional_scripts.js");
+    }
+    
+    public void onProvideAdditionalMarkup(MarkupWriter writer)
+    {   
+        writer.writeRaw("Event 'provideAdditionalMarkup' handled.");
+    }
+
+}

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/TriggerDemo.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/TriggerDemo.tml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/TriggerDemo.tml?rev=809368&view=auto
==============================================================================
--- 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/TriggerDemo.tml
 (added)
+++ 
tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/app1/pages/TriggerDemo.tml
 Sun Aug 30 16:13:34 2009
@@ -0,0 +1,8 @@
+<html t:type="Border" 
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd";>
+    <h1>Trigger Demo</h1>
+    
+    <t:trigger event="addAdditionalScriptLinks"/>
+    
+    <t:trigger t:id="provideAdditionalMarkup"/>
+    
+</html>


Reply via email to