<!--
  ~ 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.
  -->

<!DOCTYPE html>
<html lang="en"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
    <h:outputStylesheet library="style" name="text.css"/>
    <h:outputStylesheet library="style" name="animation.css"/>
    <h:outputStylesheet library="style" name="box.css"/>
    <h:outputStylesheet library="style" name="common.css"/>

    <meta charset="utf-8"/>
    <title>Apache Myfaces Html5 Component Library Demo</title>
</h:head>
<h:body style="align:center;" class="nodecorate">
    <div style="text-align:center; float: center; padding-left:15%; padding-right:15%; padding-top:100px; position: relative;">
        <h1>Apache Myfaces Html5 Component Library Demo</h1>

        <ui:include src="/sections/generalInfo.xhtml"/>

        <ul style="line-height:30px; list-style: upper-roman; font-size: 30px;" class="fontedHeader">
            <li>
                <h:link outcome="slideView" value="Slide View Component"/>
                <sup class="newFeature">New</sup>
            </li>
            <li>
                <h:link outcome="inputTypes" value="Input Types"/>
            </li>
            <li>
                <h:link outcome="clientSideValidation"
                        value="Client Side Validation and Driving Properties with JSF Validators/Converters"/>
            </li>
            <li>
                <h:link outcome="effects" value="Effects"/>
                <sup class="newFeature">New</sup>
            </li>
            <li>
                <h:link outcome="animations" value="Animations"/>
                <sup class="newFeature">New</sup>
            </li>
            <li>
                <h:link outcome="media" value="Video, Audio and Media "/>
            </li>
            <li>
                <h:link outcome="meterAndProgress" value="Meter Progress"/>
                <sup class="newFeature">New</sup>
            </li>
            <li>
                <h:link outcome="datetime" value="Date-Time"/>
            </li>
            <li>
                <h:link outcome="suggestions" value="Suggestions"/>
            </li>
            <li>
                <h:link outcome="dnd" value="Drag and Drop"/>
            </li>
        </ul>

        <ui:include src="/sections/infoEnd.xhtml"/>
        <h5>Demo available online at : <a
                href="http://bit.ly/myfaces-html5-demo">http://bit.ly/myfaces-html5-demo</a></h5>
    </div>

</h:body>
</html>
