Author: lukaszlenart
Date: Wed Dec 31 10:10:27 2014
New Revision: 934568

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.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/main.css
    websites/production/struts/content/dev-mail.html
    websites/production/struts/content/download.html
    websites/production/struts/content/downloads.html
    websites/production/struts/content/helping.html
    websites/production/struts/content/index.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 Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2002</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -412,5 +414,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2003.html
==============================================================================
--- websites/production/struts/content/announce-2003.html (original)
+++ websites/production/struts/content/announce-2003.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2003</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -259,5 +261,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2004.html
==============================================================================
--- websites/production/struts/content/announce-2004.html (original)
+++ websites/production/struts/content/announce-2004.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2004</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -312,5 +314,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2005.html
==============================================================================
--- websites/production/struts/content/announce-2005.html (original)
+++ websites/production/struts/content/announce-2005.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2005</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -757,5 +759,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2006.html
==============================================================================
--- websites/production/struts/content/announce-2006.html (original)
+++ websites/production/struts/content/announce-2006.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2006</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -816,5 +818,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2007.html
==============================================================================
--- websites/production/struts/content/announce-2007.html (original)
+++ websites/production/struts/content/announce-2007.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2007</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -792,5 +794,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2008.html
==============================================================================
--- websites/production/struts/content/announce-2008.html (original)
+++ websites/production/struts/content/announce-2008.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2008</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -318,5 +320,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2009.html
==============================================================================
--- websites/production/struts/content/announce-2009.html (original)
+++ websites/production/struts/content/announce-2009.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2009</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -215,5 +217,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2010.html
==============================================================================
--- websites/production/struts/content/announce-2010.html (original)
+++ websites/production/struts/content/announce-2010.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2010</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -259,5 +261,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2011.html
==============================================================================
--- websites/production/struts/content/announce-2011.html (original)
+++ websites/production/struts/content/announce-2011.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2011</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -340,5 +342,19 @@ Besides that, various other bug fixes, i
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2012.html
==============================================================================
--- websites/production/struts/content/announce-2012.html (original)
+++ websites/production/struts/content/announce-2012.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2012</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -439,5 +441,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce-2013.html
==============================================================================
--- websites/production/struts/content/announce-2013.html (original)
+++ websites/production/struts/content/announce-2013.html Wed Dec 31 10:10:27 
2014
@@ -10,9 +10,11 @@
   <title>Announcements 2013</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -648,5 +650,19 @@ Please check the Version Notes to see mo
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/announce.html
==============================================================================
--- websites/production/struts/content/announce.html (original)
+++ websites/production/struts/content/announce.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Announcements</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,15 +120,15 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>Announcements</h1>
+    <h1 id="announcements">Announcements</h1>
 
 <p class="pull-right">
   Skip to: <a href="announce-2013.html">Announcements - 2013</a>
 </p>
 
-<h4><span id="a20141207"> 7 December 2014 - Struts 2.3.20 General Availability 
with Security Fix Release</h4>
+<h4 id="a20141207">7 December 2014 - Struts 2.3.20 General Availability with 
Security Fix Release</h4>
 
-<p>The Apache Struts group is pleased to announce that Struts 2.3.20 is 
available as a &quot;General Availability&quot;
+<p>The Apache Struts group is pleased to announce that Struts 2.3.20 is 
available as a “General Availability”
 release. The GA designation is our highest quality grade.</p>
 
 <p>Apache Struts 2 is an elegant, extensible framework for creating 
enterprise-ready Java web applications.
@@ -136,33 +138,33 @@ to maintaining applications over time.</
 <p>One medium security issue was solved with this release:</p>
 
 <ul>
-<li><a href="http://struts.apache.org/docs/s2-023.html";>S2-023</a>
+  <li><a href="http://struts.apache.org/docs/s2-023.html";>S2-023</a>
 Generated value of token can be predictable</li>
 </ul>
 
 <p>Besides that, this release contains several fixes and improvements just to 
mention few of them:</p>
 
 <ul>
