<?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>
        <!-- The font-awesome is used by asciidoc -->
        <![CDATA[    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css">]]>
        <!-- Google Analytics -->
        <![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="https://archiva.apache.org/docs/${archivaReleaseVersion}/"/>
        <item name="Dev ${archivaCurrentDevVersion}" href="https://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="Developer Reference">
        <item name="Archiva ${archivaReleaseVersion}"
              href="https://archiva.apache.org/ref/${archivaReleaseVersion}/index.html"/>
        <item name="Archiva ${archivaCurrentDevVersion}"
              href="https://archiva.apache.org/ref/${archivaCurrentDevVersion}/index.html"/>
        <item name="Redback ${redbackCurrentDevVersion}"
              href="https://archiva.apache.org/redback/core/${redbackCurrentDevVersion}/index.html"/>
      </item>
      <item name="Redback"              href="redback/index.html"/>
      <item name="Archiva Components Project"   href="components/index.html"/>
      <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="https://www.apache.org/foundation/how-it-works.html"/>
      <item name="Foundation" href="https://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="https://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="https://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 Archiva, Archiva, Apache, the Apache feather logo, and the Apache Archiva 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>
