#summary Tracks progress of the new document editor project.

<wiki:toc max_depth="2"/>

= Introduction =
The goal of the project is to develop and/or deploy new infrastructure for document editing in Melange. This infrastructure should provide revision control of the documents, displaying diffs between revisions, storing documents in HTML and markdown. MarkItUp! can be deployed as an optional editor.

= Revision control architecture =
I'm going to implement revision control as a separate model. Let's call it {{{Revision}}}.
Entities of this model will contain meta-information about revisions of the current document. The prototype may look as follows:
{{{
class Revision(db.Model):
  revs = db.LinkProperty(db.Key)
  public = db.LinkProperty(db.Key)
  private = db.LinkProperty(db.Key)
}}}

{{{revs}}} is a linked list of entities' keys. {{{public}}} and {{{private}}} is a linked list of keys to public and private revisions. Creation date and user info are stored as properties of the documents. The approach with lists allows us to manage revision history at revision creation. And helps to avoid redundant datastore queries.

= Project timeline =
== Week 1 (24 May - 30 May) ==
 # Dig into GAE datastore (read [http://oreilly.com/catalog/9780596522735 "Programming Google App Engine"], review google.appengine.ext.db, play with the datastore)
 # Deploy test Melange instance to appspot.com
 # Design revision control architecture

== Week 2 (31 May - 6 June) ==
 # Implement revision control
  * Implement revision control models
  * Hack out views to support revisions

== Week 3 (7 June - 13 June) ==
 # Finish revision control
  * Implement support for public and private revisions
  * Implement revision rollback
  * Fix problems

== Week 4 (14 June - 20 June) ==
 # Work on diff engine
  * Review existing solutions
  * Try [http://www.aaronsw.com/2002/diff/ HTML diff] on existing infrastructure

== Week 5 (21 June - 27 June) ==
 # Hack HTML diff for intelligent diff computation

== Week 6 (28 June - 4 July) ==
 # Refactor views to support HTML diffs

== Week 7 (5 July - 11 July) ==
 # Test diffs with revision control
 # Fix issues
 # Release full-featured revision control before mid-term evaluations