- From: Ryosuke Niwa <rniwa@webkit.org>
- Date: Wed, 4 Jul 2012 17:39:43 -0700
- To: olli@pettay.fi
- Cc: Erik Arvidsson <arv@chromium.org>, Jonas Sicking <jonas@sicking.cc>, Ehsan Akhgari <ehsan@mozilla.com>, Aryeh Gregor <ayg@aryeh.name>, Adam Barth <w3c@adambarth.com>, public-webapps <public-webapps@w3.org>, Ojan Vafai <ojan@chromium.org>, Sukolsak Sakshuwong <sukolsak@gmail.com>
- Message-ID: <CABNRm61DC_vgtgce4QXJK9AF5wfbnFGgg91mAqU9SpK7vgz4yg@mail.gmail.com>
On Jul 4, 2012 5:26 PM, "Olli Pettay" <Olli.Pettay@helsinki.fi> wrote:
>
> On 07/05/2012 03:11 AM, Ryosuke Niwa wrote:
>
>> On Wed, Jul 4, 2012 at 5:00 PM, Olli Pettay <Olli.Pettay@helsinki.fi<mailto:
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.
>
>
> So, it is very much implementation detail.
> (And I still don't understand how a callback can be so hard in this case.
There are plenty of different kinds of callback objects.
> new MutationObserver(some_callback_function_object) )
Yes. It's an implementation feedback. The mutation observer callback is
implemented as a special event handler in WebKit.
>> 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
matter.
>
>
> That could make the code more consistent with rest of the platform, but
the API would become harder to use.
Why? What's harder in the new syntax?
- Ryosuke
Received on Thursday, 5 July 2012 00:40:11 UTC