[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