- From: Alex Russell <slightlyoff@chromium.org>
- Date: Wed, 26 Oct 2011 13:39:51 -0700
On Thu, Oct 20, 2011 at 12:16 AM, Ryosuke Niwa <rniwa at webkit.org> wrote: > Hi, > The way selection is restored on WebKit after undoing selection is different > from the way it is done on Firefox and Internet Explorer. > Say you had "hello world" and "world" is deleted by an user. When the user > undoes the deletion, WebKit selects "world" whereas Firefox and Internet > Explorer do not select "world". WebKit's behavior matches Mac's NSTextView > and we probably would like to keep the current behavior. > However, there's no easy way for the user agent to figure out whether a > given transaction wants to select some contents on undo or not.?In fact, we > don't even know whether we want to restore selection at all. If an automatic > transaction was modifying non-text nodes (e.g. SVG line elements), then > restoring selection isn't desirable at all. > I can think of two approaches to solve this problem: > > Let automatic transactions also have unapply/reapply and call them after > user agents had done its work, and make the user agent do nothing in regards > to selection. We can name them afterUnapply/afterReapply if we want. The > benefit of this approach is that it's very general and authors can do other > things as well while the disadvantage being author needs to be fully aware > of platform-convention of how selection is restore upon undo/redo. There are a couple of competing interests here: 1.) simple content editable scenarios that don't involve a lot of code should "just work" the way the underlying OS does 2.) code-driven editing should be completely normalized by default 3.) sophisticated code-driven editing will want to re-create OS-native behavior It seems like mixing #1 with #2 is what's causing the tension here. It almost feels like if you add any custom commands, you need to replace *all* of the default commands. Mix/match feels like the bug here. I don't like the implications of that in terms of apparent code-size, but I'm wondering how bad it really is. > Add a boolean restoreSelection and isDeletion properties to the Transaction > interface. The user agent restores the selection when the value is true and > does not restore selection when the value is false. isDeletion is true when > the transaction is meant to delete contents and false otherwise. (Maybe > negate the property so that common case will be easy?) The user agents can > probably use some heuristics to determine whether a given transaction is > deleting contents or not. > > But I don't like either solution so I'm open to your ideas and thoughts on > this. > Best, > Ryosuke Niwa > Software Engineer > Google Inc. > >
Received on Wednesday, 26 October 2011 13:39:51 UTC