<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 * 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.
-->

<!--
  - Note regarding relative and absolute urls: each pom file has an optional
  - <url> element. If specified, then any absolute url in this file which
  - starts with the project's url is converted into a relative url. Other
  - urls are left unaltered.
  -->
<project name="Html5 Support for Apache MyFaces 2">
    <bannerLeft>
        <name>Apache MyFaces</name>
        <src>img/banners/MyFaces_logo.jpg</src>
        <href>http://myfaces.apache.org/index.html</href>
    </bannerLeft>
    
    <bannerRight>
        <name>Apache Banner</name>
        <src>img/banners/apache_banner.png</src>
        <href>http://www.apache.org</href>
    </bannerRight>
    
    <publishDate format="dd MMM yyyy" />
    
    <skin>
      	<groupId>org.apache.myfaces.maven</groupId>
      	<artifactId>myfaces-site-skin</artifactId>
      	<version>1-SNAPSHOT</version>
    </skin>
    
    <body>
        <links>
            <item name="Apache"         href="http://www.apache.org/"/>
            <item name="MyFaces"        href="http://myfaces.apache.org/index.html"/>
        </links>

        <menu name="Html5 Support for Apache MyFaces" inherit="top">
            <item name="Overview"       href="/index.html"/>
            <item name="Building"       href="/building.html"/>
            <item name="Features"       href="/features.html"/>
            <item name="Showcase"       href="http://html5-comp-lib-showcase-snapshot.latest.aliok-com-tr-test.appspot.com/index.jsf"/>
        </menu>

        <menu name="Documentation" inherit="top">
            <item name="Getting Started"        href="/gettingstarted.html"/>
            <item name="Facelets Tag Docs"      href="../../html5-comp-lib-core/target/site/tlddoc-facelets/index.html"/>
        </menu>

        <menu name="Project Documentation" inherit="top">
            <item name="Mailing Lists"          href="/mail-lists.html"/>
            <item name="Project License"        href="/license.html"/>
            <item name="Project Summary"        href="/project-summary.html"/>
            <item name="Source Repository"      href="/source-repository.html"/>
        </menu>

        <menu name="Foundation" inherit="top">
            <item name="ASF"            href="http://www.apache.org/" />
            <item name="Sponsorship"    href="http://www.apache.org/foundation/sponsorship.html" />
            <item name="Thanks"         href="http://www.apache.org/foundation/thanks.html" />
        </menu>
    </body>
</project>
