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>