<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/
?>
<!--
<div class="toolbar-menu breadcrumbs-offset">
		<div class="container">
		  <div class="row">
		    <div class="col-md-24">
		  		<ol class="breadcrumb">
						<li><i class="fa fa-star orange fa-fw"></i> <a href="//projects.eclipse.org/releases/luna">Projects</a></li>
					  <li><i class="fa fa-download orange fa-fw"></i> <a href="/downloads/packages/release/luna/sr2">Downloads</a></li>
						<li><i class="fa fa-gears orange fa-fw"></i> <a href="//wiki.eclipse.org/Eclipse_DemoCamps_Luna_2014">Demo Camps</a></li>
						<li><i class="fa fa-users orange fa-fw"></i> <a href="/donate/">Friends of Luna</a></li>
					</ol>
				</div>
		  </div>
		</div>
</div>
 -->

<div class="container" style="padding-top: 1.5em;">
  <div class="col-md-24" style="padding-left: 0;">
    <div class="alert alert-danger" role="alert">
      <a href="https://projects.eclipse.org/releases/luna">Luna</a> is
      a past version of Eclipse. Please visit our <a href="/downloads/">download</a>
      page for the latest version of Eclipse.
    </div>
  </div>
  <div class="col-md-15">
    <h1>
      Are you ready for <span class="fw-600">Java&trade; 8?</span>
    </h1>
    <p class="projects">
      Eclipse Luna includes official support for Java 8 in the <a
        href="/jdt">Java development tools</a>, <a href="/pde">Plug-in
        Development Tools</a>, <a href="/objectteams">Object Teams</a>,
      <a href="/ecf">Eclipse Communication Framework</a>, <a href="/m2e">Maven
        integration</a>, <a href="/Xtext">Xtext</a>, <a href="/xtend">Xtend</a>,
      <a href="/webtools">Web Tools Platform</a>, and <a href="/mat">Memory
        Analyzer</a>.
    </p>
    <ul class="second-level-menu list-inline clearfix">
      <li class="col-md-12"><i class="fa fa-star orange fa-fw"></i> <a
        href="//projects.eclipse.org/releases/luna">Projects</a></li>
      <li class="col-md-12"><i class="fa fa-download orange fa-fw"></i>
        <a href="/downloads/packages/release/luna/sr2">Downloads</a></li>
      <li class="col-md-12"><i class="fa fa-gears orange fa-fw"></i> <a
        href="//wiki.eclipse.org/Eclipse_DemoCamps_Luna_2014">Demo Camps</a></li>
      <li class="col-md-12"><i class="fa fa-users orange fa-fw"></i> <a
        href="/donate/">Friends of Luna</a></li>
    </ul>
    <div class="block-box">
      <h3>Highlights</h3>
      <div class="content">
        <ul class="fa-ul">
          <li><i class="fa fa-li fa-chevron-circle-right orange"></i>
            Java 8 support including language enhancements, search and
            refactoring, Quick Assist and Clean Up to migrate anonymous
            classes to lambda expressions and back, and new formatter
            options for lambdas.</li>
          <li><i class="fa fa-li fa-chevron-circle-right orange"></i>
            The Eclipse workbench provides a new dark theme which
            includes syntax highlighter settings for several programming
            languages.</li>
          <li><i class="fa fa-li fa-chevron-circle-right orange"></i> <a
            href="/paho/">Paho</a> provides open source implementations
            of open and standard messaging protocols that support
            current and emerging requirements of M2M integration with
            Web and Enterprise middleware and applications.</li>
          <li><i class="fa fa-li fa-chevron-circle-right orange"></i>
            The <a href="/ecf/">Eclipse Communication Project's (ECF)</a>
            specification-compliant implementation of OSGi Remote
            Service/Remote Service Admin has been enhanced to support
            the use of Java 8's CompletableFuture for asynchronous
            remote services.</li>
          <li><i class="fa fa-li fa-chevron-circle-right orange"></i> <a
            href="/sirius/">Sirius</a> allows architects to easily
            create their own graphical modeling workbenches by
            leveraging the Eclipse modeling technologies, including <a
            href="/emf">Eclipse Modeling Framework (EMF)</a> and <a
            href="/gmf/">Graphical Modeling Framework (GMF)</a>. <a
            href="/ecoretools/">EcoreTools</a>, the graphical modeler
            for Ecore, has been completely re-implemented based on
            Sirius.</li>
        </ul>
      </div>
    </div>
    <p>
      <a href="/home" class="btn btn-warning">Go to Eclipse.org</a>
    </p>
    <br />
    <br />
  </div>

  <div class="col-md-8 col-md-offset-1">
    <div style="text-align: center; padding: 25px 0;">
      <h3>
        Become a <span class="fw-600">Friend of Eclipse</span>
      </h3>
      <p>
        <a href="/donate" class="btn btn-warning">Donate now</a>
      </p>
    </div>
    <div class="block-box">
      <h3>
        <i class="fa fa-twitter"></i> Recent <span class="fw-700">#eclipseluna</span>
        tweets
      </h3>
      <div class="content">
        <a class="twitter-timeline"
          href="https://twitter.com/search?q=%23eclipseluna"
          data-widget-id="470988115096510464"
          data-chrome="noheader noscrollbar transparent">Tweets about
          "#eclipseluna"</a>
        <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
      </div>
    </div>
  </div>
</div>
</div>
