<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ 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>
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.6</version>
  </skin>

<!-- do not use fluido ga pattern use analytics.js instead-->
  <googleAnalyticsAccountId></googleAnalyticsAccountId>
  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
      <copyrightStyle>pull-right</copyrightStyle>
      <skipGenerationDate>true</skipGenerationDate>
      <googleSearch>
        <sitesearch>${project.url}</sitesearch>
      </googleSearch>
      <!-- break exec /www/www.apache.org/dyn/mirrors/mirrors.cgi -->
      <!--twitter>
        <user>archiva</user>
        <showUser>true</showUser>
        <showFollowers>false</showFollowers>
      </twitter-->
      <ohloh>
        <projectId>6670</projectId>
        <widget>thin-badge</widget>
      </ohloh>
      <gitHub>
        <projectId>apache/archiva</projectId>
        <ribbonOrientation>right</ribbonOrientation>
        <ribbonColor>gray</ribbonColor>
      </gitHub>

    </fluidoSkin>

  </custom>
  <body>
      <head>
        <![CDATA[
        <!-- Google Analytics -->
        <script src='//www.google-analytics.com/analytics.js'></script>
        <script>
          window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;

          ga('create', 'UA-140879-5', 'auto');
          ga('send', 'pageview');

        </script>
        ]]>
    </head>
    <menu name="Introduction">
      <item name="About"                href="/index.html" />
      <item name="Downloads"            href="/download.html" />
      <item name="Versions"             href="/versions.html"/>
      <item name="Mailing Lists"        href="/mailing-lists.html"/>
      <item name="Security"             href="/security.html"/>
      <item name="Documentation" href="">
        <item name="Release ${archivaReleaseVersion}" href="http://archiva.apache.org/docs/${archivaReleaseVersion}/"/>
        <!--
        <item name="Preview ${archivaLastSerieVersion}" href="http://archiva.apache.org/docs/${archivaLastSerieVersion}/"/>
        -->
        <item name="Dev ${archivaCurrentDevVersion}" href="http://archiva.apache.org/docs/${archivaCurrentDevVersion}/"/>
      </item>
    </menu>

    <menu name="Development">
      <item name="Build Apache Archiva" href="developers/building.html"/>
      <item name="Get involved"         href="/get-involved.html"/>
      <item name="How we do things"     href="developers/how-we-do-things.html"/>
      <item name="Redback"              href="redback"/>
      <item name="Archiva Components"   href="components"/>
      <item name="Javascript application Architecture" href="/jsui/index.html">
        <item name="Rest service"          href="/jsui/rest.html"/>
        <item name="JS Template loading"   href="/jsui/template-loading.html"/>
        <item name="i18n"                  href="/jsui/i18n.html"/>
        <item name="Knockout Binding"      href="/jsui/knockout-binding.html"/>
        <item name="Generic Javascipts"    href="/jsui/generics-js.html"/>
      </item>
      <item name="Releasing"            href="developers/releasing.html"/>
      <item name="Site Publish"         href="developers/publishing-site.html"/>
    </menu>

    <menu name="ASF" inherit="bottom">
      <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/>
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>

    <breadcrumbs>
      <item name="Apache" href="https://www.apache.org" />
      <item name="Archiva" href="/" />
    </breadcrumbs>

    <footer>
      <![CDATA[
      <div class="row pull-left">Apache ${project.name}, ${project.name}, Apache, the Apache feather logo, and the Apache ${project.name} project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row">
        &nbsp;
      </div>
      <div class="row">
      <p>
        <a href="${project.url}privacy-policy.html">Privacy Policy</a>
        </p>
      </div>
      ]]>
    </footer>
  </body>
</project>
