[whatwg] Fixing undo on the Web - UndoManager and Transaction
Ryosuke Niwa
rniwa at webkit.org
Thu Sep 1 11:36:21 PDT 2011
On Thu, Sep 1, 2011 at 6:26 AM, Alex Vincent <ajvincent at gmail.com> wrote:
>
> 1. I think we should start writing a test suite, for two reasons. First,
> to get some idea how this works in practice, with a reference
> implementation
> in JavaScript. That will help us iron out some of the API debates we've
> been having (reapply, specifically). Second, a test suite can help all
> the
> implementers implement the same thing.
>
Implementing it in JavaScript will be somewhat challenging because
managed/automatic transactions need to keep track of all changes made by a
function it's calling. It'll require a heavy use of mutation events (and
they're going away!)
myEditor.undoManager.transact({apply: function () {
> insert(document.createTextNode('o')) }, label: 'First transaction'});
> myEditor.undoManager.transact({apply: function () {
> insert(document.createTextNode('k')) }, label: 'Merging transaction'},
> true);
>
> - User calls myEditor.undoManager.item(0).label. Which label does he
> get back? For that matter, which transaction does he get back, and
> which
> transaction is forever hidden from him?
>
You get an array (should make it immutable) that contains both transactions.
So you get undefined. But this behavior is stated in my working draft:
http://rniwa.com/editing/undomanager.html#transaction-group
I agree I need to refine the definition of item.
4. Did we talk about a maxlength for the UndoManager? If we allow an
> infinite number of transactions in an UndoManager, a lot of memory could
> get
> eaten up. I'd say the page author should be able to limit the number of
> transactions kept in memory at his or her discretion.
>
I was thinking that we should just put a fixed limit on how many
transactions can be stored, and give no guarantee beyond that point. I
don't think authors should be able to control that limit because that'll
hinder user agent's ability to do so.
5. Section 2.1 is Definitions, but several of the definitions are
> scattered around the specification (Transaction, for example), and do not
> start with basic definitions. I think this section needs to be
> rewritten,
> starting with the most basic definitions. (Define a transaction. Define
> a
> transaction group based on the definition of a transaction. Define an
> undo
> stack based on the definitions of a transaction group and a transaction,
> and
> so on.)
>
That might be a good idea. Will try.
6. I'm wondering a bit about localization of the Transaction object's
> label. It's probably an unnecessary concern (this specification
> shouldn't
> go too deep), but I'm just wondering how both scripted and native
> transactions will detect the language of the webpage and generate
> locale-specific labels.
I think that's fine. As far as I know, there are no major user agents that
let can change the current locate in the middle of a session. And labels
should be localized to user agent's locate since it'll be shown as a part of
its native UI.
- Ryosuke
More information about the whatwg
mailing list