- From: Johannes Wilm <johannes@fiduswriter.org>
- Date: Sat, 9 Jan 2016 03:08:47 +0100
- To: Gary Kačmarčík (Кошмарчик) <garykac@google.com>
- Cc: "public-editing-tf@w3.org" <public-editing-tf@w3.org>, "public-webapps@w3.org" <public-webapps@w3.org>
- Message-ID: <CABkgm-TpCokuxJ6t6NEBNEQQ_yYUtZK-cc1YfLVy7PsvYE0ckw@mail.gmail.com>
On Sat, Jan 9, 2016 at 2:32 AM, Gary Kačmarčík (Кошмарчик) < garykac@google.com> wrote: > +public-webapps since these these notes are relevant for both groups > > On Fri, Jan 8, 2016 at 5:03 PM, Johannes Wilm <johannes@fiduswriter.org> > wrote: > >> Just so we don't have too many different ideas about what is going on. >> >> This is the last I remember having heard from the taskforce. We were >> waiting on answers from the different browser vendors on the issues under >> "open issues" before we could move on finishing the most important parts of >> the spec, AFAIR. One of the big questions here was what kind of "dumb >> ranges" the browser vendors would be willing to support. >> > > The good news is that the range issue has been resolved by removing them > from the event. See the notes below for more info. > > But maybe you found answers to those issues at the Redmond meeting? If so, >> could you please send over the minutes? >> > > Good timing. I was just finishing up my notes (see below) from the meeting. > > -Gary > > > This is a summary of my notes from the beforeinput/editing summit hosted > by Microsoft on 7 Jan 2016. > > These notes focus on the UIEvent/beforeinput discussions, but some of the > editing discussions are included here as well. > > > Spec location > > ========== > > UIEvent spec will contain core description of beforeinput > > data, isComposing > > the data property should contain the text/plain version > > will define the event ordering > > Editing spec will contain partial interface that adds editing-specific > stuff: > > editType (renamed to inputType) > > dataTransfer field (for handling rich data) > > > What about selection ranges for beforeinput? > > ========== > > We determined that this was not needed as an attribute on the InputEvent. > > If you need the range, you call a getTargetRanges() method and get a > static snapshot of the current ranges > Where can one find more information about getTargetRanges() method? This is a method on the event object, right? For most of the cases one can get of course get current range with window.getSelection() and then selection.getRangeAt(0) . But the point with the ranges on the event was that it may affect a range that is not equal to the current selection range (such as a spell checker, etc.). We discussed this in Paris. So if I understand you right, with getTargetRanges() I can get the range of the word that is being spell checked without changing the selection range? The only reason it is a method of its own is so that one only creates the "live range" if the user really really asks for it, right? Usually there will be only 1 range, but an array is returned to handle > multirange. > > This avoids many problems associated with including targetRanges on the > event, e,g: > > Should the range be live or static? > > Live ranges can be expensive to upkeep and they are often held onto longer > than intended > > A lighter-weight StaticRange would need to be defined > > How to handle multiple handlers for an event, when the first handler in > chain modifies DOM or selection. > > What range should be sent to the 2nd handler? > > We need to send same event to each handler in the chain > > Therefore followup events will need to be sent an incorrect range. > > Ugh > > > Order of compositionupdate and beforeinput events > > ========== > > Current UIEvent spec says compositionupdate fires before beforeinput > > What is the point of beforeinput *after* compositionend? > > it seems unnecessary > > It makes more sense for the event order to be: > > beforeinput > > compositionupdate > > input > > Update UIEvent spec with the new event ordering > Agreed. I think the main reason for this order was that there was a believe that the IME was so much in control that it would fire the compositionupdate event by itself and without the browser having any control over it. > > When should DOM be updated during composition? > > ========== > > Current browser behavior: > > IE/edge fire compositionupdate after the DOM has been modified > > Moz/Saf/Chrome fire it before the DOM has been modified. > > We should define when the DOM is updated explicltly in the spec: > > beforeinput > > compositionupdate > > -- update DOM > > input > > > beforeinput/input during composition > makes sense > ========== > > WRT composition, beforeinput and input should not fire: > > before compositionstart > > after compositionend > > beforeinput/input events should wrap all compositionupdates > > > Composition events > > ========== > > There must be at least one compositionupdate after compositionstart > > There must be at least one compositionupdate before compositionend > > The same compositionupdate can satisfy both requirements > > > keyboard events during composition > > ========== > > general thought was that it didn't make sense to suppress these > > isComposing flag can be used to ignore if needed > > currenly only FireFox suppresses keydown/keyup during composition > > Mozilla was not present, so we need to follow-up > > > dead keys as composition events > > ========== > > current browser behavior: > > on Mac, all browsers generate composition events for dead keys > > on Win, no browsers generate composition events for dead keys > > current spec says that dead keys should generate composition events > > need to confirm that there are technical issues making this difficult to > do on Win > That all looks good to me. Now what about the part of what is going to happen to contentEditable=True? And what exactly did you talk about in concerns of that? DO you want to kill? Do you want the "draft" spec to go away? Is it only cE=true or also execCommand? > > > > >> >> ---------- Forwarded message ---------- >> From: Gary Kačmarčík (Кошмарчик) <garykac@google.com> >> Date: Wed, Nov 4, 2015 at 11:32 PM >> Subject: Re: time at TPAC other than Wednesday? >> To: Johannes Wilm <johanneswilm@gmail.com> >> Cc: Travis Leithead <travis.leithead@microsoft.com>, >> chaals@yandex-team.ru, Ryosuke Niwa <rniwa@apple.com>, Koji Ishii < >> kojiishi@gmail.com>, Xiaoqian Cindy Wu <xiaoqian@w3.org>, Grisha >> Lyukshin <glyuk@microsoft.com>, Ojan Vafai <ojan@google.com> >> >> >> These are my notes, with the final Summary at the top as a tl;dr. Sorry >> for any oddities in formatting. Please respond with any >> corrections/clarifications. >> >> -Gary >> >> >> >> *Before input and Composition Events* >> 9:30 Wed >> Present: Ryosuke Niwa, Travis Leithead, Takayoshi Kochi, Johannes Wilm, >> Ojan Vafai, Koji Ishii, Gary Kacmarcik, Yoshifume Inoue, Yoichi Osato, >> Dominic Cooney >> Dialed in: Grisha Lyukshin >> >> *# Summary of meeting:* >> >> # Open Issues >> need to create proposal for when comp events fire for IME >> esp. when user overflows IME buffer >> composition partial updates >> need to decide what kind of range to use: >> live ranges >> DumbRange (StaticRange) >> need to decide single vs. multiple ranges >> consider a new element for editable content >> replace contentEditable >> we could attach editing context to the element >> # Bugs >> beforeinput/input should fire for contenteditable >> for all editable things >> broken on some browsers >> >> # Agreed >> target range should always be populated >> >> >> *# Agenda* >> >> Review proposals >> ryosuke's - does it work >> beforeinput/input >> naming >> beforeedit >> edit types >> compositionevents >> >> # Todo later >> decide where the spec for this should live >> >> We won't have time for all of these, so let's start with >> beforeinput/input. >> >> >> *# Notes* >> >> you (js dev) don't know what the browser is going to happen when the char >> gets inserted >> eg: >> <a> text </a> more >> ^ ^ >> where is insertion point? >> browsers disagree >> >> right now 'input' event is around a session >> but spellchecking doesn't have a session >> spellcheck does not currently fire a 'input' event >> but if you do that, it changes the semantics of 'input' >> >> 'beforeinput' 'input' >> should always have target ranges >> >> case study: medium.com >> they build a native mobile app because this was broken on Android >> >> 'input' event fires for input element and textarea element >> device independent events >> >> for contenteditable >> user type 'h' >> send device independent event: "please insert 'h'" >> with info on where to insert >> app inserts 'h' >> >> ojan: contenteditable=true exists and we should make it good >> beforeinput >> compositionevent >> input >> - these should all have the context info >> problems: >> ordering of events >> ryo: ideal world >> no composition event, only input event >> at comp-end, we commit the composition >> >> main confusing: >> 'input' and 'textarea' >> >> is it ok for events to be different for content-editable vs. for >> input/textarea? >> content-editable is where you can do rich things >> it has more context info >> for input/textarea, this is less important >> >> proposed IDL >> interface InputEvents >> offsets for input/textarea -- we can punt this for v1 >> ranges for contenteditable >> >> include this info (the ranges) for composition events as well. >> c-start, c-update and c-end >> >> 3 examples - what is range: >> insert a >> collapsed range >> delete a >> range surrounding 'a' >> replace a with b >> range surrounding 'a' >> in IME composition >> 今日は >> ^^ >> こんにち >> range: >> c-update: entire string >> input: entire string >> >> trying to avoid having 2 ranges: >> full range >> current selected text >> >> E.g.: IME supports length of max 4 >> A B C D >> ^^^^^^^ >> type Z >> 'A' is committed >> comp-end 'A' >> comp-start 'BCD' >> comp-update >> A X C Y Z >> ^^^^^^^ >> input 'BCD' -> 'XCYZ' >> >> Chrome fires: >> c-end 'A' >> c-start for 'BCD' (but doens't give text because it is known) >> >> Summary: >> >> use input and beforeinput and comp events >> fire for content-editable=true, input and textarea >> extend these events with fields: >> target ranges >> beforeinput will have: >> isComposing >> data >> >> order of events needs to be spec'ed >> >> before input: >> IME API >> what if instead of target range, we exposed editing context >> target ranges only for now >> eventually add IME candidate window. >> concept: >> a single IME associated with the DOC >> no compelling argument for container for IME >> >> beforeinput target ranges: >> "the ranges in the doc that are affected by this event, unless related to >> current selection" >> target range is selected range >> except for comp-event, where it is the entire range >> >> >> dead ranges >> live ranges are expensive: >> need to be kept up to date >> add code complexity >> there will be resistance to adding new live ranges >> >> we should add a new "dumbed-down" range like thing >> rather than use a live range >> just a node+offset, node+offset >> "dumb range" >> >> can we just use a selection? >> people commonly use range as range.get(0) >> >> input and beforeinput need multiple ranges to support block selection >> composition events only need a single range >> >> for v1: >> we will have a range (range or StaticRange) >> this range is always populated >> >> DumbRange { >> startNode; >> startOffset; >> endNode; >> endOffset; >> isCollapsed; >> } >> perhaps: "static range" >> to parallel: list and static list >> >> >> >> editTypes: >> >> list of MS edittypes looks like a subset of execCommand. >> sounds like we need all the execcommands >> >> app needs to define what is supports >> >> scenario: >> ios word processor >> has bold icon on soft keyboard >> press bold to bold text >> but for a text editor >> doesn't support bold >> doesn't make sense to show the bold icon >> >> so app should register for the events that they want/can handle >> >> what about if a new command was added >> if apps have to opt-in, they will not get it >> even though it might just work out of the box >> what about opt-out? >> app wants to disable cut-copy-paste, but keep everything else >> it doesn't want to opt-in to each new >> >> in ios currently, you declare a list of things that you support on the >> keyboard >> >> ios can't query for supported commands before the keyboard appears >> but it can do it when the object gets focus >> >> with a JS api >> you could have opt-in, opt-out >> could attach to global IME object >> but 'copy' can apply to non-content-editable >> >> >> what about document.keyboard >> api: bring up keyboard >> other kb attributes >> what about a new element to replace content editable? >> >> -- >> Johannes Wilm >> Fidus Writer >> http://www.fiduswriter.org >> >> > -- Johannes Wilm Fidus Writer http://www.fiduswriter.org
Received on Saturday, 9 January 2016 02:09:17 UTC