- From: 河内 隆仁 <kochi@google.com>
- Date: Wed, 28 Oct 2015 09:15:44 +0900
- To: Johannes Wilm <johannes@fiduswriter.org>
- Cc: Travis Leithead <travis.leithead@microsoft.com>, Ojan Vafai <ojan@google.com>, Gary Kacmarcik (Кошмарчик) <garykac@chromium.org>, "public-editing-tf@w3.org" <public-editing-tf@w3.org>, Kenji Baheux <kenjibaheux@google.com>
- Message-ID: <CADP2=hppRVn7d3uUVqs2faWBCJO49dD7hZqdyWeUtxJF452+KA@mail.gmail.com>
On Tue, Oct 27, 2015 at 10:38 PM, Johannes Wilm <johannes@fiduswriter.org> wrote: > > > On Tue, Oct 27, 2015 at 8:12 PM, Travis Leithead < > travis.leithead@microsoft.com> wrote: > >> Since we talked a little today about extending Composition Events with >> some contextual range info, I finally *did* find the spec where this had >> been attempted—the “annex” of the IME specification: >> http://w3c.github.io/ime-api/Annex.html#compositionevent-interface > > > If I remember correctly, the experimental implementation of the IME API > was implemented in Chrome was removed recently due to low usage, correct? > Is it still in IE? > > For Chrome, right, the experimental implementation was removed for now. For IE, I think it is still there (but some interface only works in Metro mode). > As for the offsets: I see that the information on where the composed word > is given in terms of offsetvalues of the textContent of the parent element > (compositionStartOffset and compositionEndOffset) rather than as a range. I > assume this is done in order to give a uniform interface for both input > elements, textarea and contentEditable? > > I wonder though, say I have the following element inside a contentEditable > element on an Android device: > > <p>This <img ...><i>is <svg>...</svg> a par</i>a<b>graph.</b></p> > > > And I hit the word "paragraph" with my finger. It would give me the > compositionStartOffset = 11 and compositionEndOffset = 19 on the target > <p>-element, correct? > > This information is already better than what we have now at composition > start, but if we are in contenteditable, would it be much trouble to also > give us the range that corresponds to? And if the entire IME API isn't > going to be implemented, maybe we could get that at compositionstart > instead? > > The Chrome implementation, compositionStart/EndOffset only worked for <input> and <textarea>, did not work for contenteditable IIRC. If we were to calculate compositionStartOffset in contenteditable that way, it would be very costly operation. > > > >> >> Now, specifically, I did run the below mentioned test in Edge (not our >> latest version, but the currently shipping version), and here are the >> results: >> >> Edge appears to work a lot more like Firefox than Chrome in this case—the >> composition session is terminated and then re-started on the new target >> node. No composition characters are transferred to the new node. There was >> a bit of non-determinism on my part, and I’m not very confident in the >> results, but we can review tomorrow if anyone’s interested. >> >> -Travis >> ---------- Forwarded message --------- >> From: Ojan Vafai <mailto:ojan@google.com> >> Date: Mon, Oct 19, 2015 at 1:26 PM >> Subject: composition events and focus changes >> To: mailto:public-editing-tf@w3.org <mailto:public-editing-tf@w3.org> >> >> I'd like to get us back from our state of questioning everything we're >> doing and focus on seeing if our current tack can be saved. IMO, we're very >> close to something finished and should try not to change course if we can. >> >> I would like to end up in a world where we spec low-level IME apis, but >> that's a big project and not one that we should take on without more >> staffing from a browser vendor committed to designing and implementing them. >> >> Here's the TL;DR of my preferred path forward: >> 1. Spec the current Chrome/Safari behavior. This will make the JS authors >> happy and will not hurt IME in any way (see below for details). >> 2. Publish good documentation about how to use composition events and >> about common pitfalls (e.g. moving the cursor to a different place in the >> text). This will both make JS authors happy and improve IME support on the >> web. >> >> I'm making two key assumptions: >> 1. Keeping IMEs working correctly is non-negotiable. Any API we design >> needs to work correctly to the extent that is reasonably possible. That >> doesn't mean that every combination of actions needs to do what a user >> expects. For example, even in a non-IME world, a JS author can do crazy >> things on every keypress. There is no way to guard against that. There's >> not even a way to make that hard to do. >> >> I'm not 100% sure, but I believe that this *does* imply that we can't >> make preventDefault work for all IME input. >> >> 2. Giving JS authors complete control over DOM modifications is >> non-negotiable. Any author who has worked on a JS library can see the >> desperate need for this. It's just fundamental to having a decent editing >> platform. This does not, however, mean that the author needs to be able to >> preventDefault all actions. >> >> >> DETAILS >> I think it's clear that >> https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fgithub.com%2fw3c%2fuievents%2fissues%2f5&data=01%7c01%7cTravis.Leithead%40microsoft.com%7c8dd5cfcecebe403ef9ed08d2dea2ad70%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=6XcrYqEIHx8ReUApEfmDfou2uV6YLnRBSvtk0eVSfxQ%3d would >> address #2, but there are concerns on that issue that it would break #1. >> Those concerns don't make sense to me. That's not because I think breaking >> IMEs is OK (I don't!). >> >> A. This is already how Safari and Chrome work. I can't find any bugs >> about IME being broken due to this. It's not a problem in practice. And >> Firefox's behavior here is clearly bad IMO (the IME stays open and you can >> keep typing into it, but none of the changes are reflected in the DOM). I >> don't have IE on hand to test what they do. I tested on Mac with a >> pinyin-based IME. Here's my test case: >> https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fjsbin.com%2fpovobotere%2fedit%3fhtml%2cconsole%2coutput&data=01%7c01%7cTravis.Leithead%40microsoft.com%7c8dd5cfcecebe403ef9ed08d2dea2ad70%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=ZlBup9egE7uweJEsOnCz8GCnUDtA%2b4groIgGXyF%2bGvc%3d >> >> B. Moving the selection in the DOM is only a problem if you move it to a >> different text location. If you keep it in the same text location, but wrap >> it in a span or put it inside a shadow DOM, then the IME continues working >> as expected. Clearly there was agreement on the shadow DOM version of this >> since there was previous agreement on magically doing this with shadow DOM >> before. >> >> The reason I don't think B is a problem is that there are a million other >> ways of moving the selection mid-composition (e.g. you can move it during >> keypress). We're not creating a new problem. >> >> Also, it's only the really expert web developers that use composition >> events. So good documentation can have a very big impact here. The best >> thing we can do for better IME support on the web is to focus on creating >> really great documentation about right and wrong ways to support IMEs. >> Limiting composition events from doing something other events can already >> do doesn't solve any problems. >> >> Masayuki-san also had a concern on that bug that we'd be breaking >> expectations of what composition events do because you wouldn't have a >> guarantee of compositionend always firing on the same node compositionstart >> fired on. I agree that's less than ideal, but it's consistent with other >> events (e.g. key events). More importantly, it's how Safari and Chrome work >> today and we have never once gotten a bug report about this that I know of. >> It's just not a thing developers depend on or care about in practice. >> Lastly, I'd like to reiterate that Mozilla's current behavior maintains the >> compositionstart/compositionend pairing, but the user experience is really >> broken. So there's no backwards compatibility concern here that I can see. >> >> So, I think there are two things that need specifying here and IMO in >> both cases the Safari and Chrome behavior is really reasonable: >> 1. What happens when you move focus during composition start? == The >> composition starts where you moved the focus to. >> 2. What happens when you move focus and there is a composition in >> progress? == The current composition is committed and a new composition >> starts where focus was moved to, but contains all the previous composition >> text as well. This has the advantage of not messing with the IME's internal >> state too much since the composition text doesn't change. >> >> #2 is a thing people really shouldn't be doing, but we may as well agree >> on the best we can do here, which the current Safari/Chrome behavior seems >> pretty reasonable to me. >> > > > > -- > Johannes Wilm > Fidus Writer > http://www.fiduswriter.org > -- Takayoshi Kochi
Received on Thursday, 29 October 2015 07:12:16 UTC