You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by bu...@apache.org on 2014/01/18 19:21:06 UTC

svn commit: r894647 [1/9] - in /websites/production/tapestry/content: ./ cache/

Author: buildbot
Date: Sat Jan 18 18:21:05 2014
New Revision: 894647

Log:
Production update by buildbot for tapestry

Modified:
    websites/production/tapestry/content/ajax-and-zones.html
    websites/production/tapestry/content/assets.html
    websites/production/tapestry/content/autoloading-modules.html
    websites/production/tapestry/content/bean-validation.html
    websites/production/tapestry/content/cache/main.pageCache
    websites/production/tapestry/content/component-events.html
    websites/production/tapestry/content/component-libraries.html
    websites/production/tapestry/content/component-mixins.html
    websites/production/tapestry/content/component-report.html
    websites/production/tapestry/content/css.html
    websites/production/tapestry/content/default-parameter.html
    websites/production/tapestry/content/error-page-recipe.html
    websites/production/tapestry/content/forms-and-validation.html
    websites/production/tapestry/content/https.html
    websites/production/tapestry/content/integrating-with-jpa.html
    websites/production/tapestry/content/integrating-with-spring-framework.html
    websites/production/tapestry/content/integration-testing.html
    websites/production/tapestry/content/javascript.html
    websites/production/tapestry/content/layout-component.html
    websites/production/tapestry/content/logging-in-tapestry.html
    websites/production/tapestry/content/overriding-exception-reporting.html
    websites/production/tapestry/content/security.html
    websites/production/tapestry/content/switching-cases.html
    websites/production/tapestry/content/tapestry-for-jsf-users.html
    websites/production/tapestry/content/type-coercion.html
    websites/production/tapestry/content/uploading-files.html

Modified: websites/production/tapestry/content/ajax-and-zones.html
==============================================================================
--- websites/production/tapestry/content/ajax-and-zones.html (original)
+++ websites/production/tapestry/content/ajax-and-zones.html Sat Jan 18 18:21:05 2014
@@ -29,6 +29,8 @@
   <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJScript.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -126,43 +128,17 @@
                 
                             </div>
         </li></ul>
-</div>
-
-<p>Tapestry provides easy-to-use support for <strong>Ajax</strong>, the technique of using JavaScript to dynamically updating parts of a web page with content from the server without redrawing the whole page. With Tapestry, you can do simple Ajax updates without having to write any JavaScript code at all.</p>
-
-<p>Ajax support is included in many <a shape="rect" href="component-reference.html">built-in components</a> and <a shape="rect" href="component-mixins.html">component mixins</a> via the <code>zone</code> parameter.</p>
-
-<h2 id="AjaxandZones-Zones">Zones</h2>
-
-<p>Zones are Tapestry's approach to performing partial page updates. A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone component</a> renders as an HTML element, typically a &lt;div&gt;, with the "t-zone" CSS class. (It also adds some JavaScript to the page to "wire up" a Tapestry.ZoneManager object to control updating that element.)</p>
-
-<p>A Zone can be updated via an EventLink, ActionLink or Select component, or by a Form. All of these components support a zone parameter, which provides the id of the Zone's &lt;div&gt;. Clicking such a link will invoke an event handler method on the server as normal ... except that the return value of the event handler method is used to send a <em>partial page response</em> to the client, and the content of that response is used to update the Zone's &lt;div&gt; in place.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;t:actionlink t:id=&quot;someLink&quot; zone=&quot;myzone&quot;&gt;update&lt;/t:actionlink&gt;
+</div><p>Tapestry provides easy-to-use support for <strong>Ajax</strong>, the technique of using JavaScript to dynamically updating parts of a web page with content from the server without redrawing the whole page. With Tapestry, you can do simple Ajax updates without having to write any JavaScript code at all.</p><p>Ajax support is included in many <a shape="rect" href="component-reference.html">built-in components</a> and <a shape="rect" href="component-mixins.html">component mixins</a> via the <code>zone</code> parameter.</p><h2 id="AjaxandZones-Zones">Zones</h2><p>Zones are Tapestry's approach to performing partial page updates. A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone component</a> renders as an HTML element, typically a &lt;div&gt;, with the "t-zone" CSS class. (It also adds some JavaScript to the page to "wire up" a Tapestry.ZoneManager object to control updating that eleme
 nt.)</p><p>A Zone can be updated via an EventLink, ActionLink or Select component, or by a Form. All of these components support a zone parameter, which provides the id of the Zone's &lt;div&gt;. Clicking such a link will invoke an event handler method on the server as normal ... except that the return value of the event handler method is used to send a <em>partial page response</em> to the client, and the content of that response is used to update the Zone's &lt;div&gt; in place.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;t:actionlink t:id=&quot;someLink&quot; zone=&quot;myzone&quot;&gt;update&lt;/t:actionlink&gt;
 ...
 &lt;t:zone t:id=&quot;myZone&quot; id=&quot;myzone&quot;&gt;
     The current time is ${currentTime}
 &lt;/t:zone&gt;
 ]]></script>
-</div></div>
-
-<h3 id="AjaxandZones-EventHandlerReturnTypes">Event Handler Return Types</h3>
-
-<div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
+</div></div><h3 id="AjaxandZones-EventHandlerReturnTypes">Event Handler Return Types</h3><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p>    <strong>JumpStart Demo:</strong><br clear="none">
-    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/actionlink" >AJAX ActionLink</a></p></div>
-
-<p>In a traditional request, the return value of an event handler method is used to determine which page will render a <em>complete</em> response, and a <em>redirect</em> is sent to the client to render the new page (as a new request).</p>
-
-<p>In contrast, with a Zone update, the return value is used to render a <em>partial response</em> within the <em>same request</em>.</p>
-
-<p>This return value is often just the zone's own body (as below), but it can also be an injected component or block. The value will be rendered, and that markup will be used on the client side to update the Zone's &lt;div&gt;.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/actionlink" >AJAX ActionLink</a></p></div><p>In a traditional request, the return value of an event handler method is used to determine which page will render a <em>complete</em> response, and a <em>redirect</em> is sent to the client to render the new page (as a new request).</p><p>In contrast, with a Zone update, the return value is used to render a <em>partial response</em> within the <em>same request</em>.</p><p>This return value is often just the zone's own body (as below), but it can also be an injected component or block. The value will be rendered, and that markup will be used on the client side to update the Zone's &lt;div&gt;.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 private Request request;
 
 @InjectComponent
@@ -173,22 +149,8 @@ Object onClickFromSomeLink()
    return myZone.getBody(); // AJAX request, return zone&#39;s own body
 } 
 ]]></script>
-</div></div>
-
-<p>The possible return values are:</p>
-
-<ul><li>A Block or Component to render as the response. The response will be a JSON hash, with a "content" key whose value is the rendered markup. This is the basis for updates with the Zone component.</li><li>The zone's own body</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/json/JSONObject.html">JSONObject</a> or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/json/JSONArray.html">JSONArray</a>, which will be sent as the response.</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/StreamResponse.html">StreamResponse</a>, which will be sent as the response.</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Link.html">Link</a>, which will send a redirect to the client.</li><li>A page name (as a String), or a page class, o
 r a page instance, which will send a redirect to the indicated page.</li></ul>
