<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <meta name="Date-Revision-yyyymmdd" content="20140918"/>
  <meta http-equiv="Content-Language" content="en"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

  <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 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">
  <link href="/highlighter/github-theme.css" rel="stylesheet">

  <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
  <script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
  <script type="text/javascript" src="/js/community.js"></script>
</head>
<body>

<a href="http://github.com/apache/struts" class="github-ribbon">
  <img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>

<header>
  <nav>
    <div role="navigation" class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
            Menu
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
        </div>
        <div id="struts-menu" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Home<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/index.html">Welcome</a></li>
                <li><a href="/download.cgi">Download</a></li>
                <li><a href="/releases.html">Releases</a></li>
                <li><a href="/announce.html">Announcements</a></li>
                <li><a href="http://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Support<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/mail.html">User Mailing List</a></li>
                <li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
                <li><a href="/security.html">Reporting Security Issues</a></li>
                <li class="divider"></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
                <li class="divider"></li>
                <li><a href="/maven/project-info.html">Maven Project Info</a></li>
                <li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
                <li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Documentation<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/birdseye.html">Birds Eye</a></li>
                <li><a href="/primer.html">Key Technologies</a></li>
                <li><a href="/kickstart.html">Kickstart FAQ</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
                <li class="divider"></li>
                <li><a href="/getting-started/">Getting Started</a></li>
                <li><a href="/security/">Security Guide</a></li>
                <li><a href="/core-developers/">Core Developers Guide</a></li>
                <li><a href="/tag-developers/">Tag Developers Guide</a></li>
                <li><a href="/maven-archetypes/">Maven Archetypes</a></li>
                <li><a href="/plugins/">Plugins</a></li>
                <li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
                <li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
                <li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
              </ul>
            </li>
            <li class="dropdown">
              <a data-toggle="dropdown" href="#" class="dropdown-toggle">
                Contributing<b class="caret"></b>
              </a>
              <ul class="dropdown-menu">
                <li><a href="/youatstruts.html">You at Struts</a></li>
                <li><a href="/helping.html">How to Help FAQ</a></li>
                <li><a href="/dev-mail.html">Development Lists</a></li>
                <li><a href="/contributors/">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/submitting-patches.html">Submitting patches</a></li>
                <li><a href="/builds.html">Source Code and Builds</a></li>
                <li><a href="/coding-standards.html">Coding standards</a></li>
                <li><a href="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">Contributors Guide</a></li>
                <li class="divider"></li>
                <li><a href="/release-guidelines.html">Release Guidelines</a></li>
                <li><a href="/bylaws.html">PMC Charter</a></li>
                <li><a href="/volunteers.html">Volunteers</a></li>
                <li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
                <li><a href="/updating-website.html">Updating the website</a></li>
              </ul>
            </li>
            <li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
          </ul>
        </div>
      </div>
    </div>
  </nav>
</header>


<article class="container">
  <section class="col-md-12">
    <a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/announce-2005.html" title="Edit this page on GitHub">Edit on GitHub</a>
    
    <h1>Announcements - 2005</h1>

<p class="pull-right">
  Skip to: <a href="announce-2004.html">Announcements - 2004</a>
</p>


<h4 id="a20051218.1">18 Dec 2005 - New Struts Committer: Richard
  Feit</h4>
<p>
  Please join us in welcoming Rich Feit as a new Struts
  committer. Rich is
  a Beehive committer and PMC member. In addition to being a
  Struts user
  for years (Beehive is built on Struts), he has been pivotal in
  designing
  and coding Struts Ti, both the initial annotationed Beehive
  version and
  the current WebWork merger effort. His experience in Struts
  migration
  tools in particular will be key to making Struts Action a
  success. We
  look forward to his continued contributions as a committer.
</p>

<p>
  Welcome, Rich!
</p>
<p>
  PMC vote: 7 +1, non-binding committer votes: 3 +1
</p>
<hr/>

<h4 id="a20051214.4">14 Dec 2005 - Apache Struts to release Struts
  1.3.0
  as the "Action Framework"</h4>

<p>
  [Note: As of version 1.3.5, the "Action Framework" label
  was dropped, and Struts is just Struts again.]
</p>

<p>
  The Apache Struts flagship product,
  the leading web application framework for Java,
  is now known as the "Struts".
