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

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

Issue 7973008: Revert 93001 - Apple-style-span class seems unnecessary (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/874/
Patch Set: Created 9 years, 3 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
« no previous file with comments | « Source/WebCore/editing/EditingStyle.cpp ('k') | Source/WebCore/editing/markup.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 * 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 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 } 504 }
505 505
506 if (!inlineStyle || newInlineStyle->isEmpty()) { 506 if (!inlineStyle || newInlineStyle->isEmpty()) {
507 if (isStyleSpanOrSpanWithOnlyStyleAttribute(element)) 507 if (isStyleSpanOrSpanWithOnlyStyleAttribute(element))
508 removeNodePreservingChildren(element); 508 removeNodePreservingChildren(element);
509 else 509 else
510 removeNodeAttribute(element, styleAttr); 510 removeNodeAttribute(element, styleAttr);
511 } else if (newInlineStyle->style()->length() != inlineStyle->length()) 511 } else if (newInlineStyle->style()->length() != inlineStyle->length())
512 setNodeAttribute(element, styleAttr, newInlineStyle->style()->cssTex t()); 512 setNodeAttribute(element, styleAttr, newInlineStyle->style()->cssTex t());
513 513
514 // WebKit used to not add display: inline and float: none on copy. 514 if (isStyleSpan(element)) {
515 // Keep this code around for backward compatibility
516 if (isLegacyAppleStyleSpan(element)) {
517 if (!element->firstChild()) { 515 if (!element->firstChild()) {
518 removeNodePreservingChildren(element); 516 removeNodePreservingChildren(element);
519 continue; 517 continue;
520 } 518 }
521 // There are other styles that style rules can give to style spans, 519 // There are other styles that style rules can give to style spans,
522 // but these are the two important ones because they'll prevent 520 // but these are the two important ones because they'll prevent
523 // inserted content from appearing in the right paragraph. 521 // inserted content from appearing in the right paragraph.
524 // FIXME: Hyatt is concerned that selectively using display:inline w ill give inconsistent 522 // FIXME: Hyatt is concerned that selectively using display:inline w ill give inconsistent
525 // results. We already know one issue because td elements ignore the ir display property 523 // results. We already know one issue because td elements ignore the ir display property
526 // in quirks mode (which Mail.app is always in). We should look for an alternative. 524 // in quirks mode (which Mail.app is always in). We should look for an alternative.
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 { 609 {
612 Node* topNode = fragment.firstChild(); 610 Node* topNode = fragment.firstChild();
613 611
614 // Handling the case where we are doing Paste as Quotation or pasting into q uoted content is more complicated (see handleStyleSpans) 612 // Handling the case where we are doing Paste as Quotation or pasting into q uoted content is more complicated (see handleStyleSpans)
615 // and doesn't receive the optimization. 613 // and doesn't receive the optimization.
616 if (isMailPasteAsQuotationNode(topNode) || enclosingNodeOfType(firstPosition InOrBeforeNode(topNode), isMailBlockquote, CanCrossEditingBoundary)) 614 if (isMailPasteAsQuotationNode(topNode) || enclosingNodeOfType(firstPosition InOrBeforeNode(topNode), isMailBlockquote, CanCrossEditingBoundary))
617 return false; 615 return false;
618 616
619 // Either there are no style spans in the fragment or a WebKit client has ad ded content to the fragment 617 // Either there are no style spans in the fragment or a WebKit client has ad ded content to the fragment
620 // before inserting it. Look for and handle style spans after insertion. 618 // before inserting it. Look for and handle style spans after insertion.
621 if (!isLegacyAppleStyleSpan(topNode)) 619 if (!isStyleSpan(topNode))
622 return false; 620 return false;
623 621
624 Node* wrappingStyleSpan = topNode; 622 Node* wrappingStyleSpan = topNode;
625 RefPtr<EditingStyle> styleAtInsertionPos = EditingStyle::create(insertionPos .parentAnchoredEquivalent()); 623 RefPtr<EditingStyle> styleAtInsertionPos = EditingStyle::create(insertionPos .parentAnchoredEquivalent());
626 String styleText = styleAtInsertionPos->style()->cssText(); 624 String styleText = styleAtInsertionPos->style()->cssText();
627 625
628 // FIXME: This string comparison is a naive way of comparing two styles. 626 // FIXME: This string comparison is a naive way of comparing two styles.
629 // We should be taking the diff and check that the diff is empty. 627 // We should be taking the diff and check that the diff is empty.
630 if (styleText != static_cast<Element*>(wrappingStyleSpan)->getAttribute(styl eAttr)) 628 if (styleText != static_cast<Element*>(wrappingStyleSpan)->getAttribute(styl eAttr))
631 return false; 629 return false;
(...skipping 10 matching lines...) Expand all
642 // We should remove the Apple-style-span class when we're done, see <rdar://prob lem/5685600>. 640 // We should remove the Apple-style-span class when we're done, see <rdar://prob lem/5685600>.
643 // We should remove styles from spans that are overridden by all of their childr en, either here 641 // We should remove styles from spans that are overridden by all of their childr en, either here
644 // or at copy time. 642 // or at copy time.
645 void ReplaceSelectionCommand::handleStyleSpans() 643 void ReplaceSelectionCommand::handleStyleSpans()
646 { 644 {
647 HTMLElement* wrappingStyleSpan = 0; 645 HTMLElement* wrappingStyleSpan = 0;
648 // The style span that contains the source document's default style should b e at 646 // The style span that contains the source document's default style should b e at
649 // the top of the fragment, but Mail sometimes adds a wrapper (for Paste As Quotation), 647 // the top of the fragment, but Mail sometimes adds a wrapper (for Paste As Quotation),
650 // so search for the top level style span instead of assuming it's at the to p. 648 // so search for the top level style span instead of assuming it's at the to p.
651 for (Node* node = m_firstNodeInserted.get(); node; node = node->traverseNext Node()) { 649 for (Node* node = m_firstNodeInserted.get(); node; node = node->traverseNext Node()) {
652 if (isLegacyAppleStyleSpan(node)) { 650 if (isStyleSpan(node)) {
653 wrappingStyleSpan = toHTMLElement(node); 651 wrappingStyleSpan = toHTMLElement(node);
654 break; 652 break;
655 } 653 }
656 } 654 }
657 655
658 // There might not be any style spans if we're pasting from another applicat ion or if 656 // There might not be any style spans if we're pasting from another applicat ion or if
659 // we are here because of a document.execCommand("InsertHTML", ...) call. 657 // we are here because of a document.execCommand("InsertHTML", ...) call.
660 if (!wrappingStyleSpan) 658 if (!wrappingStyleSpan)
661 return; 659 return;
662 660
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 // 6) Select the replacement if requested, and match style if requested. 984 // 6) Select the replacement if requested, and match style if requested.
987 985
988 VisiblePosition startOfInsertedContent, endOfInsertedContent; 986 VisiblePosition startOfInsertedContent, endOfInsertedContent;
989 987
990 RefPtr<Node> refNode = fragment.firstChild(); 988 RefPtr<Node> refNode = fragment.firstChild();
991 RefPtr<Node> node = refNode->nextSibling(); 989 RefPtr<Node> node = refNode->nextSibling();
992 990
993 fragment.removeNode(refNode); 991 fragment.removeNode(refNode);
994 992
995 Node* blockStart = enclosingBlock(insertionPos.deprecatedNode()); 993 Node* blockStart = enclosingBlock(insertionPos.deprecatedNode());
996 if ((isListElement(refNode.get()) || (isLegacyAppleStyleSpan(refNode.get()) && isListElement(refNode->firstChild()))) 994 if ((isListElement(refNode.get()) || (isStyleSpan(refNode.get()) && isListEl ement(refNode->firstChild())))
997 && blockStart && blockStart->renderer()->isListItem()) 995 && blockStart && blockStart->renderer()->isListItem())
998 refNode = insertAsListItems(refNode, blockStart, insertionPos); 996 refNode = insertAsListItems(refNode, blockStart, insertionPos);
999 else 997 else
1000 insertNodeAtAndUpdateNodesInserted(refNode, insertionPos); 998 insertNodeAtAndUpdateNodesInserted(refNode, insertionPos);
1001 999
1002 // Mutation events (bug 22634) may have already removed the inserted content 1000 // Mutation events (bug 22634) may have already removed the inserted content
1003 if (!refNode->inDocument()) 1001 if (!refNode->inDocument())
1004 return; 1002 return;
1005 1003
1006 bool plainTextFragment = isPlainTextMarkup(refNode.get()); 1004 bool plainTextFragment = isPlainTextMarkup(refNode.get());
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
1327 return false; 1325 return false;
1328 1326
1329 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d); 1327 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d);
1330 1328
1331 setEndingSelection(selectionAfterReplace); 1329 setEndingSelection(selectionAfterReplace);
1332 1330
1333 return true; 1331 return true;
1334 } 1332 }
1335 1333
1336 } // namespace WebCore 1334 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/WebCore/editing/EditingStyle.cpp ('k') | Source/WebCore/editing/markup.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698