Modified: websites/production/tapestry/content/component-rendering.html
==============================================================================
--- websites/production/tapestry/content/component-rendering.html (original)
+++ websites/production/tapestry/content/component-rendering.html Sun Feb 25 
23:20:05 2018
@@ -31,8 +31,6 @@
     <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' 
type='text/css' />
     <script src='/resources/highlighter/scripts/shCore.js' 
type='text/javascript'></script>
           <script src='/resources/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script>
         <script>
       SyntaxHighlighter.defaults['toolbar'] = false;
       SyntaxHighlighter.all();
@@ -211,9 +209,7 @@ public class Count
     }
 }
 </pre>
-</div></div><p>Returning false from next() causes Tapestry to re-run the 
BeginRender phase, and from there, re-render the component's body (this 
component does not have a template). Returning true transitions to the 
CleanupRender phase.</p><p>Notice how Tapestry adapts to your methods, as 
marked with the annotations. It also adapts in terms of parameters; the two 
annotated methods here did not perform any output, so they did not need a 
MarkupWriter.</p><p>What's really mind blowing is that the template and body of 
a component will often contain ... more components! That means that many 
different components will be in different phases of their own state 
machine.</p><h2 id="ComponentRendering-RenderPhasesinDetail">Render Phases in 
Detail</h2><p></p><div class="navmenu" style="float:right; width:50%; 
background:#eee; margin:3px; padding:3px">
-<div class="confluence-information-macro 
confluence-information-macro-note"><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
-<p>The SetupRender phase, like all render phases, occurs once for each 
rendering of the component. If the component is inside a looping component (<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>Loop</a>,
 <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html";>Grid</a>,
 etc.), then the SetupRender method will be called once for <em>each</em> 
iteration of the loop.</p></div></div></div><h3 
id="ComponentRendering-SetupRender">SetupRender</h3><p>The SetupRender phase 
(see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SetupRender.html";>SetupRender</a>)
 is where you can perform any one-time per-render setup for your component. 
This is a good place to read component parameters and use them to set temporary 
instance variables.</p><h3 id="ComponentRendering-BeginRender">BeginRender</
 h3><p>The BeginRender phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeginRender.html";>BeginRender</a>)
 occurs at the start of the rendering of the component. For components that 
render a tag, the start tag should be rendered here (the close tag should be 
rendered inside the AfterRender phase). The component can also prevent the 
template and/or body from being rendered by returning false.</p><p>Components 
may or may not have a template. If a component has a template, and the template 
includes a &lt;body&gt; element, then the BeforeRenderBody phase will be 
triggered (giving the component the option of rendering its body or 
not).</p><p>If a component does not have a &lt;body&gt; element in its 
template, then the BeforeRenderBody phase is not triggered.</p><p>If a 
component does not have a template, but does have a body, the BeforeRenderBody 
phase is still triggered.</p><p>If no methods are annotated with BeginRen
 der, then no special output occurs during this phase, but the template (if 
present) or body (if no template is present, but the component has a body) will 
be rendered.</p><h3 
id="ComponentRendering-BeforeRenderTemplate">BeforeRenderTemplate</h3><p>The 
BeforeRenderTemplate phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeforeRenderTemplate.html";>BeforeRenderTemplate</a>)
 exists to allow a component to decorate its template (creating markup around 
the template generated markup), or to allow a component to skip its 
template.</p><h3 
id="ComponentRendering-BeforeRenderBody">BeforeRenderBody</h3><p>The 
BeforeRenderBody phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeforeRenderBody.html";>BeforeRenderBody</a>)
 is associated with a component's body (the portion of its container's template 
that the component occupies). The BeforeRenderBody phase al
 lows the component the ability to skip the body, while still rendering the 
rest of the component's template (if any).</p><p>If no methods are annotated 
with BeforeRenderBody, then the body will be rendered by default. Again, this 
occurs when the &lt;body&gt; element of the component's template is reached, or 
automatically if the component has no template (but the component does have a 
body).</p><h3 
id="ComponentRendering-AfterRenderBody">AfterRenderBody</h3><p>The 
AfterRenderBody phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/AfterRenderBody.html";>AfterRenderBody</a>)
 is executed after the body is rendered; this only occurs for components with a 
body.</p><h3 id="ComponentRendering-AfterRender">AfterRender</h3><p>The 
AfterRender phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/AfterRender.html";>AfterRender</a>)
 complements BeginRender, and is
  often used to render the close tag that matches the start tag rendered in the 
BeginRender phase. In any case, the AfterRender phase can continue on to 
CleanupRender, or revert back to BeginRender (as in our Count component 
example, above).</p><p>If no methods are annotated with AfterRender, then no 
special output occurs, and the CleanupRender phase is triggered.</p><h3 
id="ComponentRendering-CleanupRender">CleanupRender</h3><p>The CleanupRender 
phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/CleanupRender.html";>CleanupRender</a>)
 is the counterpart to SetupRender, allowing final cleanup to occur.</p><h2 
id="ComponentRendering-UsingMethodNamesinsteadofAnnotations">Using Method Names 
instead of Annotations</h2><p>If you prefer to avoid using annotations on your 
methods, you may do so by providing specific names for your methods. The 
required method name is the annotation name, with the first character 
decapitaliz
 ed: setupRender(), beginRender(), etc. As with annotated render phase methods, 
Tapestry is flexible about visibility, return type and parameters.</p><p>Using 
this mechanism, the earlier example can be rewritten as:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+</div></div><p>Returning false from next() causes Tapestry to re-run the 
BeginRender phase, and from there, re-render the component's body (this 
component does not have a template). Returning true transitions to the 
CleanupRender phase.</p><p>Notice how Tapestry adapts to your methods, as 
marked with the annotations. It also adapts in terms of parameters; the two 
annotated methods here did not perform any output, so they did not need a 
MarkupWriter.</p><p>What's really mind blowing is that the template and body of 
a component will often contain ... more components! That means that many 
different components will be in different phases of their own state 
machine.</p><h2 id="ComponentRendering-RenderPhasesinDetail">Render Phases in 
Detail</h2><div class="confluence-information-macro 
confluence-information-macro-note"><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>The SetupRender phase
 , like all render phases, occurs once for each rendering of the component. If 
the component is inside a looping component (<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Loop.html";>Loop</a>,
 <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Grid.html";>Grid</a>,
 etc.), then the SetupRender method will be called once for <em>each</em> 
