[whatwg] Fixing undo on the Web - UndoManager and Transaction
Alex Vincent
ajvincent at gmail.com
Thu Sep 1 06:26:22 PDT 2011
There's too much good stuff going on, both in the specs, and in my own
project. :-) I noticed Ehsan's blog post about editing on the Web,
http://ehsanakhgari.org/blog/2011-08-31/future-editing-web . I'm groaning
because I haven't been involved! :-p
A few thoughts on my mind:
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.
2. I think I'm not going to fully understand this spec until I at least
try my hand at a test suite implementation, in Jasmine. :-)
3. I just spotted a flaw in our API's. Imagine the following:
-
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?
- Perhaps for this reason, .item() should return a readonly
Transaction[], representing the transaction group.
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.
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.)
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'd like a paragraph on that, at least, even if
it's just to say localizations are outside the scope of the spec, and that
language changes while an UndoManager exists may not be supported.
Alex
More information about the whatwg
mailing list