You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2017/03/31 07:31:48 UTC

svn commit: r1009454 [1/2] - in /websites/production/struts/content: ./ css/ getting-started/

Author: lukaszlenart
Date: Fri Mar 31 07:31:46 2017
New Revision: 1009454

Log:
Updates production

Modified:
    websites/production/struts/content/announce-2002.html
    websites/production/struts/content/announce-2003.html
    websites/production/struts/content/announce-2004.html
    websites/production/struts/content/announce-2005.html
    websites/production/struts/content/announce-2006.html
    websites/production/struts/content/announce-2007.html
    websites/production/struts/content/announce-2008.html
    websites/production/struts/content/announce-2009.html
    websites/production/struts/content/announce-2010.html
    websites/production/struts/content/announce-2011.html
    websites/production/struts/content/announce-2012.html
    websites/production/struts/content/announce-2013.html
    websites/production/struts/content/announce-2014.html
    websites/production/struts/content/announce-2015.html
    websites/production/struts/content/announce-2016.html
    websites/production/struts/content/announce.html
    websites/production/struts/content/birdseye.html
    websites/production/struts/content/builds.html
    websites/production/struts/content/bylaws.html
    websites/production/struts/content/coding-standards.html
    websites/production/struts/content/css/custom.css
    websites/production/struts/content/dev-mail.html
    websites/production/struts/content/download.html
    websites/production/struts/content/downloads.html
    websites/production/struts/content/getting-started/annotations.html
    websites/production/struts/content/getting-started/coding-actions.html
    websites/production/struts/content/getting-started/control-tags.html
    websites/production/struts/content/getting-started/debugging-struts.html
    websites/production/struts/content/getting-started/exception-handling.html
    websites/production/struts/content/getting-started/exclude-parameters.html
    websites/production/struts/content/getting-started/form-tags.html
    websites/production/struts/content/getting-started/form-validation-using-xml.html
    websites/production/struts/content/getting-started/form-validation.html
    websites/production/struts/content/getting-started/hello-world-using-struts2.html
    websites/production/struts/content/getting-started/how-to-create-a-struts2-web-application.html
    websites/production/struts/content/getting-started/http-session.html
    websites/production/struts/content/getting-started/index.html
    websites/production/struts/content/getting-started/introducing-interceptors.html
    websites/production/struts/content/getting-started/message-resource-files.html
    websites/production/struts/content/getting-started/preperable-interface.html
    websites/production/struts/content/getting-started/processing-forms.html
    websites/production/struts/content/getting-started/spring.html
    websites/production/struts/content/getting-started/themes.html
    websites/production/struts/content/getting-started/unit-testing.html
    websites/production/struts/content/getting-started/using-tags.html
    websites/production/struts/content/getting-started/wildcard-method-selection.html
    websites/production/struts/content/helping.html
    websites/production/struts/content/kickstart.html
    websites/production/struts/content/mail.html
    websites/production/struts/content/primer.html
    websites/production/struts/content/releases.html
    websites/production/struts/content/security.html
    websites/production/struts/content/struts1eol-announcement.html
    websites/production/struts/content/struts1eol-press.html
    websites/production/struts/content/submitting-patches.html
    websites/production/struts/content/volunteers.html
    websites/production/struts/content/youatstruts.html

Modified: websites/production/struts/content/announce-2002.html
==============================================================================
--- websites/production/struts/content/announce-2002.html (original)
+++ websites/production/struts/content/announce-2002.html Fri Mar 31 07:31:46 2017
@@ -417,12 +417,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2003.html
==============================================================================
--- websites/production/struts/content/announce-2003.html (original)
+++ websites/production/struts/content/announce-2003.html Fri Mar 31 07:31:46 2017
@@ -264,12 +264,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2004.html
==============================================================================
--- websites/production/struts/content/announce-2004.html (original)
+++ websites/production/struts/content/announce-2004.html Fri Mar 31 07:31:46 2017
@@ -317,12 +317,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2005.html
==============================================================================
--- websites/production/struts/content/announce-2005.html (original)
+++ websites/production/struts/content/announce-2005.html Fri Mar 31 07:31:46 2017
@@ -762,12 +762,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2006.html
==============================================================================
--- websites/production/struts/content/announce-2006.html (original)
+++ websites/production/struts/content/announce-2006.html Fri Mar 31 07:31:46 2017
@@ -821,12 +821,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2007.html
==============================================================================
--- websites/production/struts/content/announce-2007.html (original)
+++ websites/production/struts/content/announce-2007.html Fri Mar 31 07:31:46 2017
@@ -797,12 +797,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2008.html
==============================================================================
--- websites/production/struts/content/announce-2008.html (original)
+++ websites/production/struts/content/announce-2008.html Fri Mar 31 07:31:46 2017
@@ -323,12 +323,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2009.html
==============================================================================
--- websites/production/struts/content/announce-2009.html (original)
+++ websites/production/struts/content/announce-2009.html Fri Mar 31 07:31:46 2017
@@ -220,12 +220,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2010.html
==============================================================================
--- websites/production/struts/content/announce-2010.html (original)
+++ websites/production/struts/content/announce-2010.html Fri Mar 31 07:31:46 2017
@@ -264,12 +264,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2011.html
==============================================================================
--- websites/production/struts/content/announce-2011.html (original)
+++ websites/production/struts/content/announce-2011.html Fri Mar 31 07:31:46 2017
@@ -345,12 +345,12 @@ Besides that, various other bug fixes, i
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2012.html
==============================================================================
--- websites/production/struts/content/announce-2012.html (original)
+++ websites/production/struts/content/announce-2012.html Fri Mar 31 07:31:46 2017
@@ -444,12 +444,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2013.html
==============================================================================
--- websites/production/struts/content/announce-2013.html (original)
+++ websites/production/struts/content/announce-2013.html Fri Mar 31 07:31:46 2017
@@ -653,12 +653,12 @@ Please check the Version Notes to see mo
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2014.html
==============================================================================
--- websites/production/struts/content/announce-2014.html (original)
+++ websites/production/struts/content/announce-2014.html Fri Mar 31 07:31:46 2017
@@ -373,12 +373,12 @@ added:</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2015.html
==============================================================================
--- websites/production/struts/content/announce-2015.html (original)
+++ websites/production/struts/content/announce-2015.html Fri Mar 31 07:31:46 2017
@@ -330,12 +330,12 @@ please post your comments to the user li
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce-2016.html
==============================================================================
--- websites/production/struts/content/announce-2016.html (original)
+++ websites/production/struts/content/announce-2016.html Fri Mar 31 07:31:46 2017
@@ -712,12 +712,12 @@ to the user list, and, if appropriate, f
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/announce.html
==============================================================================
--- websites/production/struts/content/announce.html (original)
+++ websites/production/struts/content/announce.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,15 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="announcements">Announcements</h1>
+    <h1 class="no_toc" id="announcements">Announcements</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#a20170323" id="markdown-toc-a20170323">23 march 2017 - Struts Extras secure Multipart plugins General Availability - versions 1.1</a></li>
+  <li><a href="#a20170320" id="markdown-toc-a20170320">20 march 2017 - Struts Extras secure Multipart plugins General Availability</a></li>
+  <li><a href="#a20170307" id="markdown-toc-a20170307">7 march 2017 - Struts 2.5.10.1 General Availability</a></li>
+  <li><a href="#a20170307-2" id="markdown-toc-a20170307-2">7 march 2017 - Struts 2.3.32 General Availability</a></li>
+  <li><a href="#a20170203" id="markdown-toc-a20170203">3 February 2017 - Struts 2.5.10 General Availability</a></li>
+</ul>
 
 <p class="pull-right">
   Skip to: <a href="announce-2016.html">Announcements - 2016</a>
