| Index: Source/core/editing/DeleteSelectionCommand.cpp
|
| diff --git a/Source/core/editing/DeleteSelectionCommand.cpp b/Source/core/editing/DeleteSelectionCommand.cpp
|
| index 459fe2f2c787627401d15fe302a421b8dfab9a4e..7059c7dd7972d15226e0c7a86700c9fb3cb44e22 100644
|
| --- a/Source/core/editing/DeleteSelectionCommand.cpp
|
| +++ b/Source/core/editing/DeleteSelectionCommand.cpp
|
| @@ -43,11 +43,6 @@ namespace WebCore {
|
|
|
| using namespace HTMLNames;
|
|
|
| -static bool isTableRow(const Node* node)
|
| -{
|
| - return node && node->hasTagName(trTag);
|
| -}
|
| -
|
| static bool isTableCellEmpty(Node* cell)
|
| {
|
| ASSERT(isTableCell(cell));
|
| @@ -56,7 +51,7 @@ static bool isTableCellEmpty(Node* cell)
|
|
|
| static bool isTableRowEmpty(Node* row)
|
| {
|
| - if (!isTableRow(row))
|
| + if (!isHTMLTableRowElement(row))
|
| return false;
|
|
|
| for (Node* child = row->firstChild(); child; child = child->nextSibling())
|
| @@ -111,9 +106,9 @@ void DeleteSelectionCommand::initializeStartEnd(Position& start, Position& end)
|
|
|
| // For HRs, we'll get a position at (HR,1) when hitting delete from the beginning of the previous line, or (HR,0) when forward deleting,
|
| // but in these cases, we want to delete it, so manually expand the selection
|
| - if (start.deprecatedNode()->hasTagName(hrTag))
|
| + if (isHTMLHRElement(*start.deprecatedNode()))
|
| start = positionBeforeNode(start.deprecatedNode());
|
| - else if (end.deprecatedNode()->hasTagName(hrTag))
|
| + else if (isHTMLHRElement(*end.deprecatedNode()))
|
| end = positionAfterNode(end.deprecatedNode());
|
|
|
| // FIXME: This is only used so that moveParagraphs can avoid the bugs in special element expansion.
|
| @@ -177,8 +172,8 @@ void DeleteSelectionCommand::initializePositionData()
|
| m_startRoot = editableRootForPosition(start);
|
| m_endRoot = editableRootForPosition(end);
|
|
|
| - m_startTableRow = enclosingNodeOfType(start, &isTableRow);
|
| - m_endTableRow = enclosingNodeOfType(end, &isTableRow);
|
| + m_startTableRow = enclosingNodeOfType(start, &isHTMLTableRowElement);
|
| + m_endTableRow = enclosingNodeOfType(end, &isHTMLTableRowElement);
|
|
|
| // Don't move content out of a table cell.
|
| // If the cell is non-editable, enclosingNodeOfType won't return it by default, so
|
| @@ -305,8 +300,8 @@ bool DeleteSelectionCommand::handleSpecialCaseBRDelete()
|
| return false;
|
|
|
| // Check for special-case where the selection contains only a BR on a line by itself after another BR.
|
| - bool upstreamStartIsBR = nodeAfterUpstreamStart->hasTagName(brTag);
|
| - bool downstreamStartIsBR = nodeAfterDownstreamStart->hasTagName(brTag);
|
| + bool upstreamStartIsBR = isHTMLBRElement(*nodeAfterUpstreamStart);
|
| + bool downstreamStartIsBR = isHTMLBRElement(*nodeAfterDownstreamStart);
|
| bool isBROnLineByItself = upstreamStartIsBR && downstreamStartIsBR && nodeAfterDownstreamStart == nodeAfterUpstreamEnd;
|
| if (isBROnLineByItself) {
|
| removeNode(nodeAfterDownstreamStart);
|
| @@ -421,7 +416,7 @@ void DeleteSelectionCommand::makeStylingElementsDirectChildrenOfEditableRootToPr
|
| RefPtr<Node> node = range->firstNode();
|
| while (node && node != range->pastLastNode()) {
|
| RefPtr<Node> nextNode = NodeTraversal::next(*node);
|
| - if ((node->hasTagName(styleTag) && !(toElement(node)->hasAttribute(scopedAttr))) || node->hasTagName(linkTag)) {
|
| + if ((isHTMLStyleElement(*node) && !(toElement(node)->hasAttribute(scopedAttr))) || isHTMLLinkElement(*node)) {
|
| nextNode = NodeTraversal::nextSkippingChildren(*node);
|
| RefPtr<ContainerNode> rootEditableElement = node->rootEditableElement();
|
| if (rootEditableElement.get()) {
|
| @@ -445,7 +440,7 @@ void DeleteSelectionCommand::handleGeneralDelete()
|
| makeStylingElementsDirectChildrenOfEditableRootToPreventStyleLoss();
|
|
|
| // Never remove the start block unless it's a table, in which case we won't merge content in.
|
| - if (startNode->isSameNode(m_startBlock.get()) && !startOffset && canHaveChildrenForEditing(startNode) && !startNode->hasTagName(tableTag)) {
|
| + if (startNode->isSameNode(m_startBlock.get()) && !startOffset && canHaveChildrenForEditing(startNode) && !isHTMLTableElement(*startNode)) {
|
| startOffset = 0;
|
| startNode = NodeTraversal::next(*startNode);
|
| if (!startNode)
|
| @@ -643,7 +638,7 @@ void DeleteSelectionCommand::mergeParagraphs()
|
| // The rule for merging into an empty block is: only do so if its farther to the right.
|
| // FIXME: Consider RTL.
|
| if (!m_startsAtEmptyLine && isStartOfParagraph(mergeDestination) && startOfParagraphToMove.absoluteCaretBounds().x() > mergeDestination.absoluteCaretBounds().x()) {
|
| - if (mergeDestination.deepEquivalent().downstream().deprecatedNode()->hasTagName(brTag)) {
|
| + if (isHTMLBRElement(*mergeDestination.deepEquivalent().downstream().deprecatedNode())) {
|
| removeNodeAndPruneAncestors(mergeDestination.deepEquivalent().downstream().deprecatedNode());
|
| m_endingPosition = startOfParagraphToMove.deepEquivalent();
|
| return;
|
|
|