Zaphod - a multi-user text editor

To do list

This is the list of things still to do, or already done.

Next steps

  1. Implement change merging to reduce bandwidth on Perl side
  2. Merge Changes tests for Perl and JS side
  3. The local cursor position at the time of a request needs to be saved, preferrably as a Change so that inserting the returned actions becomes feasible.
  4. Inserting a bookmark needs to be a Change too, even if it's never transmitted to the server. This makes re-applying stuff easier.
  5. Actually adapt the local, unsubmitted changes when we receive new remote changes
  6. There needs to be a split between foreign actions and the filtered, accepted local actions
  7. Bookmarks need to be affected by local and remote changes
  8. Create Positionable (JS) of which Zaphod.User and Zaphod.Bookmark inherit. It's more a "role", but inheritance is well enough.
  9. Move User to Zaphod.User, the same for the other classes
  10. Make cursor-up and cursor-down remember the last column even if clamped to a smaller column on the current line
  11. Somehow / somewhere in JS change_semaphore gets stuck from time to time. Try to create a test that replays the problem.
  12. Make session list UTF-8 aware as well (+headers)
  13. Add external bookmarks (that include the state+offset so they adapt to changes)
  14. Add internal bookmarks (client side?)
  15. Feature: POST-as-save to foreign URL, premium service
  16. Feature: DAV-PUT-as-save to foreign URL, premium service
  17. Feature: Download-as-file
  18. Editing the session name should be done by a click onto the session name itself
  19. Make session name XSS safe
  20. Steal username sanitizing from PM to prevent tye  or XSS attacks
  21. Make paste not only paste over the whole document, also allow insert-paste
  22. Implement session ownership for naming, kicking, r/w access
  23. Implement user kicking / user banning
  24. Implement read/write access
  25. Make a session stringify to its name (Perl)
  26. Clean up the interaction between document paste and logout
  27. Feature: Generic hotlink generator for GET queries/single-sign-on form to create any session from scratch
  28. Feature: Hotlinks that log you in to a session from foreign sites
  29. Feature: Hotlinks that post a document from foreign sites and redirect to the newly created session
  30. Implement "new session as the user I'm logged in" if logged in
  31. Implement line numbering
  32. Expand all absolute URLs to use an optional prefix (Perl / TT)
  33. Eliminate document_key from all API calls because the key is implicit by the /session/(:key)/ URL to which the RPC is made
  34. Somewhere, the lock gets stuck :( The new, lo-tek semaphore remedies that, in some cases only
  35. Make the offset map an object/class
  36. Add local redo/undo capability by keeping the (local) actions in a log to apply and revert them
  37. Merge all different results (users, document, changes) into one structure with different fields
  38. Create session persistence by writing every change to a local file.
  39. Find AJAX framework maintained by someone else to use instead of hand-rolling all the stuff
  40. Find JS library maintained by someone else to use instead of hand-rolling all the stuff
  41. Fix the CSS so IE6 displays the cursor in a nice way
  42. The Great Renaming - move the JS methods to JS standards
  43. Add correct noncaching headers for the JS
  44. Consider automagically creating the JS actions from the Perl code
  45. Think about handling of CTRL and ALT keys (now ignored instead of used). Switching the keybinding tabs resp. having an encoding scheme for keystrokes and key combos will be necessary then.
  46. Add current version of frontend/backend to the output/display
  47. Find out why sometimes with two cursors on one line only one gets displayed (JS / CSS?)
  48. Add separate "view/spectator" mode where no editing takes place (JS)
  49. Implement IME handling so Chinese and Cuneiform characters can be entered
  50. Follow different approach with a native textentry widget that the cursors get painted over
  51. Add different CSS styles to demonstrate the layout power
  52. Add author attribution (maybe via text foreground colour)
  53. Add select/cut/copy/paste of text
  54. Add "callout balloons" that allow out of band annotation of text
  55. Implement key combinations and different editor modes via a trie-based approach
  56. Add chat for direct communication (maybe as IRC gateway)
  57. Add hiveminder integration
  58. Maybe some day, users(), connect_client() and disconnect_client() should become part of a "multiuser Ajax framework". Like Jabber, irc, or ICQ.
  59. Implement intra-document hyperlinks for pasteable outside navigation
  60. Feature: Implement bookmarks as intra-document hyperlinks
  61. Bookmarks/permalinks should include the username and position
  62. Pastelinks need to be different from bookmarks
  63. Feature: Parse source code for XXX and create a "To do" list with bookmarks from it - this could be a bot with its own communication channel into a DIV or a client-side JS script. In both situations, an API for adding bookmarks and their descriptions is needed.
  64. Add code to take over "any" TEXTAREA box on a page

Known problems

  1. Other users' cursors don't get moved correctly

Local features to be implemented


Implemented stuff

back to the editor