@@ -322,12 +330,12 @@ to the user list, and, if appropriate, f
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/birdseye.html
==============================================================================
--- websites/production/struts/content/birdseye.html (original)
+++ websites/production/struts/content/birdseye.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,13 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="from-a-birds-eye">From a birds eye</h1>
+    <h1 class="no_toc" id="from-a-birds-eye">From a birds eye</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#the-apache-struts-web-framework" id="markdown-toc-the-apache-struts-web-framework">The Apache Struts web framework</a></li>
+  <li><a href="#the-apache-struts-project" id="markdown-toc-the-apache-struts-project">The Apache Struts Project</a></li>
+  <li><a href="#why-should-you-use-apache-struts" id="markdown-toc-why-should-you-use-apache-struts">Why should you use Apache Struts?</a></li>
+</ul>
 
 <h2 id="the-apache-struts-web-framework">The Apache Struts web framework</h2>
 
@@ -249,12 +255,12 @@ you are better with the Struts-approach.
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/builds.html
==============================================================================
--- websites/production/struts/content/builds.html (original)
+++ websites/production/struts/content/builds.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,15 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="source-code">Source Code</h1>
+    <h1 class="no_toc" id="source-code">Source Code</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#building-apache-struts" id="markdown-toc-building-apache-struts">Building Apache Struts</a></li>
+  <li><a href="#nightlybuilds" id="markdown-toc-nightlybuilds">NightlyBuilds</a></li>
+  <li><a href="#test-builds" id="markdown-toc-test-builds">Test Builds</a></li>
+  <li><a href="#maven-snapshots" id="markdown-toc-maven-snapshots">Maven Snapshots</a></li>
+  <li><a href="#licensing-of-apache-struts-builds" id="markdown-toc-licensing-of-apache-struts-builds">Licensing of Apache Struts Builds</a></li>
+</ul>
 
 <p>As a convenience to developers who are helping to create and maintain the Apache Struts framework,
 public access to the live source code repository is available. This is our one-and-only development repository.
@@ -150,7 +158,7 @@ your own copy of the product, use the so
 <p>For more about using version control systems at Apache, see the ASF’s
 <a href="http://www.apache.org/dev/#version-control">Source Code Repositories</a> page.</p>
 
-<h1 id="building-apache-struts">Building Apache Struts</h1>
+<h2 id="building-apache-struts">Building Apache Struts</h2>
 
 <p>If you are building Apache Struts from source, we recommend that you install and use
 <a href="http://maven.apache.org">Apache Maven 3.</a> During the build process, Maven will automatically acquire
@@ -177,7 +185,7 @@ your own applications!)</p>
 
 <p>For more about using Maven to build Struts 1, see our <a href="http://wiki.apache.org/struts/StrutsMaintenanceMaven">Maven wiki page.</a></p>
 
-<h1 id="nightlybuilds">NightlyBuilds</h1>
+<h2 id="nightlybuilds">NightlyBuilds</h2>
 
 <p>As part of our continuous integration practice, we also make available each morning the
 <a href="https://builds.apache.org/view/S-Z/view/Struts/job/Struts2-JDK6/lastStableBuild/org.apache.struts$struts2-assembly/">latest stable development build.</a></p>
@@ -190,7 +198,7 @@ your own applications!)</p>
 <p>NOTE: The Struts 2 nightly build is not fully operational. We suggest that contributors checkout
 the <a href="#SourceCode">source code</a> instead.</p>
 
-<h1 id="test-builds">Test Builds</h1>
+<h2 id="test-builds">Test Builds</h2>
 
 <p>As we prepare for a new release, the project group may create interim <em>test builds</em>. When test builds are available,
 we post them <a href="http://people.apache.org/builds/struts/">here</a> in binary, source and library distributions.
@@ -202,7 +210,7 @@ made the “Best Available” rele
 as “Beta” release. When a test build is upgraded to “Beta” or “GA” by a vote of the project members,
 we make the distribution available as a formal <a href="downloads.html">release.</a></p>
 
-<h1 id="maven-snapshots">Maven Snapshots</h1>
+<h2 id="maven-snapshots">Maven Snapshots</h2>
 
 <p>When a distribution is first made available, it is rated as a development build or “snapshot”. Later, the quality
 of the distribution may be upgraded to “Beta” or “General Availability”, based on feedback from the community,
@@ -219,7 +227,7 @@ specify the ASF Snapshot repository in t
 </code></pre>
 </div>
 
-<h1 id="licensing-of-apache-struts-builds">Licensing of Apache Struts Builds</h1>
+<h2 id="licensing-of-apache-struts-builds">Licensing of Apache Struts Builds</h2>
 
 <p>Apache Struts 2 source code and documentation is licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements. See the NOTICE file included in any distribution for additional information
@@ -277,12 +285,12 @@ specific language governing permissions
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/bylaws.html
==============================================================================
--- websites/production/struts/content/bylaws.html (original)
+++ websites/production/struts/content/bylaws.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,37 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="apache-struts-pmc-charter">Apache Struts PMC Charter</h1>
+    <h1 class="no_toc" id="project-management-committee-charter">Project Management Committee Charter</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#apache-struts-pmc-charter" id="markdown-toc-apache-struts-pmc-charter">Apache Struts PMC Charter</a></li>
+  <li><a href="#roles-and-responsibilities" id="markdown-toc-roles-and-responsibilities">Roles and Responsibilities</a></li>
+  <li><a href="#users" id="markdown-toc-users">Users</a></li>
+  <li><a href="#contributors" id="markdown-toc-contributors">Contributors</a></li>
+  <li><a href="#committers" id="markdown-toc-committers">Committers</a></li>
+  <li><a href="#project-management-committee-pmc" id="markdown-toc-project-management-committee-pmc">Project Management Committee (PMC)</a>    <ul>
+      <li><a href="#management" id="markdown-toc-management">Management</a></li>
+      <li><a href="#pmc-duties" id="markdown-toc-pmc-duties">PMC Duties</a></li>
+      <li><a href="#subprojects" id="markdown-toc-subprojects">Subprojects</a></li>
+    </ul>
+  </li>
+  <li><a href="#decision-making" id="markdown-toc-decision-making">Decision Making</a>    <ul>
+      <li><a href="#voting" id="markdown-toc-voting">Voting</a></li>
+    </ul>
+  </li>
+  <li><a href="#action-items" id="markdown-toc-action-items">Action Items</a>    <ul>
+      <li><a href="#long-term-plans" id="markdown-toc-long-term-plans">Long Term Plans</a></li>
+      <li><a href="#short-term-plan" id="markdown-toc-short-term-plan">Short Term Plan</a></li>
+      <li><a href="#product-changes" id="markdown-toc-product-changes">Product Changes</a></li>
+      <li><a href="#showstoppers" id="markdown-toc-showstoppers">Showstoppers</a></li>
+      <li><a href="#release-plan" id="markdown-toc-release-plan">Release Plan</a></li>
+      <li><a href="#release-grade" id="markdown-toc-release-grade">Release Grade</a></li>
+    </ul>
+  </li>
+  <li><a href="#sandbox" id="markdown-toc-sandbox">Sandbox</a></li>
+</ul>
+
+<h2 id="apache-struts-pmc-charter">Apache Struts PMC Charter</h2>
 
 <p>Struts is a Project of the <a href="http://apache.org/foundation">Apache Software Foundation</a> (ASF), formed by a resolution
 of the <a href="http://apache.org/foundation/board/">ASF Board of Directors</a>. As an ASF Project, Struts is subject to the