iteration of the loop.</p></div></div><h3 
id="ComponentRendering-SetupRender">SetupRender</h3><p>The SetupRender phase 
(see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SetupRender.html";>SetupRender</a>)
 is where you can perform any one-time per-render setup for your component. 
This is a good place to read component parameters and use them to set temporary 
instance variables.</p><h3 
id="ComponentRendering-BeginRender">BeginRender</h3><p>The BeginRender phase (s
 ee @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeginRender.html";>BeginRender</a>)
 occurs at the start of the rendering of the component. For components that 
render a tag, the start tag should be rendered here (the close tag should be 
rendered inside the AfterRender phase). The component can also prevent the 
template and/or body from being rendered by returning false.</p><p>Components 
may or may not have a template. If a component has a template, and the template 
includes a &lt;body&gt; element, then the BeforeRenderBody phase will be 
triggered (giving the component the option of rendering its body or 
not).</p><p>If a component does not have a &lt;body&gt; element in its 
template, then the BeforeRenderBody phase is not triggered.</p><p>If a 
component does not have a template, but does have a body, the BeforeRenderBody 
phase is still triggered.</p><p>If no methods are annotated with BeginRender, 
then no special output oc
 curs during this phase, but the template (if present) or body (if no template 
is present, but the component has a body) will be rendered.</p><h3 
id="ComponentRendering-BeforeRenderTemplate">BeforeRenderTemplate</h3><p>The 
BeforeRenderTemplate phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeforeRenderTemplate.html";>BeforeRenderTemplate</a>)
 exists to allow a component to decorate its template (creating markup around 
the template generated markup), or to allow a component to skip its 
template.</p><h3 
id="ComponentRendering-BeforeRenderBody">BeforeRenderBody</h3><p>The 
BeforeRenderBody phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/BeforeRenderBody.html";>BeforeRenderBody</a>)
 is associated with a component's body (the portion of its container's template 
that the component occupies). The BeforeRenderBody phase allows the component 
the ability
  to skip the body, while still rendering the rest of the component's template 
(if any).</p><p>If no methods are annotated with BeforeRenderBody, then the 
body will be rendered by default. Again, this occurs when the &lt;body&gt; 
element of the component's template is reached, or automatically if the 
component has no template (but the component does have a body).</p><h3 
id="ComponentRendering-AfterRenderBody">AfterRenderBody</h3><p>The 
AfterRenderBody phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/AfterRenderBody.html";>AfterRenderBody</a>)
 is executed after the body is rendered; this only occurs for components with a 
body.</p><h3 id="ComponentRendering-AfterRender">AfterRender</h3><p>The 
AfterRender phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/AfterRender.html";>AfterRender</a>)
 complements BeginRender, and is often used to render the clos
 e tag that matches the start tag rendered in the BeginRender phase. In any 
case, the AfterRender phase can continue on to CleanupRender, or revert back to 
BeginRender (as in our Count component example, above).</p><p>If no methods are 
annotated with AfterRender, then no special output occurs, and the 
CleanupRender phase is triggered.</p><h3 
id="ComponentRendering-CleanupRender">CleanupRender</h3><p>The CleanupRender 
phase (see @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/CleanupRender.html";>CleanupRender</a>)
 is the counterpart to SetupRender, allowing final cleanup to occur.</p><h2 
id="ComponentRendering-UsingMethodNamesinsteadofAnnotations">Using Method Names 
instead of Annotations</h2><p>If you prefer to avoid using annotations on your 
methods, you may do so by providing specific names for your methods. The 
required method name is the annotation name, with the first character 
decapitalized: setupRender(), beginRender
 (), etc. As with annotated render phase methods, Tapestry is flexible about 
visibility, return type and parameters.</p><p>Using this mechanism, the earlier 
example can be rewritten as:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">package org.example.app.components;
 
 import org.apache.tapestry5.annotations.Parameter;
@@ -286,7 +282,7 @@ public class Count
 </div></div><h2 id="ComponentRendering-ShortCircuiting">Short 
Circuiting</h2><p>If a method returns a true or false value, this will short 
circuit processing. Other methods within the phase that would ordinarily be 
invoked will not be invoked.</p><p>Most render phase methods should return 
void, to avoid unintentionally short circuiting other methods for the same 
phase.</p><h2 id="ComponentRendering-MethodConflictsandOrdering">Method 
Conflicts and Ordering</h2><p>It is possible to have multiple methods that are 
annotated with the same render phase annotation. This may include methods in 
the same class, or a mix of method defined in a class and inherited from other 
classes.</p><h3 id="ComponentRendering-MixinsBeforeComponent">Mixins Before 
Component</h3><p>When a component has <a  
href="component-mixins.html">mixins</a>, then the mixins' render phase methods 
execute <em>before</em> the component's render phase methods. If a mixin 
extends from a base class, the mixin's parent class met
 hods execute before the mixin subclass' render phase methods.</p><p>Exception: 
Mixins whose class is annotated with @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/MixinAfter.html";>MixinAfter</a>
 are ordered <em>after</em> the component, not before.</p><p>The order in which 
the mixins of a given class (@MixinAfter or mixins before) execute is 
determined by the ordering constraints specified for the mixins. If no 
constraints are provided, the order is undefined. See <a  
href="component-mixins.html">Component Mixins</a> for more details.</p><h3 
id="ComponentRendering-ParentsbeforeChild">Parents before Child</h3><p>Ordering 
is always parent-first. Methods defined in the parent class are always invoked 
before methods defined in the child class.</p><p>When a sub-class overrides an 
render phase method of a base class, the method is only invoked once, along 
with any other base class methods. The subclass can change the <em>implem
 entation</em> of the base class method via an override, but can't change the 
<em>timing</em> of when that method is invoked. See <a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAPESTRY-2311";>TAPESTRY-2311</a>.</p><h3
 id="ComponentRendering-ReverseOrderingforAfterXXXandCleanupRender">Reverse 
Ordering for AfterXXX and CleanupRender</h3><p>The After_XXX_ phases exists to 
balance the Begin_XXX_ and Before_XXX_ phases. Often elements will be started 
inside an earlier phase and then the elements will be ended (closed) inside the 
corresponding After_XXX_ phase (with the body and template of the component 
rendering between).</p><p>In order to ensure that operations occur in the 
correct, and natural order, the render phase methods for these two stages are 
invoked in <em>reverse order</em>:</p><ul><li>Subclass methods</li><li>Parent 
class methods</li><li>Mixin subclass methods</li><li>Mixin parent class 
methods</li></ul><h3 id="ComponentRendering-WithinaSingleClass">Wit
 hin a Single Class</h3><p>Currently, rendering methods having the same 
annotation within a single class are executed in alphabetical order by method 
name. Methods with the same name are ordered by number of parameters. Even so, 
annotating multiple methods with the same rendering phase is not a great idea. 
Instead, just define one method, and have it call the other methods in the 
order you desire.</p><h2 id="ComponentRendering-RenderingComments">Rendering 
Comments</h2><p>Starting with version 5.3, Tapestry can optionally emit 
rendering comments for all requests; these are comments such as &lt;!--BEGIN 
Index:loop (context:Index.tml, line 15)--&gt; that can assist you in debugging 
markup output on the client-side. This will significantly increase the size of 
the rendered markup, but can be very helpful with complex layouts to determine 
which component was responsible for which portion of the rendered 
page.</p><p>Rendering comments are only available when not running in <a  
href="config
 uration.html">production mode</a>.</p><p>To turn on rendering comments for all 
requests, set the <a  
href="configuration.html">tapestry.component-render-tracing-enabled</a> 
configuration symbol to "true".</p><p>To turn on rendering comments only for a 
particular request, add the query parameter <code>t:component-trace=true</code> 
to the URL:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  
http://www.example.com/myapp/mypage?t:component-trace=true
 </pre>
-</div></div></div>
+</div></div><p></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/component-templates.html
==============================================================================
--- websites/production/tapestry/content/component-templates.html (original)
+++ websites/production/tapestry/content/component-templates.html Sun Feb 25 
23:20:05 2018
@@ -100,7 +100,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="templating-and-markup-faq.html">Templating 
and Markup FAQ</a>
+                        <a  href="component-reference.html">Component 
Reference</a>
                 
                         
                     </div>
@@ -109,7 +109,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-classes.html">Component Classes</a>
+                        <a  href="component-libraries.html">Component 
Libraries</a>
                 
                         
                     </div>
@@ -118,7 +118,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-reference.html">Component 
Reference</a>
+                        <a  href="templating-and-markup-faq.html">Templating 
and Markup FAQ</a>
                 
                         
                     </div>
@@ -127,7 +127,7 @@
                 <span class="icon aui-icon aui-icon-small 
aui-iconfont-page-default" title="Page">Page:</span>        </div>
 
         <div class="details">
-                        <a  href="component-libraries.html">Component 
Libraries</a>
+                        <a  href="component-classes.html">Component Classes</a>
                 
                         
                     </div>
@@ -337,7 +337,7 @@
   &lt;/t:replace&gt;
 &lt;/t:extend&gt;
 </pre>
-</div></div></div>
+</div></div><p></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/configuration.html
==============================================================================
--- websites/production/tapestry/content/configuration.html (original)
+++ websites/production/tapestry/content/configuration.html Sun Feb 25 23:20:05 
2018
@@ -147,11 +147,11 @@
 
 
 <h1 id="Configuration-ConfiguringTapestry">Configuring Tapestry</h1><p>This 
page discusses all the ways in which Tapestry can be configured. Tapestry 
applications are configured almost entirely using Java, with very little XML at 
all.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1519597278097 {padding: 0px;}
-div.rbtoc1519597278097 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1519597278097 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1519600771703 {padding: 0px;}
+div.rbtoc1519600771703 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1519600771703 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1519597278097">
+/*]]>*/</style></p><div class="toc-macro rbtoc1519600771703">
 <ul class="toc-indentation"><li><a  
href="#Configuration-XMLconfiguration(web.xml)">XML configuration 
(web.xml)</a></li><li><a  
href="#Configuration-YourApplication'sModuleClass">Your Application's Module 
Class</a></li><li><a  
href="#Configuration-ConfigurationSymbolNames">Configuration Symbol 
Names</a></li><li><a  
href="#Configuration-SettingComponentParameterDefaults">Setting Component 
Parameter Defaults</a></li><li><a  
href="#Configuration-ConfiguringIgnoredPaths">Configuring Ignored 
Paths</a></li><li><a  
href="#Configuration-ConfiguringContentTypeMapping">Configuring Content Type 
Mapping</a></li><li><a  href="#Configuration-SettingExecutionModes">Setting 
Execution Modes</a></li><li><a  
href="#Configuration-SegregatingApplicationsIntoFolders">Segregating 
Applications Into Folders</a></li></ul>
 </div><h2 id="Configuration-XMLconfiguration(web.xml)">XML configuration 
(web.xml)</h2><p>Tapestry runs on top of the standard Java Servlet API. To the 
servlet container, such as Tomcat, Tapestry appears as a <em>servlet 
filter</em>. This gives Tapestry great flexibility in matching URLs without 
requiring lots of XML configuration.</p><p>Although most configuration is done 
with Java, a small but necessary amount of configuration occurs inside the 
servlet deployment descriptor, WEB-INF/web.xml. Most of the configuration is 
boilerplate, nearly the same for all applications.</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>web.xml (partial)</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: xml; gutter: false; theme: Default" 
style="font-size:12px;">&lt;!DOCTYPE web-app
@@ -520,7 +520,7 @@ div.rbtoc1519597278097 li {margin-left:
     }
 }
 </pre>
-</div></div><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This extra mapping is 
unfortunately necessary, because the Servlet API does not provide a way for a 
servlet filter, such as the one used by Tapestry, to know about its 
mapping.</p></div></div><p>This changes the servlet container to <em>only</em> 
forward requests inside the <code>t5app</code> folder to Tapestry; requests for 
other folders (or the root folder) will not be passed to Tapestry at all. The 
symbol contribution informs Tapestry to change the URLs it generates to include 
the necessary folder name; it also affects the logic in Tapestry that 
recognizes and handles requests.</p><p>In addition, if you choose to place page 
template files in the context, rather than on the classpath (as with component 
templates), then you will place those tem
 plate files inside the <code>t5app</code> folder.</p><p>At this time, it is 
still not possible to run multiple Tapestry 5 applications within the same web 
application.</p></div>
+</div></div><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>This extra mapping is 
unfortunately necessary, because the Servlet API does not provide a way for a 
servlet filter, such as the one used by Tapestry, to know about its 
mapping.</p></div></div><p>This changes the servlet container to <em>only</em> 
forward requests inside the <code>t5app</code> folder to Tapestry; requests for 
other folders (or the root folder) will not be passed to Tapestry at all. The 
symbol contribution informs Tapestry to change the URLs it generates to include 
the necessary folder name; it also affects the logic in Tapestry that 
recognizes and handles requests.</p><p>In addition, if you choose to place page 
template files in the context, rather than on the classpath (as with component 
templates), then you will place those tem
 plate files inside the <code>t5app</code> folder.</p><p>At this time, it is 
still not possible to run multiple Tapestry 5 applications within the same web 
application.</p><p>&#160;</p><p></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/dom.html
==============================================================================
--- websites/production/tapestry/content/dom.html (original)
+++ websites/production/tapestry/content/dom.html Sun Feb 25 23:20:05 2018
@@ -31,8 +31,6 @@
     <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' 
type='text/css' />
     <script src='/resources/highlighter/scripts/shCore.js' 
type='text/javascript'></script>
           <script src='/resources/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script>
         <script>
       SyntaxHighlighter.defaults['toolbar'] = false;
       SyntaxHighlighter.all();
@@ -77,9 +75,10 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h1 
id="DOM-DocumentObjectModel">Document Object Model</h1><p>Tapestry 5 takes a 
very different approach to markup generation than most other frameworks. 
Components render out a Document Object Model (DOM). This is a tree of nodes 
representing elements, attributes and text within a document.</p><p>Once all 
rendering is complete, the DOM tree is streamed to the client.</p><p>The <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/MarkupWriter.html";>MarkupWriter</a>
 interface allows the majority of component code to treat the generation of 
output as a stream. In reality, MarkupWriter is more like a cursor into the DOM 
tree, and the DOM may ultimately be operated upon in a random access manner 
(rather than the serial (or buffered) approach used in Tapestry 4).</p><div 
class="navmenu" style="float:right; width:30%; background:white; margin:3px; 
padding:3px">
-<div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">A Note For Tapestry 
4 Users</p><span class="aui-icon aui-icon-small aui-iconfont-info 
confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
-<p>In Tapestry 4, markup generation was based on generating a character 
stream. At the lowest level, the fact that the output was in a markup format 
such as HTML, XHTML or WML was not known. Higher levels, such as the 
IMarkupWriter interface (and its implementations) provide the concept of markup 
generation: elements, attributes, start tags and end tags. This technique 
breaks down when two elements are peers, and not in a parent/child 
relationship. For example, the rendering of a FieldLabel component is affected 
by its companion TextField component. Handling these cases in Tapestry 4 
required a number of kludges and special cases.</p></div></div></div><h1 
id="DOM-DOMClasses">DOM Classes</h1><p>The implementation of this DOM is part 
of Tapestry, despite the fact that several third-party alternatives exist. This 
represents a desire to limit dependencies for the framework, but also the 
Tapestry DOM is streamlined for initial creation, and a limited amount of 
subsequent modification. Mo
 st DOM implementations are more sophisticated than needed for Tapestry, with 
greater support for querying (often using XPath) and manipulation.</p><p>Once 
the Document object is created, you don't directly create new DOM objects; 
instead, each DOM object includes methods that create new sub-objects. This 
primarily applies to the Element class, which can be a container of text, 
comments and other elements.</p><h2 id="DOM-Document">Document</h2><p>The <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/dom/Document.html";>Document</a>
 object represents the an entire document, which is to say, an entire response 
to be sent to the client.</p><p>Documents will have a single root element. The 
newRootElement() method is used to create the root element for the 
document.</p><p>The Document class also has methods for setting and getting the 
DTD, adding comments and text, and finding an element based on a path of 
element names.</p><h2 id="DOM-Element"
 >Element</h2><p>An <a  class="external-link" 
 >href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/dom/Element.html";>Element</a>
 > object represents an element of the document. Elements may have attributes, 
 >and they may themselves contain other elements, as well as text and 
 >comments.</p><p>The Element class has methods for searching, traversing and 
 >manipulating the DOM after it is built.</p><h1 
 >id="DOM-DOMManipulation/Rewriting">DOM Manipulation/Rewriting</h1><p>A 
 >powerful feature of Tapestry 5 is the ability to manipulate the structure and 
 >ordering of the DOM after it has been rendered. For example, this can be used 
 >to alter the output of a component that may otherwise be outside of your 
 >control.</p><p>DOM manipulation is surprisingly fast, too.</p><p>Methods on 
 >Node (and Element, which is a subclass of Node) allow an existing node to be 
 >moved relative to an Element. Nodes may be moved before or after the Element, 
 >or may be moved inside an Element at the top (the firs
 t child) or the bottom (the last child).</p><p>Element's 
<code>attribute</code> method adds a new attribute name/value pair to the 
Element. If an existing attribute with the specified name already exists, then 
then the new value is ignored. This has implications when different pieces of 
code try to add attributes to an Element ... the first to add an attribute will 
"win". Conversely, the <code>forceAttributes</code> method can be used to 
update or remove an attribute.</p><p>In addition, the children of an Element 
may be removed or a Node (and all of its children) removed 
entirely.</p><p>Finally, an Element may "pop": the Element is removed and 
replaced with its children.</p><h1 
id="DOM-MarkupWriter">MarkupWriter</h1><p>The <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/MarkupWriter.html";>MarkupWriter
 interface</a> allows the structure of the document to be built while 
maintaining a streaming metaphor.</p><h2 id="DOM-element()andend()m
 ethods">element() and end() methods</h2><p>Calls to element() create a new 
element within the tree, and may provide attributes for the new element as 
well. Calls to write(), writeln() and writef() write text nodes within the 
current element. <em>Every call to element() should be matched with a call to 
end()</em>, which is used to move the current node up one level.</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+                <div id="ConfluenceContent"><h1 
id="DOM-DocumentObjectModel">Document Object Model</h1><p>Tapestry 5 takes a 
very different approach to markup generation than most other frameworks. 
Components render out a Document Object Model (DOM). This is a tree of nodes 
representing elements, attributes and text within a document.</p><p>Once all 
rendering is complete, the DOM tree is streamed to the client.</p><p>The <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/MarkupWriter.html";>MarkupWriter</a>
 interface allows the majority of component code to treat the generation of 
output as a stream. In reality, MarkupWriter is more like a cursor into the DOM 
tree, and the DOM may ultimately be operated upon in a random access manner 
(rather than the serial (or buffered) approach used in Tapestry 4).</p><div 
style="float:right; width:30%"><div class="confluence-information-macro 
confluence-information-macro-information"><p class="title">A 
 Note For Tapestry 4 Users</p><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>In Tapestry 4, markup generation 
was based on generating a character stream. At the lowest level, the fact that 
the output was in a markup format such as HTML, XHTML or WML was not known. 
Higher levels, such as the IMarkupWriter interface (and its implementations) 
provide the concept of markup generation: elements, attributes, start tags and 
end tags. This technique breaks down when two elements are peers, and not in a 
parent/child relationship. For example, the rendering of a FieldLabel component 
is affected by its companion TextField component. Handling these cases in 
Tapestry 4 required a number of kludges and special cases.</p></div></div></div>
+
+
+<h1 id="DOM-DOMClasses">DOM Classes</h1><p>The implementation of this DOM is 
part of Tapestry, despite the fact that several third-party alternatives exist. 
This represents a desire to limit dependencies for the framework, but also the 
Tapestry DOM is streamlined for initial creation, and a limited amount of 
subsequent modification. Most DOM implementations are more sophisticated than 
needed for Tapestry, with greater support for querying (often using XPath) and 
manipulation.</p><p>Once the Document object is created, you don't directly 
create new DOM objects; instead, each DOM object includes methods that create 
new sub-objects. This primarily applies to the Element class, which can be a 
container of text, comments and other elements.</p><h2 
id="DOM-Document">Document</h2><p>The <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/dom/Document.html";>Document</a>
 object represents the an entire document, which is to say, an entire response 
 to be sent to the client.</p><p>Documents will have a single root element. The 
newRootElement() method is used to create the root element for the 
document.</p><p>The Document class also has methods for setting and getting the 
DTD, adding comments and text, and finding an element based on a path of 
element names.</p><h2 id="DOM-Element">Element</h2><p>An <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/dom/Element.html";>Element</a>
 object represents an element of the document. Elements may have attributes, 
and they may themselves contain other elements, as well as text and 
comments.</p><p>The Element class has methods for searching, traversing and 
manipulating the DOM after it is built.</p><h1 
id="DOM-DOMManipulation/Rewriting">DOM Manipulation/Rewriting</h1><p>A powerful 
feature of Tapestry 5 is the ability to manipulate the structure and ordering 
of the DOM after it has been rendered. For example, this can be used to alter 
the output o
 f a component that may otherwise be outside of your control.</p><p>DOM 
manipulation is surprisingly fast, too.</p><p>Methods on Node (and Element, 
which is a subclass of Node) allow an existing node to be moved relative to an 
Element. Nodes may be moved before or after the Element, or may be moved inside 
an Element at the top (the first child) or the bottom (the last 
child).</p><p>Element's <code>attribute</code> method adds a new attribute 
name/value pair to the Element. If an existing attribute with the specified 
name already exists, then then the new value is ignored. This has implications 
when different pieces of code try to add attributes to an Element ... the first 
to add an attribute will "win". Conversely, the <code>forceAttributes</code> 
method can be used to update or remove an attribute.</p><p>In addition, the 
children of an Element may be removed or a Node (and all of its children) 
removed entirely.</p><p>Finally, an Element may "pop": the Element is removed 
and replaced
  with its children.</p><h1 id="DOM-MarkupWriter">MarkupWriter</h1><p>The <a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/MarkupWriter.html";>MarkupWriter
 interface</a> allows the structure of the document to be built while 
maintaining a streaming metaphor.</p><h2 
id="DOM-element()andend()methods">element() and end() methods</h2><p>Calls to 
element() create a new element within the tree, and may provide attributes for 
the new element as well. Calls to write(), writeln() and writef() write text 
nodes within the current element. <em>Every call to element() should be matched 
with a call to end()</em>, which is used to move the current node up one 
level.</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  writer.element("img", "src", "icon.png", "width", 20, 
"height", 20, alt, "*");
   writer.end();
 </pre>

Modified: websites/production/tapestry/content/extending-the-if-component.html
==============================================================================
--- websites/production/tapestry/content/extending-the-if-component.html 
(original)
+++ websites/production/tapestry/content/extending-the-if-component.html Sun 
Feb 25 23:20:05 2018
@@ -77,7 +77,7 @@
       </div>
 
       <div id="content">
-                <div id="ConfluenceContent"><h1 
id="ExtendingtheIfComponent-ExtendingtheIfComponent">Extending the If 
Component</h1><p>The <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>If</a>
 component can be made very flexible; its main parameter, <code>test</code>, 
does not <em>have</em> to be bound to a boolean value, it merely has to be 
bound to a value that can be <a  
href="extending-the-if-component.html">coerced</a> to boolean.</p><p>For 
example, you may be working on an application that does a lot of <a  
class="external-link" 
href="http://lucene.apache.org/java/docs/index.html";>Lucene</a> searches, and 
you represent the results as a SearchResult object:</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>SearchResult.java</b></div><div 
class="codeContent panelContent pdl">
+                <div id="ConfluenceContent"><h1 
id="ExtendingtheIfComponent-ExtendingtheIfComponent">Extending the If 
Component</h1><p>The <a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/If.html";>If</a>
 component can be made very flexible; its main parameter, <code>test</code>, 
does not <em>have</em> to be bound to a boolean value, it merely has to be 
bound to a value that can be <a  
href="parameter-type-coercion.html">coerced</a> to boolean.</p><p>For example, 
you may be working on an application that does a lot of <a  
class="external-link" 
href="http://lucene.apache.org/java/docs/index.html";>Lucene</a> searches, and 
you represent the results as a SearchResult object:</p><div class="code panel 
pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>SearchResult.java</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public class SearchResult&lt;T&gt; {
   public final Class&lt;T&gt; itemType;
   public final List&lt;T&gt; items;
@@ -108,7 +108,7 @@
   &lt;/t:if&gt;
 &lt;/t:if&gt;
 </pre>
-</div></div><p>The first test checks to see if <code>searchResult</code> is 
not null (null is treated as false). The second checks to see if the search 
result is empty.</p><p>What we'd like is for the test to look at the 
<code>searchResult</code> directly and treat an empty search result as false, 
and a non-empty search result as true. This is similar to what Tapestry already 
does for Collections.</p><p>This is just a matter of extending the TypeCoercer 
service:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeHeader panelHeader pdl" style="border-bottom-width: 
1px;"><b>AppModule.java (partial)</b></div><div class="codeContent panelContent 
pdl">
+</div></div><p>The first test checks to see if <code>searchResult</code> is 
not null (null is treated as false). The second checks to see if the search 
result is empty.</p><p>What we'd like is for the test to look at the 
<code>searchResult</code> directly and treat an empty search result as false, 
and a non-empty search result as true. This is similar to what Tapestry already 
does for Collections.</p><p>This is just a matter of adding a <a  
href="parameter-type-coercion.html"> 
<code>Coercion</code></a><code>:</code></p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>AppModule.java (partial)</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">public static void 
contributeTypeCoercer(Configuration&lt;CoercionTuple&gt; configuration) {
 
   add(configuration, SearchResult.class, Boolean.class,

Modified: websites/production/tapestry/content/layout-component.html
==============================================================================
--- websites/production/tapestry/content/layout-component.html (original)
+++ websites/production/tapestry/content/layout-component.html Sun Feb 25 
23:20:05 2018
@@ -273,7 +273,7 @@ public class Layout
     &lt;/body&gt;
 &lt;/html&gt;
 &#160;</pre>
-</div></div></div>
+</div></div><p></p></div>
       </div>
 
       <div class="clearer"></div>

Modified: websites/production/tapestry/content/legacy-javascript.html
==============================================================================
--- websites/production/tapestry/content/legacy-javascript.html (original)
+++ websites/production/tapestry/content/legacy-javascript.html Sun Feb 25 
23:20:05 2018
@@ -182,9 +182,12 @@
 </div>
 
 
-<p>In production mode, by default, Tapestry will merge JavaScript libraries, 
add version numbering, and set a far-future expires header to encourage 
aggressive browser caching. Starting with version 5.3, Tapestry can also 
automatically minify (compress) JavaScript libraries when in <a  
href="configuration.html">production mode</a>.</p><p>In addition, as will be 
described in detail <a  href="legacy-javascript.html">below</a>, Tapestry comes 
with the <a  class="external-link" href="http://www.prototypejs.org/"; 
rel="nofollow">Prototype</a> and <a  class="external-link" 
href="http://script.aculo.us/"; rel="nofollow">Scriptaculous</a> libraries, or 
you can easily swap in JQuery using a 3rd-party module.</p><h1 
id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom 
JavaScript</h1><p>When adding your own custom JavaScript or third-party 
libraries, just follow the strategies below to take advantage of Tapestry's 
JavaScript support mechanisms.</p><p>The recommended practice in Tapestry is
  to package up any significant amount of JavaScript as a static JavaScript 
library, a .js file that can be downloaded to the client. Keep your in-page 
JavaScript code to a minimum, just the few statements needed to initialize 
objects and reference methods in the JavaScript libraries.</p><h2 
id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your 
JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a 
JavaScript library within your page or component. Although you can use direct 
<code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> 
approach, you should only use it for JavaScript that resides outside of your 
application. For JavaScript within your app, Tapestry provides <em>much</em> 
better ways to do the same thing. Most users choose the simplest, the @Import 
annotation approach.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
-<p><strong>JumpStart Demo:</strong> <br clear="none">
-<a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/javascript";
 rel="nofollow">JavaScript</a> </p></div><h2 
id="LegacyJavaScript-Approach1:@Import">Approach 1: @Import</h2><p>Use the @<a  
class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html";>Import</a>
 annotation (or @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/IncludeJavaScriptLibrary.html";>IncludeJavaScriptLibrary</a>
 in Tapestry 5.0 and 5.1) to include links to JavaScript (and CSS) files in 
your page or component. Tapestry ensures that each such file is only referenced 
once in your page.</p><div class="sectionColumnWrapper"><div 
class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>For Tapestry 5.2 and late
 r</b></div><div class="codeContent panelContent pdl">
+<p>In production mode, by default, Tapestry will merge JavaScript libraries, 
add version numbering, and set a far-future expires header to encourage 
aggressive browser caching. Starting with version 5.3, Tapestry can also 
automatically minify (compress) JavaScript libraries when in <a  
href="configuration.html">production mode</a>.</p><p>In addition, as will be 
described in detail <a  href="legacy-javascript.html">below</a>, Tapestry comes 
with the <a  class="external-link" href="http://www.prototypejs.org/"; 
rel="nofollow">Prototype</a> and <a  class="external-link" 
href="http://script.aculo.us/"; rel="nofollow">Scriptaculous</a> libraries, or 
you can easily swap in JQuery using a 3rd-party module.</p><h1 
id="LegacyJavaScript-AddingCustomJavaScript">Adding Custom 
JavaScript</h1><p>When adding your own custom JavaScript or third-party 
libraries, just follow the strategies below to take advantage of Tapestry's 
JavaScript support mechanisms.</p><p>The recommended practice in Tapestry is
  to package up any significant amount of JavaScript as a static JavaScript 
library, a .js file that can be downloaded to the client. Keep your in-page 
JavaScript code to a minimum, just the few statements needed to initialize 
objects and reference methods in the JavaScript libraries.</p><h2 
id="LegacyJavaScript-LinkingtoyourJavaScriptlibraries">Linking to your 
JavaScript libraries</h2><p>Tapestry provides several ways to add a link to a 
JavaScript library within your page or component. Although you can use direct 
<code>&lt;script type="text/javascript" src="xxx.js"&gt;&lt;/script&gt;</code> 
approach, you should only use it for JavaScript that resides outside of your 
application. For JavaScript within your app, Tapestry provides <em>much</em> 
better ways to do the same thing. Most users choose the simplest, the @Import 
annotation approach.</p><div style="float: right; max-width: 30%"><div 
class="panel" style="border-color: #eee;border-width: 1px;"><div 
class="panelHeader" style="bord
 er-bottom-width: 1px;border-bottom-color: #eee;background-color: 
#eee;"><b>JumpStart Demo</b></div><div class="panelContent">
+<p>&#160;<a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/javascript";
 rel="nofollow">JavaScript</a></p>
+</div></div></div>
+
+
+<h2 id="LegacyJavaScript-Approach1:@Import">Approach 1: @Import</h2><p>Use the 
@<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html";>Import</a>
 annotation (or @<a  class="external-link" 
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/IncludeJavaScriptLibrary.html";>IncludeJavaScriptLibrary</a>
 in Tapestry 5.0 and 5.1) to include links to JavaScript (and CSS) files in 
your page or component. Tapestry ensures that each such file is only referenced 
once in your page.</p><div class="sectionColumnWrapper"><div 
class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader 
panelHeader pdl" style="border-bottom-width: 1px;"><b>For Tapestry 5.2 and 
later</b></div><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">@Import(library={"context:js/jquery.js",
                "context:js/myeffects.js"})
 public class MyComponent
@@ -224,9 +227,12 @@ public class MyComponent
     renderSupport.addScriptLink(myEffects);
   }
 </pre>
-</div></div></div></div></div></div><p>Tapestry will ensure that the necessary 
&lt;link&gt; elements are added to the <em>top</em> of the document (in the 
&lt;head&gt; element). With Tapestry 5.3 and later the new elements are 
inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they 
appear at the top of the &lt;head&gt; element).</p><p>As with the annotation 
approach, adding the same asset multiple times does <em>not</em> create 
duplicate links.</p><p>The <code>setupRender</code> method (the name is 
specifically linked to a <a  href="legacy-javascript.html">render phase</a>) is 
the correct place to inform the JavaScriptSupport (or RenderSupport) service 
that the library is needed.</p><div class="navmenu" style="float:right; 
background:#eee; margin:3px; padding:0 1em">
-<p><strong>JumpStart Demo:</strong> <br clear="none">
-<a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/reusable";
 rel="nofollow">Reusable JavaScript</a> </p></div><h3 