-<li>merged security fixes from version 2.3.16.1, 2.3.16.2, 2.3.16.3</li>
-<li>extended existing security mechanism to block access to given Java 
packages and Classes</li>
-<li>collection Parameters for <code>RedirectResult</code></li>
-<li>make <code>ParametersInterceptor</code> supports chinese in hash key by 
default</li>
-<li><code>themes.properties</code> can be loaded using 
<code>ServletContext</code> allows to put template folder under WEB-INF or on 
classpath</li>
-<li>new tag <code>datetextfield</code></li>
-<li>only valid Ognl expressions are cached</li>
-<li>custom <code>TextProvider</code> can be used for validation errors of 
model driven actions</li>
-<li><code>datetimepicker</code>&#39;s label fixed</li>
-<li><code>PropertiesJudge</code> removed and properties are checked in 
<code>SecurityMemberAccess</code></li>
-<li>resource reloading works in IBM JVM</li>
-<li>default reloading settings were removed from default.properties</li>
-<li><code>commons-fileupload</code> library upgraded to version 1.3.1 to fix 
potential security vulnerability</li>
-<li>the scheme attribute accepts expressions in <code>s:url</code> tag</li>
-<li>solves problem with infinite loop in 
<code>FastByteArrayOutputStream</code></li>
-<li><code>LocalizedTextUtil</code> supports many ClassLoaders</li>
-<li>Bill of Materials pom was introduced</li>
-<li><code>debug=browser|console</code> was migrated to jQuery</li>
-<li><code>struts_dojo.js</code> was fixed</li>
-<li>interface <code>org/apache/struts2/views/TagLibrary</code> was restored 
and marked as <code>@Depreacted</code></li>
+  <li>merged security fixes from version 2.3.16.1, 2.3.16.2, 2.3.16.3</li>
+  <li>extended existing security mechanism to block access to given Java 
packages and Classes</li>
+  <li>collection Parameters for <code>RedirectResult</code></li>
+  <li>make <code>ParametersInterceptor</code> supports chinese in hash key by 
default</li>
+  <li><code>themes.properties</code> can be loaded using 
<code>ServletContext</code> allows to put template folder under WEB-INF or on 
classpath</li>
+  <li>new tag <code>datetextfield</code></li>
+  <li>only valid Ognl expressions are cached</li>
+  <li>custom <code>TextProvider</code> can be used for validation errors of 
model driven actions</li>
+  <li><code>datetimepicker</code>’s label fixed</li>
+  <li><code>PropertiesJudge</code> removed and properties are checked in 
<code>SecurityMemberAccess</code></li>
+  <li>resource reloading works in IBM JVM</li>
+  <li>default reloading settings were removed from default.properties</li>
+  <li><code>commons-fileupload</code> library upgraded to version 1.3.1 to fix 
potential security vulnerability</li>
+  <li>the scheme attribute accepts expressions in <code>s:url</code> tag</li>
+  <li>solves problem with infinite loop in 
<code>FastByteArrayOutputStream</code></li>
+  <li><code>LocalizedTextUtil</code> supports many ClassLoaders</li>
+  <li>Bill of Materials pom was introduced</li>
+  <li><code>debug=browser|console</code> was migrated to jQuery</li>
+  <li><code>struts_dojo.js</code> was fixed</li>
+  <li>interface <code>org/apache/struts2/views/TagLibrary</code> was restored 
and marked as <code>@Depreacted</code></li>
 </ul>
 
 <p>and many other small improvements, please careful read the <a 
href="http://struts.apache.org/docs/version-notes-2320.html";>version 
notes</a>.</p>
@@ -175,9 +177,9 @@ Servlet API 2.4, JSP API 2.0, and Java 5
 <p>Should any issues arise with your use of any version of the Struts 
framework,
 please post your comments to the user list, and, if appropriate, file a 
tracking ticket.</p>
 
-<h4><span id="a20140503"> 3 May 2014 - Struts 2.3.16.3 General Availability 
Release - Security Fix Release</h4>
+<h4 id="a20140503">3 May 2014 - Struts 2.3.16.3 General Availability Release - 
Security Fix Release</h4>
 
-<p>The Apache Struts group is pleased to announce that Struts 2.3.16.3 is 
available as a &quot;General Availability&quot;
+<p>The Apache Struts group is pleased to announce that Struts 2.3.16.3 is 
available as a “General Availability”
 release. The GA designation is our highest quality grade.</p>
 
 <p>Apache Struts 2 is an elegant, extensible framework for creating 
enterprise-ready Java web applications.
@@ -187,15 +189,15 @@ to maintaining applications over time.</
 <p>One medium security issue was solved with this release:</p>
 
 <ul>
-<li><a href="http://struts.apache.org/docs/s2-022.html";>S2-022</a>
-Extends excluded params in CookieInterceptor to avoid manipulation of 
Struts&#39; internals</li>
+  <li><a href="http://struts.apache.org/docs/s2-022.html";>S2-022</a>
+Extends excluded params in CookieInterceptor to avoid manipulation of 
Struts’ internals</li>
 </ul>
 
 <p>All developers are strongly advised to perform this action.</p>
 
-<h4><span id="a20140424"> 24 April 2014 - Struts 2.3.16.2 General Availability 
Release - Security Fix Release</h4>
+<h4 id="a20140424">24 April 2014 - Struts 2.3.16.2 General Availability 
Release - Security Fix Release</h4>
 
-<p>The Apache Struts group is pleased to announce that Struts 2.3.16.2 is 
available as a &quot;General Availability&quot;
+<p>The Apache Struts group is pleased to announce that Struts 2.3.16.2 is 
available as a “General Availability”
 release. The GA designation is our highest quality grade.</p>
 
 <p>Apache Struts 2 is an elegant, extensible framework for creating 
enterprise-ready Java web applications.
@@ -205,19 +207,19 @@ to maintaining applications over time.</
 <p>Two security issues were solved with this release:</p>
 
 <ul>
-<li><a href="http://struts.apache.org/docs/s2-021.html";>S2-021</a>
+  <li><a href="http://struts.apache.org/docs/s2-021.html";>S2-021</a>
 Improves excluded params to avoid ClassLoader manipulation via 