</p>

<p>
  To make the framework easier to maintain,
  Apache Struts subdivided the original monolithic distribution
  into several
  subprojects.
  Each subproject has its own website, documentation, and
  release cycle,
  and may be downloaded separately.
  For consistency, the original core framework component also
  has its own name
  now: "Struts".
  The JARs and external dependencies for the extensions to
  Struts
  are being bundled into a convenient distribution known as the
  "Struts Action
  Framework Library".
</p>

<p>
  The Struts 1.3.0 release will include several
  exciting new
  features, including:
</p>

<ul>
  <li>Composable Request Processor</li>
  <li>ActionDynaForm interfaces</li>
  <li>Arbitrary configuration properties</li>
  <li>Catalog and Command Elements</li>
  <li>Enhanced Global Exception Handlers</li>
  <li>Extends attribute for XML configurations</li>
  <li>"isCommitted" Exception Handling</li>
  <li>Postback Actions</li>
  <li>Wildcard ActionConfig properties</li>
</ul>

<p>
  The key change in this release is the "composable request
  processor".
  The request processor is the framework's "kernal".
  The request processor methods are now command objects in a
  flexible chain of
  commands.
  Rather than subclassing a monolithic object,
  developers can now just replace commands with their own
  implementations.
  Commands can also be inserted or removed, if needed,
  to extend or streamline the request processing gauntlet,
  to better meet the needs of different kinds of applications.
</p>

<p>
  The Struts 1.3.0 release,
  and other milestones on the Apache Struts roadmap,
  were discussed at ApacheCon on Tuesday, December 13, 2005, in
  a talk,
  entitled "Struts 2006: An Embarrassment of Riches".
  <a href="http://people.apache.org/~husted/apachecon-2005-action.pdf">
    Slides from the talk are available online</a>
  .
</p>
<hr/>

<h4 id="a20051214.3">14 Dec 2005 - Apache Struts and Open Symphony
  WebWork
  communities to merge</h4>
<p>
  Apache Struts,
  the leading web application framework for Java, and Open
  Symphony WebWork,
  a leader in technical innovation, are working to merge their
  communities
  and codebases.
</p>

<p>
  "A merger is an elegant approach to evolution of existing
  applications
  based on action-oriented frameworks,"
  said Craig McClanahan, founder of the Struts project.
</p>

<p>
  The merger seems like a win-win for the frameworks.
  "The technical benefit is that WebWork has already done most
  everything
  that is on the Struts Action roadmap," noted Ted Husted, a
  Struts committer.
  "This is a way that [Struts] shops can use incremental
  integration to take
  advantage of new technologies that are already part of
  WebWork, such as Spring."
</p>

<p>
  "My hope is to take advantage of a larger community (Struts)
  to allow
  all of us to do a bit less individual effort."
  said Patrick Lightbody of WebWork.
  "I would expect moving to Struts lets us focus on our families
  and day
  jobs a bit more."
</p>

<p>
  Apache projects help developers balance day jobs with
  volunteer work
  through the practice of collaborative developement.
  Decisions are made jointly by the core community,
  rather than by one or two key individuals.
  The projects are organized so that individual developers can
  focus on
  other matters for a time,
  and then return to the development community as schedules
  allow.
</p>

<p>
  Over the past few months,
  Apache Struts has more than doubled its number of active
  committers.
  With the addition of two WebWork developers,
  there are about fifteen active volunteers.
  Right now, about half of the committers are working on the
  original Struts
  Action Framework and half are working on the new Struts Shale
  Framework,
  which utilizes JavaServer Faces.
  Several volunteers are now working with both frameworks.
</p>

<p>
  The merger and other milestones on the Apache Struts roadmap
  were discussed
  in a talk at ApacheCon on Tuesday, December 13, 2005, entitled
  <a href="http://people.apache.org/~husted/apachecon-2005-action.pdf">"Struts 2006:
    An Embarrassment of Riches".</a>
  The talk will be presented by Lightbody, Husted, and Don
  Brown, another
  Struts Committer.
  The Struts Shale framework is being discussed at a second
  talk,
  presented by McClanahan, entitled "Shale: The Next Struts??"
  <a href="http://people.apache.org/~craigmcc/apachecon-2005-shale.pdf">
    Slides from the talk are available online</a>
  .
