<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~    http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->


<ui:composition template="/sections/sectionTemplate.xhtml"
      xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:hx="http://myfaces.apache.org/html5/html"
      xmlns:fx="http://myfaces.apache.org/html5/core"
      xmlns:sh="http://java.sun.com/jsf/composite/components/sh"
      xmlns:bs="http://java.sun.com/jsf/composite/components/browserSupport">

<ui:define name="sectionContent">
    <h:outputStylesheet>
        div#endInfoSection a{
            color: blue;    
        }
    </h:outputStylesheet>
    <div id="endInfoSection" style="text-align:center;">
        <h3>
            <a href="http://myfaces.apache.org/">http://myfaces.apache.org/</a>
        </h3>
        <h3>
            Questions ->
            <a href="http://myfaces.apache.org/mail-lists.html">MyFaces User Mail List</a>
            and
            <a href="http://twitter.com/aliok_tr">@aliok_tr</a> 
        </h3>
        <h3>
            Demo source code : <a href="https://github.com/aliok/javaone-myfaces-html5-demo">https://github.com/aliok/javaone-myfaces-html5-demo</a>
        </h3>
    </div>

</ui:define>
</ui:composition>
