summaryrefslogtreecommitdiff
path: root/Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp')
-rw-r--r--Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp b/Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp
new file mode 100644
index 000000000..5b34d0643
--- /dev/null
+++ b/Source/WebCore/editing/ReplaceRangeWithTextCommand.cpp
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ReplaceRangeWithTextCommand.h"
+
+#include "AlternativeTextController.h"
+#include "DataTransfer.h"
+#include "Document.h"
+#include "DocumentFragment.h"
+#include "Editor.h"
+#include "Frame.h"
+#include "ReplaceSelectionCommand.h"
+#include "SetSelectionCommand.h"
+#include "StaticRange.h"
+#include "TextIterator.h"
+#include "markup.h"
+
+namespace WebCore {
+
+ReplaceRangeWithTextCommand::ReplaceRangeWithTextCommand(RefPtr<Range> rangeToBeReplaced, const String& text)
+ : CompositeEditCommand(rangeToBeReplaced->startContainer().document(), EditActionInsertReplacement)
+ , m_rangeToBeReplaced(rangeToBeReplaced)
+ , m_text(text)
+{
+}
+
+bool ReplaceRangeWithTextCommand::willApplyCommand()
+{
+ m_textFragment = createFragmentFromText(*m_rangeToBeReplaced, m_text);
+ return CompositeEditCommand::willApplyCommand();
+}
+
+void ReplaceRangeWithTextCommand::doApply()
+{
+ VisibleSelection selection = *m_rangeToBeReplaced;
+
+ if (!m_rangeToBeReplaced)
+ return;
+
+ if (!frame().selection().shouldChangeSelection(selection))
+ return;
+
+ String previousText = plainText(m_rangeToBeReplaced.get());
+ if (!previousText.length())
+ return;
+
+ applyCommandToComposite(SetSelectionCommand::create(selection, FrameSelection::defaultSetSelectionOptions()));
+ applyCommandToComposite(ReplaceSelectionCommand::create(document(), WTFMove(m_textFragment), ReplaceSelectionCommand::MatchStyle, EditActionPaste));
+}
+
+String ReplaceRangeWithTextCommand::inputEventData() const
+{
+ if (isEditingTextAreaOrTextInput())
+ return m_text;
+
+ return CompositeEditCommand::inputEventData();
+}
+
+RefPtr<DataTransfer> ReplaceRangeWithTextCommand::inputEventDataTransfer() const
+{
+ if (!isEditingTextAreaOrTextInput())
+ return DataTransfer::createForInputEvent(m_text, createMarkup(*m_textFragment));
+
+ return CompositeEditCommand::inputEventDataTransfer();
+}
+
+Vector<RefPtr<StaticRange>> ReplaceRangeWithTextCommand::targetRanges() const
+{
+ RefPtr<StaticRange> range = StaticRange::createFromRange(*m_rangeToBeReplaced);
+ return { 1, range };
+}
+
+} // namespace WebCore