Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #include "TextEditUtils.h"
7 :
8 : #include "mozilla/Assertions.h"
9 : #include "mozilla/TextEditor.h"
10 : #include "mozilla/dom/Element.h"
11 : #include "nsAString.h"
12 : #include "nsCOMPtr.h"
13 : #include "nsCaseTreatment.h"
14 : #include "nsDebug.h"
15 : #include "nsError.h"
16 : #include "nsGkAtoms.h"
17 : #include "nsIDOMElement.h"
18 : #include "nsIDOMNode.h"
19 : #include "nsNameSpaceManager.h"
20 : #include "nsLiteralString.h"
21 : #include "nsString.h"
22 :
23 : namespace mozilla {
24 :
25 : /******************************************************************************
26 : * TextEditUtils
27 : ******************************************************************************/
28 :
29 : /**
30 : * IsBody() returns true if aNode is an html body node.
31 : */
32 : bool
33 0 : TextEditUtils::IsBody(nsIDOMNode* aNode)
34 : {
35 0 : return EditorBase::NodeIsType(aNode, nsGkAtoms::body);
36 : }
37 :
38 : /**
39 : * IsBreak() returns true if aNode is an html break node.
40 : */
41 : bool
42 0 : TextEditUtils::IsBreak(nsIDOMNode* aNode)
43 : {
44 0 : return EditorBase::NodeIsType(aNode, nsGkAtoms::br);
45 : }
46 :
47 : bool
48 0 : TextEditUtils::IsBreak(nsINode* aNode)
49 : {
50 0 : MOZ_ASSERT(aNode);
51 0 : return aNode->IsHTMLElement(nsGkAtoms::br);
52 : }
53 :
54 :
55 : /**
56 : * IsMozBR() returns true if aNode is an html br node with |type = _moz|.
57 : */
58 : bool
59 0 : TextEditUtils::IsMozBR(nsIDOMNode* aNode)
60 : {
61 0 : MOZ_ASSERT(aNode);
62 0 : return IsBreak(aNode) && HasMozAttr(aNode);
63 : }
64 :
65 : bool
66 0 : TextEditUtils::IsMozBR(nsINode* aNode)
67 : {
68 0 : MOZ_ASSERT(aNode);
69 0 : return aNode->IsHTMLElement(nsGkAtoms::br) &&
70 0 : aNode->AsElement()->AttrValueIs(kNameSpaceID_None, nsGkAtoms::type,
71 0 : NS_LITERAL_STRING("_moz"),
72 0 : eIgnoreCase);
73 : }
74 :
75 : /**
76 : * HasMozAttr() returns true if aNode has type attribute and its value is
77 : * |_moz|. (Used to indicate div's and br's we use in mail compose rules)
78 : */
79 : bool
80 0 : TextEditUtils::HasMozAttr(nsIDOMNode* aNode)
81 : {
82 0 : MOZ_ASSERT(aNode);
83 0 : nsCOMPtr<nsIDOMElement> element = do_QueryInterface(aNode);
84 0 : if (!element) {
85 0 : return false;
86 : }
87 0 : nsAutoString typeAttrVal;
88 0 : nsresult rv = element->GetAttribute(NS_LITERAL_STRING("type"), typeAttrVal);
89 0 : return NS_SUCCEEDED(rv) && typeAttrVal.LowerCaseEqualsLiteral("_moz");
90 : }
91 :
92 : /******************************************************************************
93 : * AutoEditInitRulesTrigger
94 : ******************************************************************************/
95 :
96 2 : AutoEditInitRulesTrigger::AutoEditInitRulesTrigger(TextEditor* aTextEditor,
97 2 : nsresult& aResult)
98 : : mTextEditor(aTextEditor)
99 2 : , mResult(aResult)
100 : {
101 2 : if (mTextEditor) {
102 2 : mTextEditor->BeginEditorInit();
103 : }
104 2 : }
105 :
106 4 : AutoEditInitRulesTrigger::~AutoEditInitRulesTrigger()
107 : {
108 2 : if (mTextEditor) {
109 2 : mResult = mTextEditor->EndEditorInit();
110 : }
111 2 : }
112 :
113 : } // namespace mozilla
|