You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Taha Hafeez <ta...@gmail.com> on 2011/03/22 06:16:52 UTC
Modalbox Integration Example
Hi
I recently required some modal window in my application and found this
http://okonet.ru/projects/modalbox/index.html
So, I thought of integrating it with tapestry and it was so easy.
Here is the code
import java.util.List;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ClientElement;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.SupportsInformalParameters;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.PageRenderLinkSource;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;
/**
* ModalBox support for Tapestry5 Check <a
* href='http://okonet.ru/projects/modalbox/index.html'>ModalBox</a> for
details
* This component uses version 1.5.5
*
*
*/
@Import(library = { "modal/effects.js", "modal/builder.js",
"modal/modalbox.js", "modal/modalboxinit.js" }, stylesheet =
"modal/modalbox.css")
@SupportsInformalParameters
public class ModalBox implements ClientElement {
public static final String EVENT_TYPE = "event";
public static final String PAGE_TYPE = "page";
@Parameter(value = "componentResources.id", defaultPrefix =
BindingConstants.LITERAL)
private String clientId;
@Inject
private JavaScriptSupport javaScriptSupport;
private String assignedClientId;
@Parameter(value = EVENT_TYPE, defaultPrefix = BindingConstants.LITERAL,
allowNull = false)
private String type;
@Parameter(value = "event", defaultPrefix = BindingConstants.LITERAL,
allowNull = false)
private String event;
@Parameter(value = "click", defaultPrefix = BindingConstants.LITERAL,
allowNull = false)
private String clientEvent;
@Parameter(defaultPrefix = BindingConstants.LITERAL)
private String pageName;
@Inject
private ComponentResources resources;
@Inject
private PageRenderLinkSource pageRenderLinkSource;
@Parameter
private List<?> context;
private Object[] contextArray;
@Parameter(value = "false", defaultPrefix = BindingConstants.LITERAL)
private boolean disabled;
/**
* Setup render
*/
void setupRender() {
assignedClientId = javaScriptSupport.allocateClientId(clientId);
contextArray = context == null ? new Object[] {} : context.toArray();
if (!type.equals(EVENT_TYPE) && !type.equals(PAGE_TYPE)) {
throw new RuntimeException("Parameter type can only be " +
EVENT_TYPE
+ " or " + PAGE_TYPE);
}
if (type.equals(PAGE_TYPE) && pageName == null) {
throw new RuntimeException(
"Parameter pageName cannot be null if parameter type is "
+ PAGE_TYPE);
}
}
void beginRender(final MarkupWriter writer) {
writer.element("a", "href", "#", "id", getClientId());
}
void afterRender(final MarkupWriter writer) {
writer.end();
if (disabled) {
return;
}
final Link link;
if (EVENT_TYPE.equalsIgnoreCase(type)) {
link = resources.createEventLink(event, contextArray);
} else { // if(PAGE_TYPE.equals(type)){
System.out.println("Page Link");
link =
pageRenderLinkSource.createPageRenderLinkWithContext(pageName,
contextArray);
}
final JSONObject params = new JSONObject();
for (String informalParameter : resources.getInformalParameterNames())
{
params.put(informalParameter, resources.getInformalParameter(
informalParameter, String.class));
}
final JSONObject spec = new JSONObject();
spec.put("id", getClientId());
spec.put("href", link.toAbsoluteURI());
spec.put("event", clientEvent);
spec.put("type", type);
spec.put("params", params);
javaScriptSupport.addScript("new ModalBoxInit(%s);", spec);
}
/**
* {@inheritDoc}
*/
public String getClientId() {
return assignedClientId;
}
}
I have downloaded http://modalbox.googlecode.com/files/modalbox_1.5.5.zip
and extracted the lib folder as model folder
I have also added a small script for customization.
ModalBoxInit = Class.create( {
/* Initialize Function */
initialize : function(spec) {
if (spec.type == "page") {
Event.observe($(spec.id), spec.event, function() {
Modalbox.show(spec.href, spec.params);
});
} else {
Event.observe($(spec.id), spec.event, function() {
Tapestry.ajaxRequest(spec.href, {
method : 'get',
onSuccess : function(transport) {
var node = new
Element('div').update(transport.responseJSON.content);
Modalbox.show(node, spec.params);
}
}
);
}
);
}
}
});
Usage is simple
Template is
<t:layout xmlns:t='http://tapestry.apache.org/schema/tapestry_5_1_0.xsd'>
<t:tawus.ModalBox t:type='page' t:pageName='Index'>Click To See
ModalBox</t:tawus.ModalBox><br/>
<t:tawus.ModalBox t:type='event'>Click To See
Inline Modal Box</t:tawus.ModalBox>
<t:block t:id='messageBlock'>
This is a simple Message
</t:block>
</t:layout>
Java
public class ModalBoxDemo {
@Inject
private Block messageBlock;
public Object onEvent(){
return messageBlock;
}
}
regards
Taha
Re: Modalbox Integration Example
Posted by Taha Siddiqi <ta...@gmail.com>.
Ah, you want to disable it in javascript. You will have to disable it on page-load and then enable/disable it when user clicks on grids.
By enable/disable I mean to enable/disable the link/button displaying the modal box. You can use $$ prototype function to match a complex css selection.
regards
Taha
On Jul 20, 2012, at 7:09 AM, Bob.Sky wrote:
> Yes, use the disabled parameter can make effect when the page first loaded,
> but when the page has been generated , I can find this code" # " in the
> source view.I do not know how can I capture the disable event in the current
> page. Thank you.
>
> --
> View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p5714631.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by "Bob.Sky" <bo...@gmail.com>.
Yes, use the disabled parameter can make effect when the page first loaded,
but when the page has been generated , I can find this code" # " in the
source view.I do not know how can I capture the disable event in the current
page. Thank you.
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p5714631.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by Taha Siddiqi <ta...@gmail.com>.
If disabled parameter is true, the client scripts are not loaded. I think that should disable the modalbox. Doesn't it ?
regards
Taha
On Jul 19, 2012, at 2:39 PM, Bob.Sky wrote:
> Hi, taha.
> Thank you for your code, I use it in my project, but I meet a problem now.
> I use this code to popup the modal box"
> <t:ModalBox t:type="event" t:event="doPopUp" id="modalBox" t:id="modalBox">
> <input type="button" t:type="any" id="Press" value="Press"
> class="button"/>
> </t:ModalBox>"
> Now I want to add the validation for the button, if I have not select a line
> of the grid, I hope this button is disabled,that is to say ModalBox can not
> be poped up.
> I know you the modalbox component has the disabled prameter, but in the
> Client it is just like " ",How to control it.
>
> Thank you.
>
> --
> View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p5714595.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by "Bob.Sky" <bo...@gmail.com>.
Hi, taha.
Thank you for your code, I use it in my project, but I meet a problem now.
I use this code to popup the modal box"
<t:ModalBox t:type="event" t:event="doPopUp" id="modalBox" t:id="modalBox">
<input type="button" t:type="any" id="Press" value="Press"
class="button"/>
</t:ModalBox>"
Now I want to add the validation for the button, if I have not select a line
of the grid, I hope this button is disabled,that is to say ModalBox can not
be poped up.
I know you the modalbox component has the disabled prameter, but in the
Client it is just like " ",How to control it.
Thank you.
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p5714595.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by Taha Hafeez <ta...@gmail.com>.
Thanks, you are right it will prevent any effect on the browser back
button...
regards
taha
On Thu, Apr 7, 2011 at 12:52 PM, Sigbjørn Tvedt <si...@gmail.com> wrote:
> Hi Taha.
>
> Thank you for sharing the code.
>
> If I could suggest a improvement, I would recommend adding onClick="return
> false;" to the generated link.
> Just change the line
> writer.element("a", "href", "#", "id", getClientId());
> to
> writer.element("a", "href", "#", "id", getClientId(), "onClick",
> "return false;");
>
> This will stop the browser from following the link after you have clicked
> it.
>
> Regards
> Sigbjørn Tvedt
>
>
> On Fri, Mar 25, 2011 at 17:20, Taha Hafeez <ta...@gmail.com>
> wrote:
>
> > also, you need to add
> >
> > this.event("onContentLoaded");
> >
> > at the end of the loadContent method of Modalbox
> >
> > I am trying a few tricks, so that modalbox.js is not modified...
> >
> > taha
> >
> >
> > On Fri, Mar 25, 2011 at 8:49 PM, Taha Hafeez <tawus.tapestry@gmail.com
> > >wrote:
> >
> > > Hi Jim,
> > >
> > > This is the modified javascript to include zone updates
> > >
> > > ModalBoxInit = Class.create( {
> > >
> > > /* Initialize Function */
> > > initialize : function(spec) {
> > > var options = spec.params;
> > > if (spec.type == "page") {
> > > Event.observe($(spec.id), spec.event, function() {
> > > Modalbox.show(spec.href, options);
> > > });
> > > } else {
> > > Event.observe($(spec.id), spec.event, function() {
> > > var successHandler = function(transport) {
> > > var node = new Element('div')
> > > .update(transport.responseJSON.content);
> > > options.onContentLoaded = function() {
> > > Tapestry.loadScriptsInReply(transport.responseJSON,
> > > function() {
> > > });
> > > };
> > > Modalbox.show(node, options);
> > > }.bind(this);
> > >
> > > Tapestry.ajaxRequest(spec.href, {
> > > method : 'get',
> > > onSuccess : successHandler
> > > });
> > > }.bind(this));/* Event.observe */
> > > }
> > > }
> > > });
> > >
> > > regards
> > > Taha
> > >
> > >
> > > On Fri, Mar 25, 2011 at 5:03 PM, Jim O'Callaghan <
> jc1000001@yahoo.co.uk
> > >wrote:
> > >
> > >> This looks very handy Taha thanks for sharing - I'm thinking of trying
> > it
> > >> in
> > >> a page and was wondering if you had gotten around to posting the
> support
> > >> for
> > >> zone updates anywhere? Thanks.
> > >>
> > >> Regards,
> > >> Jim.
> > >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > >> For additional commands, e-mail: users-help@tapestry.apache.org
> > >>
> > >>
> > >
> >
>
Re: Modalbox Integration Example
Posted by Sigbjørn Tvedt <si...@gmail.com>.
Hi Taha.
Thank you for sharing the code.
If I could suggest a improvement, I would recommend adding onClick="return
false;" to the generated link.
Just change the line
writer.element("a", "href", "#", "id", getClientId());
to
writer.element("a", "href", "#", "id", getClientId(), "onClick",
"return false;");
This will stop the browser from following the link after you have clicked
it.
Regards
Sigbjørn Tvedt
On Fri, Mar 25, 2011 at 17:20, Taha Hafeez <ta...@gmail.com> wrote:
> also, you need to add
>
> this.event("onContentLoaded");
>
> at the end of the loadContent method of Modalbox
>
> I am trying a few tricks, so that modalbox.js is not modified...
>
> taha
>
>
> On Fri, Mar 25, 2011 at 8:49 PM, Taha Hafeez <tawus.tapestry@gmail.com
> >wrote:
>
> > Hi Jim,
> >
> > This is the modified javascript to include zone updates
> >
> > ModalBoxInit = Class.create( {
> >
> > /* Initialize Function */
> > initialize : function(spec) {
> > var options = spec.params;
> > if (spec.type == "page") {
> > Event.observe($(spec.id), spec.event, function() {
> > Modalbox.show(spec.href, options);
> > });
> > } else {
> > Event.observe($(spec.id), spec.event, function() {
> > var successHandler = function(transport) {
> > var node = new Element('div')
> > .update(transport.responseJSON.content);
> > options.onContentLoaded = function() {
> > Tapestry.loadScriptsInReply(transport.responseJSON,
> > function() {
> > });
> > };
> > Modalbox.show(node, options);
> > }.bind(this);
> >
> > Tapestry.ajaxRequest(spec.href, {
> > method : 'get',
> > onSuccess : successHandler
> > });
> > }.bind(this));/* Event.observe */
> > }
> > }
> > });
> >
> > regards
> > Taha
> >
> >
> > On Fri, Mar 25, 2011 at 5:03 PM, Jim O'Callaghan <jc1000001@yahoo.co.uk
> >wrote:
> >
> >> This looks very handy Taha thanks for sharing - I'm thinking of trying
> it
> >> in
> >> a page and was wondering if you had gotten around to posting the support
> >> for
> >> zone updates anywhere? Thanks.
> >>
> >> Regards,
> >> Jim.
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: users-help@tapestry.apache.org
> >>
> >>
> >
>
Re: Modalbox Integration Example
Posted by tompeter <in...@tomkrause.com>.
Hi Taha,
thanks for your help and code!
I found out that it works nice when I am using an inline Modal Box.
I did not get it to work with the Modal Box displaying a page though.
I implemented it with Inline Modal Box displaying a component now...
Thanks and all best,
Tom
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4369409.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by Taha Hafeez <ta...@gmail.com>.
Hi Tom
I am using this piece of code in one of my applications and I am submitting
even ajax form using it. I did make some changes to it. I am attaching the
code. (I had to extract it from my one of my modules, so not in proper
directory structure).
regards
Taha
On Tue, May 3, 2011 at 11:55 PM, tompeter <in...@tomkrause.com> wrote:
> Thanks for the reply Thiago!
> The problem is that I am trying to make a zone update via an action link in
> the page of the modalbox component. The request should be an Ajax request
> but does not behave as such.
> I want to update a feedback text inside the modal box without loading a new
> page.
> I am pretty sure it has something to do with the code for the modal box.
>
> Do you know how to solve this one?
>
> Thanks and best,
> Tom
>
> --
> View this message in context:
> http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4367967.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
Re: Modalbox Integration Example
Posted by tompeter <in...@tomkrause.com>.
Thanks for the reply Thiago!
The problem is that I am trying to make a zone update via an action link in
the page of the modalbox component. The request should be an Ajax request
but does not behave as such.
I want to update a feedback text inside the modal box without loading a new
page.
I am pretty sure it has something to do with the code for the modal box.
Do you know how to solve this one?
Thanks and best,
Tom
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4367967.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by "Thiago H. de Paula Figueiredo" <th...@gmail.com>.
On Tue, 03 May 2011 12:58:34 -0300, tompeter <in...@tomkrause.com> wrote:
> Hi Taha,
>
> first off, thanks for your code!
> I have a question concerning the zone support.
> I have implemented the necessary javascript parts but get an error when
> using zones:
> Return type org.apache.tapestry5.internal.structure.BlockImpl can not be
> handled
This happens when a non-AJAX (XmlHttpRequest) is made and an AJAX-related
value is returned (block, component instance, JSONObject, etc). @Inject
Request and use its isXHR() method to check that.
--
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
and instructor
Owner, Ars Machina Tecnologia da Informação Ltda.
http://www.arsmachina.com.br
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by tompeter <in...@tomkrause.com>.
Hi Taha,
first off, thanks for your code!
I have a question concerning the zone support.
I have implemented the necessary javascript parts but get an error when
using zones:
Return type org.apache.tapestry5.internal.structure.BlockImpl can not be
handled
Can you tell me what I am missing?
Thanks and best,
Tom
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4367640.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by Taha Hafeez <ta...@gmail.com>.
also, you need to add
this.event("onContentLoaded");
at the end of the loadContent method of Modalbox
I am trying a few tricks, so that modalbox.js is not modified...
taha
On Fri, Mar 25, 2011 at 8:49 PM, Taha Hafeez <ta...@gmail.com>wrote:
> Hi Jim,
>
> This is the modified javascript to include zone updates
>
> ModalBoxInit = Class.create( {
>
> /* Initialize Function */
> initialize : function(spec) {
> var options = spec.params;
> if (spec.type == "page") {
> Event.observe($(spec.id), spec.event, function() {
> Modalbox.show(spec.href, options);
> });
> } else {
> Event.observe($(spec.id), spec.event, function() {
> var successHandler = function(transport) {
> var node = new Element('div')
> .update(transport.responseJSON.content);
> options.onContentLoaded = function() {
> Tapestry.loadScriptsInReply(transport.responseJSON,
> function() {
> });
> };
> Modalbox.show(node, options);
> }.bind(this);
>
> Tapestry.ajaxRequest(spec.href, {
> method : 'get',
> onSuccess : successHandler
> });
> }.bind(this));/* Event.observe */
> }
> }
> });
>
> regards
> Taha
>
>
> On Fri, Mar 25, 2011 at 5:03 PM, Jim O'Callaghan <jc...@yahoo.co.uk>wrote:
>
>> This looks very handy Taha thanks for sharing - I'm thinking of trying it
>> in
>> a page and was wondering if you had gotten around to posting the support
>> for
>> zone updates anywhere? Thanks.
>>
>> Regards,
>> Jim.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
Re: Modalbox Integration Example
Posted by Taha Hafeez <ta...@gmail.com>.
Hi Jim,
This is the modified javascript to include zone updates
ModalBoxInit = Class.create( {
/* Initialize Function */
initialize : function(spec) {
var options = spec.params;
if (spec.type == "page") {
Event.observe($(spec.id), spec.event, function() {
Modalbox.show(spec.href, options);
});
} else {
Event.observe($(spec.id), spec.event, function() {
var successHandler = function(transport) {
var node = new Element('div')
.update(transport.responseJSON.content);
options.onContentLoaded = function() {
Tapestry.loadScriptsInReply(transport.responseJSON,
function() {
});
};
Modalbox.show(node, options);
}.bind(this);
Tapestry.ajaxRequest(spec.href, {
method : 'get',
onSuccess : successHandler
});
}.bind(this));/* Event.observe */
}
}
});
regards
Taha
On Fri, Mar 25, 2011 at 5:03 PM, Jim O'Callaghan <jc...@yahoo.co.uk>wrote:
> This looks very handy Taha thanks for sharing - I'm thinking of trying it
> in
> a page and was wondering if you had gotten around to posting the support
> for
> zone updates anywhere? Thanks.
>
> Regards,
> Jim.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
RE: Modalbox Integration Example
Posted by Jim O'Callaghan <jc...@yahoo.co.uk>.
This looks very handy Taha thanks for sharing - I'm thinking of trying it in
a page and was wondering if you had gotten around to posting the support for
zone updates anywhere? Thanks.
Regards,
Jim.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org
Re: Modalbox Integration Example
Posted by Taha Hafeez <ta...@gmail.com>.
You are always welcome to use it.
I have added support for full loading of scripts and zone updates... Will
update
http://code.google.com/p/tapestry-addons/
<http://code.google.com/p/tapestry-addons/>regards
Taha
On Tue, Mar 22, 2011 at 8:54 PM, antalk <an...@intercommit.nl> wrote:
> Cool,
>
> Mind if i use this in our webapps ? or are you going to publish it online
> (say google code) as a Tapestry Component Library ?
>
> Antal
>
> --
> View this message in context:
> http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4257039.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>
Re: Modalbox Integration Example
Posted by antalk <an...@intercommit.nl>.
Cool,
Mind if i use this in our webapps ? or are you going to publish it online
(say google code) as a Tapestry Component Library ?
Antal
--
View this message in context: http://tapestry.1045711.n5.nabble.com/Modalbox-Integration-Example-tp4248936p4257039.html
Sent from the Tapestry - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org