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>