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

Re: [UndoManager] Re-introduce DOMTransaction interface?

From: Ryosuke Niwa <rniwa@webkit.org>
Date: Wed, 4 Jul 2012 17:11:51 -0700
Message-ID: <CABNRm63pSXz9A1t5j0OeJNQ8m68M6Ec1SPb7pMRH1p86bp6a6A@mail.gmail.com>
To: olli@pettay.fi
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 Wed, Jul 4, 2012 at 5:00 PM, Olli Pettay <Olli.Pettay@helsinki.fi> wrote:

> 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() {}})

It will be very similar to that except this object is going to have 3
callbacks instead of one.

The problem is that the event listener is a very special object in WebKit
for which we have a lot of custom binding code. We don't want to implement
a similar behavior for the DOM transaction because it's very error prone.

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?

Right. If we wanted, we can make DOMTransaction an event target and
implement execute, undo, & redo as event listeners to further simplify the

- Ryosuke
Received on Thursday, 5 July 2012 00:12:38 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 18:13:37 UTC