blob: 5ccff9c8a8335963050e734056f96f9d1d275da4 [file]
#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 =
There are several issues that should be taken into account:
# Loose coupling. Information about revisions must be represented as a separate model to minimize dependencies between document entities and revisions.
# Minimize the size of the data retrieved.
# Minimize datastore queries and simplify them.
Here is the prototypes of models:
{{{
from google.appengine.ext import db
class DocRevision(db.Model):
user = db.UserProperty() # User, who has created the revision
created = db.DateTimeProperty() # Date and time of creation
doc = db.ReferenceProperty() # Document entity reference
class Revision(db.Model):
revs = db.LinkProperty(db.Key) # List of DocRevision keys
public = db.LinkProperty(db.Key) # List of keys to public revisions
private = db.LinkProperty(db.Key) # List of keys to private revisions
}}}
This approach allows us to simplify revision management. {{{revs}}}, {{{public}}} and {{{private}}} are manged at entity creation.
= 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