-
-
-<h3 id="AjaxandZones-GracefulDegradation">Graceful Degradation</h3>
-
-<p>Users who do not have JavaScript enabled may click EventLinks (or ActionLinks, or Forms) that are configured to update a Zone. When that occurs, the request will still be sent to the server, but Tapestry will handle it as a <em>traditional</em> request.</p>
-
-<p>To support graceful degradation, you should detect that case in your event handler method and return a traditional response: a page, page name or page class. This is accomplished by injecting the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/Request.html">Request</a> object, and invoking the isXHR() method. This value will be true for Ajax requests, and false for traditional request.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+</div></div><p>The possible return values are:</p><ul><li>A Block or Component to render as the response. The response will be a JSON hash, with a "content" key whose value is the rendered markup. This is the basis for updates with the Zone component.</li><li>The zone's own body</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/json/JSONObject.html">JSONObject</a> or <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/json/JSONArray.html">JSONArray</a>, which will be sent as the response.</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/StreamResponse.html">StreamResponse</a>, which will be sent as the response.</li><li>A <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Link.html">Link</a>, which will send a redirect to the client.</li
 ><li>A page name (as a String), or a page class, or a page instance, which will send a redirect to the indicated page.</li></ul><h3 id="AjaxandZones-GracefulDegradation">Graceful Degradation</h3><p>Users who do not have JavaScript enabled may click EventLinks (or ActionLinks, or Forms) that are configured to update a Zone. When that occurs, the request will still be sent to the server, but Tapestry will handle it as a <em>traditional</em> request.</p><p>To support graceful degradation, you should detect that case in your event handler method and return a traditional response: a page, page name or page class. This is accomplished by injecting the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/Request.html">Request</a> object, and invoking the isXHR() method. This value will be true for Ajax requests, and false for traditional request.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
  panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 private Request request;
 
 @InjectComponent
@@ -200,25 +162,10 @@ Object onClickFromSomeLink()
     return request.isXHR() ? myZone.getBody() : null;
 } 
 ]]></script>
-</div></div>
-
-<h3 id="AjaxandZones-MultipleZoneUpdates">Multiple Zone Updates</h3>
-
-<div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
+</div></div><h3 id="AjaxandZones-MultipleZoneUpdates">Multiple Zone Updates</h3><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p>    <strong>JumpStart Demo:</strong><br clear="none">
-    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/multiplezoneupdate" >AJAX Multiple Zone Update</a></p></div>
-
-<p>An event handler often needs to update multiple zones on the client side. To accomplish this, use an <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>, indicating the zones to update. You must know the client-side id for each zone to update (the best way for this is to lock down the zone's id using the id parameter of the Zone component).</p>
-
-<p><em>AjaxResponseRenderer was introduced in Tapestry 5.3. For Tapestry 5.2 and earlier, return a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a> object instead.</em></p>
-
-<p>The renderer for each zone can be the zone itself, a block, a component, a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Renderable.html">Renderable</a> or a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/runtime/RenderCommand.html">RenderCommand</a> ... or an object, such as String, that can be coerced to either of these.</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.3 and later</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@InjectComponent
+    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/multiplezoneupdate" >AJAX Multiple Zone Update</a></p></div><p>An event handler often needs to update multiple zones on the client side. To accomplish this, use an <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a>, indicating the zones to update. You must know the client-side id for each zone to update (the best way for this is to lock down the zone's id using the id parameter of the Zone component).</p><p><em>AjaxResponseRenderer was introduced in Tapestry 5.3. For Tapestry 5.2 and earlier, return a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a> object instead.</em></p><p>The renderer for each zone can be the zone itself, a block, a component, a
  <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Renderable.html">Renderable</a> or a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/runtime/RenderCommand.html">RenderCommand</a> ... or an object, such as String, that can be coerced to either of these.</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.3 and later</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@InjectComponent
 private Zone userInput;
 
 @InjectComponent
@@ -233,12 +180,8 @@ void onActionFromRegister()
         userInput).addRender(&quot;helpPanel&quot;, helpPanel);
 }
 ]]></script>
-</div></div></div>
-
-<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.1, 5.2 and 5.3</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+</div></div></div><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.1, 5.2 and 5.3</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 private Form registrationForm;
 
 @Inject Block registrationHelp;
@@ -250,33 +193,13 @@ Object onActionFromRegister()
         registrationHelp);
 }
 ]]></script>
-</div></div>
-<p>&#160; &#160; <em>Note that MultiZoneUpdate is deprecated starting with Tapestry 5.3.</em></p>
-
-</div></div></div></div>
-
-<p>These examples assume that there are two zones, "userInput" and "helpPanel", somewhere in the rendered page, waiting to receive the updated content.</p>
-
-<h3 id="AjaxandZones-ZoneComponentIdvs.ZoneElementId">Zone Component Id vs. Zone Element Id</h3>
-
-<p>Like all Tapestry components, Zones have a component id, specified using the <code>t:id</code> attribute.  If you do not assign a component id, a unique id is assigned by Tapestry.</p>
-
-<p>However, to coordinate things on the client side, it is necessary for components that wish to update the zone know the <em>client-side element id</em>.  This is specified with the <code>id</code> parameter of the Zone component.  If the <code>id</code> parameter is not bound, then a unique value (for the current page and render) is generated by Tapestry and this value is difficult to predict. The actual value will be available as the <code>clientId</code> property of the Zone component itself.</p>
-
-<p>Remember that the component id (<code>t:id</code>) is used to <em>inject</em> the Zone component into the containing page or component. The<br clear="none">
-client-side id (<code>id</code>) is used ... on the client side to orchestrate requests and updates.  You will often seen the following construct:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;t:zone t:id=&quot;myZone&quot; id=&quot;myzone&quot;&gt; ... &lt;/t:zone&gt;
+</div></div><p>&#160; &#160; <em>Note that MultiZoneUpdate is deprecated starting with Tapestry 5.3.</em></p></div></div></div></div><p>These examples assume that there are two zones, "userInput" and "helpPanel", somewhere in the rendered page, waiting to receive the updated content.</p><h3 id="AjaxandZones-ZoneComponentIdvs.ZoneElementId">Zone Component Id vs. Zone Element Id</h3><p>Like all Tapestry components, Zones have a component id, specified using the <code>t:id</code> attribute. If you do not assign a component id, a unique id is assigned by Tapestry.</p><p>However, to coordinate things on the client side, it is necessary for components that wish to update the zone know the <em>client-side element id</em>. This is specified with the <code>id</code> parameter of the Zone component. If the <code>id</code> parameter is not bound, then a unique value (for the current page and render) is generated by Tapestry and this value is difficult to predict. The actual value will be avail
 able as the <code>clientId</code> property of the Zone component itself.</p><p>Remember that the component id (<code>t:id</code>) is used to <em>inject</em> the Zone component into the containing page or component. The<br clear="none"> client-side id (<code>id</code>) is used ... on the client side to orchestrate requests and updates. You will often seen the following construct:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;t:zone t:id=&quot;myZone&quot; id=&quot;myzone&quot;&gt; ... &lt;/t:zone&gt;
 
 &lt;t:actionlink t:id=&quot;update&quot; zone=&quot;myzone&quot;&gt;update&lt;/t:actionlink&gt;
 ]]></script>
 </div></div>
 