@@ -130,52 +160,52 @@ of the <a href="http://apache.org/founda
 of [How the ASF works](http://apache.org/foundation/how-it-works.html, with the additional guidelines
 and clarifications found herein.</p>
 
-<h1 id="roles-and-responsibilities">Roles and Responsibilities</h1>
+<h2 id="roles-and-responsibilities">Roles and Responsibilities</h2>
 
 <p>The roles and responsibilities that people can assume in the project are based on merit.
 Everybody can help no matter what their role. Those who have been long term or valuable contributors to
 the project can earn the right to commit directly to the source repository and to cast binding votes during
 the decision-making process.</p>
 
-<h1 id="users">Users.</h1>
+<h2 id="users">Users</h2>
 
 <p>Users are the people who use the products of the Project. People in this role aren’t contributing code,
 but they are using the products, reporting bugs, making feature requests, and such. This is by far
 the most important category of people as, without users, there is no reason for the Project.
 When a user starts to contribute code or documentation patches, they become a Contributor.</p>
 
-<h1 id="contributors">Contributors.</h1>
+<h2 id="contributors">Contributors</h2>
 
 <p>Contributors are the people who write code or documentation patches or contribute positively to the project
 in other ways. When a volunteer’s patch is applied, the contribution is recognized in the version control log.</p>
 
-<h1 id="committers">Committers.</h1>
+<h2 id="committers">Committers</h2>
 
 <p>Contributors who give frequent and valuable contributions to a subproject of the Project can have their status
 promoted to that of a “<em>Committer</em>” for that subproject. A Committer has write access to the source code repository.
 Committer status is granted by the Project Management Committee by majority vote.</p>
 
-<h1 id="project-management-committee-pmc">Project Management Committee (PMC).</h1>
+<h2 id="project-management-committee-pmc">Project Management Committee (PMC)</h2>
 
 <p>Committers and other volunteers who frequently participate with valuable contributions may have their status promoted
 to that of a “<em>Project Management Committee Member</em>”. The PMC is responsible for the day-to-day management
 of the Project.</p>
 
-<h1 id="management">Management</h1>
+<h3 id="management">Management</h3>
 
 <p>The Vice President is appointed by the ASF Board. The Vice President is assisted by the Project Management Committee
 (PMC) and also serves as the PMC chair. The PMC may nominate new members. Nominees may then be approved
 with a 3/4 majority vote of the PMC. Membership can be revoked by a unanimous vote of all the active PMC members
 other than the member in question. The list of active PMC members can be found on our <a href="volunteers.html">Volunteers page</a>.</p>
 
-<h1 id="pmc-duties">PMC Duties</h1>
+<h3 id="pmc-duties">PMC Duties</h3>
 
 <p>The PMC is responsible for the day-to-day management of the Struts Project. The PMC oversees all changes
 made to the codebase. The PMC must ensure that all code under a Apache Struts repository is the lawful property
 of the Foundation and may be distributed under the <a href="http://apache.org/licenses/">Apache Software License</a>.
 All releases of a Struts subproject must be sanctioned by the Project Management Committee.</p>
 
-<h1 id="subprojects">Subprojects</h1>
+<h3 id="subprojects">Subprojects</h3>
 
 <p>Subprojects are the Project’s unit of release. Each subproject should represent an implementation of a Struts framework
 or a related component. Each subproject should focus on creating, maintaining, and releasing a single software
@@ -190,13 +220,13 @@ identify the initial source from which t
 repositories, if any, which are to be created. Creation of a new subproject requires approval by a 3/4 majority
 vote of the PMC.</p>
 
-<h1 id="decision-making">Decision Making</h1>
+<h2 id="decision-making">Decision Making</h2>
 
 <p>All <a href="http://apache.org/foundation/how-it-works.html#roles">Volunteers</a> (Users, Developers, Committers, PMC Members)
 are encouraged to participate in the decision-making process, but binding decisions are made only
 by the Project Management Committee.</p>
 
-<h1 id="voting">Voting</h1>
+<h3 id="voting">Voting</h3>
 
 <p>Any subscriber to the list may <a href="http://apache.org/foundation/voting.html">vote</a> on any issue or action item.
 Votes from Developers and Committers are especially welcome. However, the only binding votes are those cast by a PMC
@@ -254,7 +284,7 @@ point they are decided by either consens
 to a +1 after discussion, and likewise a +1 may be converted to a -1. By convention, Committers should allow a vote
 to circulate for 72 hours before taking action.</p>
 
-<h1 id="action-items">Action Items</h1>
+<h2 id="action-items">Action Items</h2>
 
 <p>All decisions revolve around “<em>Action Items</em>”. Action Items consist of the following:
 - Long Term Plans
@@ -264,28 +294,28 @@ to circulate for 72 hours before taking
 - Release Plan
 - Release Grade</p>
 
-<h2 id="long-term-plans">Long Term Plans</h2>
+<h3 id="long-term-plans">Long Term Plans</h3>
 
 <p>Long term plans are simply announcements that group members are working on particular issues related to the Project.
 These items are not voted on, but Committers and PMC Members who do not agree with a particular plan, or think that
 an alternative plan would be better, are obligated to inform the group of their feelings.</p>
 
-<h2 id="short-term-plan">Short Term Plan</h2>
+<h3 id="short-term-plan">Short Term Plan</h3>
 
 <p>Short term plans are announcements that a volunteer is working on a particular set of documentation or code files
 with the implication that other volunteers should avoid them or try to coordinate their changes.</p>
 
-<h2 id="product-changes">Product Changes</h2>
+<h3 id="product-changes">Product Changes</h3>
 
 <p>All product changes to the repository are subject to lazy consensus.</p>
 
-<h2 id="showstoppers">Showstoppers</h2>
+<h3 id="showstoppers">Showstoppers</h3>
 
 <p>Showstoppers are issues that require a fix be in place before the next public release. They are designated as “blockers”
 in the issue tracker in order to focus special attention on these problems. An issue becomes a showstopper when it is
 designated as such in the issue tracker by a PMC member and remains so by lazy consensus.</p>
 
-<h2 id="release-plan">Release Plan</h2>
+<h3 id="release-plan">Release Plan</h3>
 
 <p>A release plan must be used to keep all volunteers aware of when a release is desired, whether it will be a major,
 minor, or milestone release, who will be the release manager, when the repository will be tagged to create
@@ -293,21 +323,20 @@ the distribution, and other assorted inf
 plan must be incorporated into the product documentation, or otherwise announced to the DEV list.
 Lazy majority decides each issue in a release plan.</p>
 
-<h2 id="release-grade">Release Grade</h2>
+<h3 id="release-grade">Release Grade</h3>
 
 <p>After a proposed release is built, it must be tested and classified before being released to the general public.
 The proposed release may be assigned “Alpha”, “Beta” or “General Availability” classifications by majority vote.
 Once a release is classified by the PMC Members, it may be distributed to the general public on behalf of the Foundation.
 Distributions may be reclassified or withdrawn by majority vote, but the release number may not be reused by another distribution.</p>
 
-<h1 id="sandbox">Sandbox</h1>
+<h2 id="sandbox">Sandbox</h2>
 
 <p>Pursuant to the <a href="http://incubator.apache.org/learn/rules-for-revolutionaries.html">“Rules for Revolutionaries”</a>,
 any committer may submit experimental material to the Sandbox area of the repository at his or her own discretion.</p>
 
-<p>Material must be moved from the sandbox to the main repository before it can be released.</p>
-
-<p>If a sandbox whiteboard becomes dormant for six or more months, it may be moved to the archive section of the repository.</p>
+<p>Material must be moved from the sandbox to the main repository before it can be released. If a sandbox whiteboard 
+becomes dormant for six or more months, it may be moved to the archive section of the repository.</p>
 
 <p>Experimental material that is outside the scope of the Struts project may also be  submitted to the
 <a href="http://labs.apache.org/">Apache Labs</a></p>
@@ -356,12 +385,12 @@ any committer may submit experimental ma
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/coding-standards.html
==============================================================================
--- websites/production/struts/content/coding-standards.html (original)
+++ websites/production/struts/content/coding-standards.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,20 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="in-the-first-place">In the first place</h1>
+    <h1 class="no_toc" id="coding-standards">Coding standards</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#in-the-first-place" id="markdown-toc-in-the-first-place">In the first place</a></li>
+  <li><a href="#separation-of-concern" id="markdown-toc-separation-of-concern">Separation of concern</a></li>
+  <li><a href="#ask" id="markdown-toc-ask">Ask!</a></li>
+  <li><a href="#wip" id="markdown-toc-wip">WIP</a></li>
+  <li><a href="#examples" id="markdown-toc-examples">Examples</a>    <ul>
+      <li><a href="#from-defaults-to-extractions" id="markdown-toc-from-defaults-to-extractions">From defaults to extractions</a></li>
+    </ul>
+  </li>
+</ul>
+
+<h2 id="in-the-first-place">In the first place</h2>
 
 <p>Please remember that most of the time others will read your code. Focusing on that allow you to gain required perspective
 about how code should look like. Defaults, margins, convention doesn’t matter if what you write is hard to read.</p>
@@ -260,12 +273,12 @@ readability</em> and follow that path to
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/css/custom.css
==============================================================================
--- websites/production/struts/content/css/custom.css (original)
+++ websites/production/struts/content/css/custom.css Fri Mar 31 07:31:46 2017
@@ -28,4 +28,4 @@ a.anchor {
   height: 94px;
   margin-top: -94px;
   visibility: hidden;
-}
+}
\ No newline at end of file

