<!-- 
	This document is provided as a template along with some guidance for creating
	your project proposal. This is just a template. Feel free to change it as
	you see fit (add sections, remove section). We feel, however, that the
	suggestions represented in this document represent the reasonable minimum
	amount of information to move forward.
	
	Please keep the formatting in this document simple. Please do not edit 
	this document in Microsoft Word as it adds huge piles of markup that make
	it difficult to restyle.
	
	More information is available here:
	
	http://wiki.eclipse.org/Development_Resources/HOWTO/Pre-Proposal_Phase
	
	Direct any questions about this template to emo@eclipse.org
 -->

<html>
<head>

<!-- 
	Include the title here. We will parse it out of here and include it on the
	rendered webpage. Do not duplicate the title within the text of your page.
 -->

<title>VJET: JavaScript Toolkit</title>
</head>

<!-- 
	We make use of the 'classic' HTML Definition List (dl) tag to specify
	committers. I know... you haven't seen this tag in a long while...
 -->

<style>
dt {
	display: list-item;
	list-style-position: outside;
	list-style-image:
		url(/eclipse.org-common/themes/Phoenix/images/arrow.gif);
	margin-left: 16px;
}

dd {
	margin-left: 25px;
	margin-bottom: 5px;
}
</style>

<body>
	<p>
		The VJET JavaScript Toolkit (VJET) project is a proposed open source project
		under the <a
			href="http://www.eclipse.org/projects/project_summary.php?projectid=webtools">Eclipse Web Tools Platform Project (WTP)</a>.
	</p>

	<!-- 
	The communication channel must be specified. Typically, this is the
	"Proposals" forum. In general, you don't need to change this.
 -->
	<p>
		This proposal is in the Project Proposal Phase (as defined in the
		Eclipse Development Process) and is written to declare its intent and
		scope. We solicit additional participation and input from the Eclipse
		community. Please send all feedback to the <a
			href="http://www.eclipse.org/forums/eclipse.proposals">Eclipse
			Proposals</a> Forum.
	</p>

	<h2>Background</h2>

	<!-- 
	Optionally provide the background that has lead you to creating this project.
 -->

	VJET JavaScript IDE aims to provide the best and most productive
	JavaScript functional and multiple-library development tools for
	JavaScript developers for the Eclipse platform. In different JavaScript
	libraries, the typing concepts are manifested through classes, mix-ins,
	modules, interfaces, enumerations where you want to have excellent type code
	assist, validation and searching for these types. In addition, there
	are also many native JavaScript concepts where VJET solves code
	completion for advanced features such as mixed typing,
	overloaded functions, function call-backs, and typed object literals.
	VJET is currently an open source project on ebayopensource.org and the project 
	plans on moving the code to the Eclipse Foundation to work closer with the 
	Eclipse ecosystem and the projects VJET depends on and forks.

	<h2>Scope</h2>

	<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 -->

	VJET JavaScript IDE's focus is a general purpose toolkit for the
	JavaScript language which can be extended to understand different
	JavaScript libraries. VJET is meant to help JavaScript developers to
	code with simple JS code to more complex class/type libraries.


	<h2>Out of Scope</h2>

	<!-- 
	All projects must have a well-defined scope. Describe, concisely, what
	is in-scope and (optionally) what is out-of-scope. An Eclipse project
	cannot have an open-ended scope.
 -->

	While we understand there are other efforts for JavaScript editing in
	the Eclipse foundation, the VJET JavaScript IDE does not plan on
	replacing the 2 other known JavaScript projects: the JavaScript
	Development toolkit or JSDT project and Orion. We do however plan on
	collaborating with the JSDT and Orion projects.

	<h2>Description</h2>

	<!-- 
	Describe the project here. Be concise, but provide enough information that
	somebody who doesn't already know very much about your project idea or domain
	has at least a fighting chance of understanding its purpose.
 -->

	VJET JavaScript IDE is a set of Eclipse plug-ins and core foundation
	that provides a fully integrated development environment for JavaScript
	- from authoring, to execution/test, and debugging.

	<ul>
		<li>Code Assistance - based on static analysis, js type
			inferencing, js type libraries, and user defined types</li>
		<li>Code Search - provide the best support for call hierarchy,
			find declarations, type hierarchy, type searching</li>
		<li>Syntax (mandatory) and Semantic Checking (optional) - through
			a type meta model we validate the well known types/ methods / api
			usage - to help with upgrading</li>
		<li>Type Declarations using VJETDoc - Provide a simplified syntax
			for defining JS object literals, functions, and JS library class
			properties, methods in a comment</li>
		<li>Type library support using VJET VJO - ability to extend VJET
			using JavaScript</li>
		<li>Java to JavaScript type - Java to JS provides a way for Java
			types to be translated to JavaScript which can either be authored in
			Java or switched to source in JavaScript.</li>
		<li>Execution/Debugging - provide a way to run and debug directly
			in Eclipse, integration between JDT debugger and VJET debugger is
			also available.</li>
	</ul>


	<h2>Why Eclipse?</h2>

	<p>
	VJET is primarily an Eclipse plug-in and it is our long term goal to work with the well established and 
	well known foundation for managed open source projects for eclipse plug-ins to help grow the community.
	</p>
	
	<p>
	Based on community feedback we realized that we needed to work closer with the web tools project. To collaborate with 
	other JavaScript related projects. For example the browser firebug debugger that JSDT has we would like to work 
	closer so that we can both use this module.
	</p>
	
	<p>
	To help VJET project benefit from the large eclipse end-user and plugin developer community. We want to enable more developers to 
	use VJET capabilities as well as help them extend those capabilities for libraries.
	</p>
	

	<!-- 
	Answer these two questions:	What value does this project bring to the Eclipse
	community? What value do you expect to obtain from hosting your project at Eclipse?
	
	What value do you get by having your project at Eclipse over and above the value
	of hosting at Eclipse Labs?
 -->

	<h2>Initial Contribution</h2>

	<!-- 
	Projects are expected to arrive at Eclipse with existing code.
	
	Describe the existing code that will be contributed to the project. Please provide
	a couple of paragraphs describing the code with modest detail, including important
	information like code ownership (who holds the copyright?), and some consideration
	of community that exists around the code. Include a listing of third-party libraries 
	and associated licenses.
 -->

