| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 24 */ | 24 */ |
| 25 | 25 |
| 26 #include "config.h" | 26 #include "config.h" |
| 27 #include "core/editing/TypingCommand.h" | 27 #include "core/editing/TypingCommand.h" |
| 28 | 28 |
| 29 #include "HTMLNames.h" | 29 #include "HTMLNames.h" |
| 30 #include "core/dom/Document.h" | 30 #include "core/dom/Document.h" |
| 31 #include "core/dom/Element.h" | 31 #include "core/dom/Element.h" |
| 32 #include "core/dom/ElementTraversal.h" |
| 32 #include "core/editing/BreakBlockquoteCommand.h" | 33 #include "core/editing/BreakBlockquoteCommand.h" |
| 33 #include "core/editing/Editor.h" | 34 #include "core/editing/Editor.h" |
| 34 #include "core/editing/FrameSelection.h" | 35 #include "core/editing/FrameSelection.h" |
| 35 #include "core/editing/InsertLineBreakCommand.h" | 36 #include "core/editing/InsertLineBreakCommand.h" |
| 36 #include "core/editing/InsertParagraphSeparatorCommand.h" | 37 #include "core/editing/InsertParagraphSeparatorCommand.h" |
| 37 #include "core/editing/InsertTextCommand.h" | 38 #include "core/editing/InsertTextCommand.h" |
| 38 #include "core/editing/SpellChecker.h" | 39 #include "core/editing/SpellChecker.h" |
| 39 #include "core/editing/VisiblePosition.h" | 40 #include "core/editing/VisiblePosition.h" |
| 40 #include "core/editing/VisibleUnits.h" | 41 #include "core/editing/VisibleUnits.h" |
| 41 #include "core/editing/htmlediting.h" | 42 #include "core/editing/htmlediting.h" |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 applyCommandToComposite(BreakBlockquoteCommand::create(document())); | 375 applyCommandToComposite(BreakBlockquoteCommand::create(document())); |
| 375 typingAddedToOpenCommand(InsertParagraphSeparatorInQuotedContent); | 376 typingAddedToOpenCommand(InsertParagraphSeparatorInQuotedContent); |
| 376 } | 377 } |
| 377 | 378 |
| 378 bool TypingCommand::makeEditableRootEmpty() | 379 bool TypingCommand::makeEditableRootEmpty() |
| 379 { | 380 { |
| 380 Element* root = endingSelection().rootEditableElement(); | 381 Element* root = endingSelection().rootEditableElement(); |
| 381 if (!root || !root->firstChild()) | 382 if (!root || !root->firstChild()) |
| 382 return false; | 383 return false; |
| 383 | 384 |
| 384 if (root->firstChild() == root->lastChild() && root->firstElementChild() &&
root->firstElementChild()->hasTagName(brTag)) { | 385 if (root->firstChild() == root->lastChild()) { |
| 385 // If there is a single child and it could be a placeholder, leave it al
one. | 386 Element* firstElementChild = ElementTraversal::firstWithin(*root); |
| 386 if (root->renderer() && root->renderer()->isRenderBlockFlow()) | 387 if (firstElementChild && firstElementChild->hasTagName(brTag)) { |
| 387 return false; | 388 // If there is a single child and it could be a placeholder, leave i
t alone. |
| 389 if (root->renderer() && root->renderer()->isRenderBlockFlow()) |
| 390 return false; |
| 391 } |
| 388 } | 392 } |
| 389 | 393 |
| 390 while (Node* child = root->firstChild()) | 394 while (Node* child = root->firstChild()) |
| 391 removeNode(child); | 395 removeNode(child); |
| 392 | 396 |
| 393 addBlockPlaceholderIfNeeded(root); | 397 addBlockPlaceholderIfNeeded(root); |
| 394 setEndingSelection(VisibleSelection(firstPositionInNode(root), DOWNSTREAM, e
ndingSelection().isDirectional())); | 398 setEndingSelection(VisibleSelection(firstPositionInNode(root), DOWNSTREAM, e
ndingSelection().isDirectional())); |
| 395 | 399 |
| 396 return true; | 400 return true; |
| 397 } | 401 } |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 ASSERT_NOT_REACHED(); | 618 ASSERT_NOT_REACHED(); |
| 615 m_preservesTypingStyle = false; | 619 m_preservesTypingStyle = false; |
| 616 } | 620 } |
| 617 | 621 |
| 618 bool TypingCommand::isTypingCommand() const | 622 bool TypingCommand::isTypingCommand() const |
| 619 { | 623 { |
| 620 return true; | 624 return true; |
| 621 } | 625 } |
| 622 | 626 |
| 623 } // namespace WebCore | 627 } // namespace WebCore |
| OLD | NEW |