</p>
<hr/>

<h4 id="a20051214.2">14 Dec 2005 - Apache Struts offers "Shale"
  for JSF</h4>

<p>[Note: <a href="http://shale.apache.org/">
  Shale is now a top-level ASF project.</a>]
</p>

<p>
  To give JavaServer Faces developers a head start on building
  scalable
  web applications for the enterprise,
  Apache Struts now offers the Shale Framework.
  Like the original "Struts",
  Shale provides developers with a front controller,
  and several other components,
  to provide the "invisible underpinnings that hold an
  application together".
</p>

<p>
  "When JavaServer Faces arrived,"
  explains the Struts website,
  "our development community chose to 'make new friends but keep
  the old'.
  Some of us want (or need) to stick with the original
  request-based
  framework.
  Others are ready to switch to an component-based framework
  that builds on
  JavaServer Faces.
  We offer both frameworks because we have volunteers to create
  and maintain
  both frameworks."
</p>

<p>
  Shale is based on the recently standardized JavaServer Faces
  APIs,
  and focuses on adding value,
  rather than redundantly implementing features that JSF already
  provides.
  Shale will run on any compliant JSF implementation,
  including the one being developed by the Apache MyFaces
  project.
  It also includes many features that Struts users appreciate,
  such as supporting client side validation and the Tiles
  framework.
</p>

<p>
  Struts Shale was discussed by Craig McClanahan in a talk at
  ApacheCon on
  Tuesday, December 13, 2005, entitled "Shale: The Next
  Struts??".
  <a href="http://people.apache.org/~craigmcc/apachecon-2005-shale.pdf">
    Slides
    from the talk are available online</a>
  .
</p>
<hr/>

<h4 id="a20051214.1">14 Dec 2005 - Apache Struts to release
  "standalone" Tiles</h4>
<p>
  Apache Struts introduced Tiles as a integral component of its
  Struts 1.1
  release in June 2003.
  Since then, several other projects have been using Tiles,
  even though it was embedded in the Struts JAR.
  Soon, it will be much easier to use Tiles with products like
  Jakarta Velocity,
  Apache MyFaces, and Struts Shale.
</p>

<p>
  Tiles is a templating framework that can be used to create a
  common look and
  feel for a web site or application and to create reusable view
  components.
  A key aspect of Tiles is that it can be configured from a XML
  configuration file.
  A Tile definition can "extend" another definition,
  giving the component an object-oriented feel.
  Tile developers can create a base Tile (or screen layout),
  and then indicate only how other Tiles differ from the base.
  Changes made to a base Tile "cascade" to Tiles that extend
  that base.
  Significant changes can be made to the layout of a website
  just by changing a single Tile definition.
</p>
<hr/>

<h4 id="a20051125">25 Nov 2005 - Struts 1.2.8 (General
  Availability)</h4>
<p>
  The Struts team is pleased to announce the release of Struts
  1.2.8 for
  General Availability. This release is primarily to fix a Cross
  Site
  Scripting (XSS) vulnerability identified in Struts by
  www.hacktics.com and
  supersedes the earlier 1.2.7 version as the latest official
  release of
  Struts from The Apache Software Foundation.
</p>
<p>
  For more information on the XSS Vulnerability and solutions
  please see the
  following pages:
  <a href="http://wiki.apache.org/struts/StrutsXssVulnerability">
    http://wiki.apache.org/struts/StrutsXssVulnerability</a>
  and
  <a href="http://www.hacktics.com/AdvStrutsNov05.html">
    http://www.hacktics.com/AdvStrutsNov05.html</a>
</p>
<p>
  The binary, source and library distributions are available
  from the Struts
  download page:
  <a href="http://struts.apache.org/download.cgi">
    http://struts.apache.org/download.cgi</a>
</p>
<p>
  The Release Notes are available on the Struts web site at:
  <a href="http://struts.apache.org/1.2.8/userGuide/release-notes.html">
    http://struts.apache.org/1.2.8/userGuide/release-notes.html</a>
</p>
<p>
  Please check the wiki for the latest information on upgrading:
  <a href="http://wiki.apache.org/struts/StrutsUpgrade">
    http://wiki.apache.org/struts/StrutsUpgrade</a>
</p>
<hr/>

<h4 id="a20051023.2">23 Oct 2005 - New Struts Committer: Laurie
  Harper</h4>