<p>The initial contribution will be from eBay software foundation. </p>
<p>The initial contribution will contain the following components:</p>

<ul>
<li>VJET core modules which do not depend on eclipse packages which act as back-end for VJET capabilities.
<ul>
<li>Jst Typespace provides indexing and queries for all JavaScript types.
<li>JST a higher level AST that understands Js types, Free form JavaScript and VJET Doc
<li>Browser SDK - Java interfaces and annotations for describing the multiple browser JavaScript apis
<li>Browser Dom syncing.
<li>JSDT forked AST parser minus Eclipse resource dependencies or JSDT inference engine.
<li>Vjo Generator - a generator for generating VJET vjo from a Jst model
<li>Java to Js generator translates Java from Eclipse JDT parser and translates the Java to JstType which is then generated into JS using Vjo Generator.
</ul>

<li>VJET eclipse - The VJET IDE for eclipse provides the front end of VJET.
<ul>
<li>DLTK extension points
<li>VJET selection engine
<li>VJET editor
<li>VJET builder to validate and sync the type-space.
<li>JST to DLTK light weight model translator.
<li>VJET debug Rhino server
<li>VJET debug integration with JDT debugger.
<li>VJET type space viewer for Eclipse
<li>VJET Script unit viewer for viewing the JstType and additional data in Script Unit
<li>VJET AST View which shows the original AST and recovered AST models.
<li>VJET help - Eclipse help, cheat-sheets.
<li>VJET WTP HTML editor integration.
<li>VJET VJETV a head-less application that can validation JavaScript syntax and semantics.
<li>VJET launching - a way to launch JavaScript applications in multiple ways.
</ul>

<li>VJET vjo - A JavaScript library for constructing types for runtime and authoring time.
<ul>
<li>vjo.ctype - class
<li>vjo.otype - object literal type
<li>vjo.mtype - mixin type
<li>vjo.itype - interface type
<li>vjo.etype - enum type
<li>vjo.ftype - function type
</ul>

<li>VJET typelibs - For getting support for many popular JavaScript libraries using vjet type meta-model
<ul>
<li>Dojo 1.6
<li>EcmaScript Ed. 5 api updates
<li>HTML Canvas 2D API
<li>jQuery 1.4
<li>jQuery Mobile 1.0 Alpha 4.1 (Requires JQuery Type lib)
<li>JSON
<li>Node.js 0.4
</ul>

<li>VJET incubator type libraries - For getting support for many popular JavaScript libraries using vjet type meta-model

<ul>
<li>Console API type library
<li>Ext JS Core
<li>Orion JS
<li>W3C performance timing api -  based on the draft w3c spec https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html
<li>PhoneGap
<li>PrototypeTL
<li>SWFObject
<li>ScriptaculousTL
</ul>

