void DecreaseSelectionListLevelCommand::doApply() { Node* startListChild; Node* endListChild; if (!canDecreaseListLevel(endingSelection(), startListChild, endListChild)) return; Node* previousItem = startListChild->renderer()->previousSibling() ? startListChild->renderer()->previousSibling()->node() : 0; Node* nextItem = endListChild->renderer()->nextSibling() ? endListChild->renderer()->nextSibling()->node() : 0; Element* listNode = startListChild->parentElement(); if (!previousItem) { // at start of sublist, move the child(ren) to before the sublist insertSiblingNodeRangeBefore(startListChild, endListChild, listNode); // if that was the whole sublist we moved, remove the sublist node if (!nextItem) removeNode(listNode); } else if (!nextItem) { // at end of list, move the child(ren) to after the sublist insertSiblingNodeRangeAfter(startListChild, endListChild, listNode); } else if (listNode) { // in the middle of list, split the list and move the children to the divide splitElement(listNode, startListChild); insertSiblingNodeRangeBefore(startListChild, endListChild, listNode); } }
void SplitTextNodeContainingElementCommand::doApply() { ASSERT(m_text); ASSERT(m_offset > 0); splitTextNode(m_text.get(), m_offset); Node *parentNode = m_text->parentNode(); if (!parentNode->renderer() || !parentNode->renderer()->isInline()) { wrapContentsInDummySpan(static_cast<Element *>(parentNode)); parentNode = parentNode->firstChild(); } splitElement(static_cast<Element *>(parentNode), m_text.get()); }
void SplitTextNodeContainingElementCommand::doApply() { ASSERT(m_text); ASSERT(m_offset > 0); splitTextNode(m_text.get(), m_offset); Element* parent = m_text->parentElement(); if (!parent || !parent->parentElement() || !parent->parentElement()->hasEditableStyle()) return; LayoutObject* parentLayoutObject = parent->layoutObject(); if (!parentLayoutObject || !parentLayoutObject->isInline()) { wrapContentsInDummySpan(parent); Node* firstChild = parent->firstChild(); if (!firstChild || !firstChild->isElementNode()) return; parent = toElement(firstChild); } splitElement(parent, m_text.get()); }
void SplitTextNodeContainingElementCommand::doApply() { ASSERT(m_text); ASSERT(m_offset > 0); splitTextNode(m_text.get(), m_offset); Element* parent = m_text->parentElement(); if (!parent || !parent->parentElement() || !parent->parentElement()->isContentEditable()) return; RenderObject* parentRenderer = parent->renderer(); if (!parentRenderer || !parentRenderer->isInline()) { wrapContentsInDummySpan(parent); Node* firstChild = parent->firstChild(); if (!firstChild || !firstChild->isElementNode()) return; parent = static_cast<Element*>(firstChild); } splitElement(parent, m_text); }
void SplitTextNodeContainingElementCommand::doApply() { ASSERT(m_text); ASSERT(m_offset > 0); splitTextNode(m_text.get(), m_offset); Element* parent = m_text->parentElement(); if (!parent || !parent->parentElement() || !parent->parentElement()->hasEditableStyle()) return; RenderElement* parentRenderer = parent->renderer(); if (!parentRenderer || !parentRenderer->isInline()) { wrapContentsInDummySpan(*parent); Node* firstChild = parent->firstChild(); if (!is<Element>(firstChild)) return; parent = downcast<Element>(firstChild); } splitElement(parent, m_text); }