OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2005, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
51 if (!parent || !hasEditableStyle(*parent)) | 51 if (!parent || !hasEditableStyle(*parent)) |
52 return; | 52 return; |
53 | 53 |
54 String prefixText = | 54 String prefixText = |
55 m_text2->substringData(0, m_offset, IGNORE_EXCEPTION_FOR_TESTING); | 55 m_text2->substringData(0, m_offset, IGNORE_EXCEPTION_FOR_TESTING); |
56 if (prefixText.isEmpty()) | 56 if (prefixText.isEmpty()) |
57 return; | 57 return; |
58 | 58 |
59 m_text1 = Text::create(document(), prefixText); | 59 m_text1 = Text::create(document(), prefixText); |
60 DCHECK(m_text1); | 60 DCHECK(m_text1); |
61 document().markers().copyMarkers(m_text2.get(), 0, m_offset, m_text1.get(), | 61 document().markers().moveMarkers(m_text2.get(), 0, m_offset, m_text1.get(), |
62 0); | 62 0); |
63 | 63 |
64 insertText1AndTrimText2(); | 64 insertText1AndTrimText2(); |
65 } | 65 } |
66 | 66 |
67 void SplitTextNodeCommand::doUnapply() { | 67 void SplitTextNodeCommand::doUnapply() { |
68 if (!m_text1 || !hasEditableStyle(*m_text1)) | 68 if (!m_text1 || !hasEditableStyle(*m_text1)) |
69 return; | 69 return; |
70 | 70 |
71 DCHECK_EQ(m_text1->document(), document()); | 71 DCHECK_EQ(m_text1->document(), document()); |
72 | 72 |
73 String prefixText = m_text1->data(); | 73 String prefixText = m_text1->data(); |
74 | 74 |
75 m_text2->insertData(0, prefixText, ASSERT_NO_EXCEPTION); | 75 m_text2->insertData(0, prefixText, ASSERT_NO_EXCEPTION); |
76 document().updateStyleAndLayout(); | 76 document().updateStyleAndLayout(); |
77 | 77 |
78 document().markers().copyMarkers(m_text1.get(), 0, prefixText.length(), | 78 document().markers().moveMarkers(m_text1.get(), 0, prefixText.length(), |
79 m_text2.get(), 0); | 79 m_text2.get(), 0); |
80 m_text1->remove(ASSERT_NO_EXCEPTION); | 80 m_text1->remove(ASSERT_NO_EXCEPTION); |
81 } | 81 } |
82 | 82 |
83 void SplitTextNodeCommand::doReapply() { | 83 void SplitTextNodeCommand::doReapply() { |
84 if (!m_text1 || !m_text2) | 84 if (!m_text1 || !m_text2) |
85 return; | 85 return; |
86 | 86 |
87 ContainerNode* parent = m_text2->parentNode(); | 87 ContainerNode* parent = m_text2->parentNode(); |
88 if (!parent || !hasEditableStyle(*parent)) | 88 if (!parent || !hasEditableStyle(*parent)) |
89 return; | 89 return; |
90 | 90 |
91 document().markers().moveMarkers(m_text2.get(), 0, m_offset, m_text1.get(), | |
rlanday
2017/04/08 02:30:09
I'm glad I wrote the test case in the dependent CL
Xiaocheng
2017/04/08 02:46:40
Good catch!
| |
92 0); | |
91 insertText1AndTrimText2(); | 93 insertText1AndTrimText2(); |
92 } | 94 } |
93 | 95 |
94 void SplitTextNodeCommand::insertText1AndTrimText2() { | 96 void SplitTextNodeCommand::insertText1AndTrimText2() { |
95 DummyExceptionStateForTesting exceptionState; | 97 DummyExceptionStateForTesting exceptionState; |
96 m_text2->parentNode()->insertBefore(m_text1.get(), m_text2.get(), | 98 m_text2->parentNode()->insertBefore(m_text1.get(), m_text2.get(), |
97 exceptionState); | 99 exceptionState); |
98 if (exceptionState.hadException()) | 100 if (exceptionState.hadException()) |
99 return; | 101 return; |
100 m_text2->deleteData(0, m_offset, exceptionState); | 102 m_text2->deleteData(0, m_offset, exceptionState); |
101 document().updateStyleAndLayout(); | 103 document().updateStyleAndLayout(); |
102 } | 104 } |
103 | 105 |
104 DEFINE_TRACE(SplitTextNodeCommand) { | 106 DEFINE_TRACE(SplitTextNodeCommand) { |
105 visitor->trace(m_text1); | 107 visitor->trace(m_text1); |
106 visitor->trace(m_text2); | 108 visitor->trace(m_text2); |
107 SimpleEditCommand::trace(visitor); | 109 SimpleEditCommand::trace(visitor); |
108 } | 110 } |
109 | 111 |
110 } // namespace blink | 112 } // namespace blink |
OLD | NEW |