-
-
-
     <div class="aui-message hint shadowed information-macro">
                     <p class="title">Added in 5.2</p>
                             <span class="aui-icon icon-hint">Icon</span>
@@ -287,86 +210,22 @@ client-side id (<code>id</code>) is used
     </div>
 
 <div style="border-right: 20px solid #D8E4F1;border-left: 20px solid #D8E4F1;">
-
 <p>If the Form or Link is enclosed by the Zone itself, then the <code>zone</code> parameter may be set to the special value <code>^</code>. The carat is evaluated, on the client side, by searching up form the form or link element for the first enclosing element with the <code>t-zone</code> CSS class. In this way, the client-side coordination can occur without having to know what the specific client-side id of the Zone is. Because of this, in many cases, it is no longer necessary to specify the Zone's <code>id</code> parameter.</p>
-</div>
-
-<h3 id="AjaxandZones-AnUpdatedivwithinaZonediv">An Update div within a Zone div</h3>
-
-
+</div><h3 id="AjaxandZones-AnUpdatedivwithinaZonediv">An Update div within a Zone div</h3>
 
 <div style="border-right: 20px solid #ffcccc;border-left: 20px solid #ffcccc;">
-<p><em>This feature is removed starting with Tapestry 5.4</em></p></div>
-
-<p>In many situations, a Zone is a kind of "wrapper" or "container" for dynamic content; one that provides a look and feel ... a bit of wrapping markup to create a border. In that situation, the Zone &lt;div&gt; may contain an update &lt;div&gt;.</p>
-
-<p>An Update &lt;div&gt; is specifically a &lt;div&gt; element marked with the CSS class "t-zone-update", <em>inside</em> the Zone's &lt;div&gt;.</p>
-
-<p>If an Update div exists within a Zone div, then when Tapestry updates a zone only the update &lt;div&gt;'s content will be changed, rather than the entire Zone &lt;div&gt;.</p>
-
-<p>The show and update functions (see Zone Functions, below) apply to the Zone &lt;div&gt;, not just the update &lt;div&gt;.</p>
-
-<h3 id="AjaxandZones-ZoneEffectFunctions">Zone Effect Functions</h3>
-
-<p>A Zone may be initially visible or invisible. When a Zone is updated, it is made visible if not currently so. This is accomplished via a function on the Tapestry.ElementEffect client-side object. By default, the show() function is used for this purpose. If you want Tapestry to call a different Tapestry.ElementEffect function when updates occur, specify its name with the zone's show parameter.</p>
-
-<p>If a Zone is already visible, then a different effect function is used to highlight the change. By default, the highlight() function is called, which performs a yellow fade to highlight that the content of the Zone has changed. Alternatively, you can specify a different effect function with the Zone's update parameter:</p>
-
-<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p> Tapestry.ElementEffect Function </p></th><th colspan="1" rowspan="1" class="confluenceTh"><p> Result </p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> highlight() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> (the default) highlight changes to an already-visible zone </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> show() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> make the zone visible if it isn't already visible </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> slidedown() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> scroll the content down </p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p> slideup() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> slide the content back up (opposite of slidedown) </p></td></tr><tr><td
  colspan="1" rowspan="1" class="confluenceTd"><p> fade() </p></td><td colspan="1" rowspan="1" class="confluenceTd"><p> fade the content out (opposite of show) </p></td></tr></tbody></table></div>
-
-
-<p>To have Tapestry update a zone without the usual yellow highlight effect, just specify "show" for the update parameter:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;t:zone t:id=&quot;myZone&quot; t:update=&quot;show&quot;&gt;]]></script>
-</div></div>
-
-<p>You may also define and use your own JavaScript effect function (with lower-case names), like this:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: javascript; gutter: false" type="syntaxhighlighter"><![CDATA[
-Tapestry.ElementEffect.myeffectname = function(element){ YourJavascriptCodeGoesHere; };
+<p><em>This feature is removed starting with Tapestry 5.4</em></p></div><p>In many situations, a Zone is a kind of "wrapper" or "container" for dynamic content; one that provides a look and feel ... a bit of wrapping markup to create a border. In that situation, the Zone &lt;div&gt; may contain an update &lt;div&gt;.</p><p>An Update &lt;div&gt; is specifically a &lt;div&gt; element marked with the CSS class "t-zone-update", <em>inside</em> the Zone's &lt;div&gt;.</p><p>If an Update div exists within a Zone div, then when Tapestry updates a zone only the update &lt;div&gt;'s content will be changed, rather than the entire Zone &lt;div&gt;.</p><p>The show and update functions (see Zone Functions, below) apply to the Zone &lt;div&gt;, not just the update &lt;div&gt;.</p><h3 id="AjaxandZones-ZoneEffectFunctions">Zone Effect Functions</h3><p>A Zone may be initially visible or invisible. When a Zone is updated, it is made visible if not currently so. This is accomplished via a function on
  the Tapestry.ElementEffect client-side object. By default, the show() function is used for this purpose. If you want Tapestry to call a different Tapestry.ElementEffect function when updates occur, specify its name with the zone's show parameter.</p><p>If a Zone is already visible, then a different effect function is used to highlight the change. By default, the highlight() function is called, which performs a yellow fade to highlight that the content of the Zone has changed. Alternatively, you can specify a different effect function with the Zone's update parameter:</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry.ElementEffect Function</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Result</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>highlight()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>(the default) highlight changes to an already-visible zone</p
 ></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>show()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>make the zone visible if it isn't already visible</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>slidedown()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>scroll the content down</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>slideup()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>slide the content back up (opposite of slidedown)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>fade()</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>fade the content out (opposite of show)</p></td></tr></tbody></table></div><p>To have Tapestry update a zone without the usual yellow highlight effect, just specify "show" for the update parameter:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;t:zone t:id=&quot;myZone&quot; t:update=&quot;show&quot;&gt;]]></script>
+</div></div><p>You may also define and use your own JavaScript effect function (with lower-case names), like this:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: js; gutter: false" type="syntaxhighlighter"><![CDATA[Tapestry.ElementEffect.myeffectname = function(element){ YourJavascriptCodeGoesHere; };
 ]]></script>
