<?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.
-->

<project name="Apache MyFaces Extensions CDI">
    
    <bannerLeft>
        <name>Apache MyFaces CODI</name>
        <src>img/banners/MyFaces_logo.jpg</src>
        <href>http://myfaces.apache.org/extensions/cdi/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</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="Apache MyFaces" inherit="top">
            <item name="Overview" href="http://myfaces.apache.org/index.html"/>
            <item name="Download" href="http://myfaces.apache.org/download.html"/>
        </menu>

        <menu name="Contents" inherit="top">
            <item name="Main Site" href="http://myfaces.apache.org/extensions/cdi/index.html"/>
        </menu>

        <menu name="Documentation">
            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/EXTCDI/Index"/>
        </menu>

        <menu ref="reports"/>

        <menu name="Foundation" inherit="bottom">
          <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>
