<?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 name="Apache Hivemall" xmlns="http://maven.apache.org/DECORATION/1.7.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd">

	<skin>
		<groupId>org.apache.maven.skins</groupId>
		<artifactId>maven-fluido-skin</artifactId>
		<version>1.6</version>
	</skin>

	<custom>
		<fluidoSkin>
			<topBarEnabled>true</topBarEnabled>
			<navBarStyle>navbar-inverse</navBarStyle>
			<!--
            <topBarContainerStyle>width: 80%;</topBarContainerStyle>
			<topBarIcon>
				<name>Apache Hivemall</name>
				<alt>Apache Hivemall</alt>
				<src>/images/hivemall-logo-small.png</src>
				<href>/index.html</href>
			</topBarIcon>
			-->
			<sideBarEnabled>false</sideBarEnabled>
			<sourceLineNumbersEnabled>false</sourceLineNumbersEnabled>
			<gitHub>
				<projectId>apache/incubator-hivemall</projectId>
				<ribbonOrientation>right</ribbonOrientation>
				<ribbonColor>red</ribbonColor>
			</gitHub>			
            <!-- <facebookLike /> -->
			<twitter>			    
				<user>ApacheHivemall</user>
				<showUser>true</showUser>
				<showFollowers>false</showFollowers>				
			</twitter>
			<skipGenerationDate>true</skipGenerationDate>
		</fluidoSkin>
	</custom>

	<publishDate format="yyyy-MM-dd" position="left" />
	<version position="left" />

	<poweredBy>
		<logo name="Apache Incubator" href="http://incubator.apache.org/projects/hivemall.html" img="/images/apache-incubator-logo.png" />
	</poweredBy>

	<body>

        <!--
        <head><![CDATA[
            <link rel="stylesheet" href="/css/font-awesome.css" type="text/css" />
        ]]></head>
        -->

		<menu name="Project">
			<item name="Home" href="/index.html" />
			<item name="Download" href="/download.html" />
			<item name="Licenses" href="/license.html" />
			<item name="Team" href="/team-list.html" />
			<item name="Powered By" href="/poweredby.html" />
			<item name="Incubation Status" href="http://incubator.apache.org/projects/hivemall.html" />
		</menu>
		
		<menu name="Documentation">
		  <item name="User Guide" href="/userguide/index.html" />
		  <item name="Overview" href="/overview.html" />
		  <item name="Wiki" href="https://cwiki.apache.org/confluence/display/HIVEMALL" target="_blank" />
          <item name="FAQ" href="/faq.html" />
		</menu>

		<menu name="Get Involved">
            <item name="Mailing Lists" href="/mail-lists.html" />
			<item name="Issues (Jira)" href="https://issues.apache.org/jira/browse/HIVEMALL" target="_blank" />		
            <item name="Source (Git)" href="/repository.html" />
            <item name="Travis CI" href="https://travis-ci.org/apache/incubator-hivemall" target="_blank" />
            <item name="Contributing" href="/contributing.html" />
            <item name="Release Guide" href="/release-guide.html" />
		</menu>

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

		<footer><![CDATA[
			<p>
			  <small>
                Apache Hivemall is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by <a href="http://incubator.apache.org/">the Apache Incubator</a>.
                Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, 
                and decision making process have stabilized in a manner consistent with other successful ASF projects. 
                While incubation status is not necessarily a reflection of the completeness or stability of the code, 
                it does indicate that the project has yet to be fully endorsed by the ASF.
			  </small>
			</p>
		]]></footer>

	</body>

</project>
