OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2005 Apple Computer, 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 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 // If the position is at the beginning of the top quoted content, we don't | 116 // If the position is at the beginning of the top quoted content, we don't |
117 // need to break the quote. Instead, insert the break before the blockquote, | 117 // need to break the quote. Instead, insert the break before the blockquote, |
118 // unless the position is as the end of the the quoted content. | 118 // unless the position is as the end of the the quoted content. |
119 if (isFirstVisiblePositionInNode(visiblePos, topBlockquote) && | 119 if (isFirstVisiblePositionInNode(visiblePos, topBlockquote) && |
120 !isLastVisPosInNode) { | 120 !isLastVisPosInNode) { |
121 insertNodeBefore(breakElement, topBlockquote, editingState); | 121 insertNodeBefore(breakElement, topBlockquote, editingState); |
122 if (editingState->isAborted()) | 122 if (editingState->isAborted()) |
123 return; | 123 return; |
124 document().updateStyleAndLayoutIgnorePendingStylesheets(); | 124 document().updateStyleAndLayoutIgnorePendingStylesheets(); |
125 setEndingSelection(createVisibleSelection( | 125 setEndingSelection(createVisibleSelection( |
126 Position::beforeNode(breakElement), TextAffinity::Downstream, | 126 SelectionInDOMTree::Builder() |
127 endingSelection().isDirectional())); | 127 .collapse(Position::beforeNode(breakElement)) |
| 128 .setIsDirectional(endingSelection().isDirectional()) |
| 129 .build())); |
128 rebalanceWhitespace(); | 130 rebalanceWhitespace(); |
129 return; | 131 return; |
130 } | 132 } |
131 | 133 |
132 // Insert a break after the top blockquote. | 134 // Insert a break after the top blockquote. |
133 insertNodeAfter(breakElement, topBlockquote, editingState); | 135 insertNodeAfter(breakElement, topBlockquote, editingState); |
134 if (editingState->isAborted()) | 136 if (editingState->isAborted()) |
135 return; | 137 return; |
136 | 138 |
137 document().updateStyleAndLayoutIgnorePendingStylesheets(); | 139 document().updateStyleAndLayoutIgnorePendingStylesheets(); |
138 | 140 |
139 // If we're inserting the break at the end of the quoted content, we don't | 141 // If we're inserting the break at the end of the quoted content, we don't |
140 // need to break the quote. | 142 // need to break the quote. |
141 if (isLastVisPosInNode) { | 143 if (isLastVisPosInNode) { |
142 setEndingSelection(createVisibleSelection( | 144 setEndingSelection(createVisibleSelection( |
143 Position::beforeNode(breakElement), TextAffinity::Downstream, | 145 SelectionInDOMTree::Builder() |
144 endingSelection().isDirectional())); | 146 .collapse(Position::beforeNode(breakElement)) |
| 147 .setIsDirectional(endingSelection().isDirectional()) |
| 148 .build())); |
145 rebalanceWhitespace(); | 149 rebalanceWhitespace(); |
146 return; | 150 return; |
147 } | 151 } |
148 | 152 |
149 // Don't move a line break just after the caret. Doing so would create an | 153 // Don't move a line break just after the caret. Doing so would create an |
150 // extra, empty paragraph in the new blockquote. | 154 // extra, empty paragraph in the new blockquote. |
151 if (lineBreakExistsAtVisiblePosition(visiblePos)) { | 155 if (lineBreakExistsAtVisiblePosition(visiblePos)) { |
152 pos = nextPositionOf(pos, PositionMoveType::GraphemeCluster); | 156 pos = nextPositionOf(pos, PositionMoveType::GraphemeCluster); |
153 } | 157 } |
154 | 158 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 } | 267 } |
264 | 268 |
265 // Make sure the cloned block quote renders. | 269 // Make sure the cloned block quote renders. |
266 addBlockPlaceholderIfNeeded(clonedBlockquote, editingState); | 270 addBlockPlaceholderIfNeeded(clonedBlockquote, editingState); |
267 if (editingState->isAborted()) | 271 if (editingState->isAborted()) |
268 return; | 272 return; |
269 | 273 |
270 document().updateStyleAndLayoutIgnorePendingStylesheets(); | 274 document().updateStyleAndLayoutIgnorePendingStylesheets(); |
271 | 275 |
272 // Put the selection right before the break. | 276 // Put the selection right before the break. |
273 setEndingSelection(createVisibleSelection(Position::beforeNode(breakElement), | 277 setEndingSelection(createVisibleSelection( |
274 TextAffinity::Downstream, | 278 SelectionInDOMTree::Builder() |
275 endingSelection().isDirectional())); | 279 .collapse(Position::beforeNode(breakElement)) |
| 280 .setIsDirectional(endingSelection().isDirectional()) |
| 281 .build())); |
276 rebalanceWhitespace(); | 282 rebalanceWhitespace(); |
277 } | 283 } |
278 | 284 |
279 } // namespace blink | 285 } // namespace blink |
OLD | NEW |