[Bug 24704] @contenteditable, new lines and new paragraphs.

https://www.w3.org/Bugs/Public/show_bug.cgi?id=24704

Aryeh Gregor <ayg@aryeh.name> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |WORKSFORME

--- Comment #2 from Aryeh Gregor <ayg@aryeh.name> ---
The specification requires that hitting Enter (or equivalent) is the same as
the insertParagraph command, and Shift-Enter (or equivalent) is the same as
insertLineBreak:

https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#additional-requirements

The insertParagraph command is specified here, with a rough summary in green at
the top:

https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#the-insertparagraph-command

The short story is: this has been discussed a lot, and there are three basic
approaches taken by browser engines.  The basic behavior that's currently
specified (very simplified) is patterned after IE and Opera, and is: find the
nearest ancestor that's a <div>/<p>/<li>/etc. and make a new one, if there is
any; and if there isn't, make a new <p>.  So for instance, if you have

  <ol><li>foo</ol>

and you hit Enter in the middle, it becomes

  <ol><li>fo<li>o</ol>

or such.  Likewise <p>foo</p> will become <p>fo<p>o</p>, and so on.  If you
start off with an empty editing host, or break out of a list or such, it will
use <p>, but this can be changed to <div> via the defaultParagraphSeparator
command.  This has been discussed a lot, multiple times, and I'm unlikely to
change the spec to require <br> for Enter unless browser implementers want it,
which is unlikely.  A good thread to read if you're interested is:

http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-May/031577.html

<br> for Enter is the Firefox behavior at the time of this writing, but I
rejected it because it causes a lot of subtle headaches and bugs. 
Particularly, it doesn't actually always create a line break: HTML like

  foo<br><ol><li>bar</ol>

displays identically to the same without the <br> -- try it and see.  So you
have to write lots of magic to figure out when you need to insert extra <br>s
to make the <br> do what you want.

Moreover, having each paragraph wrapped in its own tag is programmatically
easier.  Sometimes you want code that affects an entire paragraph, and if it's
in a <p> it's very easy.  With <br>s it's much more annoying.


As far as your example of <p contenteditable> -- this sort of thing is not
well-supported right now, either in the spec or in browsers.  <span
contenteditable> is even worse.  A ton of work would have to be done to get
this sort of thing to behave right, and it's not realistically worth it, so I
suggest sticking with <div> for contenteditable for now.


I hope this helps.  As I said, this is very unlikely to change to what you
requested, but if you have more questions *after* reading the mailing list
thread I linked to, please feel free to reopen this bug.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Received on Friday, 21 February 2014 12:10:01 UTC