ParametersInterceptor</li>
-<li><a href="http://struts.apache.org/docs/s2-021.html";>S2-021</a>
+  <li><a href="http://struts.apache.org/docs/s2-021.html";>S2-021</a>
 Adds excluded params to CookieInterceptor to avoid ClassLoader manipulation 
when the interceptors is configured
-to accept all cookie names (wildcard matching via &quot;*&quot;)</li>
+to accept all cookie names (wildcard matching via “*”)</li>
 </ul>
 
 <p>All developers are strongly advised to perform this action.</p>
 
-<h4><span id="a20140424"> 24 April 2014 - Struts up to 2.3.16.1: Zero-Day 
Exploit Mitigation</h4>
+<h4 id="a20140424">24 April 2014 - Struts up to 2.3.16.1: Zero-Day Exploit 
Mitigation</h4>
 
 <p>In Struts 2.3.16.1, an issue with ClassLoader manipulation via request 
parameters was supposed to be resolved. Unfortunately, 
-the correction wasn&#39;t sufficient.</p>
+the correction wasn’t sufficient.</p>
 
 <p>A security fix release fully addressing this issue is in preparation and 
will be released as soon as possible.</p>
 
@@ -227,38 +229,44 @@ the correction wasn&#39;t sufficient.</p
 
 <p>In your struts.xml, replace all custom references to params-interceptor 
with the following code, especially regarding the class-pattern
 found at the beginning of the excludeParams list:</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&lt;interceptor-ref name=&quot;params&quot;&gt;
