| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009, 2010, 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2009, 2010, 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 | 658 |
| 659 static inline bool nodeHasVisibleRenderText(Text& text) | 659 static inline bool nodeHasVisibleRenderText(Text& text) |
| 660 { | 660 { |
| 661 return text.renderer() && toRenderText(text.renderer())->renderedTextLength(
) > 0; | 661 return text.renderer() && toRenderText(text.renderer())->renderedTextLength(
) > 0; |
| 662 } | 662 } |
| 663 | 663 |
| 664 void ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds(InsertedNodes& ins
ertedNodes) | 664 void ReplaceSelectionCommand::removeUnrenderedTextNodesAtEnds(InsertedNodes& ins
ertedNodes) |
| 665 { | 665 { |
| 666 document().updateLayoutIgnorePendingStylesheets(); | 666 document().updateLayoutIgnorePendingStylesheets(); |
| 667 | 667 |
| 668 Node& lastLeafInserted = insertedNodes.lastLeafInserted(); | 668 Node* lastLeafInserted = insertedNodes.lastLeafInserted(); |
| 669 if (lastLeafInserted.isTextNode() && !nodeHasVisibleRenderText(toText(lastLe
afInserted)) | 669 if (lastLeafInserted && lastLeafInserted->isTextNode() && !nodeHasVisibleRen
derText(toText(*lastLeafInserted)) |
| 670 && !enclosingNodeWithTag(firstPositionInOrBeforeNode(&lastLeafInserted),
selectTag) | 670 && !enclosingNodeWithTag(firstPositionInOrBeforeNode(lastLeafInserted),
selectTag) |
| 671 && !enclosingNodeWithTag(firstPositionInOrBeforeNode(&lastLeafInserted),
scriptTag)) { | 671 && !enclosingNodeWithTag(firstPositionInOrBeforeNode(lastLeafInserted),
scriptTag)) { |
| 672 insertedNodes.willRemoveNode(lastLeafInserted); | 672 insertedNodes.willRemoveNode(*lastLeafInserted); |
| 673 removeNode(&lastLeafInserted); | 673 removeNode(lastLeafInserted); |
| 674 } | 674 } |
| 675 | 675 |
| 676 // We don't have to make sure that firstNodeInserted isn't inside a select o
r script element, because | 676 // We don't have to make sure that firstNodeInserted isn't inside a select o
r script element, because |
| 677 // it is a top level node in the fragment and the user can't insert into tho
se elements. | 677 // it is a top level node in the fragment and the user can't insert into tho
se elements. |
| 678 Node* firstNodeInserted = insertedNodes.firstNodeInserted(); | 678 Node* firstNodeInserted = insertedNodes.firstNodeInserted(); |
| 679 if (firstNodeInserted && firstNodeInserted->isTextNode() && !nodeHasVisibleR
enderText(toText(*firstNodeInserted))) { | 679 if (firstNodeInserted && firstNodeInserted->isTextNode() && !nodeHasVisibleR
enderText(toText(*firstNodeInserted))) { |
| 680 insertedNodes.willRemoveNode(*firstNodeInserted); | 680 insertedNodes.willRemoveNode(*firstNodeInserted); |
| 681 removeNode(firstNodeInserted); | 681 removeNode(firstNodeInserted); |
| 682 } | 682 } |
| 683 } | 683 } |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 | 1136 |
| 1137 makeInsertedContentRoundTrippableWithHTMLTreeBuilder(insertedNodes); | 1137 makeInsertedContentRoundTrippableWithHTMLTreeBuilder(insertedNodes); |
| 1138 | 1138 |
| 1139 removeRedundantStylesAndKeepStyleSpanInline(insertedNodes); | 1139 removeRedundantStylesAndKeepStyleSpanInline(insertedNodes); |
| 1140 | 1140 |
| 1141 if (m_sanitizeFragment) | 1141 if (m_sanitizeFragment) |
| 1142 applyCommandToComposite(SimplifyMarkupCommand::create(document(), insert
edNodes.firstNodeInserted(), insertedNodes.pastLastLeaf())); | 1142 applyCommandToComposite(SimplifyMarkupCommand::create(document(), insert
edNodes.firstNodeInserted(), insertedNodes.pastLastLeaf())); |
| 1143 | 1143 |
| 1144 // Setup m_startOfInsertedContent and m_endOfInsertedContent. This should be
the last two lines of code that access insertedNodes. | 1144 // Setup m_startOfInsertedContent and m_endOfInsertedContent. This should be
the last two lines of code that access insertedNodes. |
| 1145 m_startOfInsertedContent = firstPositionInOrBeforeNode(insertedNodes.firstNo
deInserted()); | 1145 m_startOfInsertedContent = firstPositionInOrBeforeNode(insertedNodes.firstNo
deInserted()); |
| 1146 m_endOfInsertedContent = lastPositionInOrAfterNode(&insertedNodes.lastLeafIn
serted()); | 1146 m_endOfInsertedContent = lastPositionInOrAfterNode(insertedNodes.lastLeafIns
erted()); |
| 1147 | 1147 |
| 1148 // Determine whether or not we should merge the end of inserted content with
what's after it before we do | 1148 // Determine whether or not we should merge the end of inserted content with
what's after it before we do |
| 1149 // the start merge so that the start merge doesn't effect our decision. | 1149 // the start merge so that the start merge doesn't effect our decision. |
| 1150 m_shouldMergeEnd = shouldMergeEnd(selectionEndWasEndOfParagraph); | 1150 m_shouldMergeEnd = shouldMergeEnd(selectionEndWasEndOfParagraph); |
| 1151 | 1151 |
| 1152 if (shouldMergeStart(selectionStartWasStartOfParagraph, fragment.hasIntercha
ngeNewlineAtStart(), startIsInsideMailBlockquote)) { | 1152 if (shouldMergeStart(selectionStartWasStartOfParagraph, fragment.hasIntercha
ngeNewlineAtStart(), startIsInsideMailBlockquote)) { |
| 1153 VisiblePosition startOfParagraphToMove = positionAtStartOfInsertedConten
t(); | 1153 VisiblePosition startOfParagraphToMove = positionAtStartOfInsertedConten
t(); |
| 1154 VisiblePosition destination = startOfParagraphToMove.previous(); | 1154 VisiblePosition destination = startOfParagraphToMove.previous(); |
| 1155 // We need to handle the case where we need to merge the end | 1155 // We need to handle the case where we need to merge the end |
| 1156 // but our destination node is inside an inline that is the last in the
block. | 1156 // but our destination node is inside an inline that is the last in the
block. |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1493 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get()); | 1493 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get()); |
| 1494 | 1494 |
| 1495 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en
d); | 1495 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en
d); |
| 1496 | 1496 |
| 1497 setEndingSelection(selectionAfterReplace); | 1497 setEndingSelection(selectionAfterReplace); |
| 1498 | 1498 |
| 1499 return true; | 1499 return true; |
| 1500 } | 1500 } |
| 1501 | 1501 |
| 1502 } // namespace WebCore | 1502 } // namespace WebCore |
| OLD | NEW |