-</div></div>
-
-<h3 id="AjaxandZones-ZoneLimitations">Zone Limitations</h3>
-
-<p>Unlike many other situations, Tapestry relies on you to specify useful and unique ids to Zone components, then reference those ids inside EventLink (or ActionLink, or Form) components. Using Zone components inside any kind of loop may cause additional problems, as Tapestry will <em>uniqueify</em> the client id you specify (appending an index number).</p>
-
-<p>The show and update function names are converted to lower case; all the methods of Tapestry.ElementEffect should have all lower-case names. Because client-side JavaScript is so fluid (new methods may be added to existing objects), Tapestry makes no attempt to validate the function names ... however, if the names are not valid, then the default show and highlight methods will be used.</p>
-
-<h3 id="AjaxandZones-MoreInformation">More Information</h3>
-
-<p>For examples of extending a Form with a Zone and updating multiple zones at once, see the <a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>.</p>
-
-<p><span class="confluence-anchor-link" id="AjaxandZones-autocomplete"></span></p>
-<h2 id="AjaxandZones-AutocompleteMixin">Autocomplete Mixin</h2>
-
-<div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
+</div></div><h3 id="AjaxandZones-ZoneLimitations">Zone Limitations</h3><p>Unlike many other situations, Tapestry relies on you to specify useful and unique ids to Zone components, then reference those ids inside EventLink (or ActionLink, or Form) components. Using Zone components inside any kind of loop may cause additional problems, as Tapestry will <em>uniqueify</em> the client id you specify (appending an index number).</p><p>The show and update function names are converted to lower case; all the methods of Tapestry.ElementEffect should have all lower-case names. Because client-side JavaScript is so fluid (new methods may be added to existing objects), Tapestry makes no attempt to validate the function names ... however, if the names are not valid, then the default show and highlight methods will be used.</p><h3 id="AjaxandZones-MoreInformation">More Information</h3><p>For examples of extending a Form with a Zone and updating multiple zones at once, see the <a shape="rect" href="
 ajax-components-faq.html">Ajax Components FAQ</a>.</p><p><span class="confluence-anchor-link" id="AjaxandZones-autocomplete"></span></p><h2 id="AjaxandZones-AutocompleteMixin">Autocomplete Mixin</h2><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
 <p>    <strong>JumpStart Demo:</strong><br clear="none">
-    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/autocompletemixin" >Autocomplete Mixin</a></p></div>
-
-<p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a> mixin exists to allow a text field to query the server for completions for a partially entered phrase. It is often used in situations where the field exists to select a single value from a large set, too large to successfully download to the client as a drop down list; for example, when the number of values to select from is numbered in the thousands.</p>
-
-<p>Autocomplete can be added to an existing text field:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-  &lt;t:textfield t:id=&quot;accountName&quot; t:mixins=&quot;autocomplete&quot; size=&quot;100&quot;/&gt;
+    <a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/autocompletemixin" >Autocomplete Mixin</a></p></div><p>The <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">Autocomplete</a> mixin exists to allow a text field to query the server for completions for a partially entered phrase. It is often used in situations where the field exists to select a single value from a large set, too large to successfully download to the client as a drop down list; for example, when the number of values to select from is numbered in the thousands.</p><p>Autocomplete can be added to an existing text field:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[  &lt;t:textfield t:id=&quot;accountName&quot; t:mixins=&quot;autocomplete&quot; size=&quot;100&quot;/&gt;
 ]]></script>
-</div></div>
-
-<p>The mixin can be configured in a number of ways, see the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">component reference</a>.</p>
-
-<p>When the user types into the field, the client-side JavaScript will send a request to the server to get completions.</p>
-
-<p>You must write an event handler to provide these completions. The name of the event is "providecompletions". The context is the partial input value, and the return value will be converted into the selections for the user.</p>
-
-<p>For example:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-  List&lt;String&gt; onProvideCompletionsFromAccountName(String partial)
+</div></div><p>The mixin can be configured in a number of ways, see the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/mixins/Autocomplete.html">component reference</a>.</p><p>When the user types into the field, the client-side JavaScript will send a request to the server to get completions.</p><p>You must write an event handler to provide these completions. The name of the event is "providecompletions". The context is the partial input value, and the return value will be converted into the selections for the user.</p><p>For example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[  List&lt;String&gt; onProvideCompletionsFromAccountName(String partial)
   {
     List&lt;Account&gt; matches = accountDAO.findByPartialAccountName(partial);
 
@@ -380,15 +239,7 @@ Tapestry.ElementEffect.myeffectname = fu
     return result;
   }
 ]]></script>
-</div></div>
-
-<p>This presumes that <code>findByPartialAccountName()</code> will sort the values, otherwise you will probably want to sort them. The Autocomplete mixin does <em>not</em> do any sorting.</p>
-
-<p>You can return an object array, a list, even a single object. You may return objects instead of strings ... and <code>toString()</code> will be used to convert them into client-side strings.</p>
-
-<p>Tapestry's default stylesheet includes entries for controlling the look of the floating popup of selections.</p>
-
-<p>You may override <code>DIV.t-autocomplete-menu UL</code> to change the main look and feel, <code>DIV.t-autocomplete-menu LI</code> for a normal item in the popup list, and <code>DIV.t-autocomplete-menu LI.selected</code> for the element under the cursor (or selecting using the arrow keys).</p></div>
+</div></div><p>This presumes that <code>findByPartialAccountName()</code> will sort the values, otherwise you will probably want to sort them. The Autocomplete mixin does <em>not</em> do any sorting.</p><p>You can return an object array, a list, even a single object. You may return objects instead of strings ... and <code>toString()</code> will be used to convert them into client-side strings.</p><p>Tapestry's default stylesheet includes entries for controlling the look of the floating popup of selections.</p><p>You may override <code>DIV.t-autocomplete-menu UL</code> to change the main look and feel, <code>DIV.t-autocomplete-menu LI</code> for a normal item in the popup list, and <code>DIV.t-autocomplete-menu LI.selected</code> for the element under the cursor (or selecting using the arrow keys).</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/assets.html
==============================================================================
--- websites/production/tapestry/content/assets.html (original)
+++ websites/production/tapestry/content/assets.html Sat Jan 18 18:21:05 2014
@@ -29,6 +29,7 @@
   <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -69,9 +70,7 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><h1 id="Assets-Assets">Assets</h1>
-
-<div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
+<div id="ConfluenceContent"><h1 id="Assets-Assets">Assets</h1><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
 <h3>Related Articles</h3>
 <ul class="content-by-label"><li>
             <div>
@@ -96,7 +95,7 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="css.html">CSS</a>
+                            <a shape="rect" href="configuration.html">Configuration</a>
                     
                 
                             </div>
@@ -123,135 +122,45 @@
                     <span class="icon icon-page" title="Page">Page:</span>            </div>
 
             <div class="details">
-                            <a shape="rect" href="configuration.html">Configuration</a>
+                            <a shape="rect" href="css.html">CSS</a>
                     
                 
                             </div>
         </li></ul>
-</div>
-
-<p>In Tapestry, <strong>Assets</strong> are any kind of <em>static</em> content that may be downloaded to a client web browser, such as images, style sheets and JavaScript files.</p>
-
-<p>Assets are most commonly stored in the web application's context folder ... stored inside the web application WAR file in the usual JEE fashion. In addition, Tapestry treats files stored <em>on the classpath</em>, with your Java class files, as assets visible to the web browser.</p>
-
-<p>Assets are exposed to your code as instances of the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Asset.html">Asset</a> interface.</p>
-
-<h2 id="Assets-AssetsinTemplates">Assets in Templates</h2>
-
-<p>Assets can also be referenced directly in templates. Two <a shape="rect" href="component-parameters.html#ComponentParameters-binding-expressions">binding prefixes</a> exist for this: "asset:" and "context:". The "asset:" prefix can obtain assets from the classpath (the default) or from the web context (by specifying the "context:" domain explicitly):</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;img src=&quot;${asset:context:image/tapestry_banner.gif}&quot; alt=&quot;Banner&quot;/&gt;
+</div><p>In Tapestry, <strong>Assets</strong> are any kind of <em>static</em> content that may be downloaded to a client web browser, such as images, style sheets and JavaScript files.</p><p>Assets are most commonly stored in the web application's context folder ... stored inside the web application WAR file in the usual JEE fashion. In addition, Tapestry treats files stored <em>on the classpath</em>, with your Java class files, as assets visible to the web browser.</p><p>Assets are exposed to your code as instances of the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/Asset.html">Asset</a> interface.</p><h2 id="Assets-AssetsinTemplates">Assets in Templates</h2><p>Assets can also be referenced directly in templates. Two <a shape="rect" href="component-parameters.html#ComponentParameters-binding-expressions">binding prefixes</a> exist for this: "asset:" and "context:". The "asset:" prefix can obtain assets from the classpat
 h (the default) or from the web context (by specifying the "context:" domain explicitly):</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;img src=&quot;${asset:context:image/tapestry_banner.gif}&quot; alt=&quot;Banner&quot;/&gt;
 ]]></script>