-   &lt;param 
name=&quot;excludeParams&quot;&gt;(.*\.|^|.*|\[(&#39;|&quot;))(c|C)lass(\.|(&#39;|&quot;)]|\[).*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*&lt;/param&gt;
+
+<pre><code>&lt;interceptor-ref name="params"&gt;
+   &lt;param 
name="excludeParams"&gt;(.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*&lt;/param&gt;
 &lt;/interceptor-ref&gt;
-</code></pre></div>
+</code></pre>
+
 <p>If you are using default interceptor stacks packaged in struts-default.xml, 
change your parent packages to a customized secured configuration
 as in the following example. Given you are using defaultStack so far, change 
your packages from</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&lt;package name=&quot;default&quot; namespace=&quot;/&quot; 
extends=&quot;struts-default&quot;&gt;
-    &lt;default-interceptor-ref name=&quot;defaultStack&quot; /&gt;
+
+<pre><code>&lt;package name="default" namespace="/" 
extends="struts-default"&gt;
+    &lt;default-interceptor-ref name="defaultStack" /&gt;
     ...
     ...
 &lt;/package&gt;
-</code></pre></div>
+</code></pre>
+
 <p>to</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&lt;package name=&quot;default&quot; namespace=&quot;/&quot; 
extends=&quot;struts-default&quot;&gt;
+
+<pre><code>&lt;package name="default" namespace="/" 
extends="struts-default"&gt;
     &lt;interceptors&gt;
-        &lt;interceptor-stack name=&quot;secureDefaultStack&quot;&gt;
-            &lt;interceptor-ref name=&quot;defaultStack&quot;&gt;
-                &lt;param 
name=&quot;params.excludeParams&quot;&gt;(.*\.|^|.*|\[(&#39;|&quot;))(c|C)lass(\.|(&#39;|&quot;)]|\[).*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*&lt;/param&gt;
+        &lt;interceptor-stack name="secureDefaultStack"&gt;
+            &lt;interceptor-ref name="defaultStack"&gt;
+                &lt;param 
name="params.excludeParams"&gt;(.*\.|^|.*|\[('|"))(c|C)lass(\.|('|")]|\[).*,^dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,^parameters\..*,^action:.*,^method:.*&lt;/param&gt;
             &lt;/interceptor-ref&gt;
         &lt;/interceptor-stack&gt;
     &lt;/interceptors&gt;
 
-    &lt;default-interceptor-ref name=&quot;secureDefaultStack&quot; /&gt;
+    &lt;default-interceptor-ref name="secureDefaultStack" /&gt;
     ...
 &lt;/package&gt; 
-</code></pre></div>
+</code></pre>
+
 <p>Please follow the Apache Struts Announcements to stay updated regarding the 
upcoming security release. Most likely the release will be available within the 
next 72 hours.
 Please prepare for upgrading all Struts 2 based production systems to the new 
release version once available.</p>
 
-<h4><span id="a20140302"> 2 March 2014 - Struts 2.3.16.1 General Availability 
Release - Security Fix Release</h4>
+<h4 id="a20140302">2 March 2014 - Struts 2.3.16.1 General Availability Release 
- Security Fix Release</h4>
 
-<p>The Apache Struts group is pleased to announce that Struts 2.3.16.1 is 
available as a &quot;General Availability&quot;
+<p>The Apache Struts group is pleased to announce that Struts 2.3.16.1 is 
available as a “General Availability”
 release. The GA designation is our highest quality grade.</p>
 
 <p>Apache Struts 2 is an elegant, extensible framework for creating 
enterprise-ready Java web applications.
@@ -268,15 +276,15 @@ to maintaining applications over time.</
 <p>Two security issues were solved with this release:</p>
 
 <ul>
-<li><a href="http://struts.apache.org/docs/s2-020.html";>S2-020</a> ClassLoader 
manipulation
+  <li><a href="http://struts.apache.org/docs/s2-020.html";>S2-020</a> 
ClassLoader manipulation
 via request parameters</li>
-<li><a href="http://struts.apache.org/docs/s2-020.html";>S2-020</a> Commons 
FileUpload library was upgraded
+  <li><a href="http://struts.apache.org/docs/s2-020.html";>S2-020</a> Commons 
FileUpload library was upgraded
 to version 1.3.1 to prevent DoS attacks</li>
 </ul>
 
 <p>All developers are strongly advised to perform this action.</p>
 
-<h4><span id="a20140221"> 21 February 2014 - Immediately upgrade 
commons-fileupload to version 1.3.1</h4>
+<h4 id="a20140221">21 February 2014 - Immediately upgrade commons-fileupload 
to version 1.3.1</h4>
 
 <p>The Apache Struts Team recommends to immediately upgrade your Struts 2
 based projects to use the latest released version of Commons
@@ -291,19 +299,21 @@ vulnerable version. Deployed application
 the commons-fileupload jar file in WEB-INF/lib with the fixed jar. For
 Maven based Struts 2 projects, the following dependency needs to be
 added:</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&lt;dependency&gt;
+
+<pre><code>&lt;dependency&gt;
   &lt;groupId&gt;commons-fileupload&lt;/groupId&gt;
   &lt;artifactId&gt;commons-fileupload&lt;/artifactId&gt;
   &lt;version&gt;1.3.1&lt;/version&gt;
 &lt;/dependency&gt;
-</code></pre></div>
+</code></pre>
+
 <p>More details can be found here:</p>
 
 <ol>
-<li><a 
href="http://commons.apache.org/proper/commons-fileupload/changes-report.html#a1.3.1";>
-  
http://commons.apache.org/proper/commons-fileupload/changes-report.html#a1.3.1</a></li>
-<li><a 
href="http://mail-archives.apache.org/mod_mbox/www-announce/201402.mbox/%3c52f373fc.9030...@apache.org%3E";>
-  
http://mail-archives.apache.org/mod_mbox/www-announce/201402.mbox/%3c52f373fc.9030...@apache.org%3E</a></li>
+  <li><a 
href="http://commons.apache.org/proper/commons-fileupload/changes-report.html#a1.3.1";>
+ 
http://commons.apache.org/proper/commons-fileupload/changes-report.html#a1.3.1</a></li>
+  <li><a 
href="http://mail-archives.apache.org/mod_mbox/www-announce/201402.mbox/%3c52f373fc.9030...@apache.org%3E";>
+ 
http://mail-archives.apache.org/mod_mbox/www-announce/201402.mbox/%3c52f373fc.9030...@apache.org%3E</a></li>
 </ol>
 
 <p>All developers are strongly advised to perform this action.</p>
@@ -356,5 +366,19 @@ added:</p>
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/birdseye.html
==============================================================================
--- websites/production/struts/content/birdseye.html (original)
+++ websites/production/struts/content/birdseye.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>From a birds eye</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,9 +120,9 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>From a birds eye</h1>
+    <h1 id="from-a-birds-eye">From a birds eye</h1>
 
-<h2>The Apache Struts web framework</h2>
+<h2 id="the-apache-struts-web-framework">The Apache Struts web framework</h2>
 
 <p>The Apache Struts web framework is a free open-source solution for
 creating Java web applications.</p>
@@ -143,13 +145,13 @@ developers create web applications that
 
 <p>The framework provides three key components:</p>
 
-<p>A &quot;request&quot; handler provided by the application developer that is 
mapped to a standard URI.
-A &quot;response&quot; handler that transfers control to another resource 
which completes the response.
+<p>A “request” handler provided by the application developer that is 
mapped to a standard URI.
+A “response” handler that transfers control to another resource which 
completes the response.
 A tag library that helps developers create interactive form-based applications 
with server pages.
-The framework&#39;s architecture and tags are buzzword compliant. Struts works
+The framework’s architecture and tags are buzzword compliant. Struts works
 well with conventional REST applications and with technologies like SOAP and 
AJAX.</p>
 
-<h2>The Apache Struts Project</h2>
+<h2 id="the-apache-struts-project">The Apache Struts Project</h2>
 
 <p>The Apache Struts Project is the open source community that creates and 
maintains
 the Apache Struts framework. The project consists of a diverse group of 
volunteers
@@ -157,8 +159,8 @@ who share common values regarding collab
 The Apache Struts Project is proud to share these values with our parent 
organization:
 The Apache Software Foundation.</p>
 
-<p>The project is called &quot;Struts&quot; because the framework is meant to 
furnish the
-&quot;invisible underpinnings&quot; that support professional application 
development.
+<p>The project is called “Struts” because the framework is meant to 
furnish the
+“invisible underpinnings” that support professional application 
development.
 Struts provides the glue that joins the various elements of the standard Java 
platform
 into a coherent whole. Our goal is to leverage existing standards by producing 
the missing
 pieces we need to create enterprise-grade applications that are easy to 
maintain over time.</p>
@@ -172,15 +174,15 @@ issuing security patches.</p>
 the WebWork and Struts communities joined forces to create Struts 2. The 2.x 
framework
 is the best choice for teams who value elegant solutions to difficult 
problems.</p>
 
-<h2>Why should you use Apache Struts?</h2>
+<h2 id="why-should-you-use-apache-struts">Why should you use Apache 
Struts?</h2>
 
 <p>Apache Struts is a modern, maintained and full-featured web framework. It 
has been there
 for years and give the huge user base it is unlikely it will go away anytime 
soon
 in the future. Not only that we have dedicated users and developers on the 
project.
 Apache Struts is licensed to the Apache License 2.0 and this will not change. 
We maintain
-a clean IP and you are &quot;safe&quot; to use the project. Sometimes you are 
not &quot;safe&quot; to use
-a project when a company controls the SCM. Access to Source Code doesn&#39;t 
mean it is free.
-With Apache Struts, you are not only free to &quot;do what you want with 
it&quot;, you can even
+a clean IP and you are “safe” to use the project. Sometimes you are not 
“safe” to use
+a project when a company controls the SCM. Access to Source Code doesn’t 
mean it is free.
+With Apache Struts, you are not only free to “do what you want with it”, 
you can even
 contribute (which is not always the case). And best of it: you can become a 
part of the
 core team too.</p>
 
@@ -204,6 +206,7 @@ the view layer. Projects like <a href="h
 framework you need to decide if it makes sense for you to build components or 
if
 you are better with the Struts-approach.</p>
 
+
   </section>
 </article>
 
@@ -243,5 +246,19 @@ you are better with the Struts-approach.
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/builds.html
==============================================================================
--- websites/production/struts/content/builds.html (original)
+++ websites/production/struts/content/builds.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Source Code</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,7 +120,7 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>Source Code</h1>
+    <h1 id="source-code">Source Code</h1>
 
 <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.
@@ -134,15 +136,19 @@ your own copy of the product, use the so
 <a href="http://git-scm.com/";>Git client</a> interfaces.</p>
 
 <p>With the <a href="http://git-scm.com/";>Git client</a> installed, obtaining 
a working copy of the Struts codebase is as simple as</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&gt; git clone http://git.apache.org/struts.git
-</code></pre></div>
+
+<pre><code>&gt; git clone http://git.apache.org/struts.git
+</code></pre>
+
 <p>(Committers with write access should use the <strong>https</strong> 
protocol instead)</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&gt; git clone 
https://git-wip-us.apache.org/repos/asf/struts.git
-</code></pre></div>
-<p>For more about using version control systems at Apache, see the ASF&#39;s
+
+<pre><code>&gt; git clone https://git-wip-us.apache.org/repos/asf/struts.git
+</code></pre>
+
+<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>Building Apache Struts</h1>
+<h1 id="building-apache-struts">Building Apache Struts</h1>
 
 <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
@@ -150,11 +156,15 @@ whatever external JARs your system may n
 your own applications!)</p>
 
 <p>With Maven installed, building a Struts codebase is as simple as</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&gt; mvn install
-</code></pre></div>
+
+<pre><code>&gt; mvn install
+</code></pre>
+
 <p>or</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&gt; mvn -DskipAssembly=true install
-</code></pre></div>
+
+<pre><code>&gt; mvn -DskipAssembly=true install
+</code></pre>
+
 <p>Maven will automatically download any dependencies as needed.</p>
 
 <p>For more about using Maven to build Struts 2, see
@@ -163,7 +173,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>NightlyBuilds</h1>
+<h1 id="nightlybuilds">NightlyBuilds</h1>
 
 <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>
@@ -176,44 +186,46 @@ 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>Test Builds</h1>
+<h1 id="test-builds">Test Builds</h1>
 
 <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.
 Library distributions include any external dependencies needed to use a 
product with your application.</p>
 
 <p>A test build is made available so that it can be reviewed for quality by 
the Apache Struts development group.
-When a build is judged &quot;ready for prime time&quot;, it is promoted to 
&quot;General Availability&quot; status and may be
-made the &quot;Best Available&quot; release. If the group feels that a build 
requires more testing, then it may be marked
-as &quot;Beta&quot; release. When a test build is upgraded to &quot;Beta&quot; 
or &quot;GA&quot; by a vote of the project members,
+When a build is judged “ready for prime time”, it is promoted to 
“General Availability” status and may be
+made the “Best Available” release. If the group feels that a build 
requires more testing, then it may be marked
+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>Maven Snapshots</h1>
+<h1 id="maven-snapshots">Maven Snapshots</h1>
 
-<p>When a distribution is first made available, it is rated as a development 
build or &quot;snapshot&quot;. Later, the quality
-of the distribution may be upgraded to &quot;Beta&quot; or &quot;General 
Availability&quot;, based on feedback from the community,
+<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,
 and then made available through ibiblio and other public Maven repositories. 
To obtain an early distribution via Maven,
-specify the ASF Snapshot repository in the project&#39;s POM.</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">&lt;repositories&gt;
+specify the ASF Snapshot repository in the project’s POM.</p>
+
+<pre><code>&lt;repositories&gt;
     &lt;repository&gt;
         &lt;id&gt;apache.snapshots&lt;/id&gt;
         &lt;name&gt;ASF Maven 2 Snapshot&lt;/name&gt;
         
&lt;url&gt;https://repository.apache.org/content/groups/snapshots/&lt;/url&gt;
     &lt;/repository&gt;
 &lt;/repositories&gt;
-</code></pre></div>
-<h1>Licensing of Apache Struts Builds</h1>
+</code></pre>
+
+<h1 id="licensing-of-apache-struts-builds">Licensing of Apache Struts 
Builds</h1>
 
 <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
 regarding copyright ownership. The ASF licenses the source code and 
documentation files in our Apache Struts distribution
-to you under the Apache License, Version 2.0 (the &quot;License&quot;); you 
may not use the Apache Struts product except in compliance
+to you under the Apache License, Version 2.0 (the “License”); you may not 
use the Apache Struts product except in compliance
 with the License.</p>
 
 <p>You may obtain a copy of the License at 
[http://www.apache.org/licenses/LICENSE-2.0]</p>
 
 <p>Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
-&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.  See the License for the
+“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.</p>
 
 <p>Next: <a href="releases.html">Release Guidelines</a></p>
@@ -257,5 +269,19 @@ specific language governing permissions
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/bylaws.html
==============================================================================
--- websites/production/struts/content/bylaws.html (original)
+++ websites/production/struts/content/bylaws.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Project Management Committee Charter</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,7 +120,7 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>Apache Struts PMC Charter</h1>
+    <h1 id="apache-struts-pmc-charter">Apache Struts PMC Charter</h1>
 
 <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
@@ -128,56 +130,56 @@ 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>Roles and Responsibilities</h1>
+<h1 id="roles-and-responsibilities">Roles and Responsibilities</h1>
 
 <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>Users.</h1>
+<h1 id="users">Users.</h1>
 
-<p>Users are the people who use the products of the Project. People in this 
role aren&#39;t contributing code,
+<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>Contributors.</h1>
+<h1 id="contributors">Contributors.</h1>
 
 <p>Contributors are the people who write code or documentation patches or 
contribute positively to the project
-in other ways. When a volunteer&#39;s patch is applied, the contribution is 
recognized in the version control log.</p>
+in other ways. When a volunteer’s patch is applied, the contribution is 
recognized in the version control log.</p>
 
-<h1>Committers.</h1>
+<h1 id="committers">Committers.</h1>
 
 <p>Contributors who give frequent and valuable contributions to a subproject 
of the Project can have their status
-promoted to that of a &quot;<em>Committer</em>&quot; for that subproject. A 
Committer has write access to the source code repository.
+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>Project Management Committee (PMC).</h1>
+<h1 id="project-management-committee-pmc">Project Management Committee 
(PMC).</h1>
 
 <p>Committers and other volunteers who frequently participate with valuable 
contributions may have their status promoted
-to that of a &quot;<em>Project Management Committee Member</em>&quot;. The PMC 
is responsible for the day-to-day management
+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>Management</h1>
+<h1 id="management">Management</h1>
 
 <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>PMC Duties</h1>
+<h1 id="pmc-duties">PMC Duties</h1>
 
 <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>Subprojects</h1>
+<h1 id="subprojects">Subprojects</h1>
 
-<p>Subprojects are the Project&#39;s unit of release. Each subproject should 
represent an implementation of a Struts framework
+<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
-product or &quot;deliverable&quot;.</p>
+product or “deliverable”.</p>
 
 <p>All PMC Members have voting rights in all subprojects. Members not familiar 
with a subproject codebase may abstain
 from any given vote. All Committers have write access to all subprojects. 
Subprojects are units of release, not
@@ -188,13 +190,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>Decision Making</h1>
+<h1 id="decision-making">Decision Making</h1>
 
 <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>Voting</h1>
+<h1 id="voting">Voting</h1>
 
 <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
@@ -252,38 +254,38 @@ 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>Action Items</h1>
+<h1 id="action-items">Action Items</h1>
 
-<p>All decisions revolve around &quot;<em>Action Items</em>&quot;. Action 
Items consist of the following:
+<p>All decisions revolve around “<em>Action Items</em>”. Action Items 
consist of the following:
 - Long Term Plans
 - Short Term Plans
 - Product Changes
-- Showstoppers (or &quot;blockers&quot;)
+- Showstoppers (or “blockers”)
 - Release Plan
 - Release Grade</p>
 
-<h2>Long Term Plans</h2>
+<h2 id="long-term-plans">Long Term Plans</h2>
 
 <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>Short Term Plan</h2>
+<h2 id="short-term-plan">Short Term Plan</h2>
 
 <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>Product Changes</h2>
+<h2 id="product-changes">Product Changes</h2>
 
 <p>All product changes to the repository are subject to lazy consensus.</p>
 
-<h2>Showstoppers</h2>
+<h2 id="showstoppers">Showstoppers</h2>
 
-<p>Showstoppers are issues that require a fix be in place before the next 
public release. They are designated as &quot;blockers&quot;
+<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>Release Plan</h2>
+<h2 id="release-plan">Release Plan</h2>
 
 <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
@@ -291,16 +293,16 @@ 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>Release Grade</h2>
+<h2 id="release-grade">Release Grade</h2>
 
 <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 &quot;Alpha&quot;, &quot;Beta&quot; or 
&quot;General Availability&quot; classifications by majority vote.
+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>Sandbox</h1>
+<h1 id="sandbox">Sandbox</h1>
 
-<p>Pursuant to the <a 
href="http://incubator.apache.org/learn/rules-for-revolutionaries.html";>&quot;Rules
 for Revolutionaries&quot;</a>,
+<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>
@@ -351,5 +353,19 @@ any committer may submit experimental ma
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/coding-standards.html
==============================================================================
--- websites/production/struts/content/coding-standards.html (original)
+++ websites/production/struts/content/coding-standards.html Wed Dec 31 
10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Coding standards</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,84 +120,97 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>In the first place</h1>
+    <h1 id="in-the-first-place">In the first place</h1>
 
 <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&#39;t 
matter if what you write is hard to read.</p>
+about how code should look like. Defaults, margins, convention doesn’t 
matter if what you write is hard to read.</p>
 
 <p><strong>Readability is the first rule!</strong></p>
 
-<h2>Separation of concern</h2>
+<h2 id="separation-of-concern">Separation of concern</h2>
 
 <p>If you want to reformat given file, part of class, etc do it in a dedicated 
commit. Never ever mix bug fixing,
 new feature implementation with code reformatting. Thus only confuses people 
reviewing your code.</p>
 
 <p><strong>Reformat different than coding!</strong></p>
 
-<h2>Ask!</h2>
+<h2 id="ask">Ask!</h2>
 
-<p>If something isn&#39;t clear, you have doubts and anything else - ask! 
Maybe during materialising your thoughts as text
+<p>If something isn’t clear, you have doubts and anything else - ask! Maybe 
during materialising your thoughts as text
 you will gain the answer - Rubber Duck effect :-) Anyway, instead spending 
time on looking for solution - ask.</p>
 
-<p>The best place to ask question is Struts Developers List <a 
href="mailto:d...@struts.apache.org";>d...@struts.apache.org</a></p>
+<p>The best place to ask question is Struts Developers List <a 
href="&#109;&#097;&#105;&#108;&#116;&#111;:&#100;&#101;&#118;&#064;&#115;&#116;&#114;&#117;&#116;&#115;&#046;&#097;&#112;&#097;&#099;&#104;&#101;&#046;&#111;&#114;&#103;">&#100;&#101;&#118;&#064;&#115;&#116;&#114;&#117;&#116;&#115;&#046;&#097;&#112;&#097;&#099;&#104;&#101;&#046;&#111;&#114;&#103;</a></p>
 
-<h2>WIP</h2>
+<h2 id="wip">WIP</h2>
 
-<p>If you have any idea how to improve this guideline, don&#39;t hesitate to 
send them to us! Any help is welcome!</p>
+<p>If you have any idea how to improve this guideline, don’t hesitate to 
send them to us! Any help is welcome!</p>
 
-<h1>Examples</h1>
+<h1 id="examples">Examples</h1>
 
 <p>Below examples shows how you should proceed when adjusting given part of 
source code via reformatting, extracting
 or improving.</p>
 
-<h2>From defaults to extractions</h2>
+<h2 id="from-defaults-to-extractions">From defaults to extractions</h2>
 
 <p>The original source code:</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">// Hidden input section
+
+<pre><code>// Hidden input section
 a = new Attributes();
-a.add(&quot;type&quot;, &quot;hidden&quot;)
-    .add(&quot;id&quot;, &quot;__multiselect_&quot; + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(id)))
-    .add(&quot;name&quot;, &quot;__multiselect_&quot; + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(name)))
-    .add(&quot;value&quot;, &quot;&quot;).addIfTrue(&quot;disabled&quot;, 
disabled);
-start(&quot;input&quot;, a);
-end(&quot;input&quot;);
-</code></pre></div>
+a.add("type", "hidden")
+    .add("id", "__multiselect_" + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(id)))
+    .add("name", "__multiselect_" + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(name)))
+    .add("value", "").addIfTrue("disabled", disabled);
+start("input", a);
+end("input");
+</code></pre>
+
 <p>After applying default reformatting (80 columns margin):</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">// Hidden input section
+
+<pre><code>// Hidden input section
 a = new Attributes();
-a.add(&quot;type&quot;, &quot;hidden&quot;)
-    .add(&quot;id&quot;,
-        &quot;__multiselect_&quot;
+a.add("type", "hidden")
+    .add("id",
+        "__multiselect_"
             + StringUtils
                 .defaultString(StringEscapeUtils
                     .escapeHtml4(id)))
-    .add(&quot;name&quot;,
-        &quot;__multiselect_&quot;
+    .add("name",
+        "__multiselect_"
             + StringUtils
                 .defaultString(StringEscapeUtils
                     .escapeHtml4(name)))
-    .add(&quot;value&quot;, &quot;&quot;).addIfTrue(&quot;disabled&quot;, 
disabled);
-start(&quot;input&quot;, a);
-end(&quot;input&quot;);
-</code></pre></div>
+    .add("value", "").addIfTrue("disabled", disabled);
+start("input", a);
+end("input");
+</code></pre>
+
 <p>Some suggestions how to improve the code:</p>
 
 <ul>
-<li><p>use static imports</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">a.add(&quot;type&quot;, &quot;hidden&quot;)
- .add(&quot;id&quot;, &quot;__multiselect_&quot; + 
defaultString(escapeHtml4(id)));
-</code></pre></div></li>
-<li><p>use dedicated method</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">a.add(&quot;type&quot;, &quot;hidden&quot;)
- .add(&quot;id&quot;, &quot;__multiselect_&quot; + safeId(id));
-</code></pre></div></li>
-<li><p>use builder</p>
-<div class="highlight"><pre><code class="text language-text" 
data-lang="text">a.add(&quot;type&quot;, &quot;hidden&quot;)
- .add(&quot;id&quot;, 
HtmlID.with(&quot;__multiselect_&quot;).withSafeId(id).create());
-</code></pre></div></li>
+  <li>
+    <p>use static imports</p>
+
+    <pre><code>  a.add("type", "hidden")
+   .add("id", "__multiselect_" + defaultString(escapeHtml4(id)));
+</code></pre>
+  </li>
+  <li>
+    <p>use dedicated method</p>
+
+    <pre><code>  a.add("type", "hidden")
+   .add("id", "__multiselect_" + safeId(id));
+</code></pre>
+  </li>
+  <li>
+    <p>use builder</p>
+
+    <pre><code>  a.add("type", "hidden")
+   .add("id", HtmlID.with("__multiselect_").withSafeId(id).create());
+</code></pre>
+  </li>
 </ul>
 
-<p>As you can see, reformatting a code is just the beginning, you 
shouldn&#39;t stop there and think <em>how can I improve
+<p>As you can see, reformatting a code is just the beginning, you shouldn’t 
stop there and think <em>how can I improve
 readability</em> and follow that path to the end.</p>
 
   </section>
@@ -237,5 +252,19 @@ readability</em> and follow that path to
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/css/main.css
==============================================================================
--- websites/production/struts/content/css/main.css (original)
+++ websites/production/struts/content/css/main.css Wed Dec 31 10:10:27 2014
@@ -6479,7 +6479,6 @@ body {
 h1, h2, h3, h4, h5, h6 {
   font-weight: 400;
   margin-top: 1em;
-  margin-bottom: 1rem
 }
 
 h1 {
@@ -7035,13 +7034,11 @@ footer.container > .col-md-12 {
   h1, h2, h3, h4, h5, h6 {
     font-weight: 400;
     margin-top: 1em;
-    margin-bottom: 1rem
   }
 
   h1 {
     font-size: 3rem;
     color: #3157a7;
-    margin-bottom: 1em;
   }
 
   h1:first-child {

Modified: websites/production/struts/content/dev-mail.html
==============================================================================
--- websites/production/struts/content/dev-mail.html (original)
+++ websites/production/struts/content/dev-mail.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Dev Mailing List</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -118,7 +120,7 @@
 
 <article class="container">
   <section class="col-md-12">
-    <h1>Development Lists</h1>
+    <h1 id="development-lists">Development Lists</h1>
 
 <p>The following mailing lists are meant for people who want to contribute to 
Struts itself. Patches, Documentation
 improvements and discussion on future Struts are welcome. <strong>For 
questions on using Struts, please subscribe to the
@@ -153,7 +155,7 @@ improvements and discussion on future St
     </tr>
 </table>
 
-<h1>Archives</h1>
+<h1 id="archives">Archives</h1>
 
 <p>You can read the <a 
href="http://mail-archives.apache.org/mod_mbox/struts-dev/";>ASF Mail</a> or the
 <a href="http://markmail.org/list/org.apache.struts.dev/";>Mark Mail</a> 
archives if you are looking for older discussions.
@@ -198,5 +200,19 @@ There are many other archives out there
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/download.html
==============================================================================
--- websites/production/struts/content/download.html (original)
+++ websites/production/struts/content/download.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Download a Release</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -407,5 +409,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>

Modified: websites/production/struts/content/downloads.html
==============================================================================
--- websites/production/struts/content/downloads.html (original)
+++ websites/production/struts/content/downloads.html Wed Dec 31 10:10:27 2014
@@ -10,9 +10,11 @@
   <title>Releases</title>
 
   <link 
href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic"
 rel="stylesheet" type="text/css">
-  <link rel="stylesheet" href="css/main.css">
+  <link 
href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" 
rel="stylesheet">
+  <link href="css/main.css" rel="stylesheet">
+  <link href="css/custom.css" rel="stylesheet">
 
-  <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+  <script 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
   <script type="text/javascript" src="bootstrap/js/bootstrap.js"></script>
   <script type="text/javascript" src="js/community.js"></script>
 </head>
@@ -1176,5 +1178,19 @@
 }(document, 'script', 'facebook-jssdk'));</script>
 
 
+<script>
+$(function() {
+  return $("h2, h3, h4, h5, h6").each(function(i, el) {
+    var $el, icon, 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));
+    }
+  });
+});
+</script>
+
 </body>
 </html>


Reply via email to