summaryrefslogtreecommitdiffstats
path: root/WebCore/editing/SplitTextNodeCommand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/editing/SplitTextNodeCommand.cpp')
-rw-r--r--WebCore/editing/SplitTextNodeCommand.cpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/WebCore/editing/SplitTextNodeCommand.cpp b/WebCore/editing/SplitTextNodeCommand.cpp
index 15daa49..9a7e3b3 100644
--- a/WebCore/editing/SplitTextNodeCommand.cpp
+++ b/WebCore/editing/SplitTextNodeCommand.cpp
@@ -54,21 +54,15 @@ void SplitTextNodeCommand::doApply()
return;
ExceptionCode ec = 0;
-
String prefixText = m_text2->substringData(0, m_offset, ec);
if (prefixText.isEmpty())
return;
- RefPtr<Text> prefixTextNode = Text::create(document(), prefixText);
- ASSERT(prefixTextNode);
- document()->copyMarkers(m_text2.get(), 0, m_offset, prefixTextNode.get(), 0);
+ m_text1 = Text::create(document(), prefixText);
+ ASSERT(m_text1);
+ document()->copyMarkers(m_text2.get(), 0, m_offset, m_text1.get(), 0);
- parent->insertBefore(prefixTextNode.get(), m_text2.get(), ec);
- if (ec)
- return;
-
- m_text2->deleteData(0, m_offset, ec);
- m_text1 = prefixTextNode.release();
+ insertText1AndTrimText2();
}
void SplitTextNodeCommand::doUnapply()
@@ -78,16 +72,35 @@ void SplitTextNodeCommand::doUnapply()
ASSERT(m_text1->document() == document());
- RefPtr<Text> prefixTextNode = m_text1.release();
- String prefixText = prefixTextNode->data();
+ String prefixText = m_text1->data();
ExceptionCode ec = 0;
m_text2->insertData(0, prefixText, ec);
- if (ec)
+ ASSERT(!ec);
+
+ document()->copyMarkers(m_text1.get(), 0, prefixText.length(), m_text2.get(), 0);
+ m_text1->remove(ec);
+}
+
+void SplitTextNodeCommand::doReapply()
+{
+ if (!m_text1 || !m_text2)
return;
- document()->copyMarkers(prefixTextNode.get(), 0, prefixText.length(), m_text2.get(), 0);
- prefixTextNode->remove(ec);
+ Node* parent = m_text2->parentNode();
+ if (!parent || !parent->isContentEditable())
+ return;
+
+ insertText1AndTrimText2();
}
+void SplitTextNodeCommand::insertText1AndTrimText2()
+{
+ ExceptionCode ec = 0;
+ m_text2->parentNode()->insertBefore(m_text1.get(), m_text2.get(), ec);
+ if (ec)
+ return;
+ m_text2->deleteData(0, m_offset, ec);
+}
+
} // namespace WebCore