Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(819)

Unified Diff: Source/core/editing/FormatBlockCommand.cpp

Issue 1294543005: Move execCommand related files in core/editing/ related files into core/editing/commands/ (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-08-18T14:20:58 Rebase for merging code style fixes Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/editing/FormatBlockCommand.cpp
diff --git a/Source/core/editing/FormatBlockCommand.cpp b/Source/core/editing/FormatBlockCommand.cpp
deleted file mode 100644
index 658dda25bf7ea782782f48efb2fceed3c99b997d..0000000000000000000000000000000000000000
--- a/Source/core/editing/FormatBlockCommand.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright (C) 2006 Apple Computer, 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 COMPUTER, 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 COMPUTER, 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 "core/editing/FormatBlockCommand.h"
-
-#include "bindings/core/v8/ExceptionStatePlaceholder.h"
-#include "core/HTMLNames.h"
-#include "core/dom/Element.h"
-#include "core/dom/Range.h"
-#include "core/editing/EditingUtilities.h"
-#include "core/editing/VisibleUnits.h"
-#include "core/html/HTMLBRElement.h"
-#include "core/html/HTMLElement.h"
-
-namespace blink {
-
-using namespace HTMLNames;
-
-static Node* enclosingBlockToSplitTreeTo(Node* startNode);
-static bool isElementForFormatBlock(const QualifiedName& tagName);
-static inline bool isElementForFormatBlock(Node* node)
-{
- return node->isElementNode() && isElementForFormatBlock(toElement(node)->tagQName());
-}
-
-static Element* enclosingBlockFlowElement(const VisiblePosition& visiblePosition)
-{
- if (visiblePosition.isNull())
- return nullptr;
- return enclosingBlockFlowElement(*visiblePosition.deepEquivalent().anchorNode());
-}
-
-FormatBlockCommand::FormatBlockCommand(Document& document, const QualifiedName& tagName)
- : ApplyBlockElementCommand(document, tagName)
- , m_didApply(false)
-{
-}
-
-void FormatBlockCommand::formatSelection(const VisiblePosition& startOfSelection, const VisiblePosition& endOfSelection)
-{
- if (!isElementForFormatBlock(tagName()))
- return;
- ApplyBlockElementCommand::formatSelection(startOfSelection, endOfSelection);
- m_didApply = true;
-}
-
-void FormatBlockCommand::formatRange(const Position& start, const Position& end, const Position& endOfSelection, RefPtrWillBeRawPtr<HTMLElement>& blockElement)
-{
- Element* refElement = enclosingBlockFlowElement(VisiblePosition(end));
- Element* root = editableRootForPosition(start);
- // Root is null for elements with contenteditable=false.
- if (!root || !refElement)
- return;
-
- Node* nodeToSplitTo = enclosingBlockToSplitTreeTo(start.anchorNode());
- RefPtrWillBeRawPtr<Node> outerBlock = (start.anchorNode() == nodeToSplitTo) ? start.anchorNode() : splitTreeToNode(start.anchorNode(), nodeToSplitTo).get();
- RefPtrWillBeRawPtr<Node> nodeAfterInsertionPosition = outerBlock;
- RefPtrWillBeRawPtr<Range> range = Range::create(document(), start, endOfSelection);
-
- if (isElementForFormatBlock(refElement->tagQName()) && VisiblePosition(start).deepEquivalent() == startOfBlock(VisiblePosition(start)).deepEquivalent()
- && (VisiblePosition(end).deepEquivalent() == endOfBlock(VisiblePosition(end)).deepEquivalent() || isNodeVisiblyContainedWithin(*refElement, *range))
- && refElement != root && !root->isDescendantOf(refElement)) {
- // Already in a block element that only contains the current paragraph
- if (refElement->hasTagName(tagName()))
- return;
- nodeAfterInsertionPosition = refElement;
- }
-
- if (!blockElement) {
- // Create a new blockquote and insert it as a child of the root editable element. We accomplish
- // this by splitting all parents of the current paragraph up to that point.
- blockElement = createBlockElement();
- insertNodeBefore(blockElement, nodeAfterInsertionPosition);
- }
-
- Position lastParagraphInBlockNode = blockElement->lastChild() ? positionAfterNode(blockElement->lastChild()) : Position();
- bool wasEndOfParagraph = isEndOfParagraph(VisiblePosition(lastParagraphInBlockNode));
-
- moveParagraphWithClones(VisiblePosition(start), VisiblePosition(end), blockElement.get(), outerBlock.get());
-
- // Copy the inline style of the original block element to the newly created block-style element.
- if (outerBlock.get() != nodeAfterInsertionPosition.get() && toHTMLElement(nodeAfterInsertionPosition.get())->hasAttribute(styleAttr))
- blockElement->setAttribute(styleAttr, toHTMLElement(nodeAfterInsertionPosition.get())->getAttribute(styleAttr));
-
- if (wasEndOfParagraph && !isEndOfParagraph(VisiblePosition(lastParagraphInBlockNode)) && !isStartOfParagraph(VisiblePosition(lastParagraphInBlockNode)))
- insertBlockPlaceholder(lastParagraphInBlockNode);
-}
-
-Element* FormatBlockCommand::elementForFormatBlockCommand(Range* range)
-{
- if (!range)
- return 0;
-
- Node* commonAncestor = range->commonAncestorContainer();
- while (commonAncestor && !isElementForFormatBlock(commonAncestor))
- commonAncestor = commonAncestor->parentNode();
-
- if (!commonAncestor)
- return 0;
-
- Element* rootEditableElement = range->startContainer()->rootEditableElement();
- if (!rootEditableElement || commonAncestor->contains(rootEditableElement))
- return 0;
-
- return commonAncestor->isElementNode() ? toElement(commonAncestor) : 0;
-}
-
-bool isElementForFormatBlock(const QualifiedName& tagName)
-{
- DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, blockTags, ());
- if (blockTags.isEmpty()) {
- blockTags.add(addressTag);
- blockTags.add(articleTag);
- blockTags.add(asideTag);
- blockTags.add(blockquoteTag);
- blockTags.add(ddTag);
- blockTags.add(divTag);
- blockTags.add(dlTag);
- blockTags.add(dtTag);
- blockTags.add(footerTag);
- blockTags.add(h1Tag);
- blockTags.add(h2Tag);
- blockTags.add(h3Tag);
- blockTags.add(h4Tag);
- blockTags.add(h5Tag);
- blockTags.add(h6Tag);
- blockTags.add(headerTag);
- blockTags.add(hgroupTag);
- blockTags.add(mainTag);
- blockTags.add(navTag);
- blockTags.add(pTag);
- blockTags.add(preTag);
- blockTags.add(sectionTag);
- }
- return blockTags.contains(tagName);
-}
-
-Node* enclosingBlockToSplitTreeTo(Node* startNode)
-{
- Node* lastBlock = startNode;
- for (Node* n = startNode; n; n = n->parentNode()) {
- if (!n->hasEditableStyle())
- return lastBlock;
- if (isTableCell(n) || isHTMLBodyElement(*n) || !n->parentNode() || !n->parentNode()->hasEditableStyle() || isElementForFormatBlock(n))
- return n;
- if (isBlock(n))
- lastBlock = n;
- if (isHTMLListElement(n))
- return n->parentNode()->hasEditableStyle() ? n->parentNode() : n;
- }
- return lastBlock;
-}
-
-}

Powered by Google App Engine
This is Rietveld 408576698