Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Side by Side Diff: Source/core/editing/ReplaceSelectionCommand.cpp

Issue 189773005: Revert of Have Position deal with more references (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 803 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 bool mergeForward = !(inSameParagraph(startOfInsertedContent, endOfInsertedC ontent) && !isStartOfParagraph(startOfInsertedContent)); 814 bool mergeForward = !(inSameParagraph(startOfInsertedContent, endOfInsertedC ontent) && !isStartOfParagraph(startOfInsertedContent));
815 815
816 VisiblePosition destination = mergeForward ? endOfInsertedContent.next() : e ndOfInsertedContent; 816 VisiblePosition destination = mergeForward ? endOfInsertedContent.next() : e ndOfInsertedContent;
817 VisiblePosition startOfParagraphToMove = mergeForward ? startOfParagraph(end OfInsertedContent) : endOfInsertedContent.next(); 817 VisiblePosition startOfParagraphToMove = mergeForward ? startOfParagraph(end OfInsertedContent) : endOfInsertedContent.next();
818 818
819 // Merging forward could result in deleting the destination anchor node. 819 // Merging forward could result in deleting the destination anchor node.
820 // To avoid this, we add a placeholder node before the start of the paragrap h. 820 // To avoid this, we add a placeholder node before the start of the paragrap h.
821 if (endOfParagraph(startOfParagraphToMove) == destination) { 821 if (endOfParagraph(startOfParagraphToMove) == destination) {
822 RefPtr<Node> placeholder = createBreakElement(document()); 822 RefPtr<Node> placeholder = createBreakElement(document());
823 insertNodeBefore(placeholder, startOfParagraphToMove.deepEquivalent().de precatedNode()); 823 insertNodeBefore(placeholder, startOfParagraphToMove.deepEquivalent().de precatedNode());
824 destination = VisiblePosition(positionBeforeNode(*placeholder)); 824 destination = VisiblePosition(positionBeforeNode(placeholder.get()));
825 } 825 }
826 826
827 moveParagraph(startOfParagraphToMove, endOfParagraph(startOfParagraphToMove) , destination); 827 moveParagraph(startOfParagraphToMove, endOfParagraph(startOfParagraphToMove) , destination);
828 828
829 // Merging forward will remove m_endOfInsertedContent from the document. 829 // Merging forward will remove m_endOfInsertedContent from the document.
830 if (mergeForward) { 830 if (mergeForward) {
831 if (m_startOfInsertedContent.isOrphan()) 831 if (m_startOfInsertedContent.isOrphan())
832 m_startOfInsertedContent = endingSelection().visibleStart().deepEqui valent(); 832 m_startOfInsertedContent = endingSelection().visibleStart().deepEqui valent();
833 m_endOfInsertedContent = endingSelection().visibleEnd().deepEquivalent( ); 833 m_endOfInsertedContent = endingSelection().visibleEnd().deepEquivalent( );
834 // If we merged text nodes, m_endOfInsertedContent could be null. If thi s is the case, we use m_startOfInsertedContent. 834 // If we merged text nodes, m_endOfInsertedContent could be null. If thi s is the case, we use m_startOfInsertedContent.
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 // If the downstream node has been removed there's no point in continuing. 983 // If the downstream node has been removed there's no point in continuing.
984 if (!insertionPos.downstream().deprecatedNode()) 984 if (!insertionPos.downstream().deprecatedNode())
985 return; 985 return;
986 986
987 // NOTE: This would be an incorrect usage of downstream() if downstream() we re changed to mean the last position after 987 // NOTE: This would be an incorrect usage of downstream() if downstream() we re changed to mean the last position after
988 // p that maps to the same visible position as p (since in the case where a br is at the end of a block and collapsed 988 // p that maps to the same visible position as p (since in the case where a br is at the end of a block and collapsed
989 // away, there are positions after the br which map to the same visible posi tion as [br, 0]). 989 // away, there are positions after the br which map to the same visible posi tion as [br, 0]).
990 Node* endBR = insertionPos.downstream().deprecatedNode()->hasTagName(brTag) ? insertionPos.downstream().deprecatedNode() : 0; 990 Node* endBR = insertionPos.downstream().deprecatedNode()->hasTagName(brTag) ? insertionPos.downstream().deprecatedNode() : 0;
991 VisiblePosition originalVisPosBeforeEndBR; 991 VisiblePosition originalVisPosBeforeEndBR;
992 if (endBR) 992 if (endBR)
993 originalVisPosBeforeEndBR = VisiblePosition(positionBeforeNode(*endBR), DOWNSTREAM).previous(); 993 originalVisPosBeforeEndBR = VisiblePosition(positionBeforeNode(endBR), D OWNSTREAM).previous();
994 994
995 RefPtr<Node> insertionBlock = enclosingBlock(insertionPos.deprecatedNode()); 995 RefPtr<Node> insertionBlock = enclosingBlock(insertionPos.deprecatedNode());
996 996
997 // Adjust insertionPos to prevent nesting. 997 // Adjust insertionPos to prevent nesting.
998 // If the start was in a Mail blockquote, we will have already handled adjus ting insertionPos above. 998 // If the start was in a Mail blockquote, we will have already handled adjus ting insertionPos above.
999 if (m_preventNesting && insertionBlock && !isTableCell(insertionBlock.get()) && !startIsInsideMailBlockquote) { 999 if (m_preventNesting && insertionBlock && !isTableCell(insertionBlock.get()) && !startIsInsideMailBlockquote) {
1000 ASSERT(insertionBlock != currentRoot); 1000 ASSERT(insertionBlock != currentRoot);
1001 VisiblePosition visibleInsertionPos(insertionPos); 1001 VisiblePosition visibleInsertionPos(insertionPos);
1002 if (isEndOfBlock(visibleInsertionPos) && !(isStartOfBlock(visibleInserti onPos) && fragment.hasInterchangeNewlineAtEnd())) 1002 if (isEndOfBlock(visibleInsertionPos) && !(isStartOfBlock(visibleInserti onPos) && fragment.hasInterchangeNewlineAtEnd()))
1003 insertionPos = positionInParentAfterNode(*insertionBlock); 1003 insertionPos = positionInParentAfterNode(*insertionBlock);
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 m_matchStyle = false; 1226 m_matchStyle = false;
1227 1227
1228 completeHTMLReplacement(lastPositionToSelect); 1228 completeHTMLReplacement(lastPositionToSelect);
1229 } 1229 }
1230 1230
1231 bool ReplaceSelectionCommand::shouldRemoveEndBR(Node* endBR, const VisiblePositi on& originalVisPosBeforeEndBR) 1231 bool ReplaceSelectionCommand::shouldRemoveEndBR(Node* endBR, const VisiblePositi on& originalVisPosBeforeEndBR)
1232 { 1232 {
1233 if (!endBR || !endBR->inDocument()) 1233 if (!endBR || !endBR->inDocument())
1234 return false; 1234 return false;
1235 1235
1236 VisiblePosition visiblePos(positionBeforeNode(*endBR)); 1236 VisiblePosition visiblePos(positionBeforeNode(endBR));
1237 1237
1238 // Don't remove the br if nothing was inserted. 1238 // Don't remove the br if nothing was inserted.
1239 if (visiblePos.previous() == originalVisPosBeforeEndBR) 1239 if (visiblePos.previous() == originalVisPosBeforeEndBR)
1240 return false; 1240 return false;
1241 1241
1242 // Remove the br if it is collapsed away and so is unnecessary. 1242 // Remove the br if it is collapsed away and so is unnecessary.
1243 if (!document().inNoQuirksMode() && isEndOfBlock(visiblePos) && !isStartOfPa ragraph(visiblePos)) 1243 if (!document().inNoQuirksMode() && isEndOfBlock(visiblePos) && !isStartOfPa ragraph(visiblePos))
1244 return true; 1244 return true;
1245 1245
1246 // A br that was originally holding a line open should be displaced by inser ted content or turned into a line break. 1246 // A br that was originally holding a line open should be displaced by inser ted content or turned into a line break.
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 RefPtr<Node> nodeAfterInsertionPos = endingSelection().end().downstream().an chorNode(); 1483 RefPtr<Node> nodeAfterInsertionPos = endingSelection().end().downstream().an chorNode();
1484 Text* textNode = toText(fragment.firstChild()); 1484 Text* textNode = toText(fragment.firstChild());
1485 // Our fragment creation code handles tabs, spaces, and newlines, so we don' t have to worry about those here. 1485 // Our fragment creation code handles tabs, spaces, and newlines, so we don' t have to worry about those here.
1486 1486
1487 Position start = endingSelection().start(); 1487 Position start = endingSelection().start();
1488 Position end = replaceSelectedTextInNode(textNode->data()); 1488 Position end = replaceSelectedTextInNode(textNode->data());
1489 if (end.isNull()) 1489 if (end.isNull())
1490 return false; 1490 return false;
1491 1491
1492 if (nodeAfterInsertionPos && nodeAfterInsertionPos->parentNode() && nodeAfte rInsertionPos->hasTagName(brTag) 1492 if (nodeAfterInsertionPos && nodeAfterInsertionPos->parentNode() && nodeAfte rInsertionPos->hasTagName(brTag)
1493 && shouldRemoveEndBR(nodeAfterInsertionPos.get(), VisiblePosition(positi onBeforeNode(*nodeAfterInsertionPos)))) 1493 && shouldRemoveEndBR(nodeAfterInsertionPos.get(), VisiblePosition(positi onBeforeNode(nodeAfterInsertionPos.get()))))
1494 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get()); 1494 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get());
1495 1495
1496 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d); 1496 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d);
1497 1497
1498 setEndingSelection(selectionAfterReplace); 1498 setEndingSelection(selectionAfterReplace);
1499 1499
1500 return true; 1500 return true;
1501 } 1501 }
1502 1502
1503 } // namespace WebCore 1503 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/editing/InsertParagraphSeparatorCommand.cpp ('k') | Source/core/editing/TextIterator.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698