You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by dr...@apache.org on 2009/08/30 18:13:34 UTC

svn commit: r809368 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/corelib/components/ test/java/org/apache/tapestry5/integration/ test/java/org/apache/tapestry5/integration/app1/pages/ test/resources/org/apache/tapest...

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("//script[@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>