You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by bu...@apache.org on 2013/10/18 13:09:28 UTC

svn commit: r883118 [1/4] - in /websites/staging/ace/trunk/content: ./ css/ css_/ dev-doc/ dev-doc/analysis/ dev-doc/design/ img/ img_/ js/ js_/ lib/ lib_/ user-doc/

Author: buildbot
Date: Fri Oct 18 11:09:27 2013
New Revision: 883118

Log:
Staging update by buildbot for ace

Added:
    websites/staging/ace/trunk/content/css_/
    websites/staging/ace/trunk/content/css_/prettify.css
    websites/staging/ace/trunk/content/img_/
    websites/staging/ace/trunk/content/img_/glyphicons-halflings-white.png   (with props)
    websites/staging/ace/trunk/content/img_/glyphicons-halflings.png   (with props)
    websites/staging/ace/trunk/content/js_/
    websites/staging/ace/trunk/content/js_/bootstrap-alert.js
    websites/staging/ace/trunk/content/js_/bootstrap-alerts.js
    websites/staging/ace/trunk/content/js_/bootstrap-button.js
    websites/staging/ace/trunk/content/js_/bootstrap-buttons.js
    websites/staging/ace/trunk/content/js_/bootstrap-carousel.js
    websites/staging/ace/trunk/content/js_/bootstrap-collapse.js
    websites/staging/ace/trunk/content/js_/bootstrap-dropdown.js
    websites/staging/ace/trunk/content/js_/bootstrap-modal.js
    websites/staging/ace/trunk/content/js_/bootstrap-popover.js
    websites/staging/ace/trunk/content/js_/bootstrap-scrollspy.js
    websites/staging/ace/trunk/content/js_/bootstrap-tab.js
    websites/staging/ace/trunk/content/js_/bootstrap-tabs.js
    websites/staging/ace/trunk/content/js_/bootstrap-tooltip.js
    websites/staging/ace/trunk/content/js_/bootstrap-transition.js
    websites/staging/ace/trunk/content/js_/bootstrap-twipsy.js
    websites/staging/ace/trunk/content/js_/bootstrap-typeahead.js
    websites/staging/ace/trunk/content/js_/less-1.2.1.min.js
    websites/staging/ace/trunk/content/js_/prettify.js
    websites/staging/ace/trunk/content/lib_/
    websites/staging/ace/trunk/content/lib_/accordion.less
    websites/staging/ace/trunk/content/lib_/alerts.less
    websites/staging/ace/trunk/content/lib_/bootstrap.less
    websites/staging/ace/trunk/content/lib_/breadcrumbs.less
    websites/staging/ace/trunk/content/lib_/button-groups.less
    websites/staging/ace/trunk/content/lib_/buttons.less
    websites/staging/ace/trunk/content/lib_/carousel.less
    websites/staging/ace/trunk/content/lib_/close.less
    websites/staging/ace/trunk/content/lib_/code.less
    websites/staging/ace/trunk/content/lib_/component-animations.less
    websites/staging/ace/trunk/content/lib_/dropdowns.less
    websites/staging/ace/trunk/content/lib_/forms.less   (with props)
    websites/staging/ace/trunk/content/lib_/grid.less
    websites/staging/ace/trunk/content/lib_/hero-unit.less
    websites/staging/ace/trunk/content/lib_/labels.less
    websites/staging/ace/trunk/content/lib_/layouts.less
    websites/staging/ace/trunk/content/lib_/mixins.less
    websites/staging/ace/trunk/content/lib_/modals.less
    websites/staging/ace/trunk/content/lib_/navbar.less
    websites/staging/ace/trunk/content/lib_/navs.less
    websites/staging/ace/trunk/content/lib_/pager.less
    websites/staging/ace/trunk/content/lib_/pagination.less
    websites/staging/ace/trunk/content/lib_/patterns.less
    websites/staging/ace/trunk/content/lib_/popovers.less
    websites/staging/ace/trunk/content/lib_/print.less
    websites/staging/ace/trunk/content/lib_/progress-bars.less
    websites/staging/ace/trunk/content/lib_/reset.less
    websites/staging/ace/trunk/content/lib_/responsive.less
    websites/staging/ace/trunk/content/lib_/scaffolding.less
    websites/staging/ace/trunk/content/lib_/sprites.less
    websites/staging/ace/trunk/content/lib_/tables.less
    websites/staging/ace/trunk/content/lib_/thumbnails.less
    websites/staging/ace/trunk/content/lib_/tooltip.less
    websites/staging/ace/trunk/content/lib_/type.less
    websites/staging/ace/trunk/content/lib_/utilities.less
    websites/staging/ace/trunk/content/lib_/variables.less
    websites/staging/ace/trunk/content/lib_/wells.less
Removed:
    websites/staging/ace/trunk/content/css/
    websites/staging/ace/trunk/content/img/
    websites/staging/ace/trunk/content/js/
    websites/staging/ace/trunk/content/lib/
Modified:
    websites/staging/ace/trunk/content/   (props changed)
    websites/staging/ace/trunk/content/dev-doc/analysis/template-mechanism.html
    websites/staging/ace/trunk/content/dev-doc/design/ace-authentication.html
    websites/staging/ace/trunk/content/dev-doc/design/ace-deployment-strategies.html
    websites/staging/ace/trunk/content/dev-doc/design/using-client-certificates.html
    websites/staging/ace/trunk/content/dev-doc/release-guide.html
    websites/staging/ace/trunk/content/dev-doc/writing-tests.html
    websites/staging/ace/trunk/content/user-doc/user-guide.html

Propchange: websites/staging/ace/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Fri Oct 18 11:09:27 2013
@@ -1 +1 @@
-1504401
+1533384

