Index: Source/core/editing/htmlediting.cpp |
diff --git a/Source/core/editing/htmlediting.cpp b/Source/core/editing/htmlediting.cpp |
index ce132c1364d78d22c75c1e1b32a52123c745ff77..5d676c08aba1b9a0649bb5be70eee8ff18cc93d7 100644 |
--- a/Source/core/editing/htmlediting.cpp |
+++ b/Source/core/editing/htmlediting.cpp |
@@ -160,7 +160,7 @@ bool isEditablePosition(const Position& p, EditableType editableType, EUpdateSty |
else |
ASSERT(updateStyle == DoNotUpdateStyle); |
- if (node->renderer() && node->renderer()->isTable()) |
+ if (isTableElement(node)) |
node = node->parentNode(); |
return node->rendererIsEditable(editableType); |
@@ -179,7 +179,7 @@ bool isRichlyEditablePosition(const Position& p, EditableType editableType) |
if (!node) |
return false; |
- if (node->renderer() && node->renderer()->isTable()) |
+ if (isTableElement(node)) |
node = node->parentNode(); |
return node->rendererIsRichlyEditable(editableType); |
@@ -191,7 +191,7 @@ Element* editableRootForPosition(const Position& p, EditableType editableType) |
if (!node) |
return 0; |
- if (node->renderer() && node->renderer()->isTable()) |
+ if (isTableElement(node)) |
node = node->parentNode(); |
return node->rootEditableElement(editableType); |
@@ -434,7 +434,7 @@ static Node* firstInSpecialElement(const Position& pos) |
if (isSpecialElement(n)) { |
VisiblePosition vPos = VisiblePosition(pos, DOWNSTREAM); |
VisiblePosition firstInElement = VisiblePosition(firstPositionInOrBeforeNode(n), DOWNSTREAM); |
- if (isTableElement(n) && vPos == firstInElement.next()) |
+ if (isRenderedTable(n) && vPos == firstInElement.next()) |
return n; |
if (vPos == firstInElement) |
return n; |
@@ -449,7 +449,7 @@ static Node* lastInSpecialElement(const Position& pos) |
if (isSpecialElement(n)) { |
VisiblePosition vPos = VisiblePosition(pos, DOWNSTREAM); |
VisiblePosition lastInElement = VisiblePosition(lastPositionInOrAfterNode(n), DOWNSTREAM); |
- if (isTableElement(n) && vPos == lastInElement.previous()) |
+ if (isRenderedTable(n) && vPos == lastInElement.previous()) |
return n; |
if (vPos == lastInElement) |
return n; |
@@ -752,13 +752,20 @@ bool canMergeLists(Element* firstList, Element* secondList) |
// Make sure there is no visible content between this li and the previous list |
} |
-// FIXME: do not require renderer, so that this can be used within fragments, or rename to isRenderedTable() |
-bool isTableElement(Node* n) |
+bool isTableElement(const Node* n) |
{ |
if (!n || !n->isElementNode()) |
return false; |
- RenderObject* renderer = n->renderer(); |
+ return n->hasTagName(tableTag); |
+} |
+ |
+bool isRenderedTable(const Node* node) |
+{ |
+ if (!node || !node->isElementNode()) |
+ return false; |
+ |
+ RenderObject* renderer = node->renderer(); |
return (renderer && (renderer->style()->display() == TABLE || renderer->style()->display() == INLINE_TABLE)); |
} |