-</div></div>
-
-    <div class="aui-message hint shadowed information-macro">
+</div></div>    <div class="aui-message hint shadowed information-macro">
                             <span class="aui-icon icon-hint">Icon</span>
                 <div class="message-content">
                             <p>This is an example of using a <em>template expansion</em> inside an ordinary element (rather than a component).</p>
                     </div>
     </div>
-
-
-<p>Because accessing context assets is so common, the "context:" binding prefix was introduced:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;img src=&quot;${context:image/tapestry_banner.gif}&quot; alt=&quot;Banner&quot;/&gt;
+<p>Because accessing context assets is so common, the "context:" binding prefix was introduced:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;img src=&quot;${context:image/tapestry_banner.gif}&quot; alt=&quot;Banner&quot;/&gt;
 ]]></script>
-</div></div>
-
-<h2 id="Assets-AssetsinComponentClasses">Assets in Component Classes</h2>
-
-<p>Components learn about assets via <a shape="rect" href="injection.html">injection</a>. The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Inject.html">Inject</a> annotation allows Assets to be injected into components as read-only properties. The path to the resource is specified using the Path annotation:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+</div></div><h2 id="Assets-AssetsinComponentClasses">Assets in Component Classes</h2><p>Components learn about assets via <a shape="rect" href="injection.html">injection</a>. The @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/Inject.html">Inject</a> annotation allows Assets to be injected into components as read-only properties. The path to the resource is specified using the Path annotation:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 @Path(&quot;context:images/tapestry_banner.gif&quot;)
 private Asset banner;
 ]]></script>
-</div></div>
-
-<p>Assets are located within <em>domains</em>; these domains are identified by the prefix on the @Path annotation's <code>value</code>.</p>
-
-<p>If the prefix is omitted, the value will be interpreted as a path relative to the Java class file itself, within the "classpath:" domain. This is often used when creating component libraries, where the assets used by the components are packaged in the JAR with the components themselves.</p>
-
-<p>Unlike elsewhere in Tapestry, <em>case matters</em>. This is because Tapestry is dependent on the Servlet API and the Java runtime to access the underlying files, and those APIs, unlike Tapestry, are case sensitive. Be aware that some <em>operating systems</em> (such as Windows) are case insensitive, which may mask errors that will be revealed at deployment (if the deployment operating system is case sensitive, such as Linux).</p>
-
-<h2 id="Assets-RelativeAssets">Relative Assets</h2>
-
-<p>You can use relative paths with domains (if you omit the prefix):</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+</div></div><p>Assets are located within <em>domains</em>; these domains are identified by the prefix on the @Path annotation's <code>value</code>.</p><p>If the prefix is omitted, the value will be interpreted as a path relative to the Java class file itself, within the "classpath:" domain. This is often used when creating component libraries, where the assets used by the components are packaged in the JAR with the components themselves.</p><p>Unlike elsewhere in Tapestry, <em>case matters</em>. This is because Tapestry is dependent on the Servlet API and the Java runtime to access the underlying files, and those APIs, unlike Tapestry, are case sensitive. Be aware that some <em>operating systems</em> (such as Windows) are case insensitive, which may mask errors that will be revealed at deployment (if the deployment operating system is case sensitive, such as Linux).</p><h2 id="Assets-RelativeAssets">Relative Assets</h2><p>You can use relative paths with domains (if you omit the pref
 ix):</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 @Path(&quot;../edit.png&quot;)
 private Asset icon;
 ]]></script>
-</div></div>
-
-<p>Since you must omit the prefix, this only makes sense for components packaged in a library for reuse.</p>
-
-<h2 id="Assets-SymbolsForAssets">Symbols For Assets</h2>
-
-<p>Symbols inside the annotation value are expanded. This allows you to define a symbol and reference it as part of the path. For example, you could contribute a symbol named "skin.root" as "context:skins/basic" and then reference an asset from within it:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Inject
+</div></div><p>Since you must omit the prefix, this only makes sense for components packaged in a library for reuse.</p><h2 id="Assets-SymbolsForAssets">Symbols For Assets</h2><p>Symbols inside the annotation value are expanded. This allows you to define a symbol and reference it as part of the path. For example, you could contribute a symbol named "skin.root" as "context:skins/basic" and then reference an asset from within it:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Inject
 @Path(&quot;${skin.root}/style.css&quot;)
 private Asset style;
 ]]></script>
-</div></div>
-
-    <div class="aui-message warning shadowed information-macro">
+</div></div>    <div class="aui-message warning shadowed information-macro">
                             <span class="aui-icon icon-warning">Icon</span>
                 <div class="message-content">
                             <p>The use of the <code>${...</code>} syntax here is a <em>symbol expansion</em> (because it occurs in an annotation in Java code), rather than a <em>template expansion</em> (which occurs only in Tapestry template files).</p>
                     </div>
     </div>
