You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by bu...@apache.org on 2015/06/27 23:21:05 UTC

svn commit: r956226 [5/34] - in /websites/production/tapestry/content: ./ 2010/10/11/ 2010/10/31/ 2010/11/18/ 2010/11/19/ 2010/12/16/ 2010/12/17/ 2011/01/10/ 2011/03/29/ 2011/06/13/ 2011/06/24/ 2011/06/29/ 2011/07/29/ 2011/08/16/ 2011/08/27/ 2011/10/31...

Modified: websites/production/tapestry/content/client-side-javascript.html
==============================================================================
--- websites/production/tapestry/content/client-side-javascript.html (original)
+++ websites/production/tapestry/content/client-side-javascript.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <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 type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Client-Side JavaScript</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Client-Side JavaScript</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -68,97 +58,8 @@
 
 <div id="content">
 <div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="ajax-and-zones.html">Ajax and Zones</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="legacy-javascript.html">Legacy JavaScript</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="javascript-faq.html">JavaScript FAQ</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="assets.html">Assets</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="component-cheat-sheet.html">Component Cheat Sheet</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="javascript-modules.html">JavaScript Modules</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="coffeescript.html">CoffeeScript</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="client-side-javascript.html">Client-Side JavaScript</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div><p>Perhaps nothing in Tapestry has changed over the years so much as the way client-side JavaScript is supported. From the get go, the goal was to make JavaScript a first-class citizen in the Tapestry world, and make it easy to encapsulate JavaScript within components.</p><p>The <a shape="rect" href="legacy-javascript.html">legacy JavaScript</a> page discusses the earlier approaches; the main feature of Tapestry 5.4 is a total rewrite of all things client-side, with the following goals:</p><ul><li>Break the hard linkage of Tapestry to <a shape="rect" class="external-link" href="http://prototypejs.org/" >Prototype</a> and <a shape="rect" class="external-link" href="http://script.aculo.us/" >Scriptaculous</a>, by introducing an abstraction layer</li><li>Remove the clumsy <code>Tapestry</code> and <code>T5</code> "namespaces"</li><li>Reduce the amount of page-specific JavaScript initialization</li><li>Make it easier to override behavior associated with client elements</li><li>Sup
 port CoffeeScript and (potentially) other languages that target JavaScript</li><li>Organize client-side JavaScript using <a shape="rect" href="javascript-modules.html">modules</a></li><li>Make pages load faster</li><li>Integrate <a shape="rect" class="external-link" href="http://getbootstrap.com/" >Bootstrap</a></li><li>Make it easier for rich client libraries such as&#160;<a shape="rect" class="external-link" href="http://backbonejs.org/" >Backbone</a> or&#160;<a shape="rect" class="external-link" href="https://angularjs.org/" >AngularJS</a> to operate within a page</li><li>Properly document Tapestry's client support</li></ul><h3 id="Client-SideJavaScript-TheOverallVision">The Overall Vision</h3><p>The overall vision for the client-side in Tapestry is encapsulation, at several different levels.</p><p>On the server-side, a Tapestry component (or mixin) will exposes configurable parameters. The component will write DOM elements or attributes, as well as some amount of JavaScript init
 ialization. The encapsulation here allows developers with little or no knowledge of client-side JavaScript to enjoy the benefits (as consumers of components created by developers who are versed in client-side coding and Tapestry components).</p><p>On the client-side, the JavaScript combines with the special markup to produce the behaviors that are desired ... anything from controlling the initial focus field, to performing client-side input field validation, to running complex Ajax workflows.</p><p>Where possible, all of this behavior is driven by <code>data-</code> attributes on the elements, combined with top-level event handlers. On the client side, events are used not only to respond directly to user actions (with "click", "mouseOver", "submit", or other event listeners) but also to allow elements to collaborate in various ways. &#160;For example, input validation is based on triggering a specific custom event on each form control element, and top-level event handlers can then m
 anage the validation for any number of fields.</p><h3 id="Client-SideJavaScript-Prototypevs.jQuery">Prototype vs. jQuery</h3><p>For several years, it has been obvious that Tapestry "backed the wrong horse" with respect to Prototype and jQuery. When the first code was being laid down in 2007 or 2008, it wasn't so clear that jQuery with its odd abstractions and unfamiliar approach, would go on to conquer the world. Meanwhile, Prototype was very strongly integrated into Ruby on Rails and had first class documentation and books.</p><p>That being said, jQuery may not be the be-all and end-all. Tapestry 5.4 introduces an abstraction layer, that allows many components to write code that doesn't care whether the foundation framework in Prototype or jQuery. This is especially useful during the arduous process of moving Tapestry 5.3 client-side code forward to 5.4.</p><p>If you like jQuery then there's no problem: write your application using just jQuery and you can ignore a lot of the featur
 es in the abstraction layer. Your code will likely be just a bit more efficient.</p><p>If you are building a reusable component or library, writing to the abstraction layer may be worth the effort; it is entirely possible that someone may write a replacement for the abstraction layer that targets your favorite foundation framework, such as ExtJS, MooTools, or something not even known of today.</p><h3 id="Client-SideJavaScript-Heavyvs.Light">Heavy vs. Light</h3><p>Earlier Tapestry JavaScript was&#160;<em>heavy</em>. Essentially, each component would write some very specific JavaScript initialization that would include the component's DOM id and many other details. This initialization would reference a function on the <code>T5.inits</code> namespace.</p><p>The function there would typically locate the specific element by its client DOM id, then attach event handlers to the one element. It might also create some form of client-side controller object. There were issues due to this: for 
 complex pages (or perhaps even typical pages), the "blob" of JavaScript initialization at the bottom of the page could be quite large.</p><p>The use of individual event handlers meant that Tapestry applications would use more client-side objects that a bespoke jQuery solution ... because the normal approach in jQuery is to attach a single event handler to the document or body that handles any events that bubble up to the top&#160;<em>and</em> match a CSS selector.</p><p>In Tapestry 5.4, the goal is to make things&#160;<em>light</em>. In most cases, there will not be a specific initialization function; instead a <a shape="rect" href="javascript-modules.html">JavaScript module</a> will be loaded, and it will install one or more top-level event handlers; the elements will have <a shape="rect" class="external-link" href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes" ><code>data-</code> attributes</a> that are used by those top level handlers to recognize
  which elements they are responsible for.</p><p>This is more of a full lifecycle approach; adding or removing page content (such as with a&#160;<a shape="rect" href="ajax-and-zones.html">Zone</a> component) is both cheaper and less error prone using top-level event handlers than per-element event handlers; there's also less of a chance of memory leaks under Internet Explorer.</p>    <div class="aui-message warning shadowed information-macro">
-                            <span class="aui-icon icon-warning">Icon</span>
-                <div class="message-content">
-                            <p>Internet Explorer is pretty well known for memory leaks; its DOM and JavaScript run in different kinds of memory, which are garbage collected individually. This means that a reference from JavaScript to a DOM element will keep the DOM element live, even if that's the only reference to the DOM element anywhere. Meanwhile, event handler JavaScript functions are kept live from the DOM element, making a cycle that can't be broken. Libraries like Prototype and jQuery have to expend some effort to break this link by unregistering event handlers from DOM elements when removing them from the DOM.</p>
-                    </div>
-    </div>
-<p>A specific example of this approach is how client-side validation now works; in the past, there was a complex system of classes and event listeners that were specific to each individual field. Field controllers had to register with Form controllers. Validators had to register with Field controllers.</p><p>Under 5.4, there are a number of&#160;<code>data-</code> attributes that can be attached to any DOM element. A form will search for elements with a non-blank value for&#160;<code>data-validation</code>; each such element has a series of custom events triggered on it. The top-level handlers for those events will receive notifications for elements throughout the document.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>t5/core/validation.coffee (partial)</b></div><div class="codeContent panelContent pdl">
-<script class="theme: Default; brush: java; gutter: false" type="syntaxhighlighter"><![CDATA[define [&quot;underscore&quot;, &quot;./dom&quot;, &quot;./events&quot;, &quot;./utils&quot;, &quot;./messages&quot;, &quot;./fields&quot;],
+<div class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p>Perhaps nothing in Tapestry has changed over the years so much as the way client-side JavaScript is supported. From the get go, the goal was to make JavaScript a first-class citizen in the Tapestry world, and make it easy to encapsulate JavaScript within components.</p><p>The <a shape="rect" href="legacy-javascript.html">legacy JavaScript</a> page discusses the earlier approaches; the main feature of Tapestry 5.4 is a total rewrite of all things client-side, with the following goals:</p><ul><li>Break the hard linkage of Tapestry to <a shape="rect" class="external-link" href="http://prototypejs.org/" >Prototype</a> and <a shape="rect" class="external-link" href="http://script.aculo.us/" >Scriptaculous</a>, by introducing an abstraction layer</li><li>Remove the clumsy <code>Tapestry</code> a
 nd <code>T5</code> "namespaces"</li><li>Reduce the amount of page-specific JavaScript initialization</li><li>Make it easier to override behavior associated with client elements</li><li>Support CoffeeScript and (potentially) other languages that target JavaScript</li><li>Organize client-side JavaScript using <a shape="rect" href="javascript-modules.html">modules</a></li><li>Make pages load faster</li><li>Integrate <a shape="rect" class="external-link" href="http://getbootstrap.com/" >Bootstrap</a></li><li>Make it easier for rich client libraries such as&#160;<a shape="rect" class="external-link" href="http://backbonejs.org/" >Backbone</a> or&#160;<a shape="rect" class="external-link" href="https://angularjs.org/" >AngularJS</a> to operate within a page</li><li>Properly document Tapestry's client support</li></ul><h3 id="Client-SideJavaScript-TheOverallVision">The Overall Vision</h3><p>The overall vision for the client-side in Tapestry is encapsulation, at several different levels.</p
 ><p>On the server-side, a Tapestry component (or mixin) will exposes configurable parameters. The component will write DOM elements or attributes, as well as some amount of JavaScript initialization. The encapsulation here allows developers with little or no knowledge of client-side JavaScript to enjoy the benefits (as consumers of components created by developers who are versed in client-side coding and Tapestry components).</p><p>On the client-side, the JavaScript combines with the special markup to produce the behaviors that are desired ... anything from controlling the initial focus field, to performing client-side input field validation, to running complex Ajax workflows.</p><p>Where possible, all of this behavior is driven by <code>data-</code> attributes on the elements, combined with top-level event handlers. On the client side, events are used not only to respond directly to user actions (with "click", "mouseOver", "submit", or other event listeners) but also to allow eleme
 nts to collaborate in various ways. &#160;For example, input validation is based on triggering a specific custom event on each form control element, and top-level event handlers can then manage the validation for any number of fields.</p><h3 id="Client-SideJavaScript-Prototypevs.jQuery">Prototype vs. jQuery</h3><p>For several years, it has been obvious that Tapestry "backed the wrong horse" with respect to Prototype and jQuery. When the first code was being laid down in 2007 or 2008, it wasn't so clear that jQuery with its odd abstractions and unfamiliar approach, would go on to conquer the world. Meanwhile, Prototype was very strongly integrated into Ruby on Rails and had first class documentation and books.</p><p>That being said, jQuery may not be the be-all and end-all. Tapestry 5.4 introduces an abstraction layer, that allows many components to write code that doesn't care whether the foundation framework in Prototype or jQuery. This is especially useful during the arduous proce
 ss of moving Tapestry 5.3 client-side code forward to 5.4.</p><p>If you like jQuery then there's no problem: write your application using just jQuery and you can ignore a lot of the features in the abstraction layer. Your code will likely be just a bit more efficient.</p><p>If you are building a reusable component or library, writing to the abstraction layer may be worth the effort; it is entirely possible that someone may write a replacement for the abstraction layer that targets your favorite foundation framework, such as ExtJS, MooTools, or something not even known of today.</p><h3 id="Client-SideJavaScript-Heavyvs.Light">Heavy vs. Light</h3><p>Earlier Tapestry JavaScript was&#160;<em>heavy</em>. Essentially, each component would write some very specific JavaScript initialization that would include the component's DOM id and many other details. This initialization would reference a function on the <code>T5.inits</code> namespace.</p><p>The function there would typically locate th
 e specific element by its client DOM id, then attach event handlers to the one element. It might also create some form of client-side controller object. There were issues due to this: for complex pages (or perhaps even typical pages), the "blob" of JavaScript initialization at the bottom of the page could be quite large.</p><p>The use of individual event handlers meant that Tapestry applications would use more client-side objects that a bespoke jQuery solution ... because the normal approach in jQuery is to attach a single event handler to the document or body that handles any events that bubble up to the top&#160;<em>and</em> match a CSS selector.</p><p>In Tapestry 5.4, the goal is to make things&#160;<em>light</em>. In most cases, there will not be a specific initialization function; instead a <a shape="rect" href="javascript-modules.html">JavaScript module</a> will be loaded, and it will install one or more top-level event handlers; the elements will have <a shape="rect" class="e
 xternal-link" href="https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes" ><code>data-</code> attributes</a> that are used by those top level handlers to recognize which elements they are responsible for.</p><p>This is more of a full lifecycle approach; adding or removing page content (such as with a&#160;<a shape="rect" href="ajax-and-zones.html">Zone</a> component) is both cheaper and less error prone using top-level event handlers than per-element event handlers; there's also less of a chance of memory leaks under Internet Explorer.</p><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>Internet Explorer is pretty well known for memory leaks; its DOM and JavaScript run in different kinds of memory, which are garbage collected individually. This means that a reference from JavaScript t
 o a DOM element will keep the DOM element live, even if that's the only reference to the DOM element anywhere. Meanwhile, event handler JavaScript functions are kept live from the DOM element, making a cycle that can't be broken. Libraries like Prototype and jQuery have to expend some effort to break this link by unregistering event handlers from DOM elements when removing them from the DOM.</p></div></div><p>A specific example of this approach is how client-side validation now works; in the past, there was a complex system of classes and event listeners that were specific to each individual field. Field controllers had to register with Form controllers. Validators had to register with Field controllers.</p><p>Under 5.4, there are a number of&#160;<code>data-</code> attributes that can be attached to any DOM element. A form will search for elements with a non-blank value for&#160;<code>data-validation</code>; each such element has a series of custom events triggered on it. The top-l
 evel handlers for those events will receive notifications for elements throughout the document.</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>t5/core/validation.coffee (partial)</b></div><div class="codeContent panelContent pdl">
+<script class="brush: java; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[define [&quot;underscore&quot;, &quot;./dom&quot;, &quot;./events&quot;, &quot;./utils&quot;, &quot;./messages&quot;, &quot;./fields&quot;],
   (_, dom, events, utils, messages) -&gt;
 
 

Modified: websites/production/tapestry/content/clustering-issues.html
==============================================================================
--- websites/production/tapestry/content/clustering-issues.html (original)
+++ websites/production/tapestry/content/clustering-issues.html Sat Jun 27 21:21:02 2015
@@ -45,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Clustering Issues</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Clustering Issues</h1></div></div>
 <div class="clearer"></div>
 </div>
 

Modified: websites/production/tapestry/content/coffeescript.html
==============================================================================
--- websites/production/tapestry/content/coffeescript.html (original)
+++ websites/production/tapestry/content/coffeescript.html Sat Jun 27 21:21:02 2015
@@ -27,16 +27,6 @@
   </title>
   <link type="text/css" rel="stylesheet" href="/resources/space.css">
 
-    <link href='/resources/highlighter/styles/shCoreCXF.css' rel='stylesheet' type='text/css' />
-  <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 type="text/javascript">
-  SyntaxHighlighter.defaults['toolbar'] = false;
-  SyntaxHighlighter.all();
-  </script>
 
   <link href="/styles/style.css" rel="stylesheet" type="text/css"/>
 
@@ -55,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">CoffeeScript</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">CoffeeScript</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -68,102 +58,13 @@
 
 <div id="content">
 <div id="ConfluenceContent"><div class="navmenu" style="float:right; background:#eee; margin:3px; padding:3px">
-<h3>Related Articles</h3>
-<ul class="content-by-label"><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="ajax-and-zones.html">Ajax and Zones</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="legacy-javascript.html">Legacy JavaScript</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="ajax-components-faq.html">Ajax Components FAQ</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="javascript-faq.html">JavaScript FAQ</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="client-side-javascript.html">Client-Side JavaScript</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="assets.html">Assets</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="component-cheat-sheet.html">Component Cheat Sheet</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="javascript-modules.html">JavaScript Modules</a>
-                    
-                
-                            </div>
-        </li><li>
-            <div>
-                    <span class="icon icon-page" title="Page">Page:</span>            </div>
-
-            <div class="details">
-                            <a shape="rect" href="coffeescript.html">CoffeeScript</a>
-                    
-                
-                            </div>
-        </li></ul>
-</div><p><strong>CoffeeScript</strong> (<a shape="rect" class="external-link" href="http://coffeescript.org" >http://coffeescript.org</a>) is a language that compiles down to JavaScript.</p><p><em>Starting with version 5.4,</em> Tapestry can automatically compile your CoffeeScript code into JavaScript on the fly. This is done with the optional tapestry-webresources module. It is highly recommended for anyone who wants to use CoffeeScript in their application ... just let Tapestry do the compilation at runtime (with access to Tapestry's full exception reporting capabilities).</p><p>To use the tapestry-webresources module, just add the JAR to your project. For example, if you're using Maven:</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 class="error"><span class="error">Error formatting macro: contentbylabel: com.atlassian.confluence.api.service.exceptions.BadRequestException: Could not parse cql : null</span> </div></div><p><strong>CoffeeScript</strong> (<a shape="rect" class="external-link" href="http://coffeescript.org" >http://coffeescript.org</a>) is a language that compiles down to JavaScript.</p><p><em>Starting with version 5.4,</em> Tapestry can automatically compile your CoffeeScript code into JavaScript on the fly. This is done with the optional tapestry-webresources module. It is highly recommended for anyone who wants to use CoffeeScript in their application ... just let Tapestry do the compilation at runtime (with access to Tapestry's full exception reporting capabilities).</p><p>To use the tapestry-webresources module, just add the JAR to your project. For example, if you're using Maven:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl" style="borde
 r-bottom-width: 1px;"><b>pom.xml (partial)</b></div><div class="codeContent panelContent pdl">
+<script class="brush: xml; gutter: false; theme: Default" type="syntaxhighlighter"><![CDATA[&lt;dependency&gt;
     &lt;groupId&gt;org.apache.tapestry&lt;/groupId&gt;
     &lt;artifactId&gt;tapestry-webresources&lt;/artifactId&gt;
     &lt;version&gt;${tapestry-release-version}&lt;/version&gt;
 &lt;/dependency&gt;]]></script>
-</div></div><p>All of Tapestry's own client-side code is written in CoffeeScript and compiled, at <em>build</em> time, to JavaScript.</p>    <div class="aui-message hint shadowed information-macro">
-                            <span class="aui-icon icon-hint">Icon</span>
-                <div class="message-content">
-                            <p>You are completely free to use either JavaScript or CoffeeScript in your Tapestry application.</p>
-                    </div>
-    </div>
-<h2 id="CoffeeScript-CoffeeScriptversusJavaScript">CoffeeScript versus JavaScript</h2><p>CoffeeScript can be quite controversial, but also quite effective.</p><p>On the controversial side, it uses significant whitespace to denote blocks of code (like Python or Haskell) rather than curl braces (like Java, JavaScript, or Ruby). In fact, it draws influences from a wide rage of other languages, incorporating many functional programming features, a rudimentary class system, string interpolation, destructuring assignment, and more.</p><p>However, for all that, it is very close to JavaScript; it simply rounds out many of the rough edges of JavaScript (and adds a few of its own). As wide ranging as CoffeeScript syntax can be, there's generally a very close mapping from CoffeeScript to JavaScript.</p><p>CoffeeScript code often approaches Python's goal of being a "executable psuedo-code"; code that looks like a placeholder that will actually run. Some people find it more pleasant to read than
  JavaScript ... more&#160;<em>essence</em> and less&#160;<em>ceremony</em>.</p><p>You can still write bad code in CoffeeScript. You can write bad code in any language.</p></div>
+</div></div><p>All of Tapestry's own client-side code is written in CoffeeScript and compiled, at <em>build</em> time, to JavaScript.</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>You are completely free to use either JavaScript or CoffeeScript in your Tapestry application.</p></div></div><h2 id="CoffeeScript-CoffeeScriptversusJavaScript">CoffeeScript versus JavaScript</h2><p>CoffeeScript can be quite controversial, but also quite effective.</p><p>On the controversial side, it uses significant whitespace to denote blocks of code (like Python or Haskell) rather than curl braces (like Java, JavaScript, or Ruby). In fact, it draws influences from a wide rage of other languages, incorporating many functional programming features, a rudimentary class system, string interpolation, destructuring assignment
 , and more.</p><p>However, for all that, it is very close to JavaScript; it simply rounds out many of the rough edges of JavaScript (and adds a few of its own). As wide ranging as CoffeeScript syntax can be, there's generally a very close mapping from CoffeeScript to JavaScript.</p><p>CoffeeScript code often approaches Python's goal of being a "executable psuedo-code"; code that looks like a placeholder that will actually run. Some people find it more pleasant to read than JavaScript ... more&#160;<em>essence</em> and less&#160;<em>ceremony</em>.</p><p>You can still write bad code in CoffeeScript. You can write bad code in any language.</p></div>
 </div>
 
 <div class="clearer"></div>

Modified: websites/production/tapestry/content/committers.html
==============================================================================
--- websites/production/tapestry/content/committers.html (original)
+++ websites/production/tapestry/content/committers.html Sat Jun 27 21:21:02 2015
@@ -45,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Committers</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Committers</h1></div></div>
 <div class="clearer"></div>
 </div>
 

Modified: websites/production/tapestry/content/community.html
==============================================================================
--- websites/production/tapestry/content/community.html (original)
+++ websites/production/tapestry/content/community.html Sat Jun 27 21:21:02 2015
@@ -45,7 +45,7 @@
   <input type="submit" value="Search">
 </form>
 
-</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Community</h1></div></div>
+</div><div class="emblem" style="float:left"><p><a shape="rect" href="index.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://tapestry.apache.org/images/tapestry_small.png" data-image-src="http://tapestry.apache.org/images/tapestry_small.png"></span></a></p></div><div class="title" style="float:left; margin: 0 0 0 3em"><h1 id="SmallBanner-PageTitle">Community</h1></div></div>
 <div class="clearer"></div>
 </div>
 
@@ -57,18 +57,7 @@
   </div>
 
 <div id="content">
-<div id="ConfluenceContent"><p>Tapestry has an active community of users and developers. This is an overview of how to participate, along with a list of some of the great contributions of the community members.</p><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1424128765457 {padding: 0px;}
-div.rbtoc1424128765457 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1424128765457 li {margin-left: 0px;padding-left: 0px;}
-
-/*]]>*/</style></p><div class="toc-macro rbtoc1424128765457">
-<ul class="toc-indentation"><li><a shape="rect" href="#Community-GettingInvolved">Getting Involved</a>
-<ul class="toc-indentation"><li><a shape="rect" href="#Community-ReportingProblems/GettingSupport">Reporting Problems / Getting Support</a></li><li><a shape="rect" href="#Community-ContributingtranslationsforTapestrybuilt-inmessages">Contributing translations for Tapestry built-in messages</a></li><li><a shape="rect" href="#Community-SourceCodeAccess">Source Code Access</a></li><li><a shape="rect" href="#Community-BecomingaContributor">Becoming a Contributor</a></li><li><a shape="rect" href="#Community-BecomingaCommitter">Becoming a Committer</a></li></ul>
-</li><li><a shape="rect" href="#Community-CommunityContributions">Community Contributions</a>
-<ul class="toc-indentation"><li><a shape="rect" href="#Community-Modules">Modules</a></li></ul>
-</li><li><a shape="rect" href="#Community-Extensions">Extensions</a></li><li><a shape="rect" href="#Community-Tutorials">Tutorials</a></li><li><a shape="rect" href="#Community-IDEIntegrations">IDE Integrations</a></li></ul>
-</div><h1 id="Community-GettingInvolved">Getting Involved</h1><h2 id="Community-ReportingProblems/GettingSupport">Reporting Problems / Getting Support</h2><p>Like all Apache projects, Tapestry uses mailing lists for most communication. You can subscribe by sending e-mail to the addresses below. For each list, there are subscribe, unsubscribe, and archive links. All Tapestry users are welcome to subscribe to any of these lists, however questions on how to <em>use</em> Tapestry in your application are best sent to the <em>user</em> mailing list.</p><p>Please note that the Nabble archives are set to read-only and don't allow for posting or answering using Nabble's web interface. You have to subscribe to the mailing list in order to post.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><th colspan="1" rowspan="1" class="confluenceTh"><p>Subscribe</p></th><th colspan="1" rowspan="1" class="confluenceT
 h"><p>Unsubscribe</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Apache Archive</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Nabble Archive</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>MarkMail Archive</p></th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry User List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:users-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:users-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-users/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble.com/T
 apestry-User-f2375125.html" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.users" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry Developer List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:dev-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:dev-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-dev/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble
 .com/Tapestry-Dev-f2438278.html" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.dev" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry Commits List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:commits-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:commits-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-commits/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a
  shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.commits" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Search Multiple Lists</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble.com/" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=#query:+page:1+state:facets" >tapestry.markmail.org</a></p></td></tr></tbody></table></div><p>Tapestry issues are tracked in the <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/TAP5">Apache JIRA</a>.</p><p>Unless your problem is clear 
 as day, it's a good idea to discuss it on the Tapestry Users mailing list first, before adding an issue. At the same time, it's generally unlikely that a bug will be fixed <em>unless</em> a JIRA Issue is created.</p><p>Eric Raymond has a detailed <a shape="rect" class="external-link" href="http://catb.org/esr/faqs/smart-questions.html" >guide to asking questions the right way</a>. If you are not getting a response to your problem, it's likely because you aren't asking it the right way.</p><p>Just saying something is "broken" or "failed" is not enough. How did it fail? Did it do the wrong thing? Throw an exception? Not respond in any way? What exactly did you expect to happen? All of this information should be made available when looking for help, plus context on the general problem you were trying to solve in the first place (there may be a better solution entirely). Read Eric Raymond's guide ... it's fun and informative.</p><h2 id="Community-ContributingtranslationsforTapestrybuilt
 -inmessages">Contributing translations for Tapestry built-in messages</h2><p>If Tapestry's built-in messages aren't available in your language, you are welcome to contribute a new translation of the message catalogs. For easy instructions, see <a shape="rect" href="localization.html#Localization-ProvidingtranslationsforTapestrybuiltinmessages">Localization</a>.</p><h2 id="Community-SourceCodeAccess">Source Code Access</h2><p>Source code for Tapestry can be <a shape="rect" href="download.html">downloaded</a> along with pre-compiled binaries.</p><p>Tapestry uses <a shape="rect" class="external-link" href="http://git-scm.com/" >Git</a> to manage the project's source code.</p><p>Web access to the Tapestry repository is available as <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git">GIT-WIP at Apache</a>.</p><p>Access using Git client:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelCont
 ent">
+<div id="ConfluenceContent"><p>Tapestry has an active community of users and developers. This is an overview of how to participate, along with a list of some of the great contributions of the community members.</p><p></p><div class="toc-macro client-side-toc-macro" data-headerelements="H1,H2,H3,H4,H5,H6,H7"></div><h1 id="Community-GettingInvolved">Getting Involved</h1><h2 id="Community-ReportingProblems/GettingSupport">Reporting Problems / Getting Support</h2><p>Like all Apache projects, Tapestry uses mailing lists for most communication. You can subscribe by sending e-mail to the addresses below. For each list, there are subscribe, unsubscribe, and archive links. All Tapestry users are welcome to subscribe to any of these lists, however questions on how to <em>use</em> Tapestry in your application are best sent to the <em>user</em> mailing list.</p><p>Please note that the Nabble archives are set to read-only and don't allow for posting or answering using Nabble's web interface. You
  have to subscribe to the mailing list in order to post.</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>&#160;</p></td><th colspan="1" rowspan="1" class="confluenceTh"><p>Subscribe</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Unsubscribe</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Apache Archive</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Nabble Archive</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>MarkMail Archive</p></th></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry User List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:users-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:users-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td><td colspan="1" r
 owspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-users/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble.com/Tapestry-User-f2375125.html" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.users" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry Developer List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:dev-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:dev-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td><td colsp
 an="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-dev/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble.com/Tapestry-Dev-f2438278.html" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.dev" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Tapestry Commits List</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:commits-subscribe@tapestry.apache.org" >Subscribe</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="mailto:commits-unsubscribe@tapestry.apache.org" >Unsubscribe</a></p></td>
 <td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://mail-archives.apache.org/mod_mbox/tapestry-commits/">mail-archives.apache.org</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.markmail.org/search/?q=list%3Aorg.apache.tapestry.commits" >tapestry.markmail.org</a></p></td></tr><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Search Multiple Lists</p></th><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>-</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href="http://tapestry.1045711.n5.nabble.com/" >www.nabble.com</a></p></td><td colspan="1" rowspan="1" class="confluenceTd"><p><a shape="rect" class="external-link" href=
 "http://tapestry.markmail.org/search/?q=#query:+page:1+state:facets" >tapestry.markmail.org</a></p></td></tr></tbody></table></div><p>Tapestry issues are tracked in the <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/TAP5">Apache JIRA</a>.</p><p>Unless your problem is clear as day, it's a good idea to discuss it on the Tapestry Users mailing list first, before adding an issue. At the same time, it's generally unlikely that a bug will be fixed <em>unless</em> a JIRA Issue is created.</p><p>Eric Raymond has a detailed <a shape="rect" class="external-link" href="http://catb.org/esr/faqs/smart-questions.html" >guide to asking questions the right way</a>. If you are not getting a response to your problem, it's likely because you aren't asking it the right way.</p><p>Just saying something is "broken" or "failed" is not enough. How did it fail? Did it do the wrong thing? Throw an exception? Not respond in any way? What exactly did you expect to happen? All
  of this information should be made available when looking for help, plus context on the general problem you were trying to solve in the first place (there may be a better solution entirely). Read Eric Raymond's guide ... it's fun and informative.</p><h2 id="Community-ContributingtranslationsforTapestrybuilt-inmessages">Contributing translations for Tapestry built-in messages</h2><p>If Tapestry's built-in messages aren't available in your language, you are welcome to contribute a new translation of the message catalogs. For easy instructions, see <a shape="rect" href="localization.html#Localization-ProvidingtranslationsforTapestrybuiltinmessages">Localization</a>.</p><h2 id="Community-SourceCodeAccess">Source Code Access</h2><p>Source code for Tapestry can be <a shape="rect" href="download.html">downloaded</a> along with pre-compiled binaries.</p><p>Tapestry uses <a shape="rect" class="external-link" href="http://git-scm.com/" >Git</a> to manage the project's source code.</p><p>Web 
 access to the Tapestry repository is available as <a shape="rect" class="external-link" href="https://git-wip-us.apache.org/repos/asf?p=tapestry-5.git">GIT-WIP at Apache</a>.</p><p>Access using Git client:</p><div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
 <pre>$ git clone http://git-wip-us.apache.org/repos/asf/tapestry-5.git
 </pre>
 </div></div><p>(See <a shape="rect" href="building-tapestry-from-source.html">Building Tapestry from Source</a> for more info.)</p><h2 id="Community-BecomingaContributor">Becoming a Contributor</h2><p>The best way to become a contributor is to become active on the mailing list; Tapestry is known to have an active and helpful community on the mailing list, and the more mentors we can add, the better.</p><p>If you want to help out with documentation, you must sign an <a shape="rect" class="external-link" href="http://www.apache.org/licenses/#clas">Apache Contributor License Agreement</a>, at which point we can grant write access to the Confluence Wiki (where official documentation is created).</p><p>Providing patches (with tests!) is another way to become a contributor. (See the&#160;<a shape="rect" href="developer-bible.html">Developer Bible</a> for important guidance on source code formatting, class naming conventions, etc.)</p><h2 id="Community-BecomingaCommitter">Becoming a Commit
 ter</h2><p>Active contributors may be asked to become full committers, with write access to the source code. Generally, contributors who have been consistently active and helpful for three to six months are eligible for committer access. If you think you are in that category, don't be shy about contacting members of the Tapestry PMC (Project Management Committee).</p><hr><h1 id="Community-CommunityContributions">Community Contributions</h1><div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro" style="width:50%;min-width:50%;max-width:50%;"><p><span class="confluence-anchor-link" id="Community-modules"></span></p><p>&#160;</p><div id="third-parties"><p>&#160;</p><h2 id="Community-Modules">Modules</h2><p><a shape="rect" class="external-link" href="https://github.com/chenillekit/chenillekit" >Chenille Kit</a> by Massimo Lusetti</p><blockquote><p>Collection of modules, services, utilities and components (many of which require on
 ly tapestry-ioc). Includes Accordion, ColorPicker, Editor, Kaptcha, MultipleSelect, RoundCornerContainer, ThumbNail, and many more useful components. Also provides integrations with Google services, LDAP, Lucene, Mail, Quartz, JasperReports, Bean Scripting Framework, and more.</p></blockquote><p><a shape="rect" class="external-link" href="http://equanda.org/equanda-tapestry5/" >Equanda-tapestry5</a> by Joachim Van der Auwera</p><blockquote><p>Components useful for building enterprise applications. Includes Accordion, Form Traversal, Tabs, TextAreaAutoExpander, TreeTable, . Among other things, these focus on easy input of data without the need for a mouse.</p></blockquote><p><a shape="rect" class="external-link" href="http://tapestry.ioko.com/" >ioko-tapestry-commons</a> by Ben Gidley, et al.</p><blockquote><p>Provides components for caching, cache control, and simple Flash movie integration.</p></blockquote><p><a shape="rect" class="external-link" href="http://tapestry.formos.com/ni
 ghtly/tapx/" >Tapx</a> by Howard M. Lewis Ship</p><blockquote><p>Collection of modules and components: improved DatePicker, dynamic Tapestry templates, offline rendering using Tapestry, YUI integration, Confirm dialog mixin, Kaptcha components, and more!</p></blockquote><p><a shape="rect" class="external-link" href="http://tapestry5-jquery.com/" >Tapestry5-jQuery</a> by GOT5</p><blockquote><p>Tapestry5-Jquery lets you use jQuery to completely replace Prototype, Scriptaculous and the base tapestry.js script.</p></blockquote><p><a shape="rect" class="external-link" href="http://exanpe-t5-lib.appspot.com/" >Exanpe-T5-Lib</a> by Laurent Gu&#233;rin et Julien Maupoux</p><blockquote><p>A library of components: accordion, ajax loader, slider, tab view, secured password, color picker, tooltip, hideable panel and more! Live demo is provided.</p></blockquote><p><a shape="rect" class="external-link" href="http://code.google.com/p/flowlogix/" >FlowLogix</a> by Lenny Primak</p><blockquote><p>a c
 ollection of components, services and utilities that integrates Tapestry into JEE environments and provides other commonly needed functionality.</p></blockquote><p><a shape="rect" href="modules.html">More Modules</a>...</p><h1 id="Community-Extensions">Extensions</h1><p><a shape="rect" class="external-link" href="http://www.arsmachina.com.br/" >Ars Machina</a> by Thiago H. de Paula Figueiredo</p><blockquote><p>Tapestry/Hibernate extensions for Generic DAOs, standard CRUD interfaces, and user access logging and tracking.</p></blockquote><p><a shape="rect" class="external-link" href="http://tynamo.org/" >Tynamo project</a> by Tynamo Team / Kalle Korhonen &amp; Alejandro Scandroli</p><blockquote><p>Tynamo is model-driven, full-stack web framework based on Tapestry 5, allowing you to jump directly from your Hibernate entities to a full-blown CRUD application. Tynamo provides several modules, including tapestry-model, tapestry-conversations, tapestry-hibernate-seedentity, tapestry-restea
 sy and tapestry-security.</p></blockquote></div><div class="columnMacro"><h1 id="Community-Tutorials">Tutorials</h1><p><a shape="rect" class="external-link" href="http://jumpstart.doublenegative.com.au/jumpstart" >Tapestry JumpStart</a> by Geoff Callender</p><blockquote><p>JumpStart is an easy way to learn Tapestry by example. It's an online demo application, and also a downloadable open source app ready for you to explore and modify.</p></blockquote><p><a shape="rect" class="external-link" href="http://tapestry-stitch.uklance.cloudbees.net/" >Tapestry Stitch</a> by Lance</p><blockquote><p>Sample components and concepts in Apache Tapestry 5</p></blockquote><p><a shape="rect" class="external-link" href="http://code.google.com/p/shams/" >Shams Examples</a> by Mohammad H. Shamsi</p><blockquote><p>A variety of examples of Tapestry 5 pages and components.</p></blockquote><p><a shape="rect" class="external-link" href="http://wiki.apache.org/tapestry/FrontPage">Community's Wiki</a> (Moin M
 oin)</p><blockquote><p>The wiki contains a wealth of user-generated tips and techniques for using Tapestry</p></blockquote><h1 id="Community-IDEIntegrations">IDE Integrations</h1><p><a shape="rect" class="external-link" href="https://github.com/anjlab/eclipse-tapestry5-plugin" >Eclipse-tapestry5-plugin</a></p><blockquote><p>An Eclipse plugin for Tapestry 5 by Dmitry Gusev, with a "Quick Switch" between templates and component classes, a Tapestry Context view, and many other convenience features. <span style="color: rgb(112,112,112);">This is currently the best choice for Eclipse users.</span></p></blockquote><p><a shape="rect" class="external-link" href="http://code.google.com/p/tapestrytools/wiki/Install_Guide_Lightweight_TapestryTools" >Tapestry Tools</a> by Gavin Lei</p><blockquote><p>Tapestry Tools is an Eclipse plugin for Tapestry 5 which has been built by Gavin Lei within the timeframe of GSoC 2012.</p></blockquote><p><a shape="rect" class="external-link" href="http://www.jetb
 rains.com/idea" >IntelliJ 10</a> by JetBrains</p><blockquote><p>IntelliJ has Tapestry 5 support included <a shape="rect" class="external-link" href="http://www.jetbrains.com/idea/features/tapestry_5.html" >right out of the box</a>.</p></blockquote><p><a shape="rect" class="external-link" href="http://code.google.com/p/loom-t5/" >loom-t5</a> by Chris Scheid</p><blockquote><p>Eclipse plugin for building Tapestry 5 projects</p></blockquote><p><a shape="rect" class="external-link" href="http://wiki.apache.org/tapestry/Tapestry5JSPEditorEclipse">Code Completion in Eclipse</a></p><blockquote><p>How to use the built in JSP Eclipse Editor and a custom tld file to get Tapestry 5 code completion in Eclipse</p></blockquote></div></div></div></div></div></div>