- From: Simon Pieters <simonp@opera.com>
- Date: Mon, 09 Jan 2012 08:57:18 +0100
- To: "Aryeh Gregor" <Simetrical+w3c@gmail.com>, "Ojan Vafai" <ojan@chromium.org>
- Cc: "Ehsan Akhgari" <ehsan@mozilla.com>, "Ryosuke Niwa" <rniwa@webkit.org>, "Michael A. Puls II" <shadow2531@gmail.com>, "Markus Ernst" <derernst@gmx.ch>, "Hallvord R. M. Steen" <hallvord@opera.com>, "WebApps WG" <public-webapps@w3.org>
On Sat, 07 Jan 2012 03:57:33 +0100, Ojan Vafai <ojan@chromium.org> wrote:
> BCC: whatwg, CC:public-webapps since discussion of the editing spec has
> moved
>
> I'm OK with this conclusion, but I still strongly prefer "div" to be the
> "default single-line container name".
Why?
> Also, I'd really like the "default
> single-line container name" to be configurable in some way.
I agree.
> Different apps
> have different needs and it's crappy for them to have to handle enter
> themselves just to get a different block type on enter.
>
> Something like document.execCommand("DefaultBlock", false, tagName). What
> values are valid for tagName are open to discussion. At a minimum, I'd
> want
> to see "div", "p" and "br".
What is the use case for "br" that "div" doesn't cover?
> As one proof that this is valuable, the Closure
> editor supports these three with custom code and they are all used in
> different apps.
Which apps use "br"? Could they switch to "div" without losing some
functionality?
> I'm tempted to say that any block type should be allowed,
I strongly disagree. Supporting any block type opens up for lots of bugs
and weird cases. We should only support the types necessary to cover
presented use cases.
> but I'd be OK with starting with the tree above. For example, I could
> see a
> use-case for "li" if you wanted an editable widget that only contained a
> single list.
Just use <ul contenteditable><li>|</li></ul>. "li" as defaultblock would
result in invalid markup if there's no list (and when breaking out of a
list, etc).
> Ojan
>
> On Mon, May 30, 2011 at 1:16 PM, Aryeh Gregor
> <Simetrical+w3c@gmail.com>wrote:
>
>> On Thu, May 12, 2011 at 4:28 PM, Aryeh Gregor <Simetrical+w3c@gmail.com>
>> wrote:
>> > Behavior for Enter in contenteditable in current browsers seems to be
>> > as follows:
>> >
>> > * IE9 wraps all lines in <p> (including if you start typing in an
>> > empty text box). If you hit Enter multiple times, it inserts empty
>> > <p>s. Shift-Enter inserts <br>.
>> > * Firefox 4.0 just uses <br _moz_dirty=""> for Enter and Shift-Enter,
>> > always. (What's _moz_dirty for?)
>> > * Chrome 12 dev doesn't wrap a line when you start typing, but when
>> > you hit Enter it wraps the new line in a <div>. Hitting Enter
>> > multiple times outputs <div><br></div>, and Shift-Enter always inserts
>> > <br>.
>> > * Opera 11.10 wraps in <p> like IE, but for blank lines it uses
>> > <p><br></p> instead of just <p></p> (they render the same).
>> >
>> > What behavior do we want?
>>
>> I ended up going with the general approach of IE/Opera:
>>
>>
>> http://aryeh.name/spec/editcommands/editcommands.html#additional-requirements
>>
>> It turns out WebKit and Opera make the insertParagraph command behave
>> essentially like hitting Enter, so I actually wrote all the
>> requirements there (IE's and Firefox's behavior for insertParagraph
>> was very different and didn't seem useful):
>>
>>
>> http://aryeh.name/spec/editcommands/editcommands.html#the-insertparagraph-command
>>
>> The basic idea is that if the cursor isn't wrapped in a single-line
>> container (address, dd, div, dt, h*, li, p, pre) then the current line
>> gets wrapped in a <p>. Then the current single-line container is
>> split in two, mostly. Exceptions are roughly:
>>
>> * For pre and address, insert a <br> instead of splitting the element.
>> (This matches Firefox for pre and address, and Opera for pre but not
>> address. IE/Chrome make multiple pres/addresses.)
>> * For an empty li/dt/dd, destroy it and break out of its container, so
>> hitting Enter twice in a list breaks out of the list. (Everyone does
>> this for li, only Firefox does for dt/dd.)
>> * If the cursor is at the end of an h* element, make the new element a
>> <p> instead of a header. (Everyone does this.)
>> * If the cursor is at the end of a dd/dt element, it switches to dt/dd
>> respectively. (Only Firefox does this, but it makes sense.)
>>
>> Like the rest of the spec, this is still a rough draft and I haven't
>> tried to pin corner cases down yet, so it's probably not advisable to
>> try implementing it yet as written. As always, you can see how the
>> spec implementation behaves for various input by looking at
>> autoimplementation.html:
>>
>> http://aryeh.name/spec/editcommands/autoimplementation.html#insertparagraph
>>
--
Simon Pieters
Opera Software
Received on Monday, 9 January 2012 08:00:24 UTC