id="LegacyJavaScript-TheaddScriptmethod">The <code>addScript</code> 
method</h3><p>The <code>addScript</code> method is used when you need to add 
some JavaScript code directly to the page. This will be inserted at the 
<em>bottom of the document</em>, and will only be executed when the document 
has finished loading on the client (i.e., from the window.onload event 
handler).</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div 
class="codeContent panelContent pdl">
+</div></div></div></div></div></div><p>Tapestry will ensure that the necessary 
&lt;link&gt; elements are added to the <em>top</em> of the document (in the 
&lt;head&gt; element). With Tapestry 5.3 and later the new elements are 
inserted at the bottom of the &lt;head&gt; element; in versions before 5.3 they 
appear at the top of the &lt;head&gt; element).</p><p>As with the annotation 
approach, adding the same asset multiple times does <em>not</em> create 
duplicate links.</p><p>The <code>setupRender</code> method (the name is 
specifically linked to a <a  href="legacy-javascript.html">render phase</a>) is 
the correct place to inform the JavaScriptSupport (or RenderSupport) service 
that the library is needed.</p><div style="max-width: 30%; float: right;"><div 
class="panel" style="border-color: #eee;border-width: 1px;"><div 
class="panelHeader" style="border-bottom-width: 1px;border-bottom-color: 
#eee;background-color: #eee;"><b>JumpStart Demo</b></div><div 
class="panelContent">
+<p>&#160;<a  class="external-link" 
href="http://jumpstart.doublenegative.com.au/jumpstart/examples/javascript/reusable";
 rel="nofollow">Reusable JavaScript</a></p>