<li>VJET test libraries
<ul>
<li>Ecma Script test suite 
<li>W3c dom test suite
<li>Type Semantic testing
<li>Code assist testing
<li>Js to Java proxy tests
<li>Java to VJET vjo JS tests
</ul>

<li>VJET dependencies
<ul>
<li>test framework
<li>utilities required to run VJET JS IDE.
</ul>

</ul>



 The initial contribution will include the following modified open source dependencies:

	<ul>
		<li>a forked version of JSDT JavaScript AST parser. (EPL)
		<li>a forked version of DLTK editor toolkit (EPL)
		<li>a forked version of Rhino JavaScript runtime. (Apache) 
	</ul>

What is the extent of each fork?

<ul>
<li>For the DLTK project we added back JDT toolkit features to this project that were not part of DLTK original design goals such as typing concepts which are part of JDT project which DLTK pulled out.
<li>For the JSDT project this fork is a cherry pick. We pulled out the parser package and removed the inferencing components.
<li>For the Rhino project, we modified the runtime to handle obfuscation bugs and runtime bugs which support VJET Java and JavaScript integration. 
</ul>

What is the goal to resolve forks?

<p>
VJET has a goal of eliminating forks of eclipse.org project code and get things to a point where you could just extend the projects.  
In the long term, the project we modify we would like to work together to help them to be at the right level of extensibility so we can resolve our forks and inturn help the community.
</p>

	<h2>Legal Issues</h2>

	<!-- 
	Please describe any potential legal issues in this section. Does somebody else
	own the trademark to the project name? Is there some issue that prevents you
	from licensing the project under the Eclipse Public License? Are parts of the 
	code available under some other license? Are there any LGPL/GPL bits that you
	absolutely require?
 -->

	<h2>Committers</h2>

	<!-- 
	List any initial committers that should be provisioned along with the
	new project. Include affiliation, but do not include email addresses at
	this point.
 -->

	<p>The following individuals are proposed as initial committers to
		the project:</p>

	<dl>
		<dt>Justin Early, eBay</dt>
		<dd>Justin is a committer on the VJET ebayopensource project where he has
			made significant contributions over many years. He will be
			contribute to all VJET JS IDE functionality in this new project.</dd>
		<dt>Dr. Ashvin Radiya, Avantsoft</dt>
		<dd>Ashvin and his team has provided significant contributions to the
			existing code base. They will contribute extensions to VJET functionality in
			this new project.</dd>
	</dl>

	<p>We welcome additional committers and contributions.</p>

	<!-- 
	Describe any initial contributions of code that will be brought to the 
	project. If there is no existing code, just remove this section.
 -->

	<h2>Mentors</h2>

	<!-- 
	New Eclipse projects require a minimum of two mentors from the Architecture
	Council. You need to identify two mentors before the project is created. The
	proposal can be posted before this section is filled in (it's a little easier
	to find a mentor when the proposal itself is public).
 -->

	<p>The following Architecture Council members will mentor this
		project:</p>

	<ul>
		<li>David Carver</li>
		<li>Chris Aniszczyk</li>
	</ul>

	<h2>Interested Parties</h2>

	<!-- 
	Provide a list of individuals, organisations, companies, and other Eclipse
	projects that are interested in this project. This list will provide some
	insight into who your project's community will ultimately include. Where
	possible, include affiliations. Do not include email addresses.
 -->

	<p>The following individuals, organizations, companies and projects
		have expressed interest in this project:</p>

	<ul>
		<li>Luca Candela, Sencha</li>
		<li>Simon Kaegi, IBM</li>
	</ul>

	<h2>Project Scheduling</h2>

	<!-- 
	Describe, in rough terms, what the basic scheduling of the project will
	be. You might, for example, include an indication of when an initial contribution
	should be expected, when your first build will be ready, etc. Exact
	dates are not required.
 -->
 
 

	<h2>Changes to this Document</h2>

	<!-- 
	List any changes that have occurred in the document here.
	You only need to document changes that have occurred after the document
	has been posted live for the community to view and comment.
 -->

	<table>
		<tr>
			<th>Date</th>
			<th>Change</th>
		</tr>
		<tr>
			<td>22-May-2012</td>
			<td>Document created</td>
		</tr>
		<tr>
			<td>31-May-2012</td>
			<td>Updated initial contribution section, mentors section</td>
		</tr>
		<tr>
			<td>11-June-2012</td>
			<td>Updated sections interested parties, background, why eclipse, initial contribution</td>
		</tr>
	</table>
</body>
</html>