void MergeIdenticalElementsCommand::doUnapply() { ASSERT(m_element1); ASSERT(m_element2); RefPtr<Node> atChild = m_atChild.release(); ContainerNode* parent = m_element2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; TrackExceptionState es; parent->insertBefore(m_element1.get(), m_element2.get(), es); if (es.hadException()) return; Vector<RefPtr<Node> > children; for (Node* child = m_element2->firstChild(); child && child != atChild; child = child->nextSibling()) children.append(child); size_t size = children.size(); for (size_t i = 0; i < size; ++i) m_element1->appendChild(children[i].release(), es); }
void SplitElementCommand::executeApply() { if (m_atChild->parentNode() != m_element2) return; Vector<RefPtr<Node> > children; for (Node* node = m_element2->firstChild(); node != m_atChild; node = node->nextSibling()) children.append(node); ExceptionCode ec = 0; ContainerNode* parent = m_element2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; parent->insertBefore(m_element1.get(), m_element2.get(), ec); if (ec) return; // Delete id attribute from the second element because the same id cannot be used for more than one element m_element2->removeAttribute(HTMLNames::idAttr, ec); ASSERT(!ec); size_t size = children.size(); for (size_t i = 0; i < size; ++i) m_element1->appendChild(children[i], ec); }
void SplitTextNodeCommand::doReapply() { if (!m_text1 || !m_text2) return; ContainerNode* parent = m_text2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; insertText1AndTrimText2(); }
void RemoveNodeCommand::doApply() { ContainerNode* parent = m_node->parentNode(); if (!parent || !parent->rendererIsEditable()) return; m_parent = parent; m_refChild = m_node->nextSibling(); ExceptionCode ec; m_node->remove(ec); }
void SplitTextNodeCommand::doApply() { ContainerNode* parent = m_text2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; String prefixText = m_text2->substringData(0, m_offset, IGNORE_EXCEPTION); if (prefixText.isEmpty()) return; m_text1 = Text::create(document(), prefixText); ASSERT(m_text1); document().markers()->copyMarkers(m_text2.get(), 0, m_offset, m_text1.get(), 0); insertText1AndTrimText2(); }
void JoinTextNodesCommand::doApply() { if (m_text1->nextSibling() != m_text2) return; ContainerNode* parent = m_text2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; ExceptionCode ec = 0; m_text2->insertData(0, m_text1->data(), ec); if (ec) return; m_text1->remove(ec); }
void JoinTextNodesCommand::doUnapply() { if (m_text1->parentNode()) return; ContainerNode* parent = m_text2->parentNode(); if (!parent || !parent->rendererIsEditable()) return; ExceptionCode ec = 0; parent->insertBefore(m_text1.get(), m_text2.get(), ec); if (ec) return; m_text2->deleteData(0, m_text1->length(), ec); }