<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[42501] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/42501">42501</a></dd>
<dt>Author</dt> <dd>adele@apple.com</dd>
<dt>Date</dt> <dd>2009-04-14 10:40:28 -0700 (Tue, 14 Apr 2009)</dd>
</dl>

<h3>Log Message</h3>
<pre>2009-04-13  Adele Peterson  &lt;adele@apple.com&gt;

        Reviewed by Darin Adler.

        Fix for &lt;rdar://problem/6703873&gt; Triple-click quoted line and type Return creates an extra quoted blank line

        Test: editing/inserting/6703873.html

        * editing/BreakBlockquoteCommand.cpp: (WebCore::BreakBlockquoteCommand::doApply):
        If the startNode's original parent is now empty, we can remove it.  Its already been cloned and copied with the startNode,
        so we only need to keep it around if it actually holds some original content, otherwise it will look like an extra empty 
        container in the document.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkWebCoreChangeLog">trunk/WebCore/ChangeLog</a></li>
<li><a href="#trunkWebCoreeditingBreakBlockquoteCommandcpp">trunk/WebCore/editing/BreakBlockquoteCommand.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestseditinginserting6703873html">trunk/LayoutTests/editing/inserting/6703873.html</a></li>
<li><a href="#trunkLayoutTestsplatformmaceditinginserting6703873expectedchecksum">trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.checksum</a></li>
<li><a href="#trunkLayoutTestsplatformmaceditinginserting6703873expectedpng">trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.png</a></li>
<li><a href="#trunkLayoutTestsplatformmaceditinginserting6703873expectedtxt">trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.txt</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestseditinginserting6703873html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/editing/inserting/6703873.html (0 => 42501)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/editing/inserting/6703873.html                                (rev 0)
+++ trunk/LayoutTests/editing/inserting/6703873.html        2009-04-14 17:40:28 UTC (rev 42501)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+&lt;html&gt;
+    &lt;head&gt;
+        &lt;style&gt;
+            blockquote {
+                color: blue;
+                border-left: 2px solid blue;
+                margin: 0px;
+                padding-left: 10px;
+            }
+        &lt;/style&gt;
+        &lt;script&gt;
+            function log(msg)
+            {
+                document.getElementById('console').appendChild(document.createTextNode(msg + '\n'));
+            }
+            
+            function test()
+            {
+                var s = window.getSelection();
+                s.setPosition(document.getElementById('qt'), 0);
+                s.modify(&quot;extend&quot;, &quot;forward&quot;, &quot;line&quot;);
+                document.execCommand(&quot;InsertNewlineInQuotedContent&quot;);
+                document.execCommand(&quot;InsertText&quot;, &quot;true&quot;, &quot;unquoted&quot;);
+            }
+        &lt;/script&gt;
+    &lt;/head&gt;
+    &lt;body onload=&quot;test()&quot;&gt;
+        &lt;p&gt;This tests that inserting a newline in place of a full line of quoted content doesn't add an extra quoted line.  The test has passed if there are no empty lines (quoted or unquoted) in the box below.&lt;/p&gt;
+        &lt;div contenteditable=&quot;true&quot;&gt;
+            &lt;blockquote type=&quot;cite&quot;&gt;&lt;div&gt;quoted&lt;/div&gt;&lt;div id=&quot;qt&quot;&gt;quoted&lt;/div&gt;&lt;div&gt;quoted&lt;/div&gt;&lt;/blockquote&gt;
+        &lt;/div&gt;
+        &lt;pre id=&quot;console&quot;&gt;&lt;/pre&gt;
+    &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmaceditinginserting6703873expectedchecksum"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.checksum (0 => 42501)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.checksum                                (rev 0)
+++ trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.checksum        2009-04-14 17:40:28 UTC (rev 42501)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+dc7a17a8c6bb8f316c95ef426b30c5af
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmaceditinginserting6703873expectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkLayoutTestsplatformmaceditinginserting6703873expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.txt (0 => 42501)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.txt                                (rev 0)
+++ trunk/LayoutTests/platform/mac/editing/inserting/6703873-expected.txt        2009-04-14 17:40:28 UTC (rev 42501)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x579
+      RenderBlock {P} at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 742x36
+          text run at (0,0) width 667: &quot;This tests that inserting a newline in place of a full line of quoted content doesn't add an extra quoted line. &quot;
+          text run at (667,0) width 75: &quot;The test has&quot;
+          text run at (0,18) width 460: &quot;passed if there are no empty lines (quoted or unquoted) in the box below.&quot;
+      RenderBlock {DIV} at (0,52) size 784x54
+        RenderBlock {BLOCKQUOTE} at (0,0) size 784x18 [color=#0000FF] [border: (2px solid #0000FF)]
+          RenderBlock {DIV} at (12,0) size 772x18
+            RenderText {#text} at (0,0) size 43x18
+              text run at (0,0) width 43: &quot;quoted&quot;
+          RenderBlock {DIV} at (12,18) size 772x0
+        RenderBlock (anonymous) at (0,18) size 784x18
+          RenderText {#text} at (0,0) size 59x18
+            text run at (0,0) width 59: &quot;unquoted&quot;
+          RenderBR {BR} at (59,14) size 0x0
+        RenderBlock {BLOCKQUOTE} at (0,36) size 784x18 [color=#0000FF] [border: (2px solid #0000FF)]
+          RenderBlock {DIV} at (12,0) size 772x18
+            RenderText {#text} at (0,0) size 43x18
+              text run at (0,0) width 43: &quot;quoted&quot;
+      RenderBlock {PRE} at (0,119) size 784x0
+caret: position 8 of child 2 {#text} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
</ins></span></pre></div>
<a id="trunkWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/ChangeLog (42500 => 42501)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/ChangeLog        2009-04-14 16:52:01 UTC (rev 42500)
+++ trunk/WebCore/ChangeLog        2009-04-14 17:40:28 UTC (rev 42501)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2009-04-13  Adele Peterson  &lt;adele@apple.com&gt;
+
+        Reviewed by Darin Adler.
+
+        Fix for &lt;rdar://problem/6703873&gt; Triple-click quoted line and type Return creates an extra quoted blank line
+
+        Test: editing/inserting/6703873.html
+
+        * editing/BreakBlockquoteCommand.cpp: (WebCore::BreakBlockquoteCommand::doApply):
+        If the startNode's original parent is now empty, we can remove it.  Its already been cloned and copied with the startNode,
+        so we only need to keep it around if it actually holds some original content, otherwise it will look like an extra empty 
+        container in the document.
+
</ins><span class="cx"> 2009-04-14  Xan Lopez  &lt;xlopez@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Holger Freyther.
</span></span></pre></div>
<a id="trunkWebCoreeditingBreakBlockquoteCommandcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/editing/BreakBlockquoteCommand.cpp (42500 => 42501)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/editing/BreakBlockquoteCommand.cpp        2009-04-14 16:52:01 UTC (rev 42500)
+++ trunk/WebCore/editing/BreakBlockquoteCommand.cpp        2009-04-14 17:40:28 UTC (rev 42501)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx">     // If we're inserting the break at the end of the quoted content, we don't need to break the quote.
</span><span class="cx">     if (isLastVisiblePositionInNode(visiblePos, topBlockquote)) {
</span><span class="cx">         setEndingSelection(VisibleSelection(Position(breakNode.get(), 0), DOWNSTREAM));
</span><del>-        rebalanceWhitespace();   
</del><ins>+        rebalanceWhitespace();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -157,10 +157,7 @@
</span><span class="cx">         moveNode = next;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // Hold open startNode's original parent if we emptied it
</del><span class="cx">     if (!ancestors.isEmpty()) {
</span><del>-        addBlockPlaceholderIfNeeded(ancestors.first());
-
</del><span class="cx">         // Split the tree up the ancestor chain until the topBlockquote
</span><span class="cx">         // Throughout this loop, clonedParent is the clone of ancestor's parent.
</span><span class="cx">         // This is so we can clone ancestor's siblings and place the clones
</span><span class="lines">@@ -178,6 +175,11 @@
</span><span class="cx">                 moveNode = next;
</span><span class="cx">             }
</span><span class="cx">         }
</span><ins>+        
+        // If the startNode's original parent is now empty, remove it
+        Node* originalParent = ancestors.first();
+        if (!originalParent-&gt;hasChildNodes())
+            removeNode(originalParent);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // Make sure the cloned block quote renders.
</span></span></pre>
</div>
</div>

</body>
</html>