void InsertNodeBeforeCommand::doUnapply()
{
    if (!isEditableNode(*m_insertChild))
        return;

    m_insertChild->remove(IGNORE_EXCEPTION);
}
void InsertNodeBeforeCommand::doApply()
{
    ContainerNode* parent = m_refChild->parentNode();
    if (!parent || (m_shouldAssumeContentIsAlwaysEditable == DoNotAssumeContentIsAlwaysEditable && !isEditableNode(*parent)))
        return;
    ASSERT(isEditableNode(*parent));

    parent->insertBefore(*m_insertChild, m_refChild.get(), IGNORE_EXCEPTION);
}
void InsertNodeBeforeCommand::doUnapply()
{
    if (!isEditableNode(*m_insertChild))
        return;

    // Need to notify this before actually deleting the text
    if (shouldPostAccessibilityNotification()) {
        Position position = is<Text>(m_insertChild.get()) ? Position(downcast<Text>(m_insertChild.get()), 0) : createLegacyEditingPosition(m_insertChild.get(), 0);
        notifyAccessibilityForTextChange(m_insertChild.get(), unapplyEditType(), m_insertChild->nodeValue(), VisiblePosition(position));
    }

    m_insertChild->remove(IGNORE_EXCEPTION);
}
void InsertNodeBeforeCommand::doApply()
{
    ContainerNode* parent = m_refChild->parentNode();
    if (!parent || (m_shouldAssumeContentIsAlwaysEditable == DoNotAssumeContentIsAlwaysEditable && !isEditableNode(*parent)))
        return;
    ASSERT(isEditableNode(*parent));

    parent->insertBefore(*m_insertChild, m_refChild.get(), IGNORE_EXCEPTION);

    if (shouldPostAccessibilityNotification()) {
        Position position = is<Text>(m_insertChild.get()) ? Position(downcast<Text>(m_insertChild.get()), 0) : createLegacyEditingPosition(m_insertChild.get(), 0);
        notifyAccessibilityForTextChange(m_insertChild.get(), applyEditType(), m_insertChild->nodeValue(), VisiblePosition(position));
    }
}
void DeleteFromTextNodeCommand::doApply()
{
    ASSERT(m_node);

    if (!isEditableNode(*m_node))
        return;

    ExceptionCode ec = 0;
    m_text = m_node->substringData(m_offset, m_count, ec);
    if (ec)
        return;

    m_node->deleteData(m_offset, m_count, ec);
}