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.