<p>
  Please join us in welcoming Laurie Harper as a new Struts
  committer. Over
  the last few months, he has made hundreds of helpful posts to
  our lists.
  Laurie is the author of the very cool
  <a href="http://www.zotechsoftware.com/products/struts-sidebar">
    Struts Sidebar</a>
  ,
  and he has contributed several patches to Struts Classic,
  including fixes to our unit tests (a thankless job).
</p>
<p>
  Welcome, Laurie! .. We're looking forward to many more green
  bars!
</p>
<p>
  PMC vote: 7 +1 (binding), 1 +1 (non-binding)
</p>
<hr/>

<h4 id="a20051023.1">23 Oct 2005 - New Struts Committer: Sean
  Schofield</h4>
<p>
  Please join us in welcoming Sean Schofield as a Struts
  committer. Sean is an
  Apache MyFaces committer who also been been working on Struts
  Shale.
</p>
<p>
  Welcome, Sean! .. Now you can apply your own patches!
</p>
<p>
  PMC vote: 5 +1, 1 +0
</p>
<hr/>

<h4 id="a20051023.0">23 Oct 2005 - New Struts Committer: Greg
  Reddin</h4>
<p>
  Please join us in welcoming Greg Reddin as a Struts committer.
  Greg has been
  an active Struts contributor for a long time now, and has been
  helping us
  move Tiles towards a standalone subproject.
</p>
<p>
  Welcome, Greg! .. We look forward to rapid progress on
  Standalone Tiles!
</p>
<p>
  PMC vote: 6 +1
</p>
<hr/>

<h4 id="a20050821">21 Aug 2005 - New Struts Committer: Gary
  vanMatre</h4>

<p>
  Please join us in welcoming Gary vanMatre as a new Struts
  committer.
  Gary has been quite busy proposing code for the "Clay" plug-in
  on Shale,
  and has also been supportive on the dev and user mailing lists
  (for both Struts and MyFaces).
  We look forward to his energy being available to the entire
  Struts project as well.
</p>
<p>
  Welcome, Gary! .. And now you can process some of your own
  outstanding code diffs :-).
</p>
<p>
  PMC vote: 5 +1
</p>
<hr/>

<h4 id="a20050715">15 Jul 2005 - New Struts Committer: Wendy
  Smoak</h4>
<p>
  Please join me in welcoming Wendy Smoak as a new Struts
  committer.
  Wendy has been a tremendous asset to the Struts community for
  several years now,
  providing unflagging support to the user base as well as
  invaluable input and feedback to the development team.
  We look forward to her continued contributions as a committer.
</p>
<p>
  Welcome, Wendy!
</p>
<p>
  PMC vote: 7 +1, 2 +0.
</p>
<hr/>

<h4 id="a20050526">26 May 2005 - Struts 1.2.7 (General
  Availability)</h4>
<p>
  The Struts team is pleased to announce the release of Struts
  1.2.7 for
  General Availability. This release includes new
  functionality, as well as numerous fixes for bugs which were
  reported
  against the previous release, and supersedes the earlier 1.2.4
  version
  as the latest official release of Struts from The Apache
  Software
  Foundation.
</p>
<p>
  The binary, source and library distributions are available
  from the
  <a href="http://struts.apache.org/download.cgi">Struts
    download page</a>
  .
  The
  <a href="http://struts.apache.org/userGuide/release-notes.html">
    Release Notes</a>
  are available on the Struts web site.
</p>
<hr/>
<h4 id="a20050331">31 March 2005 - New Struts PMC Chair</h4>
<p>
  <a href="http://struts.apache.org/dev/volunteers.html#martinc">
    Martin Cooper</a>
  has been appointed
  <strong>Struts PMC Chair</strong>
  by the ASF Board at their
  <strong>February 2005</strong>
  meeting.
</p>
<p>
  <a href="http://struts.apache.org/dev/volunteers.html#craigmcc">
    Craig McClanahan</a>
  stepped down
  as the Struts PMC Chair in February 2005. In Craig's words "I
  will continue to be active, but it's time
  for someone else to take the administrative
  responsibilities.".