Added: websites/staging/ace/trunk/content/css_/prettify.css
==============================================================================
--- websites/staging/ace/trunk/content/css_/prettify.css (added)
+++ websites/staging/ace/trunk/content/css_/prettify.css Fri Oct 18 11:09:27 2013
@@ -0,0 +1,30 @@
+.com { color: #93a1a1; }
+.lit { color: #195f91; }
+.pun, .opn, .clo { color: #93a1a1; }
+.fun { color: #dc322f; }
+.str, .atv { color: #D14; }
+.kwd, .linenums .tag { color: #1e347b; }
+.typ, .atn, .dec, .var { color: teal; }
+.pln { color: #48484c; }
+
+.prettyprint {
+  padding: 8px;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+.prettyprint.linenums {
+  -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
+     -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
+          box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
+}
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums {
+  margin: 0 0 0 33px; /* IE indents via margin-left */
+} 
+ol.linenums li {
+  padding-left: 12px;
+  color: #bebec5;
+  line-height: 18px;
+  text-shadow: 0 1px 0 #fff;
+}
\ No newline at end of file

Modified: websites/staging/ace/trunk/content/dev-doc/analysis/template-mechanism.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/analysis/template-mechanism.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/analysis/template-mechanism.html Fri Oct 18 11:09:27 2013
@@ -182,13 +182,13 @@
 <h3 id="customization-information">Customization information</h3>
 <p>For each template that has 'holes' to fill in, it can 'reach' all RepositoryObjects that are reachable from the TargetObject this template will be provisioned to, leading to a tree of data. Inspired by Velocity's way of finding contextual data, we propose to store the for each RepositoryObject in its own Properties object, adding its attributes and tags to it as two Properties objects using the keys "attributes" and "tags", and a List<Properties> summing up all children (so, for a target, all its distributions) using the key "children"; in the end, this becomes a tree of Properties objects.</p>
 <p>This way, the Velocity template can use syntax like</p>
-<div class="codehilite"><pre><span class="c1">#foreach( $license in $gateway.children)</span>
-    <span class="c1">#if ($license.attributes.vendor==&quot;luminis&quot;)</span>
-        <span class="n">Default</span> <span class="n">license</span> <span class="n">by</span> <span class="n">luminis</span>
-    <span class="c1">#else</span>
-        <span class="n">Custom</span> <span class="n">license</span> <span class="n">by</span> <span class="nv">$license</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">vendor</span>
-    <span class="c1">#end</span>
-<span class="c1">#end</span>
+<div class="codehilite"><pre><span class="c">#foreach( $license in $gateway.children)</span>
+    <span class="c">#if ($license.attributes.vendor==&quot;luminis&quot;)</span>
+        <span class="n">Default</span> <span class="nb">license</span> <span class="n">by</span> <span class="n">luminis</span>
+    <span class="c">#else</span>
+        <span class="n">Custom</span> <span class="nb">license</span> <span class="n">by</span> $<span class="nb">license</span><span class="p">.</span><span class="n">attributes</span><span class="p">.</span><span class="n">vendor</span>
+    <span class="c">#end</span>
+<span class="c">#end</span>
 </pre></div>
 
 

Modified: websites/staging/ace/trunk/content/dev-doc/design/ace-authentication.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/design/ace-authentication.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/design/ace-authentication.html Fri Oct 18 11:09:27 2013
@@ -210,7 +210,7 @@ The remainder of this article assumes th
 <strong>Figure 1</strong>: Overview of components and communication paths.</p>
 <p>In the above figure, several of the communication paths (denoted by the circled digits) that can be identified in ACE are represented:</p>
 <ol>
-<li>the client communicates to the ACE server by means of both direct calls to its services as well as remote (HTTP<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>) calls;</li>
+<li>the client communicates to the ACE server by means of both direct calls to its services as well as remote (HTTP<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup>) calls;</li>
 <li>a management agent (representing the target) communicates to the ACE server through remote calls;</li>
 <li>the REST API exposes the entire client and server APIs in a RESTful way. Communication to the client occurs by both direct and remote calls;</li>
 <li>the Vaadin Web UI exposes the entire client API as web application. Similar as the REST API, it communicates both directly as remotely with the client.</li>
@@ -220,7 +220,7 @@ The remainder of this article assumes th
 <li>It allows reuse of components; for example access to the OBR-servlet is used by the both the client-API as well the web UI to upload new artifacts;</li>
 <li>it enables scalability by allowing components to be deployed on different machines; for example, one does not need to run the client on the same machine as the server. This could be useful for working on high-latency networks.</li>
 </ol>
-<p>All direct (i.e., non remoted) communication paths do not need to be authenticated, as they require that both caller and callee run in the same virtual machine, making it impossible to be used outside the virtual machine<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>. Hence, we only need to add an authentication layer to the remote endpoints. However, adding authentication to all remote endpoints poses us with the challenge to let the "internal" communication paths that use remote calls to authenticate themselves as well. Not doing so would prevent ACE from functioning correctly. A disadvantage of this approach is that it is an all-or-nothing approach, either all users of the remote endpoints use authentication, or none of them. However, the way users authenticate themselves can be different, meaning that one set of users can use basic authentication to identify themselves, while another set uses client certificates to identify themselves.</p>
+<p>All direct (i.e., non remoted) communication paths do not need to be authenticated, as they require that both caller and callee run in the same virtual machine, making it impossible to be used outside the virtual machine<sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="footnote">2</a></sup>. Hence, we only need to add an authentication layer to the remote endpoints. However, adding authentication to all remote endpoints poses us with the challenge to let the "internal" communication paths that use remote calls to authenticate themselves as well. Not doing so would prevent ACE from functioning correctly. A disadvantage of this approach is that it is an all-or-nothing approach, either all users of the remote endpoints use authentication, or none of them. However, the way users authenticate themselves can be different, meaning that one set of users can use basic authentication to identify themselves, while another set uses client certificates to identify themselves.</p>
 <h2 id="authentication-design">Authentication design</h2>
 <p>The high-level design for security in ACE is explained in the <a href="/dev-doc/design/remote-interfaces.html">remote interface design</a>. From this design, we can derive several requirements for the design of ACE's authentication layer:</p>
 <ol>
@@ -239,7 +239,7 @@ The remainder of this article assumes th
 <li>if it can be handled, the <tt>AuthenticationProcessor#authenticate</tt> is called with that blob of data, along with an instance of the <tt>UserAdmin</tt> service. The authentication processor is now responsible for converting the blob of data to an authenticated user, if possible.</li>
 </ul>
 </li>
-<li>if a <tt>User</tt> object is returned from the authentication service<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>, the authentication phase will be regarded as successful. If <em>no</em> <tt>User</tt> object is returned, the authentication phase will be regarded unsuccessful.</li>
+<li>if a <tt>User</tt> object is returned from the authentication service<sup id="fnref:3"><a class="footnote-ref" href="#fn:3" rel="footnote">3</a></sup>, the authentication phase will be regarded as successful. If <em>no</em> <tt>User</tt> object is returned, the authentication phase will be regarded unsuccessful.</li>
 </ol>
 <p>This is only half the story for authentication. As stated before, ACE internally also communicates through remote endpoints to access certain services. Without any changes, all those remote calls will fail due to missing credentials. If we would leave those means of communications as-is, we need to track down all places where remote calls are being made and inject the proper credentials at each of those places. However, doing this is not only <em>very</em> invasive and error prone but also not very developer friendly from a service-oriented perspective. Alternatively, we could try to include the credentials in the URL itself, making it self-contained. Not only would this approach limit our ability to use any kind of authentication mechanism (it only works for username/password combos), it also required us to supply the credentials manually each and every time we want to create a remote connection. Instead, we would like to refrain from passing around credentials, and leverage the
  service oriented aspects of OSGi to create remote connections for us. This service could then be responsible for adding the right credentials for us, leaving the calling party totally unaware about the fact authentication might be used (or not). Such a service is denoted in the following figure:</p>
 <p><img alt="Figure 3: Connection Factory class diagram" src="auth_connectionfactory.svg" title="Figure 3: Connection Factory class diagram" /><br />
@@ -254,7 +254,7 @@ All remote services are configurable wit
 <th>Name</th>
 <th>Description</th>
 <th>Endpoint</th>
-<th>Configuration PID<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup></th>
+<th>Configuration PID<sup id="fnref:4"><a class="footnote-ref" href="#fn:4" rel="footnote">4</a></sup></th>
 </tr>
 </thead>
 <tbody>
@@ -273,7 +273,7 @@ All remote services are configurable wit
 <tr>
 <td><tt>LogServlet</tt></td>
 <td>allows any number of logs for a target to be synchronized and accessed</td>
-<td><tt>/auditlog</tt><sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup></td>
+<td><tt>/auditlog</tt><sup id="fnref:5"><a class="footnote-ref" href="#fn:5" rel="footnote">5</a></sup></td>
 <td><tt>o.a.a.server.log.servlet.factory</tt><br/><strong>note: this is a configuration factory!</strong></td>
 </tr>
 <tr>
@@ -364,7 +364,7 @@ All remote services are configurable wit
 </pre></div>
 
 
-<p>As almost all of the services in ACE are managed by the Dependency Manager, we can leverage its dynamics to inject our <tt>BundleServlet</tt> with an instance of the <tt>AuthenticationService</tt> and provide us with a configuration<sup id="fnref:6"><a href="#fn:6" rel="footnote">6</a></sup>. In the <tt>updated()</tt> method, we perform a check whether the prior mentioned <tt>authentication.enabled</tt> property is present in the given configuration, and if so, whether it represents a valid boolean value. The actual boolean value itself will be held in a field (<tt>m_useAuth</tt>) for later use.</p>
+<p>As almost all of the services in ACE are managed by the Dependency Manager, we can leverage its dynamics to inject our <tt>BundleServlet</tt> with an instance of the <tt>AuthenticationService</tt> and provide us with a configuration<sup id="fnref:6"><a class="footnote-ref" href="#fn:6" rel="footnote">6</a></sup>. In the <tt>updated()</tt> method, we perform a check whether the prior mentioned <tt>authentication.enabled</tt> property is present in the given configuration, and if so, whether it represents a valid boolean value. The actual boolean value itself will be held in a field (<tt>m_useAuth</tt>) for later use.</p>
 <h4 id="implementing-the-authentication-check">Implementing the authentication check</h4>
 <p>The actual authentication implementation itself is rather trivial: we simply intercept all incoming requests in our servlet and verify whether it resolves to a valid user:</p>
 <div class="codehilite"><pre><span class="nd">@Override</span>
@@ -406,7 +406,7 @@ For accessing our <tt>BundleServlet</tt>
 </pre></div>
 
 
-<p>When this configuration is supplied to the <tt>ConnectionFactory</tt>, it will provide a basic HTTP authentication header to each connection created for any URL starting with "<tt>http://localhost:8080/obr/</tt>"<sup id="fnref:7"><a href="#fn:7" rel="footnote">7</a></sup>.<br />
+<p>When this configuration is supplied to the <tt>ConnectionFactory</tt>, it will provide a basic HTTP authentication header to each connection created for any URL starting with "<tt>http://localhost:8080/obr/</tt>"<sup id="fnref:7"><a class="footnote-ref" href="#fn:7" rel="footnote">7</a></sup>.<br />
 To disable authentication for a particular URL, the <tt>authentication.type</tt> option can be set to <tt>none</tt>. </p>
 <h3 id="configuring-the-management-agent">Configuring the management agent</h3>
 <p>The management agent itself also needs to use authentication to communicate with the remote services of the ACE server. It reuses the <tt>ConnectionFactory</tt> service for this, so it needs to obtain the same set of configurations as described in the previous section. The only thing we need to do is tell the management agent were it can find those configuration file(s):</p>
@@ -419,7 +419,7 @@ To disable authentication for a particul
 
 <p>Alternatively, one could adapt the code of the management agent to use the <tt>ConfigAdmin</tt> service directly for creating the individual configurations using the service factory PID <tt>org.apache.ace.connectionfactory</tt>. </p>
 <h3 id="configuring-users">Configuring users</h3>
-<p>In order to successfully authenticate a user, it needs a corresponding <tt>User</tt> that can be obtained from the <tt>UserAdmin</tt> service. Initially, ACE imports a small set of users and roles defined in the "<tt>org.apache.ace.server.repository.factory/ace-user.cfg</tt>" configuration file. One could update this file in order to add users<sup id="fnref:8"><a href="#fn:8" rel="footnote">8</a></sup>, or add them, for example, to an LDAP-service and make the <tt>UserAdmin</tt> service retrieve users from this backend. The exact details on how to configure this are beyond this article.</p>
+<p>In order to successfully authenticate a user, it needs a corresponding <tt>User</tt> that can be obtained from the <tt>UserAdmin</tt> service. Initially, ACE imports a small set of users and roles defined in the "<tt>org.apache.ace.server.repository.factory/ace-user.cfg</tt>" configuration file. One could update this file in order to add users<sup id="fnref:8"><a class="footnote-ref" href="#fn:8" rel="footnote">8</a></sup>, or add them, for example, to an LDAP-service and make the <tt>UserAdmin</tt> service retrieve users from this backend. The exact details on how to configure this are beyond this article.</p>
 <h2 id="troubleshooting">Troubleshooting</h2>
 <p>If after configuring the authentication of ACE things no longer work, it can be hard to find the exact cause of this. In this section, some pointers are given to help you to find the probably cause of the problem.</p>
 <dl>
@@ -439,28 +439,28 @@ To disable authentication for a particul
 <hr />
 <ol>
 <li id="fn:1">
-<p>Other communication protocols could be used as well. However, currently, only HTTP is natively supported by ACE. For the remainder of this article, we'll assume HTTP as protocol.&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
+<p>Other communication protocols could be used as well. However, currently, only HTTP is natively supported by ACE. For the remainder of this article, we'll assume HTTP as protocol.&#160;<a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
 </li>
 <li id="fn:2">
-<p>Assuming that all components in the ACE server are trusted and obtained from trusted sources. If untrusted components would be allowed, we need to add authentication to these communication paths as well.&#160;<a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
+<p>Assuming that all components in the ACE server are trusted and obtained from trusted sources. If untrusted components would be allowed, we need to add authentication to these communication paths as well.&#160;<a class="footnote-backref" href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
 </li>
 <li id="fn:3">
-<p>It is up to the implementation of <tt>AuthenticationService</tt> whether the <em>first</em> found user is returned, or whether it checks if all authentication processors yield the <em>same</em> user, or any other strategy that is desired.&#160;<a href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
+<p>It is up to the implementation of <tt>AuthenticationService</tt> whether the <em>first</em> found user is returned, or whether it checks if all authentication processors yield the <em>same</em> user, or any other strategy that is desired.&#160;<a class="footnote-backref" href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
 </li>
 <li id="fn:4">
-<p>The common prefix of the shown configuration PIDs are abbreviated, so "<tt>o.a.a</tt>" stands for "<tt>org.apache.ace</tt>".&#160;<a href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p>
+<p>The common prefix of the shown configuration PIDs are abbreviated, so "<tt>o.a.a</tt>" stands for "<tt>org.apache.ace</tt>".&#160;<a class="footnote-backref" href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p>
 </li>
 <li id="fn:5">
-<p>Amongst others, any number of log-endpoints can be defined, at least one is needed for the audit log to be synchronized between target and ACE server.&#160;<a href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p>
+<p>Amongst others, any number of log-endpoints can be defined, at least one is needed for the audit log to be synchronized between target and ACE server.&#160;<a class="footnote-backref" href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p>
 </li>
 <li id="fn:6">
-<p>Note that we're using a configuration dependency for this service. This way, the configuration <strong>must</strong> be present before the service itself is registered, which allows us to determine if authentication should be used or not.&#160;<a href="#fnref:6" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p>
+<p>Note that we're using a configuration dependency for this service. This way, the configuration <strong>must</strong> be present before the service itself is registered, which allows us to determine if authentication should be used or not.&#160;<a class="footnote-backref" href="#fnref:6" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p>
 </li>
 <li id="fn:7">
-<p>Currently, a simple <tt>String#startsWith()</tt> is used to determine whether or not a URL matches a configuration. This might change in the future when a more sophisticated URL-matching strategy is needed.&#160;<a href="#fnref:7" rev="footnote" title="Jump back to footnote 7 in the text">&#8617;</a></p>
+<p>Currently, a simple <tt>String#startsWith()</tt> is used to determine whether or not a URL matches a configuration. This might change in the future when a more sophisticated URL-matching strategy is needed.&#160;<a class="footnote-backref" href="#fnref:7" rev="footnote" title="Jump back to footnote 7 in the text">&#8617;</a></p>
 </li>
 <li id="fn:8">
-<p>Make sure to clean the <tt>felix-cache</tt> directory before restarting the server, otherwise the new configuration files will not be picked up!&#160;<a href="#fnref:8" rev="footnote" title="Jump back to footnote 8 in the text">&#8617;</a></p>
+<p>Make sure to clean the <tt>felix-cache</tt> directory before restarting the server, otherwise the new configuration files will not be picked up!&#160;<a class="footnote-backref" href="#fnref:8" rev="footnote" title="Jump back to footnote 8 in the text">&#8617;</a></p>
 </li>
 </ol>
 </div></div>

Modified: websites/staging/ace/trunk/content/dev-doc/design/ace-deployment-strategies.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/design/ace-deployment-strategies.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/design/ace-deployment-strategies.html Fri Oct 18 11:09:27 2013
@@ -329,9 +329,9 @@ Import-Package: *
 
 <p>Note that besides adding our bundle to the class path, we also have added the <code>bundle</code> argument to tell the management agent to include our bundle activator in its startup.<br />
 If everything went well, one of the first few lines printed out on the console should be something like:</p>
-<div class="codehilite"><pre><span class="n">Adding</span> <span class="n">additional</span> <span class="n">bundle</span> <span class="n">activator:</span> <span class="n">net</span><span class="o">.</span><span class="n">luminis</span><span class="o">.</span><span class="n">ace</span><span class="o">.</span><span class="n">updatetask</span><span class="o">.</span><span class="n">Activator</span>
-<span class="n">Not</span> <span class="n">starting</span> <span class="n">activator</span> <span class="n">org</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">ace</span><span class="o">.</span><span class="n">deployment</span><span class="o">.</span><span class="n">task</span><span class="o">.</span>
-<span class="o">...</span>
+<div class="codehilite"><pre><span class="n">Adding</span> <span class="n">additional</span> <span class="n">bundle</span> <span class="n">activator</span><span class="p">:</span> <span class="n">net</span><span class="p">.</span><span class="n">luminis</span><span class="p">.</span><span class="n">ace</span><span class="p">.</span><span class="n">updatetask</span><span class="p">.</span><span class="n">Activator</span>
+<span class="n">Not</span> <span class="n">starting</span> <span class="n">activator</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">ace</span><span class="p">.</span><span class="n">deployment</span><span class="p">.</span><span class="n">task</span><span class="p">.</span>
+<span class="p">...</span>
 </pre></div>
 
 

Modified: websites/staging/ace/trunk/content/dev-doc/design/using-client-certificates.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/design/using-client-certificates.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/design/using-client-certificates.html Fri Oct 18 11:09:27 2013
@@ -196,14 +196,14 @@ This article describes how to configure 
 <p>As described in detail in [1], there are multiple communication paths that can (and need) to be secured. For two-way SSL authentication, several scenarios can be identified:</p>
 <ol>
 <li>only the communication between management agent and ACE server is secured by means of two-way SSL. This implies that there is only  a trust relation between management agent and ACE server, but the other clients that make use of the ACE server have no trust relation (i.e., they still communicate by means of one-way SSL or might not even use SSL at all);</li>
-<li>all the communication paths for the ACE server are secured by means of two-way SSL. This means that not only a trust relation exists between management agent and ACE server, but also between, for example, the web-UI and the ACE server or the REST-API and the ACE server<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.</li>
+<li>all the communication paths for the ACE server are secured by means of two-way SSL. This means that not only a trust relation exists between management agent and ACE server, but also between, for example, the web-UI and the ACE server or the REST-API and the ACE server<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup>.</li>
 </ol>
 <p>In conclusion, we need to configure the trust relation between management agent and the ACE server, and, optionally, the trust relation between ACE server and other components.</p>
 <h2 id="configuring-two-way-ssl-authentication">Configuring two-way SSL authentication</h2>
-<p>For two-way SSL authentication, you need two (or more) certificates. These can be issued either by an official external certificate authority (CA), or by means of a self-signed CA<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup>.<br />
+<p>For two-way SSL authentication, you need two (or more) certificates. These can be issued either by an official external certificate authority (CA), or by means of a self-signed CA<sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="footnote">2</a></sup>.<br />
 The details on how to create a self-signed CA and certificates is well documented on many places on the Internet, and therefore goes beyond this article. Let's assume we've got the following:</p>
 <ul>
-<li>a self-signed CA whose certificate is added to a Java keystore file, called <tt>truststore</tt>. This file will be used as <em>truststore</em> for both the management agent and the ACE server<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>;</li>
+<li>a self-signed CA whose certificate is added to a Java keystore file, called <tt>truststore</tt>. This file will be used as <em>truststore</em> for both the management agent and the ACE server<sup id="fnref:3"><a class="footnote-ref" href="#fn:3" rel="footnote">3</a></sup>;</li>
 <li>a certificate (signed by our self-signed CA) for the management agent, available in a Java keystore file, called <tt>keystore-ma</tt>;</li>
 <li>a certificate (signed by our self-signed CA) for the ACE server, available in a Java keystore file, called <tt>keystore-server</tt>.</li>
 </ul>
@@ -231,8 +231,7 @@ The details on how to create a self-sign
 </pre></div>
 
 
-<p>This will not only ensure that the Jetty container inside ACE will obtain the correct keystore and truststore and start a listener on port <tt>8443</tt>, but also mandates that all clients <strong>must</strong> provide a certificate upon connecting (as denoted by the last property). Without this, clients that do not offer a certificate will simply be accepted as well, hence resulting in only one-way SSL authentication.<br />
-</p>
+<p>This will not only ensure that the Jetty container inside ACE will obtain the correct keystore and truststore and start a listener on port <tt>8443</tt>, but also mandates that all clients <strong>must</strong> provide a certificate upon connecting (as denoted by the last property). Without this, clients that do not offer a certificate will simply be accepted as well, hence resulting in only one-way SSL authentication.  </p>
 <p>In order to secure all internal communication paths as well, we need to specify some additional properties in <tt>platform.properties</tt>:</p>
 <div class="codehilite"><pre><span class="na">-Djavax.net.ssl.keyStore</span><span class="o">=</span><span class="s">/path/to/keystore-server</span>
 <span class="na">-Djavax.net.ssl.keyStorePassword</span><span class="o">=</span><span class="s">secret</span>
@@ -293,13 +292,13 @@ Note that in order to let <strong>all</s
 <hr />
 <ol>
 <li id="fn:1">
-<p>One can argue whether this is strictly necessary for <strong>all</strong> internal communication paths, as we will see later on, one can configure which paths use two-way SSL authentication and which paths do not.&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
+<p>One can argue whether this is strictly necessary for <strong>all</strong> internal communication paths, as we will see later on, one can configure which paths use two-way SSL authentication and which paths do not.&#160;<a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
 </li>
 <li id="fn:2">
-<p>Using a self-signed CA for two-way SSL authentication is not that much of a problem as one needs to make the certificate of the client available to the server, and the other way around. When both certificates are signed by the same CA, and both sides also trust this self-signed CA, the trust relation between client and server can be established as well.&#160;<a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
+<p>Using a self-signed CA for two-way SSL authentication is not that much of a problem as one needs to make the certificate of the client available to the server, and the other way around. When both certificates are signed by the same CA, and both sides also trust this self-signed CA, the trust relation between client and server can be established as well.&#160;<a class="footnote-backref" href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
 </li>
 <li id="fn:3">
-<p>Based on the certificate in the truststore, each side will be able to validate the certificate of the other side.&#160;<a href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
+<p>Based on the certificate in the truststore, each side will be able to validate the certificate of the other side.&#160;<a class="footnote-backref" href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
 </li>
 </ol>
 </div></div>

Modified: websites/staging/ace/trunk/content/dev-doc/release-guide.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/release-guide.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/release-guide.html Fri Oct 18 11:09:27 2013
@@ -238,13 +238,13 @@ This vote will be open <span class="k">f
 </blockquote>
 <p>The list of PMC (and project) members can be found here: http://ace.apache.org/get-involved/project-team.html</p>
 <p>Wrap up the vote with an e-mail to the dev@ace.apache.org list again:</p>
-<div class="codehilite"><pre><span class="n">To:</span> <span class="s">&quot;Apache ACE developers list&quot;</span> <span class="sr">&lt;dev@ace.apache.org&gt;</span>
-<span class="n">Subject:</span> <span class="p">[</span><span class="n">RESULT</span><span class="p">]</span> <span class="p">[</span><span class="n">VOTE</span><span class="p">]</span> <span class="n">Release</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span>
+<div class="codehilite"><pre><span class="n">To</span><span class="p">:</span> &quot;<span class="n">Apache</span> <span class="n">ACE</span> <span class="n">developers</span> <span class="n">list</span>&quot; <span class="o">&lt;</span><span class="n">dev</span><span class="p">@</span><span class="n">ace</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">&gt;</span>
+<span class="n">Subject</span><span class="p">:</span> <span class="p">[</span><span class="n">RESULT</span><span class="p">]</span> <span class="p">[</span><span class="n">VOTE</span><span class="p">]</span> <span class="n">Release</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span>
 
-<span class="n">The</span> <span class="n">vote</span> <span class="n">has</span> <span class="n">passed</span><span class="o">/</span><span class="n">failed</span> <span class="n">with</span> <span class="n">the</span> <span class="n">following</span> <span class="n">result:</span>
-<span class="o">+</span><span class="mi">1</span> <span class="p">(</span><span class="n">binding</span><span class="p">):</span> <span class="o">...</span>
-<span class="o">+</span><span class="mi">1</span> <span class="p">(</span><span class="n">non</span><span class="o">-</span><span class="n">binding</span><span class="p">):</span> <span class="o">...</span>
-<span class="o">-</span><span class="mi">1</span><span class="p">:</span> <span class="o">...</span>
+<span class="n">The</span> <span class="n">vote</span> <span class="n">has</span> <span class="n">passed</span><span class="o">/</span><span class="n">failed</span> <span class="n">with</span> <span class="n">the</span> <span class="n">following</span> <span class="n">result</span><span class="p">:</span>
+<span class="o">+</span>1 <span class="p">(</span><span class="n">binding</span><span class="p">):</span> <span class="p">...</span>
+<span class="o">+</span>1 <span class="p">(</span><span class="n">non</span><span class="o">-</span><span class="n">binding</span><span class="p">):</span> <span class="p">...</span>
+<span class="o">-</span>1<span class="p">:</span> <span class="p">...</span>
 </pre></div>
 
 
@@ -261,13 +261,13 @@ This vote will be open <span class="k">f
 
 
 <p>Now wait at least 24 hours to allow the release to be properly mirrored and then update the news and download page on the Apache ACE website and announce the release:</p>
-<div class="codehilite"><pre><span class="n">To:</span> <span class="s">&quot;Apache ACE users list&quot;</span> <span class="sr">&lt;users@ace.apache.org&gt;</span>
-<span class="n">Subject:</span> <span class="p">[</span><span class="n">ANN</span><span class="p">]</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span> <span class="n">released</span><span class="o">.</span>
+<div class="codehilite"><pre><span class="n">To</span><span class="p">:</span> &quot;<span class="n">Apache</span> <span class="n">ACE</span> <span class="n">users</span> <span class="n">list</span>&quot; <span class="o">&lt;</span><span class="n">users</span><span class="p">@</span><span class="n">ace</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">&gt;</span>
+<span class="n">Subject</span><span class="p">:</span> <span class="p">[</span><span class="n">ANN</span><span class="p">]</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span> <span class="n">released</span><span class="p">.</span>
 
-<span class="n">The</span> <span class="n">Apache</span> <span class="n">ACE</span> <span class="n">team</span> <span class="n">is</span> <span class="n">proud</span> <span class="n">to</span> <span class="n">announce</span> <span class="n">the</span> <span class="n">release</span> <span class="n">of</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="o">.</span><span class="n">Y</span><span class="o">.</span><span class="n">Z</span><span class="o">.</span>
+<span class="n">The</span> <span class="n">Apache</span> <span class="n">ACE</span> <span class="n">team</span> <span class="n">is</span> <span class="n">proud</span> <span class="n">to</span> <span class="n">announce</span> <span class="n">the</span> <span class="n">release</span> <span class="n">of</span> <span class="n">ACE</span> <span class="n">version</span> <span class="n">X</span><span class="p">.</span><span class="n">Y</span><span class="p">.</span><span class="n">Z</span><span class="p">.</span>
 
-<span class="n">This</span> <span class="n">release</span> <span class="n">is</span> <span class="n">available</span> <span class="n">from</span> <span class="k">our</span> <span class="n">download</span> <span class="n">page</span> <span class="n">at:</span>
-<span class="n">http:</span><span class="sr">//</span><span class="n">ace</span><span class="o">.</span><span class="n">apache</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">downloads</span><span class="o">.</span><span class="n">html</span>
+<span class="n">This</span> <span class="n">release</span> <span class="n">is</span> <span class="n">available</span> <span class="n">from</span> <span class="n">our</span> <span class="n">download</span> <span class="n">page</span> <span class="n">at</span><span class="p">:</span>
+<span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">ace</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">/</span><span class="n">downloads</span><span class="p">.</span><span class="n">html</span>
 </pre></div>
 
 

Modified: websites/staging/ace/trunk/content/dev-doc/writing-tests.html
==============================================================================
--- websites/staging/ace/trunk/content/dev-doc/writing-tests.html (original)
+++ websites/staging/ace/trunk/content/dev-doc/writing-tests.html Fri Oct 18 11:09:27 2013
@@ -177,10 +177,10 @@
       <div id="content"><p>This tutorial describes how to write unit and integration tests for ACE. For its unit tests, ACE relies on <a href="http://testng.org">TestNG</a>, while for the integration tests a combination of <a href="http://www.bndtools.org">BndTools</a> and <a href="http://junit.org">JUnit</a> is used.</p>
 <h2 id="writing-unit-tests">Writing unit tests</h2>
 <p>Unit tests test the behavior of classes or methods in complete isolation. In case this is not possible, due to dependencies on other classes, one can make use of a mocking framework such as <a href="http://code.google.com/p/mockito/">Mockito</a> to replace those dependencies with stub implementations.</p>
-<p>Writing unit tests with TestNG is much like writing tests with JUnit: you create a class which contains methods annotated with the <code>@Test</code> annotation. Also, you can add methods that are run before or after each test or test case. One feature that is distinct to TestNG is the ability to group tests, making it possible to run only a certain group of tests instead of all<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup>.</p>
+<p>Writing unit tests with TestNG is much like writing tests with JUnit: you create a class which contains methods annotated with the <code>@Test</code> annotation. Also, you can add methods that are run before or after each test or test case. One feature that is distinct to TestNG is the ability to group tests, making it possible to run only a certain group of tests instead of all<sup id="fnref:1"><a class="footnote-ref" href="#fn:1" rel="footnote">1</a></sup>.</p>
 <p>All unit tests are placed in the same project they are testing, in a separate directory named <code>test</code>. This allows the tests to be compiled and run independently from the remaining code. It is good practice to have the same package structure for your tests and other code. </p>
 <h3 id="example">Example</h3>
-<p>Lets take a look at an excerpt from the unit test<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> for <code>AuthenticationServiceImpl</code>:</p>
+<p>Lets take a look at an excerpt from the unit test<sup id="fnref:2"><a class="footnote-ref" href="#fn:2" rel="footnote">2</a></sup> for <code>AuthenticationServiceImpl</code>:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">AuthenticationServiceImplTest</span> <span class="o">{</span>
    <span class="kd">private</span> <span class="n">LogService</span> <span class="n">m_log</span><span class="o">;</span>
 
@@ -223,7 +223,7 @@
 
 <p>This will run the unit tests using TestNG. The output of the tests can be found in the <tt>test-output</tt> directory of your project. To run the test from Eclipse, you can right click on it, and select "Run As -&gt; TestNG Test" from its context menu.</p>
 <h2 id="writing-integration-tests">Writing integration tests</h2>
-<p>In an integration test you test whether a small part of your system works as expected. For this, you need to set up an environment which resembles the situation in which the system is finally deployed. For ACE, this means that we need to set up an OSGi environment and a subset of the bundles we want to test. Fortunately, BndTools provides us with easy tooling to just do that with the use of <a href="http://pub.admc.com/howtos/junit3x/">JUnit3</a><sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>.</p>
+<p>In an integration test you test whether a small part of your system works as expected. For this, you need to set up an environment which resembles the situation in which the system is finally deployed. For ACE, this means that we need to set up an OSGi environment and a subset of the bundles we want to test. Fortunately, BndTools provides us with easy tooling to just do that with the use of <a href="http://pub.admc.com/howtos/junit3x/">JUnit3</a><sup id="fnref:3"><a class="footnote-ref" href="#fn:3" rel="footnote">3</a></sup>.</p>
 <h3 id="integration-test-principles">Integration test principles</h3>
 <p>To write a very basic (OSGi) integration test, you need to extend your test from <tt>junit.framework.TestCase</tt>. To access the bundle context of your test case, you can make use of some standard OSGi utility code:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyIntegrationTest</span> <span class="kd">extends</span> <span class="n">junit</span><span class="o">.</span><span class="na">framework</span><span class="o">.</span><span class="na">TestCase</span> <span class="o">{</span>
@@ -239,7 +239,7 @@
 
 
 <p>With this in place, we can now make OSGi calls from our test methods.</p>
-<p>To ease the writing of integration tests, ACE provides a <code>IntegrationTestBase</code><sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup> helper class that provides you with some  boilerplate code commonly used in integration tests. Internally, it makes use of Felix Dependency Manager to control and manage the desired service dependencies. </p>
+<p>To ease the writing of integration tests, ACE provides a <code>IntegrationTestBase</code><sup id="fnref:4"><a class="footnote-ref" href="#fn:4" rel="footnote">4</a></sup> helper class that provides you with some  boilerplate code commonly used in integration tests. Internally, it makes use of Felix Dependency Manager to control and manage the desired service dependencies. </p>
 <h3 id="example_1">Example</h3>
 <p>In this section, we'll describe how to write an integration test that makes use of a 'UserAdmin' service in its test method.</p>
 <p>The first we need to do is create our test class:</p>
@@ -259,8 +259,8 @@
 </pre></div>
 
 
-<p>Having explained that our test depends upon the 'UserAdmin' service, and that its a required dependency, means that our test won't run if this service is not available<sup id="fnref:5"><a href="#fn:5" rel="footnote">5</a></sup>.</p>
-<p>Sometimes, you need to do some additional set up before or after the dependencies are resolved. For example, one might need to provision some configuration in order to get dependencies in the correct state, or wait until some other condition is met after all dependencies have been resolved. In order to do this, one can override the <code>before()</code> or <code>after()</code> methods<sup id="fnref:6"><a href="#fn:6" rel="footnote">6</a></sup> in <code>IntegrationTestBase</code>.<br />
+<p>Having explained that our test depends upon the 'UserAdmin' service, and that its a required dependency, means that our test won't run if this service is not available<sup id="fnref:5"><a class="footnote-ref" href="#fn:5" rel="footnote">5</a></sup>.</p>
+<p>Sometimes, you need to do some additional set up before or after the dependencies are resolved. For example, one might need to provision some configuration in order to get dependencies in the correct state, or wait until some other condition is met after all dependencies have been resolved. In order to do this, one can override the <code>before()</code> or <code>after()</code> methods<sup id="fnref:6"><a class="footnote-ref" href="#fn:6" rel="footnote">6</a></sup> in <code>IntegrationTestBase</code>.<br />
 For our simple integration test, however, we do not need such "advanced" set up.</p>
 <p>The only thing left is the actual test itself. As the 'UserAdmin' service is being tracked for us, we can simply direct use it in our test:</p>
 <div class="codehilite"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserAdminIntegrationTest</span> <span class="kd">extends</span> <span class="n">IntegrationTestBase</span> <span class="o">{</span>
@@ -290,22 +290,22 @@ For our simple integration test, however
 <hr />
 <ol>
 <li id="fn:1">
-<p>The consequence is that TestNG also allows you to write other kinds of tests than unit tests, like integration tests or performance tests. ACE does not make use of this kind of functionality, and only uses TestNG for its unit testing.&#160;<a href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
+<p>The consequence is that TestNG also allows you to write other kinds of tests than unit tests, like integration tests or performance tests. ACE does not make use of this kind of functionality, and only uses TestNG for its unit testing.&#160;<a class="footnote-backref" href="#fnref:1" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p>
 </li>
 <li id="fn:2">
-<p>This test can be found in the <code>org.apache.ace.authentication</code> project.&#160;<a href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
+<p>This test can be found in the <code>org.apache.ace.authentication</code> project.&#160;<a class="footnote-backref" href="#fnref:2" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p>
 </li>
 <li id="fn:3">
-<p>The current version of BndTools still uses JUnit3, while there is some effort already to support JUnit4 as well, see: <a href="https://github.com/bndtools/bnd/issues/156">https://github.com/bndtools/bnd/issues/156</a>.&#160;<a href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
+<p>The current version of BndTools still uses JUnit3, while there is some effort already to support JUnit4 as well, see: <a href="https://github.com/bndtools/bnd/issues/156">https://github.com/bndtools/bnd/issues/156</a>.&#160;<a class="footnote-backref" href="#fnref:3" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p>
 </li>
 <li id="fn:4">
-<p>This helper class can be found in the <code>org.apache.ace.test</code> project.&#160;<a href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p>
+<p>This helper class can be found in the <code>org.apache.ace.test</code> project.&#160;<a class="footnote-backref" href="#fnref:4" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p>
 </li>
 <li id="fn:5">
-<p>To be more precise: the test will wait a couple of seconds to allow all dependencies to be satisfied. If after this waiting period any dependency is not satisfied, the test will fail.&#160;<a href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p>
+<p>To be more precise: the test will wait a couple of seconds to allow all dependencies to be satisfied. If after this waiting period any dependency is not satisfied, the test will fail.&#160;<a class="footnote-backref" href="#fnref:5" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p>
 </li>
 <li id="fn:6">
-<p>The naming of these methods could use a second thought, see also: <a href="https://issues.apache.org/jira/browse/ACE-289">https://issues.apache.org/jira/browse/ACE-289</a>.&#160;<a href="#fnref:6" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p>
+<p>The naming of these methods could use a second thought, see also: <a href="https://issues.apache.org/jira/browse/ACE-289">https://issues.apache.org/jira/browse/ACE-289</a>.&#160;<a class="footnote-backref" href="#fnref:6" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p>
 </li>
 </ol>
 </div></div>

Added: websites/staging/ace/trunk/content/img_/glyphicons-halflings-white.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/ace/trunk/content/img_/glyphicons-halflings-white.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/ace/trunk/content/img_/glyphicons-halflings.png
==============================================================================
Binary file - no diff available.

Propchange: websites/staging/ace/trunk/content/img_/glyphicons-halflings.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: websites/staging/ace/trunk/content/js_/bootstrap-alert.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-alert.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-alert.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,91 @@
+/* ==========================================================
+ * bootstrap-alert.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* ALERT CLASS DEFINITION
+  * ====================== */
+
+  var dismiss = '[data-dismiss="alert"]'
+    , Alert = function ( el ) {
+        $(el).on('click', dismiss, this.close)
+      }
+
+  Alert.prototype = {
+
+    constructor: Alert
+
+  , close: function ( e ) {
+      var $this = $(this)
+        , selector = $this.attr('data-target')
+        , $parent
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      $parent = $(selector)
+      $parent.trigger('close')
+
+      e && e.preventDefault()
+
+      $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+      $parent.removeClass('in')
+
+      function removeElement() {
+        $parent.remove()
+        $parent.trigger('closed')
+      }
+
+      $.support.transition && $parent.hasClass('fade') ?
+        $parent.on($.support.transition.end, removeElement) :
+        removeElement()
+    }
+
+  }
+
+
+ /* ALERT PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.alert = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('alert')
+      if (!data) $this.data('alert', (data = new Alert(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.alert.Constructor = Alert
+
+
+ /* ALERT DATA-API
+  * ============== */
+
+  $(function () {
+    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-alerts.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-alerts.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-alerts.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,124 @@
+/* ==========================================================
+ * bootstrap-alerts.js v1.4.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2011 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+  /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+   * ======================================================= */
+
+   var transitionEnd
+
+   $(document).ready(function () {
+
+     $.support.transition = (function () {
+       var thisBody = document.body || document.documentElement
+         , thisStyle = thisBody.style
+         , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
+       return support
+     })()
+
+     // set CSS transition event type
+     if ( $.support.transition ) {
+       transitionEnd = "TransitionEnd"
+       if ( $.browser.webkit ) {
+        transitionEnd = "webkitTransitionEnd"
+       } else if ( $.browser.mozilla ) {
+        transitionEnd = "transitionend"
+       } else if ( $.browser.opera ) {
+        transitionEnd = "oTransitionEnd"
+       }
+     }
+
+   })
+
+ /* ALERT CLASS DEFINITION
+  * ====================== */
+
+  var Alert = function ( content, options ) {
+    if (options == 'close') return this.close.call(content)
+    this.settings = $.extend({}, $.fn.alert.defaults, options)
+    this.$element = $(content)
+      .delegate(this.settings.selector, 'click', this.close)
+  }
+
+  Alert.prototype = {
+
+    close: function (e) {
+      var $element = $(this)
+        , className = 'alert-message'
+
+      $element = $element.hasClass(className) ? $element : $element.parent()
+
+      e && e.preventDefault()
+      $element.removeClass('in')
+
+      function removeElement () {
+        $element.remove()
+      }
+
+      $.support.transition && $element.hasClass('fade') ?
+        $element.bind(transitionEnd, removeElement) :
+        removeElement()
+    }
+
+  }
+
+
+ /* ALERT PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.alert = function ( options ) {
+
+    if ( options === true ) {
+      return this.data('alert')
+    }
+
+    return this.each(function () {
+      var $this = $(this)
+        , data
+
+      if ( typeof options == 'string' ) {
+
+        data = $this.data('alert')
+
+        if (typeof data == 'object') {
+          return data[options].call( $this )
+        }
+
+      }
+
+      $(this).data('alert', new Alert( this, options ))
+
+    })
+  }
+
+  $.fn.alert.defaults = {
+    selector: '.close'
+  }
+
+  $(document).ready(function () {
+    new Alert($('body'), {
+      selector: '.alert-message[data-alert] .close'
+    })
+  })
+
+}( window.jQuery || window.ender );
\ No newline at end of file

Added: websites/staging/ace/trunk/content/js_/bootstrap-button.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-button.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-button.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,98 @@
+/* ============================================================
+ * bootstrap-button.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+ /* BUTTON PUBLIC CLASS DEFINITION
+  * ============================== */
+
+  var Button = function ( element, options ) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.button.defaults, options)
+  }
+
+  Button.prototype = {
+
+      constructor: Button
+
+    , setState: function ( state ) {
+        var d = 'disabled'
+          , $el = this.$element
+          , data = $el.data()
+          , val = $el.is('input') ? 'val' : 'html'
+
+        state = state + 'Text'
+        data.resetText || $el.data('resetText', $el[val]())
+
+        $el[val](data[state] || this.options[state])
+
+        // push to event loop to allow forms to submit
+        setTimeout(function () {
+          state == 'loadingText' ?
+            $el.addClass(d).attr(d, d) :
+            $el.removeClass(d).removeAttr(d)
+        }, 0)
+      }
+
+    , toggle: function () {
+        var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+
+        $parent && $parent
+          .find('.active')
+          .removeClass('active')
+
+        this.$element.toggleClass('active')
+      }
+
+  }
+
+
+ /* BUTTON PLUGIN DEFINITION
+  * ======================== */
+
+  $.fn.button = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('button')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('button', (data = new Button(this, options)))
+      if (option == 'toggle') data.toggle()
+      else if (option) data.setState(option)
+    })
+  }
+
+  $.fn.button.defaults = {
+    loadingText: 'loading...'
+  }
+
+  $.fn.button.Constructor = Button
+
+
+ /* BUTTON DATA-API
+  * =============== */
+
+  $(function () {
+    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
+      $(e.target).button('toggle')
+    })
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-buttons.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-buttons.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-buttons.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,64 @@
+/* ============================================================
+ * bootstrap-buttons.js v1.4.0
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2011 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+  function setState(el, state) {
+    var d = 'disabled'
+      , $el = $(el)
+      , data = $el.data()
+
+    state = state + 'Text'
+    data.resetText || $el.data('resetText', $el.html())
+
+    $el.html( data[state] || $.fn.button.defaults[state] )
+
+    setTimeout(function () {
+      state == 'loadingText' ?
+        $el.addClass(d).attr(d, d) :
+        $el.removeClass(d).removeAttr(d)
+    }, 0)
+  }
+
+  function toggle(el) {
+    $(el).toggleClass('active')
+  }
+
+  $.fn.button = function(options) {
+    return this.each(function () {
+      if (options == 'toggle') {
+        return toggle(this)
+      }
+      options && setState(this, options)
+    })
+  }
+
+  $.fn.button.defaults = {
+    loadingText: 'loading...'
+  }
+
+  $(function () {
+    $('body').delegate('.btn[data-toggle]', 'click', function () {
+      $(this).button('toggle')
+    })
+  })
+
+}( window.jQuery || window.ender );
\ No newline at end of file

Added: websites/staging/ace/trunk/content/js_/bootstrap-carousel.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-carousel.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-carousel.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,154 @@
+/* ==========================================================
+ * bootstrap-carousel.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* CAROUSEL CLASS DEFINITION
+  * ========================= */
+
+  var Carousel = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.carousel.defaults, options)
+    this.options.slide && this.slide(this.options.slide)
+  }
+
+  Carousel.prototype = {
+
+    cycle: function () {
+      this.interval = setInterval($.proxy(this.next, this), this.options.interval)
+      return this
+    }
+
+  , to: function (pos) {
+      var $active = this.$element.find('.active')
+        , children = $active.parent().children()
+        , activePos = children.index($active)
+        , that = this
+
+      if (pos > (children.length - 1) || pos < 0) return
+
+      if (this.sliding) {
+        return this.$element.one('slid', function () {
+          that.to(pos)
+        })
+      }
+
+      if (activePos == pos) {
+        return this.pause().cycle()
+      }
+
+      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
+    }
+
+  , pause: function () {
+      clearInterval(this.interval)
+      return this
+    }
+
+  , next: function () {
+      if (this.sliding) return
+      return this.slide('next')
+    }
+
+  , prev: function () {
+      if (this.sliding) return
+      return this.slide('prev')
+    }
+
+  , slide: function (type, next) {
+      var $active = this.$element.find('.active')
+        , $next = next || $active[type]()
+        , isCycling = this.interval
+        , direction = type == 'next' ? 'left' : 'right'
+        , fallback  = type == 'next' ? 'first' : 'last'
+        , that = this
+
+      this.sliding = true
+
+      isCycling && this.pause()
+
+      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+      if (!$.support.transition && this.$element.hasClass('slide')) {
+        this.$element.trigger('slide')
+        $active.removeClass('active')
+        $next.addClass('active')
+        this.sliding = false
+        this.$element.trigger('slid')
+      } else {
+        $next.addClass(type)
+        $next[0].offsetWidth // force reflow
+        $active.addClass(direction)
+        $next.addClass(direction)
+        this.$element.trigger('slide')
+        this.$element.one($.support.transition.end, function () {
+          $next.removeClass([type, direction].join(' ')).addClass('active')
+          $active.removeClass(['active', direction].join(' '))
+          that.sliding = false
+          setTimeout(function () { that.$element.trigger('slid') }, 0)
+        })
+      }
+
+      isCycling && this.cycle()
+
+      return this
+    }
+
+  }
+
+
+ /* CAROUSEL PLUGIN DEFINITION
+  * ========================== */
+
+  $.fn.carousel = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('carousel')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+      if (typeof option == 'number') data.to(option)
+      else if (typeof option == 'string' || (option = options.slide)) data[option]()
+      else data.cycle()
+    })
+  }
+
+  $.fn.carousel.defaults = {
+    interval: 5000
+  }
+
+  $.fn.carousel.Constructor = Carousel
+
+
+ /* CAROUSEL DATA-API
+  * ================= */
+
+  $(function () {
+    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
+      var $this = $(this), href
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
+      $target.carousel(options)
+      e.preventDefault()
+    })
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-collapse.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-collapse.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-collapse.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,136 @@
+/* =============================================================
+ * bootstrap-collapse.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+  var Collapse = function ( element, options ) {
+  	this.$element = $(element)
+    this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+    if (this.options["parent"]) {
+      this.$parent = $(this.options["parent"])
+    }
+
+    this.options.toggle && this.toggle()
+  }
+
+  Collapse.prototype = {
+
+    constructor: Collapse
+
+  , dimension: function () {
+      var hasWidth = this.$element.hasClass('width')
+      return hasWidth ? 'width' : 'height'
+    }
+
+  , show: function () {
+      var dimension = this.dimension()
+        , scroll = $.camelCase(['scroll', dimension].join('-'))
+        , actives = this.$parent && this.$parent.find('.in')
+        , hasData
+
+      if (actives && actives.length) {
+        hasData = actives.data('collapse')
+        actives.collapse('hide')
+        hasData || actives.data('collapse', null)
+      }
+
+      this.$element[dimension](0)
+      this.transition('addClass', 'show', 'shown')
+      this.$element[dimension](this.$element[0][scroll])
+
+    }
+
+  , hide: function () {
+      var dimension = this.dimension()
+      this.reset(this.$element[dimension]())
+      this.transition('removeClass', 'hide', 'hidden')
+      this.$element[dimension](0)
+    }
+
+  , reset: function ( size ) {
+      var dimension = this.dimension()
+
+      this.$element
+        .removeClass('collapse')
+        [dimension](size || 'auto')
+        [0].offsetWidth
+
+      this.$element.addClass('collapse')
+    }
+
+  , transition: function ( method, startEvent, completeEvent ) {
+      var that = this
+        , complete = function () {
+            if (startEvent == 'show') that.reset()
+            that.$element.trigger(completeEvent)
+          }
+
+      this.$element
+        .trigger(startEvent)
+        [method]('in')
+
+      $.support.transition && this.$element.hasClass('collapse') ?
+        this.$element.one($.support.transition.end, complete) :
+        complete()
+  	}
+
+  , toggle: function () {
+      this[this.$element.hasClass('in') ? 'hide' : 'show']()
+  	}
+
+  }
+
+  /* COLLAPSIBLE PLUGIN DEFINITION
+  * ============================== */
+
+  $.fn.collapse = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('collapse')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.collapse.defaults = {
+    toggle: true
+  }
+
+  $.fn.collapse.Constructor = Collapse
+
+
+ /* COLLAPSIBLE DATA-API
+  * ==================== */
+
+  $(function () {
+    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
+      var $this = $(this), href
+        , target = $this.attr('data-target')
+          || e.preventDefault()
+          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+        , option = $(target).data('collapse') ? 'toggle' : $this.data()
+      $(target).collapse(option)
+    })
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-dropdown.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-dropdown.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-dropdown.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,92 @@
+/* ============================================================
+ * bootstrap-dropdown.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* DROPDOWN CLASS DEFINITION
+  * ========================= */
+
+  var toggle = '[data-toggle="dropdown"]'
+    , Dropdown = function ( element ) {
+        var $el = $(element).on('click.dropdown.data-api', this.toggle)
+        $('html').on('click.dropdown.data-api', function () {
+          $el.parent().removeClass('open')
+        })
+      }
+
+  Dropdown.prototype = {
+
+    constructor: Dropdown
+
+  , toggle: function ( e ) {
+      var $this = $(this)
+        , selector = $this.attr('data-target')
+        , $parent
+        , isActive
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      $parent = $(selector)
+      $parent.length || ($parent = $this.parent())
+
+      isActive = $parent.hasClass('open')
+
+      clearMenus()
+      !isActive && $parent.toggleClass('open')
+
+      return false
+    }
+
+  }
+
+  function clearMenus() {
+    $(toggle).parent().removeClass('open')
+  }
+
+
+  /* DROPDOWN PLUGIN DEFINITION
+   * ========================== */
+
+  $.fn.dropdown = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('dropdown')
+      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.dropdown.Constructor = Dropdown
+
+
+  /* APPLY TO STANDARD DROPDOWN ELEMENTS
+   * =================================== */
+
+  $(function () {
+    $('html').on('click.dropdown.data-api', clearMenus)
+    $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-modal.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-modal.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-modal.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,209 @@
+/* =========================================================
+ * bootstrap-modal.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* MODAL CLASS DEFINITION
+  * ====================== */
+
+  var Modal = function ( content, options ) {
+    this.options = $.extend({}, $.fn.modal.defaults, options)
+    this.$element = $(content)
+      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+  }
+
+  Modal.prototype = {
+
+      constructor: Modal
+
+    , toggle: function () {
+        return this[!this.isShown ? 'show' : 'hide']()
+      }
+
+    , show: function () {
+        var that = this
+
+        if (this.isShown) return
+
+        $('body').addClass('modal-open')
+
+        this.isShown = true
+        this.$element.trigger('show')
+
+        escape.call(this)
+        backdrop.call(this, function () {
+          var transition = $.support.transition && that.$element.hasClass('fade')
+
+          !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+
+          that.$element
+            .show()
+
+          if (transition) {
+            that.$element[0].offsetWidth // force reflow
+          }
+
+          that.$element.addClass('in')
+
+          transition ?
+            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
+            that.$element.trigger('shown')
+
+        })
+      }
+
+    , hide: function ( e ) {
+        e && e.preventDefault()
+
+        if (!this.isShown) return
+
+        var that = this
+        this.isShown = false
+
+        $('body').removeClass('modal-open')
+
+        escape.call(this)
+
+        this.$element
+          .trigger('hide')
+          .removeClass('in')
+
+        $.support.transition && this.$element.hasClass('fade') ?
+          hideWithTransition.call(this) :
+          hideModal.call(this)
+      }
+
+  }
+
+
+ /* MODAL PRIVATE METHODS
+  * ===================== */
+
+  function hideWithTransition() {
+    var that = this
+      , timeout = setTimeout(function () {
+          that.$element.off($.support.transition.end)
+          hideModal.call(that)
+        }, 500)
+
+    this.$element.one($.support.transition.end, function () {
+      clearTimeout(timeout)
+      hideModal.call(that)
+    })
+  }
+
+  function hideModal( that ) {
+    this.$element
+      .hide()
+      .trigger('hidden')
+
+    backdrop.call(this)
+  }
+
+  function backdrop( callback ) {
+    var that = this
+      , animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+    if (this.isShown && this.options.backdrop) {
+      var doAnimate = $.support.transition && animate
+
+      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+        .appendTo(document.body)
+
+      if (this.options.backdrop != 'static') {
+        this.$backdrop.click($.proxy(this.hide, this))
+      }
+
+      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+      this.$backdrop.addClass('in')
+
+      doAnimate ?
+        this.$backdrop.one($.support.transition.end, callback) :
+        callback()
+
+    } else if (!this.isShown && this.$backdrop) {
+      this.$backdrop.removeClass('in')
+
+      $.support.transition && this.$element.hasClass('fade')?
+        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
+        removeBackdrop.call(this)
+
+    } else if (callback) {
+      callback()
+    }
+  }
+
+  function removeBackdrop() {
+    this.$backdrop.remove()
+    this.$backdrop = null
+  }
+
+  function escape() {
+    var that = this
+    if (this.isShown && this.options.keyboard) {
+      $(document).on('keyup.dismiss.modal', function ( e ) {
+        e.which == 27 && that.hide()
+      })
+    } else if (!this.isShown) {
+      $(document).off('keyup.dismiss.modal')
+    }
+  }
+
+
+ /* MODAL PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.modal = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('modal')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('modal', (data = new Modal(this, options)))
+      if (typeof option == 'string') data[option]()
+      else data.show()
+    })
+  }
+
+  $.fn.modal.defaults = {
+      backdrop: true
+    , keyboard: true
+  }
+
+  $.fn.modal.Constructor = Modal
+
+
+ /* MODAL DATA-API
+  * ============== */
+
+  $(function () {
+    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+      var $this = $(this), href
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+
+      e.preventDefault()
+      $target.modal(option)
+    })
+  })
+
+}( window.jQuery )

Added: websites/staging/ace/trunk/content/js_/bootstrap-popover.js
==============================================================================
--- websites/staging/ace/trunk/content/js_/bootstrap-popover.js (added)
+++ websites/staging/ace/trunk/content/js_/bootstrap-popover.js Fri Oct 18 11:09:27 2013
@@ -0,0 +1,95 @@
+/* ===========================================================
+ * bootstrap-popover.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================== */
+
+
+!function( $ ) {
+
+ "use strict"
+
+  var Popover = function ( element, options ) {
+    this.init('popover', element, options)
+  }
+
+  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
+     ========================================== */
+
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+
+    constructor: Popover
+
+  , setContent: function () {
+      var $tip = this.tip()
+        , title = this.getTitle()
+        , content = this.getContent()
+
+      $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
+      $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
+
+      $tip.removeClass('fade top bottom left right in')
+    }
+
+  , hasContent: function () {
+      return this.getTitle() || this.getContent()
+    }
+
+  , getContent: function () {
+      var content
+        , $e = this.$element
+        , o = this.options
+
+      content = $e.attr('data-content')
+        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
+
+      content = content.toString().replace(/(^\s*|\s*$)/, "")
+
+      return content
+    }
+
+  , tip: function() {
+      if (!this.$tip) {
+        this.$tip = $(this.options.template)
+      }
+      return this.$tip
+    }
+
+  })
+
+
+ /* POPOVER PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.popover = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('popover')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('popover', (data = new Popover(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.popover.Constructor = Popover
+
+  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
+    placement: 'right'
+  , content: ''
+  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
+  })
+
+}( window.jQuery )