-
-
-<p>An override of the skin.root symbol would affect all references to the named asset.</p>
-
-<h2 id="Assets-LocalizationofAssets">Localization of Assets</h2>
-
-<p>Main Article: <a shape="rect" href="localization.html">Localization</a></p>
-
-<p>Assets are localized; Tapestry will search for a variation of the file appropriate to the effective locale for the request. In the previous example, a German user of the application may see a file named <code>edit_de.png</code> (if such a file exists).</p>
-
-<h2 id="Assets-NewAssetDomains">New Asset Domains</h2>
-
-<p>If you wish to create new domains for assets, for example to allow assets to be stored on the file system or in a database, you may define a new <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/AssetFactory.html">AssetFactory</a> and contribute it to the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/AssetSource.html">AssetSource</a> service configuration.</p>
-
-<h2 id="Assets-AssetURLs">Asset URLs</h2>
-
-<p>Tapestry creates a new URL for assets (whether context or classpath). The URL is of the form /assets/<strong>version</strong>/<strong>folder</strong>/<strong>path</strong>.</p>
-
-<ul><li><strong>version</strong>: Application version number, defined by the <code>tapestry.application-version</code> symbol in your application module (normally AppModule.java). The default is a random hex number.</li><li><strong>folder</strong>: Identifies the library containing the asset, or "ctx" for a context asset, or "stack" (used when combining multiple JavaScript files into a single virtual asset).</li><li><strong>path</strong>: The path below the root package of the library to the specific asset file.</li></ul>
-
-
-<h2 id="Assets-PerformanceNotes">Performance Notes</h2>
-
-<p>Assets are expected to be entirely static (not changing while the application is deployed). This allows Tapestry to perform some important performance optimizations.</p>
-
-<p>Tapestry GZIP compresses the content of all assets &#8211; if the asset is compressible, the client supports it, and you don't <a shape="rect" href="configuration.html#Configuration-tapestry.gzipcompressionenabled">explicitly disable it</a>.</p>
-
-<p>When Tapestry generates a URL for an asset, either on the classpath or from the context, the URL includes the application version number. Further, the asset will get a <em>far future expires header</em>, which will encourage the client browser to cache the asset.</p>
-
-<p>You should have an explicit application version number for any production application. Client browsers will aggressively cache downloaded assets; they will usually not even send a request to see if the asset has changed once the asset is downloaded the first time. Because of this it is <em>very important</em> that each new deployment of your application has a new <a shape="rect" href="configuration.html#Configuration-tapestry.applicationversion">version number</a>, to force existing clients to re-download all assets.</p>
-
-<h2 id="Assets-AssetSecurity">Asset Security</h2>
-
-<p>Because Tapestry directly exposes files on the classpath to the clients, some thought has gone into ensuring that malicious clients are not able to download assets that should not be visible to them.</p>
-
-<p>First off all, there's a package limitation: classpath assets are only visible if there's a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/LibraryMapping.html">LibraryMapping</a> for them, and the library mapping substitutes for the initial folders on the classpath.  Since the most secure assets, things like <code>hibernate.cfg.xml</code> are located in the unnamed package, they are always off limits.</p>
-
-<p>But what about other files on the classpath? Imagine this scenario:</p>
-
-<ul><li>Your Login page exposes a classpath asset, <code>icon.png</code>.</li><li>A malicious client copies the URL, <code>/assets/1.0.0/app/pages/icon.png</code>,<p>&lt;style type='text/css'&gt;
+<p>An override of the skin.root symbol would affect all references to the named asset.</p><h2 id="Assets-LocalizationofAssets">Localization of Assets</h2><p>Main Article: <a shape="rect" href="localization.html">Localization</a></p><p>Assets are localized; Tapestry will search for a variation of the file appropriate to the effective locale for the request. In the previous example, a German user of the application may see a file named <code>edit_de.png</code> (if such a file exists).</p><h2 id="Assets-NewAssetDomains">New Asset Domains</h2><p>If you wish to create new domains for assets, for example to allow assets to be stored on the file system or in a database, you may define a new <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/AssetFactory.html">AssetFactory</a> and contribute it to the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/AssetSour
 ce.html">AssetSource</a> service configuration.</p><h2 id="Assets-AssetURLs">Asset URLs</h2><p>Tapestry creates a new URL for assets (whether context or classpath). The URL is of the form /assets/<strong>version</strong>/<strong>folder</strong>/<strong>path</strong>.</p><ul><li><strong>version</strong>: Application version number, defined by the <code>tapestry.application-version</code> symbol in your application module (normally AppModule.java). The default is a random hex number.</li><li><strong>folder</strong>: Identifies the library containing the asset, or "ctx" for a context asset, or "stack" (used when combining multiple JavaScript files into a single virtual asset).</li><li><strong>path</strong>: The path below the root package of the library to the specific asset file.</li></ul><h2 id="Assets-PerformanceNotes">Performance Notes</h2><p>Assets are expected to be entirely static (not changing while the application is deployed). This allows Tapestry to perform some important pe
 rformance optimizations.</p><p>Tapestry GZIP compresses the content of all assets &#8211; if the asset is compressible, the client supports it, and you don't <a shape="rect" href="configuration.html#Configuration-tapestry.gzipcompressionenabled">explicitly disable it</a>.</p><p>When Tapestry generates a URL for an asset, either on the classpath or from the context, the URL includes the application version number. Further, the asset will get a <em>far future expires header</em>, which will encourage the client browser to cache the asset.</p><p>You should have an explicit application version number for any production application. Client browsers will aggressively cache downloaded assets; they will usually not even send a request to see if the asset has changed once the asset is downloaded the first time. Because of this it is <em>very important</em> that each new deployment of your application has a new <a shape="rect" href="configuration.html#Configuration-tapestry.applicationversion
 ">version number</a>, to force existing clients to re-download all assets.</p><h2 id="Assets-AssetSecurity">Asset Security</h2><p>Because Tapestry directly exposes files on the classpath to the clients, some thought has gone into ensuring that malicious clients are not able to download assets that should not be visible to them.</p><p>First off all, there's a package limitation: classpath assets are only visible if there's a <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/LibraryMapping.html">LibraryMapping</a> for them, and the library mapping substitutes for the initial folders on the classpath. Since the most secure assets, things like <code>hibernate.cfg.xml</code> are located in the unnamed package, they are always off limits.</p><p>But what about other files on the classpath? Imagine this scenario:</p><ul><li>Your Login page exposes a classpath asset, <code>icon.png</code>.</li><li><p>A malicious client copies
  the URL, <code>/assets/1.0.0/app/pages/icon.png</code>,</p>&lt;style type='text/css'&gt;
 .FootnoteMarker, .FootnoteNum a {
   background: transparent url(/confluence/download/resources/com.adaptavist.confluence.footnoteMacros:footnote/gfx/footnote.png) no-repeat top right;
   padding: 1px 2px 0px 1px;
@@ -323,80 +232,48 @@ var footnoteMarkerHighlight = function(i
             1
     </a>
 </sup>
-</p> and changes the file name to <code>Login.class</code>.</li><li>The client decompiles the class file and spots your secret emergency password: goodbye security!<p>
+<p>and changes the file name to <code>Login.class</code>.</p></li><li><p>The client decompiles the class file and spots your secret emergency password: goodbye security!</p>
 <sup id="FootnoteMarker2">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker2" href="#Footnote2" onclick="footnoteHighlight(&quot;2&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             2
     </a>
 </sup>
-</p></li></ul>
-
-
-<p>Fortunately, this can't happen.  Files with extension ".class" are secured; they must be accompanied in the URL with a query parameter that is the MD5 hash of the file's contents.  If the query parameter is absent, or doesn't match the actual file's content, the request is rejected.</p>
-
-<p>When your code exposes an Asset, the URL will automatically include the query parameter if the file type is secured.  The malicious user is locked out of access to the files</p><p>
+</li></ul><p>Fortunately, this can't happen. Files with extension ".class" are secured; they must be accompanied in the URL with a query parameter that is the MD5 hash of the file's contents. If the query parameter is absent, or doesn't match the actual file's content, the request is rejected.</p><p>When your code exposes an Asset, the URL will automatically include the query parameter if the file type is secured. The malicious user is locked out of access to the files</p>
 <sup id="FootnoteMarker3">
     <a shape="rect" class="FootnoteMarker" name="FootnoteMarker3" href="#Footnote3" onclick="footnoteHighlight(&quot;3&quot;,true);" alt="Footnote: Click here to display the footnote" title="Footnote: Click here to display the footnote">
             3
     </a>
 </sup>
-</p>.<p></p>
-
-<p>By default, Tapestry secures file extensions ".class', ".tml" and ".properties".  The list can be extended by contributing to the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ResourceDigestGenerator.html">ResourceDigestGenerator</a> 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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-public static void contributeResourceDigestGenerator(Configuration&lt;String&gt; configuration)
+<p>.</p><p>&#160;</p><p>By default, Tapestry secures file extensions ".class', ".tml" and ".properties". The list can be extended by contributing to the <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/ResourceDigestGenerator.html">ResourceDigestGenerator</a> 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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[public static void contributeResourceDigestGenerator(Configuration&lt;String&gt; configuration)
 {
     configuration.add(&quot;xyz&quot;);
 }
 ]]></script>
