<?php
/**
 * Copyright (c) 2018 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - initial API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<div id="maincontent">
  <div id="midcolumn">
    <h2>What is the Eclipse Dash Project?</h2>
    <p>Project Dash is a place where the community itself can collaborate
      on tools for community awareness and collaboration in support of our
      ultimate objective of committer quality and cooperation. This is very
      much a research project as we are not entirely sure what these tools
      will be.
    </p>
    <h2>Components</h2>
    <h3>Eclipse Project Handbook</h3>
    <p>This document provides you with the information that you need to
      create a new Eclipse open source project or become a committer on an
      existing one.
    </p>
    <ul>
      <li>View <a href="/projects/handbook">the handbook</a>;</li>
      <li>Clone <a href="https://git.eclipse.org/r/#/admin/projects/dash/org.eclipse.dash.handbook">the repository</a> (via Gerrit); or</li>
      <li>Report <a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Dash&component=Handbook">an issue</a>.</li>
    </ul>
    <h3>Gently Dependency Scanner</h3>
    <p>
      <strong>Coming soon!</strong>
    </p>
    <p>This is a collection of tools for rooting through content to
      determine dependencies, legal documentation conformance, etc.
    </p>
    <h2>The Rest of The Story</h2>
    <p>
      See our <a href="http://wiki.eclipse.org/Dash_Project">wiki pages</a>
      for discussions, directions, plans, accomplishments, and all the
      rest.
    </p>
  </div>
</div>
<div id="rightcolumn">
  <div class="sideitem">
    <h6>Incubation</h6>
    <div style="text-align: center">
      <a href="/projects/what-is-incubation.php"><img
        src="/images/egg-incubation.png" alt="Incubation" /></a>
    </div>
  </div>
</div>