To do list
This is the list of things still to do, or already done.
Next steps
- Implement change merging to reduce bandwidth on Perl side
- Merge Changes tests for Perl and JS side
- 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.
- Inserting a bookmark needs to be a Change too,
even if it's never transmitted to the server. This makes
re-applying stuff easier.
- Actually adapt the local, unsubmitted changes when we receive
new remote changes
- There needs to be a split between foreign actions and
the filtered, accepted local actions
- Bookmarks need to be affected by local and remote changes
- Create Positionable (JS) of which Zaphod.User
and Zaphod.Bookmark inherit. It's more a "role",
but inheritance is well enough.
- Move User to Zaphod.User, the same for the other classes
- Make cursor-up and cursor-down remember the
last column even if clamped to a smaller column on the current line
- Somehow / somewhere in JS change_semaphore gets stuck
from time to time. Try to create a test that replays the problem.
- Make session list UTF-8 aware as well (+headers)
- Add external bookmarks (that include the state+offset so they adapt to changes)
- Add internal bookmarks (client side?)
- Feature: POST-as-save to foreign URL, premium service
- Feature: DAV-PUT-as-save to foreign URL, premium service
- Feature: Download-as-file
- Editing the session name should be done by
a click onto the session name itself
- Make session name XSS safe
- Steal username sanitizing from PM to prevent tye
or XSS attacks
- Make paste not only paste over the whole document, also allow insert-paste
- Implement session ownership for naming, kicking, r/w access
- Implement user kicking / user banning
- Implement read/write access
- Make a session stringify to its name (Perl)
- Clean up the interaction between document paste and logout
- Feature: Generic hotlink generator for GET queries/single-sign-on form
to create any session from scratch
- Feature: Hotlinks that log you in to a session from foreign sites
- Feature: Hotlinks that post a document from foreign sites and redirect
to the newly created session
- Implement "new session as the user I'm logged in" if logged in
- Implement line numbering
- Expand all absolute URLs to use an optional prefix (Perl / TT)
- Eliminate document_key from all API calls because
the key is implicit by the /session/(:key)/ URL
to which the RPC is made
- Somewhere, the lock gets stuck :( The new, lo-tek semaphore
remedies that, in some cases only
- Make the offset map an object/class
- Add local redo/undo capability by keeping the (local)
actions in a log to apply and revert them
- Merge all different results (users, document, changes) into one
structure with different fields
- Create session persistence by writing every change to a local file.
- Find AJAX framework maintained by someone else to use instead of hand-rolling
all the stuff
- Find JS library maintained by someone else to use instead of
hand-rolling all the stuff
- Fix the CSS so IE6 displays the cursor in a nice way
- The Great Renaming - move the JS methods to JS standards
- Add correct noncaching headers for the JS
- Consider automagically creating the JS actions from the Perl code
- 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.
- Add current version of frontend/backend to the output/display
- Find out why sometimes with two cursors on one line only one gets displayed (JS / CSS?)
- Add separate "view/spectator" mode where no editing takes place (JS)
- Implement IME handling so Chinese and Cuneiform characters can be entered
- Follow different approach with a native textentry widget that the cursors get painted over
- Add different CSS styles to demonstrate the layout power
- Add author attribution (maybe via text foreground colour)
- Add select/cut/copy/paste of text
- Add "callout balloons" that allow out of band annotation of text
- Implement key combinations and different editor modes via a trie-based approach
- Add chat for direct communication (maybe as IRC gateway)
- Add hiveminder integration
- Maybe some day, users(), connect_client() and disconnect_client()
should become part of a "multiuser Ajax framework".
Like Jabber, irc, or ICQ.
- Implement intra-document hyperlinks for pasteable outside navigation
- Feature: Implement bookmarks as intra-document hyperlinks
- Bookmarks/permalinks should include the username and position
- Pastelinks need to be different from bookmarks
- 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.
- Add code to take over "any" TEXTAREA box on a page
Known problems
- Other users' cursors don't get moved correctly
Local features to be implemented
Implemented stuff
- Make the text session permanent by directly manipulating an on-disk file
(implemented as auto-save every 500 page requests)
- Setting the session name is broken
- Implement change merging to reduce bandwidth on JS side
- Prevent the cursor from going to negative offsets, client-
and server-side
- Added a test suite for parts of the Javascript stuff. That way,
the JS code becomes stable.
- Make cursor-up and cursor-down behave sanely again
- utf handling: Handle http://localhost:8080/session/TCirLYtBhCFQHbE6z6byCg?rs=connect_client&rsargs=TCirLYtBhCFQHbE6z6byCg&rsargs=%E4%F6%FC&rsargs=0&rsdummy=1159888012296
well
- Handle charsets better (so that at least umlauts work). Maybe this needs
a force to utf-8 everywhere. Indeed: All "interesting" parameters
are forced to utf-8 on input and STDOUT is put into
:utf8 mode too.
- List the active user names in the session list
- Implement a way to automatically hide UI elements when the user
is logged out (JS, visible_items)
- API addition: A session has a settable name
- Implement a document/session name
- Implement user-paste (JS), also see umlaut/charset handling
- Implement "paste code" mode
- Implement document-paste, at least for new generated documents (JS); implemented for all kinds
- Allow more than one edit session
- If a user times out, the cursor needs to be eliminated (JS)
- Gracefully handle timed-out sessions that still reconnect by redirecting them to login
- Prevent multiple users logging on with the same visual
- Time-out users (Perl)
- Add 3 more colours so up to 6 users get colours (CSS)
- Fixed: Adjactent whitespace doesn't display
- Implement delete_right (JS, Perl)
- Fixed: Mouse click position when the window is scrolled (JS)
- Move cursor by mouse (implemented)
- Move cursor by keyboard (implemented, even with a "keymap")
- Insert text
- Delete text
- Handle completely whitespace lines correctly (CSS)
- Redo the communication protocol to be diff-style. (JS,Perl)
- Handle completely empty lines correctly (JS)
- Fix embedded HTML entities by replacing the use of .innerHTML by real node creation.
- Fix the "logout" button disappearing and appearing out of place. Now there is more CSS
so one can re-style the location/appearance of the own user and the other users.
- Fix MSIE compatibility by finding the equivalent to document.addEvent Listener("keypress ", keyHandler, true);
- Separate userid and user colour
- Inserted newlines don't come back. Most likely this is because of prune_journal.
- Clean up users list when a user logs out (shrink) (JS)
- Fixed click on column zero
- Redid JS part of the RPC stuff to be more concise (even though it is generated code)
- Investigate how UTF-8 chars (or whatever else) can be transferred/displayed. Encoding these
as HTML entities might be the correct way. Unicode constants seem part of what is needed,
but on first display, they don't display correctly, only after a change to the line.
Maybe the text-encoding is sent wrong on the first connect? Yep. If you have a central
way of returning data to the user, use that way (and no other way).
- Fixed flicker while entering text. Reduce the flicker by updating the content of
the lines instead of wiping the lines and then recreating them (JS). After all, it was
too slow just changing the content - wiping and then recreating was faster. But simply
keeping the content if it hadn't changed was even faster than that.
- Fixed encoding bug in Sajax.pm. Now "+" characters get transferred correctly and render
- Add separate editor window, so scrolling problems get hidden (JS) (obsoleted)
- Fixed MSIE 6 crashes after login - normalize() makes IE6 crash.
- Added new style of keyboard handling that will make a vi mode hell
to implement, but which now allows keyboard entry on IE6 as well.
back to the editor