<?php
/*******************************************************************************
 * Copyright (c) 2010 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://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *
 *******************************************************************************/

require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
$App = new App();
$Nav = new Nav();
$Menu = new Menu();
include($App->getProjectCommon());
$localVersion = false;
$pageTitle = "GEF";

// 	# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML
<div id="bigbuttons">
<h3>Primary Links</h3>
<ul>
<li><a id="buttonDashboard" href="https://projects.eclipse.org/projects/tools.gef" title="GEF@projects.eclipse.org">GEF@projects.eclipse.org<br>Bugzilla, Update-Sites, Forum, Mailing List, Hudson, ...</a></li>
<li><a id="buttonGitHub" href="https://github.com/eclipse/gef" title="GEF@GitHub">GEF@github.com<br>README, Code,<br>Pull Requests,<br> Wiki, ...</a></li>
</ul>
</div>

<div id="midcolumn">
<h3>GEF (Graphical Editing Framework)</h3>
<div id="introText">
<p>
The Eclipse <a href="http://www.eclipse.org/gef">Graphical Editing Framework (GEF)</a> provides Eclipse-integrated end-user tools in terms of a <a href="http://www.graphviz.org">Graphviz</a> authoring (<a href="https://github.com/eclipse/gef/wiki/DOT-User-Guide">DOT editor, DOT Graph view</a>) and a word cloud rendering environment (<a href="https://github.com/eclipse/gef/wiki/Cloudio-User-Guide">Tag Cloud view</a>), as well as framework components (<a href="https://github.com/eclipse/gef/wiki/Common">Common</a>, <a href="https://github.com/eclipse/gef/wiki/Geometry">Geometry</a>, <a href="https://github.com/eclipse/gef/wiki/FX">FX</a>, <a href="https://github.com/eclipse/gef/wiki/MVC">MVC</a>, <a href="https://github.com/eclipse/gef/wiki/Graph">Graph</a>, <a href="https://github.com/eclipse/gef/wiki/Layout">Layout</a>, <a href="https://github.com/eclipse/gef/wiki/Zest">Zest</a>, <a href="https://github.com/eclipse/gef/wiki/DOT">DOT</a>, and <a href="https://github.com/eclipse/gef/wiki/Cloudio">Cloudio</a>) to create rich graphical Java client applications, Eclipse-integrated or standalone. All relevant information can either be found on <a href="https://github.com/eclipse/gef#eclipse-graphical-editing-framework-gef">github.com</a> or on <a href="http://www.eclipse.org/projects/project_summary.php?projectid=tools.gef">projects.eclipse.org</a>.

<img class="displayed" width="450" src="/gef/images/GEF4_MVC_FX_UI_Example.png" alt="GEF4 MVC.FX.UI Example" border="0"/>
</div>
</div>

<div id="rightcolumn">
<div>
<h3>Current Status</h3>
<p>
GEF is participating in the annual <a href="http://wiki.eclipse.org/Simultaneous_Release">Eclipse Simultaneous Release</a>. We have finalized the Oxygen development stream and are now focussing on providing a first related bugfix/service release. See <a href="https://projects.eclipse.org/projects/tools.gef">GEF@projects.eclipse.org</a> for details.
</p>
</div>

<div id="headlines">

<h3>Release 5.0.100 Available</h3>
<p><i>Juni 27, 2018 -</i> Release <a href="https://projects.eclipse.org/projects/tools.gef/releases/5.0.100-photon">5.0.100</a> is available as part of the Photon simultaneous release, including service revisions of all GEF components. Follow the <a href="/gef/downloads/index.php">Download</a> link to obtain it. 
</p>

</div>
EOHTML;

# To define additional CSS or other pre-body headers
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/gef/style.css"/>');

# Generate the web page
$App->generatePage($theme, $Menu, null, $pageAuthor, $pageKeywords, $pageTitle, $html);

?>
