| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2007, 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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 | 314 |
| 315 if (!element.hasAttributes()) | 315 if (!element.hasAttributes()) |
| 316 return true; | 316 return true; |
| 317 | 317 |
| 318 return false; | 318 return false; |
| 319 } | 319 } |
| 320 | 320 |
| 321 void CompositeEditCommand::insertNodeBefore(Node* insertChild, Node* refChild, E
ditingState* editingState, ShouldAssumeContentIsAlwaysEditable shouldAssumeConte
ntIsAlwaysEditable) | 321 void CompositeEditCommand::insertNodeBefore(Node* insertChild, Node* refChild, E
ditingState* editingState, ShouldAssumeContentIsAlwaysEditable shouldAssumeConte
ntIsAlwaysEditable) |
| 322 { | 322 { |
| 323 DCHECK_NE(document().body(), refChild); | 323 DCHECK_NE(document().body(), refChild); |
| 324 ABORT_EDITING_COMMAND_IF(!refChild->parentNode()->hasEditableStyle() && refC
hild->parentNode()->inActiveDocument()); | 324 ABORT_EDITING_COMMAND_IF(!hasEditableStyle(*refChild->parentNode()) && refCh
ild->parentNode()->inActiveDocument()); |
| 325 applyCommandToComposite(InsertNodeBeforeCommand::create(insertChild, refChil
d, shouldAssumeContentIsAlwaysEditable), editingState); | 325 applyCommandToComposite(InsertNodeBeforeCommand::create(insertChild, refChil
d, shouldAssumeContentIsAlwaysEditable), editingState); |
| 326 } | 326 } |
| 327 | 327 |
| 328 void CompositeEditCommand::insertNodeAfter(Node* insertChild, Node* refChild, Ed
itingState* editingState) | 328 void CompositeEditCommand::insertNodeAfter(Node* insertChild, Node* refChild, Ed
itingState* editingState) |
| 329 { | 329 { |
| 330 DCHECK(insertChild); | 330 DCHECK(insertChild); |
| 331 DCHECK(refChild); | 331 DCHECK(refChild); |
| 332 DCHECK_NE(document().body(), refChild); | 332 DCHECK_NE(document().body(), refChild); |
| 333 ContainerNode* parent = refChild->parentNode(); | 333 ContainerNode* parent = refChild->parentNode(); |
| 334 DCHECK(parent); | 334 DCHECK(parent); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 // of an OBJECT element, the ASSERT below may fire since the return | 379 // of an OBJECT element, the ASSERT below may fire since the return |
| 380 // value of canHaveChildrenForEditing is not reliable until the layout | 380 // value of canHaveChildrenForEditing is not reliable until the layout |
| 381 // object of the OBJECT is created. Hence we ignore this check for OBJECTs. | 381 // object of the OBJECT is created. Hence we ignore this check for OBJECTs. |
| 382 // TODO(yosin): We should move following |ABORT_EDITING_COMMAND_IF|s to | 382 // TODO(yosin): We should move following |ABORT_EDITING_COMMAND_IF|s to |
| 383 // |AppendNodeCommand|. | 383 // |AppendNodeCommand|. |
| 384 // TODO(yosin): We should get rid of |canHaveChildrenForEditing()|, since | 384 // TODO(yosin): We should get rid of |canHaveChildrenForEditing()|, since |
| 385 // |cloneParagraphUnderNewElement()| attempt to clone non-well-formed HTML, | 385 // |cloneParagraphUnderNewElement()| attempt to clone non-well-formed HTML, |
| 386 // produced by JavaScript. | 386 // produced by JavaScript. |
| 387 ABORT_EDITING_COMMAND_IF(!canHaveChildrenForEditing(parent) | 387 ABORT_EDITING_COMMAND_IF(!canHaveChildrenForEditing(parent) |
| 388 && !(parent->isElementNode() && toElement(parent)->tagQName() == objectT
ag)); | 388 && !(parent->isElementNode() && toElement(parent)->tagQName() == objectT
ag)); |
| 389 ABORT_EDITING_COMMAND_IF(!parent->hasEditableStyle() && parent->inActiveDocu
ment()); | 389 ABORT_EDITING_COMMAND_IF(!hasEditableStyle(*parent) && parent->inActiveDocum
ent()); |
| 390 applyCommandToComposite(AppendNodeCommand::create(parent, node), editingStat
e); | 390 applyCommandToComposite(AppendNodeCommand::create(parent, node), editingStat
e); |
| 391 } | 391 } |
| 392 | 392 |
| 393 void CompositeEditCommand::removeChildrenInRange(Node* node, unsigned from, unsi
gned to, EditingState* editingState) | 393 void CompositeEditCommand::removeChildrenInRange(Node* node, unsigned from, unsi
gned to, EditingState* editingState) |
| 394 { | 394 { |
| 395 HeapVector<Member<Node>> children; | 395 HeapVector<Member<Node>> children; |
| 396 Node* child = NodeTraversal::childAt(*node, from); | 396 Node* child = NodeTraversal::childAt(*node, from); |
| 397 for (unsigned i = from; child && i < to; i++, child = child->nextSibling()) | 397 for (unsigned i = from; child && i < to; i++, child = child->nextSibling()) |
| 398 children.append(child); | 398 children.append(child); |
| 399 | 399 |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 } | 652 } |
| 653 | 653 |
| 654 bool CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor(const String& tex
t) const | 654 bool CompositeEditCommand::shouldRebalanceLeadingWhitespaceFor(const String& tex
t) const |
| 655 { | 655 { |
| 656 return containsOnlyWhitespace(text); | 656 return containsOnlyWhitespace(text); |
| 657 } | 657 } |
| 658 | 658 |
| 659 bool CompositeEditCommand::canRebalance(const Position& position) const | 659 bool CompositeEditCommand::canRebalance(const Position& position) const |
| 660 { | 660 { |
| 661 Node* node = position.computeContainerNode(); | 661 Node* node = position.computeContainerNode(); |
| 662 if (!position.isOffsetInAnchor() || !node || !node->isTextNode() || !node->l
ayoutObjectIsRichlyEditable()) | 662 if (!position.isOffsetInAnchor() || !node || !node->isTextNode() || !layoutO
bjectIsRichlyEditable(*node)) |
| 663 return false; | 663 return false; |
| 664 | 664 |
| 665 Text* textNode = toText(node); | 665 Text* textNode = toText(node); |
| 666 if (textNode->length() == 0) | 666 if (textNode->length() == 0) |
| 667 return false; | 667 return false; |
| 668 | 668 |
| 669 LayoutText* layoutText = textNode->layoutObject(); | 669 LayoutText* layoutText = textNode->layoutObject(); |
| 670 if (layoutText && !layoutText->style()->collapseWhiteSpace()) | 670 if (layoutText && !layoutText->style()->collapseWhiteSpace()) |
| 671 return false; | 671 return false; |
| 672 | 672 |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 if (!emptyListItem) | 1395 if (!emptyListItem) |
| 1396 return false; | 1396 return false; |
| 1397 | 1397 |
| 1398 EditingStyle* style = EditingStyle::create(endingSelection().start()); | 1398 EditingStyle* style = EditingStyle::create(endingSelection().start()); |
| 1399 style->mergeTypingStyle(&document()); | 1399 style->mergeTypingStyle(&document()); |
| 1400 | 1400 |
| 1401 ContainerNode* listNode = emptyListItem->parentNode(); | 1401 ContainerNode* listNode = emptyListItem->parentNode(); |
| 1402 // FIXME: Can't we do something better when the immediate parent wasn't a li
st node? | 1402 // FIXME: Can't we do something better when the immediate parent wasn't a li
st node? |
| 1403 if (!listNode | 1403 if (!listNode |
| 1404 || (!isHTMLUListElement(*listNode) && !isHTMLOListElement(*listNode)) | 1404 || (!isHTMLUListElement(*listNode) && !isHTMLOListElement(*listNode)) |
| 1405 || !listNode->hasEditableStyle() | 1405 || !hasEditableStyle(*listNode) |
| 1406 || listNode == rootEditableElement(*emptyListItem)) | 1406 || listNode == rootEditableElement(*emptyListItem)) |
| 1407 return false; | 1407 return false; |
| 1408 | 1408 |
| 1409 HTMLElement* newBlock = nullptr; | 1409 HTMLElement* newBlock = nullptr; |
| 1410 if (ContainerNode* blockEnclosingList = listNode->parentNode()) { | 1410 if (ContainerNode* blockEnclosingList = listNode->parentNode()) { |
| 1411 if (isHTMLLIElement(*blockEnclosingList)) { // listNode is inside anothe
r list item | 1411 if (isHTMLLIElement(*blockEnclosingList)) { // listNode is inside anothe
r list item |
| 1412 if (visiblePositionAfterNode(*blockEnclosingList).deepEquivalent() =
= visiblePositionAfterNode(*listNode).deepEquivalent()) { | 1412 if (visiblePositionAfterNode(*blockEnclosingList).deepEquivalent() =
= visiblePositionAfterNode(*listNode).deepEquivalent()) { |
| 1413 // If listNode appears at the end of the outer list item, then m
ove listNode outside of this list item | 1413 // If listNode appears at the end of the outer list item, then m
ove listNode outside of this list item |
| 1414 // e.g. <ul><li>hello <ul><li><br></li></ul> </li></ul> should b
ecome <ul><li>hello</li> <ul><li><br></li></ul> </ul> after this section | 1414 // e.g. <ul><li>hello <ul><li><br></li></ul> </li></ul> should b
ecome <ul><li>hello</li> <ul><li><br></li></ul> </ul> after this section |
| 1415 // If listNode does NOT appear at the end, then we should consid
er it as a regular paragraph. | 1415 // If listNode does NOT appear at the end, then we should consid
er it as a regular paragraph. |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 } | 1628 } |
| 1629 | 1629 |
| 1630 DEFINE_TRACE(CompositeEditCommand) | 1630 DEFINE_TRACE(CompositeEditCommand) |
| 1631 { | 1631 { |
| 1632 visitor->trace(m_commands); | 1632 visitor->trace(m_commands); |
| 1633 visitor->trace(m_composition); | 1633 visitor->trace(m_composition); |
| 1634 EditCommand::trace(visitor); | 1634 EditCommand::trace(visitor); |
| 1635 } | 1635 } |
| 1636 | 1636 |
| 1637 } // namespace blink | 1637 } // namespace blink |
| OLD | NEW |