W3C home > Mailing lists > Public > public-webapps@w3.org > July to September 2011

Re: Mutation events replacement

From: Dave Raggett <dsr@w3.org>
Date: Mon, 25 Jul 2011 10:49:08 +0100
Message-ID: <4E2D3C14.303@w3.org>
To: Aryeh Gregor <Simetrical+w3c@gmail.com>
CC: Boris Zbarsky <bzbarsky@mit.edu>, Jonas Sicking <jonas@sicking.cc>, Ryosuke Niwa <rniwa@webkit.org>, David Flanagan <dflanagan@mozilla.com>, public-webapps@w3.org
On 24/07/11 16:18, Aryeh Gregor wrote:
> On Fri, Jul 22, 2011 at 6:58 PM, Jonas Sicking <jonas@sicking.cc> wrote:
>> We should have much richer events to aid with rich text editing. Using
>> mutation notifications for this is will not create a good experience
>> for the page author.
> Agreed.  I'd be really interested in specific use-cases if people are
> using mutation events for editing here.

I am interested in web-based collaboration, e.g. for distributed 
meetings, something we do a lot at W3C. We currently rely on IRC plus a 
bunch of scripts to support meeting management, such as the agenda, 
actions, resolutions, and generating an HTML version of the minutes from 
the IRC record.  My aim is to replace the current IRC system with 
something much better that runs in the browser.  An associated use case 
is to allow people to edit slide presentations as they are being shown, 
where the slides are expressed in HTML via a microformat (HTML Slidy).

I am using mutation events with content-editable plus clean up 
operations to work around variations in how different browsers treat 
Enter, Backspace and Delete.  Higher level editing actions that are 
application specific (e.g. insert slide or next agendum) can be 
serialized as such instead of serializing the constituent mutations. 
Cut, copy, and paste, and drag and drop operations are further 
challenges to ensuring interoperability.  I keep a local  undo/redo 
queue for mutations, and frequently serialize the changes for exchange 
with other clients via a lightweight websockets server module. One 
client acts as the senior editor, automatically reviewing edits proposed 
by other clients (junior editors). This role is swapped around 
automatically or manually. The senior editor serializes the official 
changes as a sequence of updates for the trunk version of the document. 
Junior editors need to be able to revert their DOM to the latest trunk 
version, and reapply their local (proposed changes) after adjusting them 
for the changes since the last common version (a 3 way merge). Ditto for 
their undo/redo queue. Likewise, the senior editor needs to adjust the 
proposed changes to an earlier trunk version to align with subsequent 
trunk versions.  This probably sounds complicated, but it works, and the 
performance is pretty good!

-- 
  Dave Raggett<dsr@w3.org>  http://www.w3.org/People/Raggett
Received on Monday, 25 July 2011 09:49:46 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:46 GMT