+</div></div></div>
+
+
+<h3 id="LegacyJavaScript-TheaddScriptmethod">The <code>addScript</code> 
method</h3><p>The <code>addScript</code> method is used when you need to add 
some JavaScript code directly to the page. This will be inserted at the 
<em>bottom of the document</em>, and will only be executed when the document 
has finished loading on the client (i.e., from the window.onload event 
handler).</p><div class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeHeader panelHeader pdl" 
style="border-bottom-width: 1px;"><b>Tapestry 5.2 and later</b></div><div 
class="codeContent panelContent pdl">
 <pre class="brush: text; gutter: false; theme: Default" 
style="font-size:12px;">void afterRender()
 {
     javaScriptSupport.addScript(
@@ -316,11 +322,12 @@ public class MyComponent
 </div></div><p>Then use it somewhere else:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  new Effect.Fade($(myId), { duration: 
$T(myid).fadeDuration });
 </pre>
-</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components 
and Mixins</h1><p class="confluence-link">Tapestry provides easy-to-use support 
for <em>Ajax</em>, the technique of using JavaScript to dynamically updating 
parts of a web page with content from the server without redrawing the whole 
page. See&#160;<a  href="ajax-and-zones.html">Ajax and Zones</a> for 
details.</p><h1 id="LegacyJavaScript-Built-inLibraries">Built-in 
Libraries</h1><p></p><div class="navmenu" style="float:right; width:30%; 
background:#eee; margin:3px; padding:3px">
-<p><font color="green"><strong>Alternatives to Prototype</strong></font><br 
clear="none">
-Tapestry also works well with other JavaScript libraries, such as JQuery and 
ExtJS:</p>
-<ul><li><strong><a  class="external-link" 
href="https://github.com/got5/tapestry5-jquery"; rel="nofollow">Tapestry5-Jquery 
module</a></strong> &#8211; Using JQuery <em>instead of</em> 
Prototype</li><li><a  class="external-link" 
href="http://wiki.apache.org/tapestry/Tapestry5HowToIntegrateJQuery";>Tapestry5HowToIntegrateJQuery</a>
 &#8211; Using JQuery <em>in addition to</em> Prototype</li><li><a  
class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-999";>TAP5-999</a> tracks work 
underway to introduce an agnostic tapestry.js layer to allow switching from 
Prototype to JQuery. See <span class="error">[JavaScript Rewrite]</span> for 
more info.</li><li><a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-1364";>TAPS-1364</a> lists some 
starting points for ExtJS integration</li></ul>
-</div>Tapestry comes with the <a  class="external-link" 
href="http://www.prototypejs.org/"; rel="nofollow">Prototype</a> and <a  
class="external-link" href="http://script.aculo.us/"; 
rel="nofollow">Scriptaculous</a> libraries ... no extra download is required. 
Tapestry will automatically link into your pages the prototype.js, 
scriptaculous.js, and effects.js libraries, as well as the Tapestry library, 
tapestry.js (which largely consists of support for form input validation). 
Starting with Tapestry 5.3, <a  class="external-link" 
href="http://documentcloud.github.com/underscore/"; 
rel="nofollow">Underscore</a> is also included.<h2 
id="LegacyJavaScript-PrototypeandScriptaculousVersions">Prototype and 
Scriptaculous Versions</h2><p>Tapestry included prototype and scriptaculous in 
versions prior to Tapestry 5.4. See <a  
href="supported-environments-and-versions.html">Supported Environments and 
Versions</a> for a matrix of prototype and scriptaculous versions supported by 
Tapestry.</p><p>In v
 ersions before 5.4, Tapestry used a modified version of the main Scriptaculous 
library, scriptaculous.js, with the library's default <a  class="external-link" 
href="http://wiki.script.aculo.us/scriptaculous/show/Usage"; 
rel="nofollow">autoloading</a> behavior turned off. This lets Tapestry and 
Tapestry components control which Scriptaculus scripts are loaded, rather than 
having <em>all</em> of them loaded unnecessarily.</p><p>If you need access to 
other Scriptaculous libraries, you can provide them as follows:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><h1 id="LegacyJavaScript-AjaxComponentsandMixins">Ajax Components 
and Mixins</h1><p class="confluence-link">Tapestry provides easy-to-use support 
for <em>Ajax</em>, the technique of using JavaScript to dynamically updating 
parts of a web page with content from the server without redrawing the whole 
page. See&#160;<a  href="ajax-and-zones.html">Ajax and Zones</a> for 
details.</p><h1 id="LegacyJavaScript-Built-inLibraries">Built-in 
Libraries</h1><div style="float: right; max-width: 30%"><div class="panel" 
style="border-color: #eee;border-width: 1px;"><div class="panelHeader" 
style="border-bottom-width: 1px;border-bottom-color: #eee;background-color: 
#eee;"><b>Alternatives to Prototype</b></div><div class="panelContent">
+<p>Tapestry 5.4 includes the ability to switch between Prototype and JQuery. 
For Tapestry 5.3 and earlier, you also have some options::</p><ul><li><a  
class="external-link" href="https://github.com/got5/tapestry5-jquery"; 
rel="nofollow">Tapestry5-Jquery module</a>&#160;&#8211; Using JQuery 
<em>instead of</em> Prototype</li><li><a  class="external-link" 
href="http://wiki.apache.org/tapestry/Tapestry5HowToIntegrateJQuery";>Tapestry5HowToIntegrateJQuery</a>&#160;&#8211;
 Using JQuery <em>in addition to</em> Prototype</li><li><a  
class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5-1364";>TAPS-1364</a>&#160;&#8211;
 lists some starting points for ExtJS integration</li></ul>
+</div></div></div>
+
+
+<p>&#160;</p><p>Tapestry 5.4 and earlier come with the <a  
class="external-link" href="http://www.prototypejs.org/"; 
rel="nofollow">Prototype</a> and <a  class="external-link" 
href="http://script.aculo.us/"; rel="nofollow">Scriptaculous</a> libraries ... 
no extra download is required. Tapestry will automatically link into your pages 
the prototype.js, scriptaculous.js, and effects.js libraries, as well as the 
Tapestry library, tapestry.js (which largely consists of support for form input 
validation). Starting with Tapestry 5.3, <a  class="external-link" 
href="http://documentcloud.github.com/underscore/"; 
rel="nofollow">Underscore</a> is also included.</p><h2 
id="LegacyJavaScript-PrototypeandScriptaculousVersions">Prototype and 
Scriptaculous Versions</h2><p>Tapestry included only Prototype and 
Scriptaculous in versions prior to Tapestry 5.4. See <a  
href="supported-environments-and-versions.html">Supported Environments and 
Versions</a> for a matrix of prototype and scriptaculous versions
  supported by Tapestry.</p><p>In versions before 5.4, Tapestry used a modified 
version of the main Scriptaculous library, scriptaculous.js, with the library's 
default <a  class="external-link" 
href="http://wiki.script.aculo.us/scriptaculous/show/Usage"; 
rel="nofollow">autoloading</a> behavior turned off. This lets Tapestry and 
Tapestry components control which Scriptaculus scripts are loaded, rather than 
having <em>all</em> of them loaded unnecessarily.</p><p>If you need access to 
other Scriptaculous libraries, you can provide them as follows:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">  @Inject @Path("${tapestry.scriptaculous}/dragdrop.js")
   private Asset dragDropLibrary;
 

Modified: websites/production/tapestry/content/localization.html
==============================================================================
--- websites/production/tapestry/content/localization.html (original)
+++ websites/production/tapestry/content/localization.html Sun Feb 25 23:20:05 
2018
@@ -31,8 +31,6 @@
     <link href='/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' 
type='text/css' />
     <script src='/resources/highlighter/scripts/shCore.js' 
type='text/javascript'></script>
           <script src='/resources/highlighter/scripts/shBrushJava.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushXml.js' 
type='text/javascript'></script>
-          <script src='/resources/highlighter/scripts/shBrushPlain.js' 
type='text/javascript'></script>
         <script>
       SyntaxHighlighter.defaults['toolbar'] = false;
       SyntaxHighlighter.all();
@@ -128,9 +126,7 @@
 </div>
 
 
-<p>Localization support is well integrated into Tapestry. Tapestry allows you 
to easily separate the text you present to your users from the rest of your 
application ... pull it out of your Java code and even out of your component 
templates. You can then translate your messages into other languages and let 
Tapestry put everything together.</p><h2 
id="Localization-ComponentMessageCatalogs">Component Message 
Catalogs</h2><p>Each component class may have a component message catalog. A 
component message catalog is a set of files with the extension ".properties". 
These property files are the same format used by java.util.ResourceBundle, just 
lines of <code>key=value</code>. These files are stored on the classpath, in 
the same package folder as the page or component's compiled Java 
class.</p><p>So for a class named <code>org.example.myapp.pages.MyPage</code>, 
you would have a main properties file as 
<code>org/example/myapp/pages/MyPage.properties</code>.</p><p>If you have a 
translations o
 f these values, you provide additional properties file, adding an <a  
class="external-link" 
href="http://www.loc.gov/standards/iso639-2/englangn.html"; rel="nofollow">ISO 
language code</a> before the extension. Thus, if you have a French translation, 
you could create a file <code>MyPage_fr.properties</code>.</p><p>Any values in 
the more language specific file will <em>override</em> values from the main 
properties file. If you had an even more specific localization for just French 
as spoken in France, you could create <code>MyPage_fr_FR.properties</code> 
(that's a language code plus a country code, and you can even go further and 
add variants ... but its unlikely that you'll ever need to go beyond just 
language codes in practice).</p><p>The messages in the catalog are accessed by 
keys. Tapestry ignores the case of the keys when accessing messages in the 
catalog.</p><h3 id="Localization-ComponentMessageCatalogInheritance">Component 
Message Catalog Inheritance</h3><p>If a component clas
 s is a subclass of another component class, then it inherits that base class' 
message catalog. Its own message catalog extends and overrides the values 
inherited from the base class.</p><p>In this way, you could have a base 
component class that contained common messages, and extend or override those 
messages in subclasses (just as you would extend or override the methods of the 
base component class). This, of course, works for as many levels of inheritance 
as you care to support.</p><h2 
id="Localization-Application-wideMessageCatalog">Application-wide Message 
Catalog</h2><p>If the file 
<code>WEB-INF/</code><em>AppName</em><code>.properties</code> exists in the 
context, it will be used as an application-wide message catalog. The 
<em>AppName</em> is derived from the name of the filter inside the web.xml 
file; this is most often just "app", thus <code>WEB-INF/app.properties</code>. 
The search for the file is case sensitive. The properties files may be 
localized.</p><p>Individual pages 
 and components can override the values defined in the message catalog.</p><div 
class="navmenu" style="float:right; width:45%; background:white; margin:3px; 
padding:3px">
-<div class="confluence-information-macro confluence-information-macro-note"><p 
class="title">Avoid BOMs</p><span class="aui-icon aui-icon-small 
aui-iconfont-warning confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body">
-<p>Make sure that your properties files don't contain <a  
class="external-link" href="http://en.wikipedia.org/wiki/Byte_order_mark"; 
rel="nofollow">byte order marks (BOM)</a>, because Java &#8211; and thus 
Tapestry &#8211; doesn't support BOM in properties files (see <a  
class="external-link" href="http://bugs.sun.com/view_bug.do?bug_id=4508058"; 
rel="nofollow">http://bugs.sun.com/view_bug.do?bug_id=4508058</a>). Some 
editors write them out when saving a file in UTF-8, so watch 
out.</p></div></div></div><h2 
id="Localization-PropertiesFileCharset">Properties File Charset</h2><p>Tapestry 
uses the <code>UTF-8</code> character set (charset) when reading the properties 
files in a message catalog. This means that you don't have to use the Java 
<code>native2ascii</code> tool.</p><h2 
id="Localization-LocalizedComponentTemplates">Localized Component 
Templates</h2><p>The same lookup mechanism applies to component templates. 
Tapestry will search for a localized version of each component template
  and use the closest match. Thus you could have <code>MyPage_fr.html</code> 
for French users, and <code>MyPage.html</code> for all other users.</p><h2 
id="Localization-AccessingLocalizedMessages">Accessing Localized 
Messages</h2><p>The above discusses what files to create and where to store 
them, but doesn't address how to make use of that information.</p><p>Messages 
can be accessed in one of two ways:</p><ul><li>Using the "message:" <a  
href="component-parameters.html">binding expression</a> in a component 
template</li><li>By injecting the component's Messages object<br clear="none"> 
In the first case, you may use the message: binding prefix with component 
parameters, or with template expansions:</li></ul><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<p>Localization support is well integrated into Tapestry. Tapestry allows you 
to easily separate the text you present to your users from the rest of your 
application ... pull it out of your Java code and even out of your component 
templates. You can then translate your messages into other languages and let 
Tapestry put everything together.</p><h2 
id="Localization-ComponentMessageCatalogs">Component Message 
Catalogs</h2><p>Each component class may have a component message catalog. A 
component message catalog is a set of files with the extension ".properties". 
These property files are the same format used by java.util.ResourceBundle, just 
lines of <code>key=value</code>. These files are stored on the classpath, in 
the same package folder as the page or component's compiled Java 
class.</p><p>So for a class named <code>org.example.myapp.pages.MyPage</code>, 
you would have a main properties file as 
<code>org/example/myapp/pages/MyPage.properties</code>.</p><p>If you have a 
translations o
 f these values, you provide additional properties file, adding an <a  
class="external-link" 
href="http://www.loc.gov/standards/iso639-2/englangn.html"; rel="nofollow">ISO 
language code</a> before the extension. Thus, if you have a French translation, 
you could create a file <code>MyPage_fr.properties</code>.</p><p>Any values in 
the more language specific file will <em>override</em> values from the main 
properties file. If you had an even more specific localization for just French 
as spoken in France, you could create <code>MyPage_fr_FR.properties</code> 
(that's a language code plus a country code, and you can even go further and 
add variants ... but its unlikely that you'll ever need to go beyond just 
language codes in practice).</p><p>The messages in the catalog are accessed by 
keys. Tapestry ignores the case of the keys when accessing messages in the 
catalog.</p><h3 id="Localization-ComponentMessageCatalogInheritance">Component 
Message Catalog Inheritance</h3><p>If a component clas
 s is a subclass of another component class, then it inherits that base class' 
message catalog. Its own message catalog extends and overrides the values 
inherited from the base class.</p><p>In this way, you could have a base 
component class that contained common messages, and extend or override those 
messages in subclasses (just as you would extend or override the methods of the 
base component class). This, of course, works for as many levels of inheritance 
as you care to support.</p><h2 
id="Localization-Application-wideMessageCatalog">Application-wide Message 
Catalog</h2><p>If the file 
<code>WEB-INF/</code><em>AppName</em><code>.properties</code> exists in the 
context, it will be used as an application-wide message catalog. The 
<em>AppName</em> is derived from the name of the filter inside the web.xml 
file; this is most often just "app", thus <code>WEB-INF/app.properties</code>. 
The search for the file is case sensitive. The properties files may be 
localized.</p><p>Individual pages 
 and components can override the values defined in the message catalog.</p><div 
class="confluence-information-macro confluence-information-macro-warning"><p 
class="title">Avoid BOMs</p><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>Make sure that your properties 
files don't contain <a  class="external-link" 
href="http://en.wikipedia.org/wiki/Byte_order_mark"; rel="nofollow">byte order 
marks (BOM)</a>, because Java&#160;&#8211; and thus Tapestry&#160;&#8211; 
doesn't support BOM in properties files (see&#160;<a  class="external-link" 
href="http://bugs.sun.com/view_bug.do?bug_id=4508058"; 
rel="nofollow">http://bugs.sun.com/view_bug.do?bug_id=4508058</a>). Some 
editors write them out when saving a file in UTF-8, so watch 
out.</p></div></div><p>&#160;</p><h2 
id="Localization-PropertiesFileCharset">Properties File Charset</h2><p>Tapestry 
uses the <code>UTF-8</code> character set (charset) whe
 n reading the properties files in a message catalog. This means that you don't 
have to use the Java <code>native2ascii</code> tool.</p><h2 
id="Localization-LocalizedComponentTemplates">Localized Component 
Templates</h2><p>The same lookup mechanism applies to component templates. 
Tapestry will search for a localized version of each component template and use 
the closest match. Thus you could have <code>MyPage_fr.html</code> for French 
users, and <code>MyPage.html</code> for all other users.</p><h2 
id="Localization-AccessingLocalizedMessages">Accessing Localized 
Messages</h2><p>The above discusses what files to create and where to store 
them, but doesn't address how to make use of that information.</p><p>Messages 
can be accessed in one of two ways:</p><ul><li>Using the "message:" <a  
href="component-parameters.html">binding expression</a> in a component 
template</li><li>By injecting the component's Messages object<br clear="none"> 
In the first case, you may use the message: binding pr
 efix with component parameters, or with template expansions:</li></ul><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">&lt;t:layout title="message:page-title"&gt;
 
   ${message:greeting}, ${user.name}!
@@ -180,7 +176,7 @@ public String getDisplayLanguage() {
 }
 </pre>
 </div></div><p>Once a persistent locale is set, you will see the locale name 
as the first virtual folder in page render and component event requests URLs. 
In this way, a persistent locale will, in fact, persist from request to 
request, or in a user's bookmarks.</p><p>You will see the new locale take 
effect on the next request. If it is changed in a component event request 
(which is typical), the new locale will be used in the subsequent page render 
request.</p><p>Note that the locale for a page is fixed (it can't change once 
the page instance is created). In addition, a page may only be attached to a 
request once. In other words, if code in your page changes the persistent 
locale, you won't see a change to the page's locale (or localized messages) 
<em>in that request</em>.</p><h2 id="Localization-Built-inLocales">Built-in 
Locales</h2><p>While your application can support any locale (and thus any 
language) that you want, Tapestry provides only a limited set of translations 
for its ow
 n built-in messages. As of Tapestry 5.3, the following locales have 
translations provided:</p><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>en (English)</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>el (Greek)</span></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span>it (Italian)</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><span>pl 
(Polish)</span></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><span>sv 
(Swedish)</span></span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>bg (Bulgarian)</p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>es (Spanish)</span></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span>ja (Japanese)</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><span>pt 
(Portuguese)</span></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span><span>
 vi (Vietnamese)</span></span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p>cs (Czech)<sup>1</sup></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span>fi (Finnish)</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><span>mk 
(Macedonian)</span></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>ru (Russian)</span></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span>zh 
(Chinese)</span></p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>da (Danish)</span></p></td><td colspan="1" 
rowspan="1" class="confluenceTd"><p><span>fr (French)</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><span>nl 
(Dutch)</span></p></td><td colspan="1" rowspan="1" class="confluenceTd">sl 
(Slovenian)<sup>2</sup></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p>&#160;</p></td></tr><tr><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>de (German)</span></p></td><td colspan="1" 
 rowspan="1" class="confluenceTd"><p><span>hr (Croatian)</span></p></td><td 
colspan="1" rowspan="1" class="confluenceTd"><p><span>no 
(Norwegian)</span></p></td><td colspan="1" rowspan="1" 
class="confluenceTd"><p><span>sr (Serbian)</span></p></td><td colspan="1" 
rowspan="1" 
class="confluenceTd"><p>&#160;</p></td></tr></tbody></table></div><p><sup>1&#160;</sup><span>as
 of Tapestry 5.3.8</span></p><p><span>&#160;</span><sup>2 </sup><span>as of 
Tapestry 5.4</span></p><h3 
id="Localization-ProvidingtranslationsforTapestrybuilt-inmessages">Providing 
translations for Tapestry built-in messages</h3><p>Fortunately, Tapestry uses 
all the same mechanisms for its own locale support as it provides for your 
application. So, to support other locales, just translate the built-in message 
catalog (property) files yourself:</p><p>&#160;</p><style 
type="text/css">table.sectionMacro { width: auto; }</style>
-<div class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry 5.4 and later</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=tapestry-core/src/main/resources/org/apache/tapestry5";>core.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha";>tapestry-kaptcha.properties</a></p></td></tr></tbody></table></div></div><div
 class="columnMacro"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry 5.3.x</p></th></tr><tr><td colspan="1" row
 span="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/BeanEditForm.properties?view=markup";>BeanEditForm.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties?view=markup";>DateField.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/Errors.properties?view=markup";>Errors.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/br
 
anches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/GridColumns.properties?view=markup">GridColumns.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/GridPager.properties?view=markup";>GridPager.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/Palette.properties?view=markup";>Palette.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/internal/ValidationMessages.properties?view=markup
 ">ValidationMessages.properties</a></p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/tapestry-kaptcha.properties?view=markup";>tapestry-kaptcha.properties</a></p></td></tr></tbody></table></div></div></div></div></div><p>To
 have Tapestry use these new files, just put them in the corresponding 
package-named directory within your own app (for example, 
src/main/resources/org/apache/tapestry5/core.properties).</p><p>Finally, please 
open a new feature request <a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5";>here</a> and attach the 
translated files so that they can be included in the next release of 
Tapestry.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span
 ><div class="confluence-information-macro-body"><p>Please note that a patch is 
 >always preferred over an archive of properties files.</p></div></div></div>
+<div class="sectionColumnWrapper"><div class="sectionMacro"><div 
class="sectionMacroRow"><div class="columnMacro"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry 5.4 and later</p></th></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=tapestry-core/src/main/resources/org/apache/tapestry5";>core.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git;a=tree;f=tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha";>tapestry-kaptcha.properties</a></p></td></tr></tbody></table></div></div><div
 class="columnMacro"><div class="table-wrap"><table 
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" 
class="confluenceTh"><p>Tapestry 5.3.x</p></th></tr><tr><td colspan="1" row
 span="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/BeanEditForm.properties?view=markup";>BeanEditForm.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/DateField.properties?view=markup";>DateField.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/Errors.properties?view=markup";>Errors.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/br
 
anches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/GridColumns.properties?view=markup">GridColumns.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/GridPager.properties?view=markup";>GridPager.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/corelib/components/Palette.properties?view=markup";>Palette.properties</a></p></td></tr><tr><td
 colspan="1" rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-core/src/main/resources/org/apache/tapestry5/internal/ValidationMessages.properties?view=markup
 ">ValidationMessages.properties</a></p></td></tr><tr><td colspan="1" 
rowspan="1" class="confluenceTd"><p><a  class="external-link" 
href="http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-kaptcha/src/main/resources/org/apache/tapestry5/kaptcha/tapestry-kaptcha.properties?view=markup";>tapestry-kaptcha.properties</a></p></td></tr></tbody></table></div></div></div></div></div><p>To
 have Tapestry use these new files, just put them in the corresponding 
package-named directory within your own app (for example, 
src/main/resources/org/apache/tapestry5/core.properties).</p><p>Finally, please 
open a new feature request <a  class="external-link" 
href="https://issues.apache.org/jira/browse/TAP5";>here</a> and attach the 
translated files so that they can be included in the next release of 
Tapestry.</p><div class="confluence-information-macro 
confluence-information-macro-information"><span class="aui-icon aui-icon-small 
aui-iconfont-info confluence-information-macro-icon"></span
 ><div class="confluence-information-macro-body"><p>Please note that a patch is 
 >always preferred over an archive of properties 
 >files.</p></div></div><p></p></div>
       </div>
 
       <div class="clearer"></div>


Reply via email to