-</div></div>
-
-<h2 id="Assets-MinimizingAssets">Minimizing Assets</h2>
-
-<p>Since version 5.3, Tapestry provides a service, <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/assets/ResourceMinimizer.html">ResourceMinimizer</a>, which will help to minimize all your static resources (principally CSS and JavaScript files).</p>
-
-<p>By default, this service does nothing. You should include a third-party library, for example the tapestry-yuicompressor project, which makes it possible to minimize CSS and JavaScript files.</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml (partial)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;dependency&gt;
+</div></div><h2 id="Assets-MinimizingAssets">Minimizing Assets</h2><p>Since version 5.3, Tapestry provides a service, <a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/assets/ResourceMinimizer.html">ResourceMinimizer</a>, which will help to minimize all your static resources (principally CSS and JavaScript files).</p><p>By default, this service does nothing. You should include a third-party library, for example the tapestry-yuicompressor project, which makes it possible to minimize CSS and JavaScript files.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>pom.xml (partial)</b></div><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
     &lt;groupId&gt;org.apache.tapestry&lt;/groupId&gt;
     &lt;artifactId&gt;tapestry-yuicompressor&lt;/artifactId&gt;
     &lt;version&gt;5.3.1&lt;/version&gt;
 &lt;/dependency&gt;
 ]]></script>
-</div></div>
-
-<p>By adding this dependency, all your JavaScript and CSS files will be minimized when <a shape="rect" href="configuration.html">PRODUCTION_MODE=true</a>. You can force the minimization of these files, by changing the value of the constant SymbolConstants.MINIFICATION_ENABLED in your module class (usually AppModule.java):</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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Contribute(SymbolProvider.class)
+</div></div><p>By adding this dependency, all your JavaScript and CSS files will be minimized when <a shape="rect" href="configuration.html">PRODUCTION_MODE=true</a>. You can force the minimization of these files, by changing the value of the constant SymbolConstants.MINIFICATION_ENABLED in your module class (usually AppModule.java):</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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Contribute(SymbolProvider.class)
 @ApplicationDefaults
 public static void contributeApplicationDefaults(MappedConfiguration&lt;String, String&gt; configuration)
 {
     configuration.add(SymbolConstants.MINIFICATION_ENABLED, &quot;true&quot;);
 }
 ]]></script>
-</div></div>
-
-<p>If you want to add your own minimizer for particular types of assets, you can contribute to the ResourceMinimizer service. The service configuration maps the MIME-TYPE of your resource to an implementation of the ResourceMinimizer interface.</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">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@Contribute(ResourceMinimizer.class)
+</div></div><p>If you want to add your own minimizer for particular types of assets, you can contribute to the ResourceMinimizer service. The service configuration maps the MIME-TYPE of your resource to an implementation of the ResourceMinimizer interface.</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">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@Contribute(ResourceMinimizer.class)
 @Primary
 public static void contributeMinimizers(MappedConfiguration&lt;String, ResourceMinimizer&gt; configuration)
 {
     configuration.addInstance(&quot;text/coffeescript&quot;, CoffeeScriptMinimizer.class);
 }
 ]]></script>
-</div></div>
-
-<hr>
-<p></p><p><table class="Footnotes" style="width: 100%; border:none;" cellspacing="0" cellpadding="0" summary="This table contains one or more notes for references made elsewhere on the page."><caption class="accessibility">Footnotes</caption><thead class="accessibility"><tr class="accessibility"><th colspan="1" rowspan="1" class="accessibility" id="footnote-th1">Reference</th><th colspan="1" rowspan="1" class="accessibility" id="footnote-th2">Notes</th></tr></thead><tbody><tr name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum" headings="footnote-th1">
+</div></div><p>&#160;</p><p>&#160;</p><table class="Footnotes" style="width: 100%; border:none;" cellspacing="0" cellpadding="0" summary="This table contains one or more notes for references made elsewhere on the page."><caption class="accessibility">Footnotes</caption><thead class="accessibility"><tr class="accessibility"><th colspan="1" rowspan="1" class="accessibility" id="footnote-th1">Reference</th><th colspan="1" rowspan="1" class="accessibility" id="footnote-th2">Notes</th></tr></thead><tbody><tr name="Footnote1"><td colspan="1" rowspan="1" valign="top" class="FootnoteNum" headings="footnote-th1">
         <a shape="rect" id="FootnoteNum1" href="#FootnoteMarker1" onclick="footnoteMarkerHighlight(&quot;1&quot;);" onmouseover="footnoteHighlight(&quot;1&quot;,false);" alt="Footnote: Click to return to reference in text" title="Footnote: Click to return to reference in text">
             1
         </a>
