- From: Olli Pettay <Olli.Pettay@helsinki.fi>
- Date: Thu, 05 Jul 2012 03:00:52 +0300
- To: Ryosuke Niwa <rniwa@webkit.org>
- CC: public-webapps <public-webapps@w3.org>, Ojan Vafai <ojan@chromium.org>, Jonas Sicking <jonas@sicking.cc>, Ehsan Akhgari <ehsan@mozilla.com>, Erik Arvidsson <arv@chromium.org>, Adam Barth <w3c@adambarth.com>, Sukolsak Sakshuwong <sukolsak@gmail.com>, Aryeh Gregor <ayg@aryeh.name>
On 07/05/2012 01:38 AM, Ryosuke Niwa wrote: > Hi all, > > Sukolsak has been implementing the Undo Manager API in WebKit but the fact undoManager.transact() takes a pure JS object with callback functions is > making it very challenging. The problem is that this object needs to be kept alive by either JS reference or DOM but doesn't have a backing C++ > object. Also, as far as we've looked, there are no other specification that uses the same mechanism. I don't understand what is difficult. How is that any different to target.addEventListener("foo", { handleEvent: function() {}}) > > Since I want to make the API consistent with the rest of the platform and the implementation maintainable in WebKit, I propose the following changes: > > * Re-introduce DOMTransaction interface so that scripts can instantiate new DOMTransaction(). > * Introduce AutomaticDOMTransaction that inherits from DOMTransaction and has a constructor that takes two arguments: a function and an optional label > > After this change, authors can write: > scope.undoManager.transact(new AutomaticDOMTransaction{function () { > scope.appendChild("foo"); > }, 'append "foo"')); Looks somewhat odd. DOMTransaction would be just a container for a callback? > > instead of: > > scope.undoManager.transact({executeAutomatic: function () { > scope.appendChild("foo"); > }, label: 'append "foo"'}); > > And > > document.undoManager.transact(new DOMTransaction({function () { > // Draw a line on canvas > }, function () { > // Undraw a line > }, function () { this.execute(); }, > 'Draw a line' > })); > > instead of: > > document.undoManager.transact({ execute: function () { > // Draw a line on canvas > }, undo: function () { > // Undraw a line > }, redo: function () { this.execute(); }, > label: 'Draw a line' > }); > > Best, > Ryosuke Niwa > Software Engineer > Google Inc. >
Received on Thursday, 5 July 2012 00:01:39 UTC