</p>
<p>
  The Struts PMC nominated Martin Cooper as their preferred
  choice for the Struts PMC
  Chair to the ASF Board which was approved unanimously. Minutes
  of the ASF Board meeting should
  be available
  <a href="http://www.apache.org/foundation/board/calendar.html">
    here</a>
  in due course.
</p>
<hr/>

<h4 id="a20050225">25 Feb 2005 - New Struts Committer: Hubert
  Rabago</h4>
<p>

  We are pleased to announce that Hubert Rabago has accepted an
  invitation to join the
  Struts development community as a committer. We were impressed
  by Hubert's sustained
  participation in both the user and dev mailing lists, where he
  has demonstrated
  knowledge and respect for the community. He has clearly put
  considerable energy into
  how Struts works, both from a code perspective as well as a
  community perspective.
</p>
<p>
  So, we've begun the formalities to get his account set up and
  such, and we look forward
  to the day when we can tell him to commit his own darn
  patches.

</p>
<hr/>

<h4 id="a20050217">17 Feb 2005 - New Struts subproject: Struts
  Flow</h4>
<p>
  The Apache Struts team is pleased to announce the adoption of
  its latest
  subproject, Struts Flow, a continuations-based approach to
  complex web
  workflows. Struts Flow orginated at the struts.sf.net project
  and has
  been formally adopted now as a Struts subproject. Struts Flow
  is a port
  of Apache Cocoon's Control Flow to Struts to allow complex
  workflow,
  like multi-form wizards, to be easily implemented using
  continuations-capable Javascript and eventually Java.
</p>
<p>
  Today, Struts is comprised of nine subprojects: Core, Taglib,
  Tiles, El,
  Faces, Scripting, Applications, Shale, and (now) Flow. Struts
  Flow is
  different from Struts Scripting/BSF as where scripting brings
  any
  BSF-supported scripting language to Struts Actions, Struts
  Flow works on
  redefining the traditional Model 2 state-driven workflow into
  simplified
  scripots whos eexecute spans multiple requests. Currently, the
  Rhino
  engine, a Javascript implementation, is used to provide
  continuations
  support, but with the maturation of
  <a href="http://jakarta.apache.org/commons/sandbox/javaflow/">
    Commans Javaflow</a>
  - a Java-based continuations implementation,
  Java will soon be supported as well.
</p>
<p>
  For more information, visit the
  <a href="http://struts.apache.org/flow/index.html">
    Struts Flow website</a>
  .
</p>
<hr/>


<h4 id="a20050123">23 Jan 2005 - New Struts subproject: Shale</h4>
<p>
  The Apache Struts team is pleased to announce the adoption of
  its latest
  subproject, Struts Shale, a JSF-based framework. The Shale
  codebase was
  initiated by Craig McClanahan in the Struts sandbox, and
  development
  traffic regarding Shale has steadily increased. As the product
  is heading
  towards an initial release, the Struts PMC felt it time to
  formally adopt
  Struts Shale as a subproject.
</p>
<p>
  Today, Struts is comprised of eight subprojects: Core, Taglib,
  Tiles, El,
  Faces, Scripting, Applications, and (now) Shale. An initiative
  is underway
  to extract the Struts Tiles code into a standalone product.
  Several Struts
  developers plan to apply to the ASF to incubate
  <a href="http://wiki.apache.org/struts/TilesTopLevel">Tiles as
    a toplevel
    project</a>
  .
</p>
<p>
  For more about the Struts Shale subproject, see the
  <a href="http://struts.apache.org/kickstart.html">Kickstart
    FAQ</a>
  .
</p>

<p class="pull-right">
  <strong>Next:</strong>
  <a href="announce-2004.html">Announcements - 2004</a>
</p>

<p class="pull-left">
  <strong>Next:</strong>
  <a href="kickstart.html">Kickstart FAQ</a>
</p>

  </section>
</article>


<footer class="container">
  <div class="col-md-12">
    Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
    All Rights Reserved.
  </div>
  <div class="col-md-12">
    Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
    trademarks of The Apache Software Foundation.
  </div>
  <div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>

<script>!function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (!d.getElementById(id)) {
    js = d.createElement(s);
    js.id = id;
    js.src = "//platform.twitter.com/widgets.js";
    fjs.parentNode.insertBefore(js, fjs);
  }
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>

<div id="fb-root"></div>

<script>(function (d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s);
  js.id = id;
  js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


</body>
</html>