Modified: websites/production/struts/content/dev-mail.html
==============================================================================
--- websites/production/struts/content/dev-mail.html (original)
+++ websites/production/struts/content/dev-mail.html Fri Mar 31 07:31:46 2017
@@ -203,12 +203,12 @@ There are many other archives out there
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/download.html
==============================================================================
--- websites/production/struts/content/download.html (original)
+++ websites/production/struts/content/download.html Fri Mar 31 07:31:46 2017
@@ -559,12 +559,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/downloads.html
==============================================================================
--- websites/production/struts/content/downloads.html (original)
+++ websites/production/struts/content/downloads.html Fri Mar 31 07:31:46 2017
@@ -1510,12 +1510,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/annotations.html
==============================================================================
--- websites/production/struts/content/getting-started/annotations.html (original)
+++ websites/production/struts/content/getting-started/annotations.html Fri Mar 31 07:31:46 2017
@@ -559,12 +559,12 @@ public String input() throws Exception {
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/coding-actions.html
==============================================================================
--- websites/production/struts/content/getting-started/coding-actions.html (original)
+++ websites/production/struts/content/getting-started/coding-actions.html Fri Mar 31 07:31:46 2017
@@ -349,12 +349,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/control-tags.html
==============================================================================
--- websites/production/struts/content/getting-started/control-tags.html (original)
+++ websites/production/struts/content/getting-started/control-tags.html Fri Mar 31 07:31:46 2017
@@ -259,12 +259,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/debugging-struts.html
==============================================================================
--- websites/production/struts/content/getting-started/debugging-struts.html (original)
+++ websites/production/struts/content/getting-started/debugging-struts.html Fri Mar 31 07:31:46 2017
@@ -237,12 +237,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/exception-handling.html
==============================================================================
--- websites/production/struts/content/getting-started/exception-handling.html (original)
+++ websites/production/struts/content/getting-started/exception-handling.html Fri Mar 31 07:31:46 2017
@@ -284,12 +284,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/exclude-parameters.html
==============================================================================
--- websites/production/struts/content/getting-started/exclude-parameters.html (original)
+++ websites/production/struts/content/getting-started/exclude-parameters.html Fri Mar 31 07:31:46 2017
@@ -271,12 +271,12 @@ Unexpected Exception caught setting 'sub
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/form-tags.html
==============================================================================
--- websites/production/struts/content/getting-started/form-tags.html (original)
+++ websites/production/struts/content/getting-started/form-tags.html Fri Mar 31 07:31:46 2017
@@ -406,12 +406,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/form-validation-using-xml.html
==============================================================================
--- websites/production/struts/content/getting-started/form-validation-using-xml.html (original)
+++ websites/production/struts/content/getting-started/form-validation-using-xml.html Fri Mar 31 07:31:46 2017
@@ -321,12 +321,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/form-validation.html
==============================================================================
--- websites/production/struts/content/getting-started/form-validation.html (original)
+++ websites/production/struts/content/getting-started/form-validation.html Fri Mar 31 07:31:46 2017
@@ -294,12 +294,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/hello-world-using-struts2.html
==============================================================================
--- websites/production/struts/content/getting-started/hello-world-using-struts2.html (original)
+++ websites/production/struts/content/getting-started/hello-world-using-struts2.html Fri Mar 31 07:31:46 2017
@@ -679,12 +679,12 @@ public class HelloWorldAction extends Ac
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/how-to-create-a-struts2-web-application.html
==============================================================================
--- websites/production/struts/content/getting-started/how-to-create-a-struts2-web-application.html (original)
+++ websites/production/struts/content/getting-started/how-to-create-a-struts2-web-application.html Fri Mar 31 07:31:46 2017
@@ -387,12 +387,12 @@ post a question on the mailing list.</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/http-session.html
==============================================================================
--- websites/production/struts/content/getting-started/http-session.html (original)
+++ websites/production/struts/content/getting-started/http-session.html Fri Mar 31 07:31:46 2017
@@ -333,12 +333,12 @@ public void setSession(Map&lt;String, Ob
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/index.html
==============================================================================
--- websites/production/struts/content/getting-started/index.html (original)
+++ websites/production/struts/content/getting-started/index.html Fri Mar 31 07:31:46 2017
@@ -222,12 +222,12 @@ post a question on the mailing list.</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/introducing-interceptors.html
==============================================================================
--- websites/production/struts/content/getting-started/introducing-interceptors.html (original)
+++ websites/production/struts/content/getting-started/introducing-interceptors.html Fri Mar 31 07:31:46 2017
@@ -381,12 +381,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/message-resource-files.html
==============================================================================
--- websites/production/struts/content/getting-started/message-resource-files.html (original)
+++ websites/production/struts/content/getting-started/message-resource-files.html Fri Mar 31 07:31:46 2017
@@ -435,12 +435,12 @@ thankyou=Gracias por registrarse, %{pers
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/preperable-interface.html
==============================================================================
--- websites/production/struts/content/getting-started/preperable-interface.html (original)
+++ websites/production/struts/content/getting-started/preperable-interface.html Fri Mar 31 07:31:46 2017
@@ -222,12 +222,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/processing-forms.html
==============================================================================
--- websites/production/struts/content/getting-started/processing-forms.html (original)
+++ websites/production/struts/content/getting-started/processing-forms.html Fri Mar 31 07:31:46 2017
@@ -434,12 +434,12 @@ public class Register extends ActionSupp
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/spring.html
==============================================================================
--- websites/production/struts/content/getting-started/spring.html (original)
+++ websites/production/struts/content/getting-started/spring.html Fri Mar 31 07:31:46 2017
@@ -425,12 +425,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/themes.html
==============================================================================
--- websites/production/struts/content/getting-started/themes.html (original)
+++ websites/production/struts/content/getting-started/themes.html Fri Mar 31 07:31:46 2017
@@ -352,12 +352,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/unit-testing.html
==============================================================================
--- websites/production/struts/content/getting-started/unit-testing.html (original)
+++ websites/production/struts/content/getting-started/unit-testing.html Fri Mar 31 07:31:46 2017
@@ -318,12 +318,12 @@ public void testExecuteValidationFailsMi
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/using-tags.html
==============================================================================
--- websites/production/struts/content/getting-started/using-tags.html (original)
+++ websites/production/struts/content/getting-started/using-tags.html Fri Mar 31 07:31:46 2017
@@ -467,12 +467,12 @@ public void setHelloCount(int helloCount
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/getting-started/wildcard-method-selection.html
==============================================================================
--- websites/production/struts/content/getting-started/wildcard-method-selection.html (original)
+++ websites/production/struts/content/getting-started/wildcard-method-selection.html Fri Mar 31 07:31:46 2017
@@ -256,12 +256,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/helping.html
==============================================================================
--- websites/production/struts/content/helping.html (original)
+++ websites/production/struts/content/helping.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,18 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="how-to-help-faq">How to Help FAQ</h1>
+    <h1 class="no_toc" id="how-to-help-faq">How to Help FAQ</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#what-can-my-company-do-to-help-support-apache-struts" id="markdown-toc-what-can-my-company-do-to-help-support-apache-struts">What can my company do to help support Apache Struts?</a></li>
+  <li><a href="#how-do-i-create-a-patch" id="markdown-toc-how-do-i-create-a-patch"><a class="anchor" name="patches"></a>How do I create a patch?</a></li>
+  <li><a href="#how-can-i-report-defects-or-suggest-features" id="markdown-toc-how-can-i-report-defects-or-suggest-features"><a class="anchor" name="issues"></a>How can I report defects or suggest features?</a></li>
+  <li><a href="#how-can-i-contribute-to-the-struts-source-code" id="markdown-toc-how-can-i-contribute-to-the-struts-source-code"><a class="anchor" name="contribute"></a>How can I contribute to the Struts source code?</a></li>
+  <li><a href="#how-can-i-contribute-to-the-documentation" id="markdown-toc-how-can-i-contribute-to-the-documentation"><a class="anchor" name="documentation"></a>How can I contribute to the documentation?</a></li>
+  <li><a href="#so-when-is-the-next-release-coming-out" id="markdown-toc-so-when-is-the-next-release-coming-out"><a class="anchor" name="release"></a>So when is the next release coming out?</a></li>
+  <li><a href="#what-can-i-do-to-help-the-next-release-along" id="markdown-toc-what-can-i-do-to-help-the-next-release-along"><a class="anchor" name="release_help"></a>What can I do to help the next release along?</a></li>
+  <li><a href="#how-can-i-help-make-the-decisions" id="markdown-toc-how-can-i-help-make-the-decisions"><a class="anchor" name="decides_help"></a>How can I help make the decisions?</a></li>
+</ul>
 
 <ul>
   <li>
@@ -154,7 +165,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-namepatchesahow-do-i-create-a-patch"><a class="anchor" name="patches"></a>How do I create a patch?</h3>
+    <h3 id="how-do-i-create-a-patch"><a class="anchor" name="patches"></a>How do I create a patch?</h3>
   </li>
 </ul>
 
@@ -189,7 +200,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-nameissuesahow-can-i-report-defects-or-suggest-features"><a class="anchor" name="issues"></a>How can I report defects or suggest features?</h3>
+    <h3 id="how-can-i-report-defects-or-suggest-features"><a class="anchor" name="issues"></a>How can I report defects or suggest features?</h3>
   </li>
 </ul>
 
@@ -216,7 +227,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-namecontributeahow-can-i-contribute-to-the-struts-source-code"><a class="anchor" name="contribute"></a>How can I contribute to the Struts source code?</h3>
+    <h3 id="how-can-i-contribute-to-the-struts-source-code"><a class="anchor" name="contribute"></a>How can I contribute to the Struts source code?</h3>
   </li>
 </ul>
 
@@ -243,7 +254,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-namedocumentationahow-can-i-contribute-to-the-documentation"><a class="anchor" name="documentation"></a>How can I contribute to the documentation?</h3>
+    <h3 id="how-can-i-contribute-to-the-documentation"><a class="anchor" name="documentation"></a>How can I contribute to the documentation?</h3>
   </li>
 </ul>
 
@@ -262,7 +273,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-namereleaseaso-when-is-the-next-release-coming-out"><a class="anchor" name="release"></a>So when is the next release coming out?</h3>
+    <h3 id="so-when-is-the-next-release-coming-out"><a class="anchor" name="release"></a>So when is the next release coming out?</h3>
   </li>
 </ul>
 
@@ -298,7 +309,7 @@
 
 <ul>
   <li>
-    <h3 id="a-classanchor-namereleasehelpawhat-can-i-do-to-help-the-next-release-along"><a class="anchor" name="release_help"></a>What can I do to help the next release along?</h3>
+    <h3 id="what-can-i-do-to-help-the-next-release-along"><a class="anchor" name="release_help"></a>What can I do to help the next release along?</h3>
 
     <ul>
       <li>
@@ -342,7 +353,7 @@ release.</p>
     </ul>
   </li>
   <li>
-    <h3 id="a-classanchor-namedecideshelpahow-can-i-help-make-the-decisions"><a class="anchor" name="decides_help"></a>How can I help make the decisions?</h3>
+    <h3 id="how-can-i-help-make-the-decisions"><a class="anchor" name="decides_help"></a>How can I help make the decisions?</h3>
   </li>
 </ul>
 
@@ -415,12 +426,12 @@ release.</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/kickstart.html
==============================================================================
--- websites/production/struts/content/kickstart.html (original)
+++ websites/production/struts/content/kickstart.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,37 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="kickstart-faq">Kickstart FAQ</h1>
+    <h1 class="no_toc" id="kickstart-faq">Kickstart FAQ</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#general" id="markdown-toc-general">General</a>    <ul>
+      <li><a href="#im-new-to-apache-struts-how-do-i-get-started" id="markdown-toc-im-new-to-apache-struts-how-do-i-get-started">I’m new to Apache Struts. How do I get started?</a></li>
+      <li><a href="#looking-at-the-releases-page-some-versions-seem-to-be-missing-what-happened-to-them" id="markdown-toc-looking-at-the-releases-page-some-versions-seem-to-be-missing-what-happened-to-them">Looking at the releases page, some versions seem to be missing. What happened to them?</a></li>
+      <li><a href="#why-is-the-project-called-struts" id="markdown-toc-why-is-the-project-called-struts">Why is the project called “Struts”?</a></li>
+      <li><a href="#how-is-apache-struts-licensed" id="markdown-toc-how-is-apache-struts-licensed">How is Apache Struts licensed?</a></li>
+      <li><a href="#can-apache-struts-be-used-in-a-commercial-product" id="markdown-toc-can-apache-struts-be-used-in-a-commercial-product">Can Apache Struts be used in a commercial product?</a></li>
+      <li><a href="#do-i-have-to-credit-apache-struts-on-my-own-web-site" id="markdown-toc-do-i-have-to-credit-apache-struts-on-my-own-web-site">Do I have to credit Apache Struts on my own web site?</a></li>
+      <li><a href="#are-there-isps-that-will-host-my-java-web-application" id="markdown-toc-are-there-isps-that-will-host-my-java-web-application">Are there ISPs that will host my Java web application?</a></li>
+      <li><a href="#is-there-a-particularly-good-ide-to-use" id="markdown-toc-is-there-a-particularly-good-ide-to-use">Is there a particularly good IDE to use?</a></li>
+    </ul>
+  </li>
+  <li><a href="#product-support" id="markdown-toc-product-support">Product Support</a>    <ul>
+      <li><a href="#where-can-i-get-help-with-apache-struts" id="markdown-toc-where-can-i-get-help-with-apache-struts">Where can I get help with Apache Struts?</a></li>
+      <li><a href="#is-commercial-support-available" id="markdown-toc-is-commercial-support-available">Is commercial support available?</a></li>
+      <li><a href="#if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added" id="markdown-toc-if-a-product-doesnt-do-what-i-want-can-i-request-that-a-feature-be-added">If a product doesn’t do what I want, can I request that a feature be added?</a></li>
+      <li><a href="#is-there-a-press-kit-for-apache-struts" id="markdown-toc-is-there-a-press-kit-for-apache-struts">Is there a press kit for Apache Struts?</a></li>
+      <li><a href="#where-can-i-report-a-potential-security-vulnerability" id="markdown-toc-where-can-i-report-a-potential-security-vulnerability">Where can I report a potential security vulnerability?</a></li>
+    </ul>
+  </li>
+  <li><a href="#mailing-lists" id="markdown-toc-mailing-lists">Mailing Lists</a>    <ul>
+      <li><a href="#is-there-a-digest-for-the-user-list" id="markdown-toc-is-there-a-digest-for-the-user-list">Is there a digest for the User list?</a></li>
+      <li><a href="#is-there-an-apache-struts-newsgroup" id="markdown-toc-is-there-an-apache-struts-newsgroup">Is there an Apache Struts newsgroup?</a></li>
+      <li><a href="#why-didnt-my-posting-show-up-on-the-user-list" id="markdown-toc-why-didnt-my-posting-show-up-on-the-user-list">Why didn’t my posting show up on the user list?</a></li>
+      <li><a href="#are-there-separate-user-lists-for-struts-1-and-struts-2" id="markdown-toc-are-there-separate-user-lists-for-struts-1-and-struts-2">Are there separate user lists for Struts 1 and Struts 2?</a></li>
+      <li><a href="#how-do-i-unsubscribe-from-the-mailing-list" id="markdown-toc-how-do-i-unsubscribe-from-the-mailing-list">How do I unsubscribe from the mailing list?</a></li>
+    </ul>
+  </li>
+</ul>
 
 <h2 id="general">General</h2>
 
@@ -393,12 +423,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/mail.html
==============================================================================
--- websites/production/struts/content/mail.html (original)
+++ websites/production/struts/content/mail.html Fri Mar 31 07:31:46 2017
@@ -362,12 +362,12 @@
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/primer.html
==============================================================================
--- websites/production/struts/content/primer.html (original)
+++ websites/production/struts/content/primer.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,7 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="key-technologies-primer">Key Technologies Primer</h1>
+    <h1 class="no_toc" id="key-technologies-primer">Key Technologies Primer</h1>
 
 <blockquote>
   <p><em>“The time has come,” the Walrus said, “To talk of many things:
@@ -128,6 +128,33 @@
  And why the sea is boiling hot – And whether pigs have wings.”</em></p>
 </blockquote>
 
+<ul id="markdown-toc">
+  <li><a href="#intention" id="markdown-toc-intention">Intention</a></li>
+  <li><a href="#key-technologies" id="markdown-toc-key-technologies">Key Technologies</a>    <ul>
+      <li><a href="#what-you-need-to-know" id="markdown-toc-what-you-need-to-know">What you need to know</a></li>
+      <li><a href="#general-starting-points" id="markdown-toc-general-starting-points">General starting points</a></li>
+      <li><a href="#http" id="markdown-toc-http">HTTP, HTML and User Agents</a></li>
+      <li><a href="#cycle" id="markdown-toc-cycle">The HTTP Request/Response cycle</a></li>
+      <li><a href="#the-java-language-and-application-frameworks" id="markdown-toc-the-java-language-and-application-frameworks">The Java Language and Application Frameworks</a>        <ul>
+          <li><a href="#reflection" id="markdown-toc-reflection">Reflection and Introspection</a></li>
+          <li><a href="#resources" id="markdown-toc-resources">Properties Files and ResourceBundles</a></li>
+          <li><a href="#threads" id="markdown-toc-threads">Threads</a></li>
+        </ul>
+      </li>
+      <li><a href="#javascript" id="markdown-toc-javascript">JavaScript, AJAX, and SOAP</a></li>
+      <li><a href="#containers" id="markdown-toc-containers">Servlets, Filters, and Web Containers</a></li>
+      <li><a href="#sessions-session" id="markdown-toc-sessions-session">Sessions #{session}</a></li>
+      <li><a href="#webapp" id="markdown-toc-webapp">Web Applications</a></li>
+      <li><a href="#security" id="markdown-toc-security">Security</a></li>
+      <li><a href="#jsp" id="markdown-toc-jsp">JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</a></li>
+      <li><a href="#xml" id="markdown-toc-xml">Extensible Markup Language (XML)</a></li>
+      <li><a href="#mvc" id="markdown-toc-mvc">Model View Controller (MVC)</a></li>
+    </ul>
+  </li>
+  <li><a href="#logic-frameworks" id="markdown-toc-logic-frameworks">Business Logic Frameworks</a></li>
+  <li><a href="#data-frameworks" id="markdown-toc-data-frameworks">Data Access Frameworks</a></li>
+</ul>
+
 <h2 id="intention">Intention</h2>
 
 <p>If you would like to get started with Apache Struts you most likely want
@@ -175,7 +202,7 @@ may be able to follow along and visit th
 technologies used by Struts are also used by most other Java web development products, so
 the background information will be useful in any Java project.</p>
 
-<h3 id="a-classanchor-namehttpahttp-html-and-user-agents"><a class="anchor" name="http"></a>HTTP, HTML and User Agents</h3>
+<h3 id="http">HTTP, HTML and User Agents</h3>
 
 <p>The World Wide Web was built over the Hypertext Transfer Protocol
 <a href="http://www.ietf.org/rfc/rfc2616.txt?number=2616">(HTTP)</a>
@@ -187,7 +214,7 @@ transport more the HTML, HTML from the b
 <p>If you would like to learn HTML, we recommend
 <a href="http://www.w3.org/MarkUp/Guide/">Getting started with HTML</a> by Dave Raggett.</p>
 
-<h3 id="a-classanchor-namecycleathe-http-requestresponse-cycle"><a class="anchor" name="cycle"></a>The HTTP Request/Response cycle</h3>
+<h3 id="cycle">The HTTP Request/Response cycle</h3>
 
 <p>A very important part of HTTP for the web developer is the request/response cycle. To use HTTP
 you have to make a request. A HTTP server, like a web server, is then obliged to respond. When you
@@ -199,7 +226,7 @@ what is happening behind the scenes.</p>
 There is a lot of help available in the internet, like
 <a href="http://docs.webplatform.org/wiki/tutorials/How_does_the_Internet_work">How does the Internet work?</a></p>
 
-<h3 id="a-classanchor-namejavaathe-java-language-and-application-frameworks"><a class="anchor" name="java"></a>The Java Language and Application Frameworks</h3>
+<h3 id="the-java-language-and-application-frameworks">The Java Language and Application Frameworks</h3>
 
 <p>Struts is written in the
 <a href="http://www.oracle.com/us/technologies/java/overview/index.html">Java programming language</a>.
@@ -208,7 +235,7 @@ object-orientated techniques. A good und
 object-orientated programming (OOP) and threading, will help
 you get the most out of Struts.</p>
 
-<h4 id="a-classanchor-namereflectionareflection-and-introspection"><a class="anchor" name="reflection"></a>Reflection and Introspection</h4>
+<h4 id="reflection">Reflection and Introspection</h4>
 
 <p>Reflection is the process of determining which member fields and methods are available on an object.
 Introspection is a specialized form of reflection used by the JavaBean API.
@@ -222,7 +249,7 @@ between HTML forms and JavaBeans.</p>
 <p>While it is not necessary to have a deep understanding of these concepts when you start with Apache
 Struts, it will help you when your application grows and becomes more complex.</p>
 
-<h4 id="a-classanchor-nameresourcesaproperties-files-and-resourcebundles"><a class="anchor" name="resources"></a>Properties Files and ResourceBundles</h4>
+<h4 id="resources">Properties Files and ResourceBundles</h4>
 
 <p>Java applications, including web applications, are often
 configured using <a href="http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html">Properties</a>
@@ -240,14 +267,14 @@ Support for localizing an application wa
 <p>Again the Java Tutorials provide
 <a href="http://docs.oracle.com/javase/tutorial/i18n/resbundle/concept.html">more information</a>.</p>
 
-<h4 id="a-classanchor-namethreadsathreads"><a class="anchor" name="threads"></a>Threads</h4>
+<h4 id="threads">Threads</h4>
 
 <p>With Struts 1 you were required to know a lot about how to write code which
 can run in a multi-threaded environment. With Struts 2 this is no longer necessary.
 In an Struts 2 environment each action caused by a HTTP request
 is a plain old Java object which is instanced for each request.</p>
 
-<h3 id="a-classanchor-namejavascriptajavascript-ajax-and-soap"><a class="anchor" name="javascript"></a>JavaScript, AJAX, and SOAP</h3>
+<h3 id="javascript">JavaScript, AJAX, and SOAP</h3>
 
 <p>WIth HTTP and HTML you can already provide static web pages. Today this is much
 often not longer enough and your application users might expect a interactive user interface.
@@ -269,7 +296,7 @@ requests directly to a remote server, wh
 the business logic and the page markup. Depending on your applications need, it might be not necessary
 for you to learn about SOAP.</p>
 
-<h3 id="a-classanchor-namecontainersaservlets-filters-and-web-containers"><a class="anchor" name="containers"></a>Servlets, Filters, and Web Containers</h3>
+<h3 id="containers">Servlets, Filters, and Web Containers</h3>
 
 <p>Since Java is an object-orientated language, the
 <a href="http://docs.oracle.com/javaee/6/tutorial/doc/bnafd.html">Java Servlet</a>
@@ -300,7 +327,7 @@ response. Filters are aggregated into a
 has a chance to process the request and response before and after
 it is processed by subsequent filters (and the servlet that is ultimately called).</p>
 
-<h3 id="a-classanchor-namesessionasessions"><a class="anchor" name="session"></a>Sessions</h3>
+<h3 id="sessions-session">Sessions #{session}</h3>
 
 <p>One of the key characteristics of HTTP is that it is
 <em>stateless</em>. In other words, there is nothing built in to
@@ -331,7 +358,7 @@ bypass this.</p>
 
 <p>Struts 2 provides easy ways to create and access a session.</p>
 
-<h3 id="a-classanchor-namewebappaweb-applications"><a class="anchor" name="webapp"></a>Web Applications</h3>
+<h3 id="webapp">Web Applications</h3>
 
 <p>Just as a HTTP server can be used to host several distinct
 websites, a servlet container can be used to host more than one web
@@ -349,7 +376,7 @@ application and deploy it to your server
 build tools like <a href="http://maven.apache.org">Maven</a> and addition reading
 in the documentation of your server vendor.</p>
 
-<h3 id="a-classanchor-namesecurityasecurity"><a class="anchor" name="security"></a>Security</h3>
+<h3 id="security">Security</h3>
 
 <p>One detail that can be configured in the Web application deployment descriptor is container-managed security.
 Declarative security can be used to protect requests for URIs that match given patterns.
@@ -363,7 +390,7 @@ Other projects, like <a href="http://shi
 <a href="http://www.springframework.org/spring-security/">Spring Security</a> might also help
 you to secure your web application.</p>
 
-<h3 id="a-classanchor-namejspajavaserver-pages-jsp-tag-libraries-and-javaserver-faces"><a class="anchor" name="jsp"></a>JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</h3>
+<h3 id="jsp">JavaServer Pages, JSP Tag Libraries, and JavaServer Faces</h3>
 
 <p>If you write a classic web app, you might need a view component.
 One of the first of its kind was <a href="http://www.oracle.com/technetwork/java/javaee/jsp/index.html">JSP</a>.</p>
@@ -397,7 +424,7 @@ presentation technologies available to S
   <li><a href="http://www.w3.org/TR/xslt">XSLT</a></li>
 </ul>
 
-<h3 id="a-classanchor-namexmlaextensible-markup-language-xml"><a class="anchor" name="xml"></a>Extensible Markup Language (XML)</h3>
+<h3 id="xml">Extensible Markup Language (XML)</h3>
 
 <p>The features provided by the framework rely on a number of
 objects that are sometimes deployed using a configuration file written in
@@ -410,7 +437,7 @@ it is no longer crucial to write long XM
 application. If you would like to read more about it, please visit the page of the
 <a href="http://struts.apache.org/release/2.1.x/docs/convention-plugin.html">Convention plugin</a>.</p>
 
-<h3 id="a-classanchor-namemvcamodel-view-controller-mvc"><a class="anchor" name="mvc"></a>Model View Controller (MVC)</h3>
+<h3 id="mvc">Model View Controller (MVC)</h3>
 
 <p>Web applications based on JavaServer Pages sometimes
 commingle database code, page design code, and control flow
@@ -464,7 +491,7 @@ technologies to build the business, data
   <li><a href="http://en.wikipedia.org/wiki/Model_view_controller">Wikipedia - MVC</a></li>
 </ul>
 
-<h2 id="a-classanchor-namelogicframeworksabusiness-logic-frameworks"><a class="anchor" name="logic_frameworks"></a>Business Logic Frameworks</h2>
+<h2 id="logic-frameworks">Business Logic Frameworks</h2>
 
 <p>Most teams still roll their own business logic layer using
 plain old JavaBeans (POJOs). Though, business layer frameworks are beginning to emerge,
@@ -477,7 +504,7 @@ and now include:</p>
   <li>or you can rely on features of the bundled Struts XWork</li>
 </ul>
 
-<h3 id="a-classanchor-namedataframeworksadata-access-frameworks"><a class="anchor" name="data_frameworks"></a>Data Access Frameworks</h3>
+<h2 id="data-frameworks">Data Access Frameworks</h2>
 
 <p>Most often, the business layer is seen to be distinct from
 the data access layer. Some teams roll their own data access objects (DAOs),
@@ -533,12 +560,12 @@ data access frameworks. Some popular dat
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/releases.html
==============================================================================
--- websites/production/struts/content/releases.html (original)
+++ websites/production/struts/content/releases.html Fri Mar 31 07:31:46 2017
@@ -120,13 +120,19 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="release-guidelines">Release Guidelines</h1>
+    <h1 class="no_toc" id="release-guidelines">Release Guidelines</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#release-process" id="markdown-toc-release-process">Release Process</a></li>
+  <li><a href="#coding-conventions-and-guidelines" id="markdown-toc-coding-conventions-and-guidelines">Coding Conventions and Guidelines</a></li>
+  <li><a href="#clarifications" id="markdown-toc-clarifications">Clarifications</a></li>
+</ul>
 
 <p>This document describes the Apache Struts release process and our <a href="#Coding">coding conventions</a>,
 which are applicable to all subprojects. Both stable and development releases are
 <a href="downloads.html">available for download.</a></p>
 
-<h1 id="release-process">Release Process</h1>
+<h2 id="release-process">Release Process</h2>
 
 <p>A <a href="http://commons.apache.org/releases/versioning.html">point release</a> should be made before and after
 any product change that is not a “fully-compatible change” (see link). This includes moving a dependency from
@@ -185,13 +191,13 @@ to be mirrored, wait at least 24 hours a
 removed from ASF distribution channels.</li>
 </ul>
 
-<h1 id="coding-conventions-and-guidelines">Coding Conventions and Guidelines</h1>
+<h2 id="coding-conventions-and-guidelines">Coding Conventions and Guidelines</h2>
 
 <p>Source code and documentation contributed to the Struts repositories should observe the:
 - The <a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">“Code Conventions for the Java Programming Language”</a>,
   as published by Oracle.</p>
 
-<h1 id="clarifications">Clarifications</h1>
+<h2 id="clarifications">Clarifications</h2>
 <ul>
   <li>First, “Observe the style of the original”. Resist the temptation to make stylistic changes for their own
 sake. But, if you must reformat code, commit style changes separately from code changes. Either change
@@ -273,12 +279,12 @@ and <a href="http://www.amazon.com/exec/
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/security.html
==============================================================================
--- websites/production/struts/content/security.html (original)
+++ websites/production/struts/content/security.html Fri Mar 31 07:31:46 2017
@@ -187,12 +187,12 @@ to consume resources in a non-linear rel
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/struts1eol-announcement.html
==============================================================================
--- websites/production/struts/content/struts1eol-announcement.html (original)
+++ websites/production/struts/content/struts1eol-announcement.html Fri Mar 31 07:31:46 2017
@@ -209,12 +209,12 @@ Struts 1 in projects. See the following
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/struts1eol-press.html
==============================================================================
--- websites/production/struts/content/struts1eol-press.html (original)
+++ websites/production/struts/content/struts1eol-press.html Fri Mar 31 07:31:46 2017
@@ -196,12 +196,12 @@ Spring Web MVC, Grails or Stripes.</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/submitting-patches.html
==============================================================================
--- websites/production/struts/content/submitting-patches.html (original)
+++ websites/production/struts/content/submitting-patches.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,19 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="submitting-patches">Submitting patches</h1>
+    <h1 class="no_toc" id="submitting-patches">Submitting patches</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#committers" id="markdown-toc-committers">Committers</a></li>
+  <li><a href="#non-committers" id="markdown-toc-non-committers">Non-committers</a></li>
+  <li><a href="#security-patches" id="markdown-toc-security-patches">Security patches</a></li>
+  <li><a href="#contributing-with-github" id="markdown-toc-contributing-with-github">Contributing with GitHub</a>    <ul>
+      <li><a href="#how-to-merge-pull-requests" id="markdown-toc-how-to-merge-pull-requests">How to merge Pull Requests</a></li>
+    </ul>
+  </li>
+  <li><a href="#further-reading" id="markdown-toc-further-reading">Further reading</a></li>
+  <li><a href="#patch-reward" id="markdown-toc-patch-reward">Google’s Patch Reward program</a></li>
+</ul>
 
 <h2 id="committers">Committers</h2>
 
@@ -378,12 +390,12 @@ to prepare a new release with your patch
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });

Modified: websites/production/struts/content/volunteers.html
==============================================================================
--- websites/production/struts/content/volunteers.html (original)
+++ websites/production/struts/content/volunteers.html Fri Mar 31 07:31:46 2017
@@ -120,7 +120,13 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1 id="volunteers">Volunteers</h1>
+    <h1 class="no_toc" id="volunteers">Volunteers</h1>
+
+<ul id="markdown-toc">
+  <li><a href="#project-management-committee-members" id="markdown-toc-project-management-committee-members">Project Management Committee Members</a></li>
+  <li><a href="#committers" id="markdown-toc-committers">Committers</a></li>
+  <li><a href="#emeritus-volunteers" id="markdown-toc-emeritus-volunteers">Emeritus Volunteers</a></li>
+</ul>
 
 <p>The project consists of a diverse group of volunteers who share common values regarding collaborative,
 community-based open source development.</p>
@@ -253,12 +259,12 @@ or committee member.</p>
 <script>
 $(function() {
   return $("h2, h3, h4, h5, h6").each(function(i, el) {
-    var $el, icon, id;
+    var $el, id;
     $el = $(el);
     id = $el.attr('id');
-    icon = '<i class="fa fa-link"></i>';
     if (id) {
-      return $el.prepend($("<a />").addClass("header-link").attr("href", "#" + id).html(icon));
+      $el.removeAttr('id');
+      return $el.before($("<a />").addClass('anchor').attr('name', id));
     }
   });
 });