@@ -414,7 +291,7 @@ public static void contributeMinimizers(
         </a>
       </td><td colspan="1" rowspan="1" valign="top" class="Footnote" id="Footnote3" width="100%" headings="footnote-th2">
           Unless they already have the files so that they can generate the MD5 checksum ... to get access to the files they already have.
-      </td></tr></tbody></table></p><p></p></div>
+      </td></tr></tbody></table></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/autoloading-modules.html
==============================================================================
--- websites/production/tapestry/content/autoloading-modules.html (original)
+++ websites/production/tapestry/content/autoloading-modules.html Sat Jan 18 18:21:05 2014
@@ -29,6 +29,8 @@
   <link href='http://cxf.apache.org/resources/highlighter/styles/shThemeCXF.css' rel='stylesheet' type='text/css' />
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shCore.js' type='text/javascript'></script>
   <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushJava.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushXml.js' type='text/javascript'></script>
+  <script src='http://cxf.apache.org/resources/highlighter/scripts/shBrushPlain.js' type='text/javascript'></script>
   <script type="text/javascript">
   SyntaxHighlighter.defaults['toolbar'] = false;
   SyntaxHighlighter.all();
@@ -77,37 +79,11 @@ table.ScrollbarTable td.ScrollbarParent 
 table.ScrollbarTable td.ScrollbarNextName {text-align: right;border: none;}
 table.ScrollbarTable td.ScrollbarNextIcon {text-align: center;width: 16px;border: none;}
 
-/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="case-insensitivity.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="case-insensitivity.html">Case Insensitivity</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="ioc.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="ioc.html">IoC</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="service-implementation-reloading.html">Service Implementation Reloading</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="service-implementation-rel
 oading.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div>
-
-<h1 id="AutoloadingModules-AutoloadingModules">Autoloading Modules</h1>
-
-<p>An important part of Tapestry IoC is the autoloading of modules; this allows new features to be added to an application just by "dropping in" a JAR that contains a module: the services in the module are automatically integrated into the overall service registry, along with any configuration or other supporting code and resources.</p>
-
-<p>An example of this is the <a shape="rect" href="uploading-files.html">tapestry-upload</a> library, which introduces an Upload component, along with supporting services related to handling file upload requests.</p>
-
-<p>The core Tapestry IoC module is automatically included. When using the Tapestry web framework, the core Tapestry module is also included, as is an optional per-application module, plus any autoloaded modules.</p>
-
-<p>Module autoloading isn't 100% free ... you must tell Tapestry IoC where the modules to load are located, which can be done via a Manifest file entry, or via an annotation.</p>
-
-<h1 id="AutoloadingModules-JARManifestEntries">JAR Manifest Entries</h1>
-
-<p>When setting up the registry, Tapestry can automatically locate modules packaged into JARs. It does this by searching for a particular global manifest entry.</p>
-
-<p>The manifest entry name is "Tapestry-Module-Classes". The value is a comma-separated list of fully qualified class names of module classes (this allows a single JAR to contain multiple, related modules). Whitespace is ignored.</p>
-
-<p>Example:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-Manifest-Version: 1.0
+/*]]>*/</style><div class="Scrollbar"><table class="ScrollbarTable"><tr><td colspan="1" rowspan="1" class="ScrollbarPrevIcon"><a shape="rect" href="case-insensitivity.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/back_16.gif" width="16" height="16"></a></td><td colspan="1" rowspan="1" class="ScrollbarPrevName" width="33%"><a shape="rect" href="case-insensitivity.html">Case Insensitivity</a>&#160;</td><td colspan="1" rowspan="1" class="ScrollbarParent" width="33%"><sup><a shape="rect" href="ioc.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/up_16.gif" width="8" height="8"></a></sup><a shape="rect" href="ioc.html">IoC</a></td><td colspan="1" rowspan="1" class="ScrollbarNextName" width="33%">&#160;<a shape="rect" href="service-implementation-reloading.html">Service Implementation Reloading</a></td><td colspan="1" rowspan="1" class="ScrollbarNextIcon"><a shape="rect" href="service-implementation-rel
 oading.html"><img align="middle" border="0" src="https://cwiki.apache.org/confluence/images/icons/forwd_16.gif" width="16" height="16"></a></td></tr></table></div><h1 id="AutoloadingModules-AutoloadingModules">Autoloading Modules</h1><p>An important part of Tapestry IoC is the autoloading of modules; this allows new features to be added to an application just by "dropping in" a JAR that contains a module: the services in the module are automatically integrated into the overall service registry, along with any configuration or other supporting code and resources.</p><p>An example of this is the <a shape="rect" href="uploading-files.html">tapestry-upload</a> library, which introduces an Upload component, along with supporting services related to handling file upload requests.</p><p>The core Tapestry IoC module is automatically included. When using the Tapestry web framework, the core Tapestry module is also included, as is an optional per-application module, plus any autoloaded module
 s.</p><p>Module autoloading isn't 100% free ... you must tell Tapestry IoC where the modules to load are located, which can be done via a Manifest file entry, or via an annotation.</p><h1 id="AutoloadingModules-JARManifestEntries">JAR Manifest Entries</h1><p>When setting up the registry, Tapestry can automatically locate modules packaged into JARs. It does this by searching for a particular global manifest entry.</p><p>The manifest entry name is "Tapestry-Module-Classes". The value is a comma-separated list of fully qualified class names of module classes (this allows a single JAR to contain multiple, related modules). Whitespace is ignored.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: text; gutter: false" type="syntaxhighlighter"><![CDATA[Manifest-Version: 1.0
 Tapestry-Module-Classes: org.example.mylib.LibModule, org.example.mylib.internal.InternalModule]]></script>
-</div></div>
-
-<p>If you are using Maven 2, then getting these entries into your JAR's manifest is as simple as some configuration in your pom.xml:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-&lt;project&gt;
+</div></div><p>If you are using Maven 2, then getting these entries into your JAR's manifest is as simple as some configuration in your pom.xml:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: xml; gutter: false" type="syntaxhighlighter"><![CDATA[&lt;project&gt;
   . . .
   &lt;build&gt;
     &lt;plugins&gt;
@@ -127,36 +103,13 @@ Tapestry-Module-Classes: org.example.myl
   &lt;/build&gt;
   . . .
 &lt;/project&gt;]]></script>
-</div></div>
-
-<p>More details are provided in the <a shape="rect" class="external-link" href="http://maven.apache.org/guides/mini/guide-manifest.html">Maven Manifest Guide</a>.</p>
-
-<h1 id="AutoloadingModules-SubModuleAnnotation">SubModule Annotation</h1>
-
-<p>Often, you will have several different modules working together that should all be loaded as a unit.</p>
-
-<p>One approach is to update the module ids into the manifest, as shown in the previous extension.</p>
-
-<p>This can become tedious, and somewhat brittle in the face of refactorings (such as renaming of classes or packages).</p>
-
-<p>A better alternative is the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/SubModule.html">SubModule annotation</a> annotation.</p>
-
-<p>The value for this annotation is a list of <em>additional</em> classes to be treated as module classes, exactly as if they were identified in the manifest. Despite the name, there is no hierarchy of modules in Tapestry IoC.</p>
-
-<p>Example:</p>
-
-<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[
-@SubModule(
+</div></div><p>More details are provided in the <a shape="rect" class="external-link" href="http://maven.apache.org/guides/mini/guide-manifest.html">Maven Manifest Guide</a>.</p><h1 id="AutoloadingModules-SubModuleAnnotation">SubModule Annotation</h1><p>Often, you will have several different modules working together that should all be loaded as a unit.</p><p>One approach is to update the module ids into the manifest, as shown in the previous extension.</p><p>This can become tedious, and somewhat brittle in the face of refactorings (such as renaming of classes or packages).</p><p>A better alternative is the @<a shape="rect" class="external-link" href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/SubModule.html">SubModule annotation</a> annotation.</p><p>The value for this annotation is a list of <em>additional</em> classes to be treated as module classes, exactly as if they were identified in the manifest. Despite the name, there is no hierarchy of 
 modules in Tapestry IoC.</p><p>Example:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[@SubModule(
 { InternalTransformModule.class })
 public final class InternalModule
 {
   . . .]]></script>
-</div></div>
-
-<p>In general, your should only need to identify a single module in the JAR manifest, and make use of @SubModule to pull in any additional module classes.</p>
-
-<style type="text/css">/*<![CDATA[*/
+</div></div><p>In general, your should only need to identify a single module in the JAR manifest, and make use of @SubModule to pull in any additional module classes.</p><style type="text/css">/*<![CDATA[*/
 table.ScrollbarTable  {border: none;padding: 3px;width: 100%;padding: 3px;margin: 0px;background-color: #f0f0f0}
 table.ScrollbarTable td.ScrollbarPrevIcon {text-align: center;width: 16px;border: none;}
 table.ScrollbarTable td.ScrollbarPrevName {text-align: left;border: none;}