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

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

Issue 104783005: Fix for an issue while breaking out of an empty list item in case of nested lists (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Resubmitting as base file was missing Created 7 years 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 | « LayoutTests/editing/inserting/break-out-of-nested-lists-expected.txt ('k') | no next file » | 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) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2007 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 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 for (Node* n = node; n && n->parentNode(); n = n->parentNode()) { 673 for (Node* n = node; n && n->parentNode(); n = n->parentNode()) {
674 if (n->hasTagName(liTag) || (isListElement(n->parentNode()) && n != root )) 674 if (n->hasTagName(liTag) || (isListElement(n->parentNode()) && n != root ))
675 return n; 675 return n;
676 if (n == root || isTableCell(n)) 676 if (n == root || isTableCell(n))
677 return 0; 677 return 0;
678 } 678 }
679 679
680 return 0; 680 return 0;
681 } 681 }
682 682
683 static HTMLElement* embeddedSublist(Node* listItem)
684 {
685 // Check the DOM so that we'll find collapsed sublists without renderers.
686 for (Node* n = listItem->firstChild(); n; n = n->nextSibling()) {
687 if (isListElement(n))
688 return toHTMLElement(n);
689 }
690
691 return 0;
692 }
693
694 static Node* appendedSublist(Node* listItem)
695 {
696 // Check the DOM so that we'll find collapsed sublists without renderers.
697 for (Node* n = listItem->nextSibling(); n; n = n->nextSibling()) {
698 if (isListElement(n))
699 return toHTMLElement(n);
700 if (isListItem(listItem))
701 return 0;
702 }
703
704 return 0;
705 }
706
707 // FIXME: This method should not need to call isStartOfParagraph/isEndOfParagrap h 683 // FIXME: This method should not need to call isStartOfParagraph/isEndOfParagrap h
708 Node* enclosingEmptyListItem(const VisiblePosition& visiblePos) 684 Node* enclosingEmptyListItem(const VisiblePosition& visiblePos)
709 { 685 {
710 // Check that position is on a line by itself inside a list item 686 // Check that position is on a line by itself inside a list item
711 Node* listChildNode = enclosingListChild(visiblePos.deepEquivalent().depreca tedNode()); 687 Node* listChildNode = enclosingListChild(visiblePos.deepEquivalent().depreca tedNode());
712 if (!listChildNode || !isStartOfParagraph(visiblePos) || !isEndOfParagraph(v isiblePos)) 688 if (!listChildNode || !isStartOfParagraph(visiblePos) || !isEndOfParagraph(v isiblePos))
713 return 0; 689 return 0;
714 690
715 VisiblePosition firstInListChild(firstPositionInOrBeforeNode(listChildNode)) ; 691 VisiblePosition firstInListChild(firstPositionInOrBeforeNode(listChildNode)) ;
716 VisiblePosition lastInListChild(lastPositionInOrAfterNode(listChildNode)); 692 VisiblePosition lastInListChild(lastPositionInOrAfterNode(listChildNode));
717 693
718 if (firstInListChild != visiblePos || lastInListChild != visiblePos) 694 if (firstInListChild != visiblePos || lastInListChild != visiblePos)
719 return 0; 695 return 0;
720 696
721 if (embeddedSublist(listChildNode) || appendedSublist(listChildNode))
722 return 0;
723
724 return listChildNode; 697 return listChildNode;
725 } 698 }
726 699
727 HTMLElement* outermostEnclosingList(Node* node, Node* rootList) 700 HTMLElement* outermostEnclosingList(Node* node, Node* rootList)
728 { 701 {
729 HTMLElement* list = enclosingList(node); 702 HTMLElement* list = enclosingList(node);
730 if (!list) 703 if (!list)
731 return 0; 704 return 0;
732 705
733 while (HTMLElement* nextList = enclosingList(list)) { 706 while (HTMLElement* nextList = enclosingList(list)) {
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 // if the selection starts just before a paragraph break, skip over it 1133 // if the selection starts just before a paragraph break, skip over it
1161 if (isEndOfParagraph(visiblePosition)) 1134 if (isEndOfParagraph(visiblePosition))
1162 return visiblePosition.next().deepEquivalent().downstream(); 1135 return visiblePosition.next().deepEquivalent().downstream();
1163 1136
1164 // otherwise, make sure to be at the start of the first selected node, 1137 // otherwise, make sure to be at the start of the first selected node,
1165 // instead of possibly at the end of the last node before the selection 1138 // instead of possibly at the end of the last node before the selection
1166 return visiblePosition.deepEquivalent().downstream(); 1139 return visiblePosition.deepEquivalent().downstream();
1167 } 1140 }
1168 1141
1169 } // namespace WebCore 1142 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/editing/inserting/break-out-of-nested-lists-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698