57 | | var dirBefore = element.getComputedStyle( 'direction' ); |
58 | | |
59 | | element.removeStyle( 'direction' ); |
60 | | element.removeAttribute( 'dir' ); |
| 57 | // Check first whether one of the ancestors |
| 58 | // has already been styled. |
| 59 | var parent = element; |
| 60 | while ( ( parent = parent.getParent() ) && !parent.is( 'body' ) ) |
| 61 | { |
| 62 | if ( parent.getCustomData( 'bidi_processed' ) ) |
| 63 | { |
| 64 | // Ancestor style must dominate. |
| 65 | element.removeStyle( 'direction' ); |
| 66 | element.removeAttribute( 'dir' ); |
| 67 | return; |
| 68 | } |
| 69 | } |
62 | | if ( state == CKEDITOR.TRISTATE_OFF && element.getComputedStyle( 'direction' ).toLowerCase() != dir ) |
63 | | element.setAttribute( 'dir', dir ); |
| 71 | var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1; |
| 72 | |
| 73 | var elementDir = useComputedState ? element.getComputedStyle( 'direction' ) |
| 74 | : element.getStyle( 'direction' ) || element.hasAttribute( 'dir' ); |
| 75 | |
| 76 | // Stop if direction is same as present. |
| 77 | if ( elementDir == dir ) |
| 78 | return; |
| 79 | |
| 80 | // Reuse computedState if we already have it. |
| 81 | var dirBefore = useComputedState ? elementDir : element.getComputedStyle( 'direction' ); |
| 82 | |
| 83 | // Clear direction on this element. |
| 84 | element.removeStyle( 'direction' ); |
| 85 | |
| 86 | // Set new direction for this element. |
| 87 | element.setAttribute( 'dir', dir ); |
136 | | if ( selectedElement ) |
137 | | { |
138 | | if ( !selectedElement.isReadOnly() ) |
139 | | switchDir( selectedElement, dir, editor, this.state ); |
140 | | } |
141 | | else |
142 | | { |
143 | | // Creates bookmarks for selection, as we may split some blocks. |
144 | | var bookmarks = selection.createBookmarks(); |
| 164 | if ( selectedElement && !selectedElement.isReadOnly() ) |
| 165 | switchDir( selectedElement, dir, editor, database ); |
| 166 | |
| 167 | // Creates bookmarks for selection, as we may split some blocks. |
| 168 | var bookmarks = selection.createBookmarks(); |
149 | | for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) |
150 | | { |
151 | | // Array of elements processed as guardElements. |
152 | | var processedElements = []; |
153 | | // Walker searching for guardElements. |
154 | | var walker = new CKEDITOR.dom.walker( ranges[ i ] ); |
155 | | walker.evaluator = function( node ){ |
156 | | return node.type == CKEDITOR.NODE_ELEMENT |
157 | | && node.getName() in guardElements |
158 | | && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' |
159 | | && node.getParent().type == CKEDITOR.NODE_ELEMENT |
160 | | && node.getParent().getName() == 'blockquote' |
161 | | ); |
162 | | }; |
| 173 | for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) |
| 174 | { |
| 175 | // Array of elements processed as guardElements. |
| 176 | var processedElements = []; |
| 177 | // Walker searching for guardElements. |
| 178 | var walker = new CKEDITOR.dom.walker( ranges[ i ] ); |
| 179 | walker.evaluator = function( node ) |
| 180 | { |
| 181 | return node.type == CKEDITOR.NODE_ELEMENT |
| 182 | && node.getName() in guardElements |
| 183 | && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' |
| 184 | && node.getParent().type == CKEDITOR.NODE_ELEMENT |
| 185 | && node.getParent().getName() == 'blockquote' |
| 186 | ); |
| 187 | }; |
180 | | // Check if block have been already processed by the walker above. |
181 | | for ( var ii = 0; ii < processedElements.length; ii++ ) |
182 | | { |
183 | | var parent = block.getParent(); |
184 | | |
185 | | while( parent && parent.getName() != 'body' ) |
186 | | { |
187 | | if ( ( parent.$.isSameNode && parent.$.isSameNode( processedElements[ ii ].$ ) ) |
188 | | || parent.$ == processedElements[ ii ].$ ) |
189 | | { |
190 | | _break = 1; |
191 | | break; |
192 | | } |
193 | | parent = parent.getParent(); |
194 | | } |
195 | | |
196 | | if ( _break ) |
197 | | break; |
198 | | } |
199 | | |
200 | | if ( !_break ) |
201 | | { |
202 | | switchDir( block, dir, editor, this.state ); |
203 | | } |
204 | | } |
205 | | } |
206 | | |