84 | | if ( state == CKEDITOR.TRISTATE_OFF && element.getComputedStyle( 'direction' ).toLowerCase() != dir ) |
85 | | element.setAttribute( 'dir', dir ); |
| 95 | var useComputedState = ( 'useComputedState' in editor.config ) ? editor.config.useComputedState : 1; |
| 96 | |
| 97 | var elementDir = useComputedState ? element.getComputedStyle( 'direction' ) |
| 98 | : element.getStyle( 'direction' ) || element.hasAttribute( 'dir' ); |
| 99 | |
| 100 | // Stop if direction is same as present. |
| 101 | if ( elementDir == dir ) |
| 102 | return null; |
| 103 | |
| 104 | // Reuse computedState if we already have it. |
| 105 | var dirBefore = useComputedState ? elementDir : element.getComputedStyle( 'direction' ); |
| 106 | |
| 107 | // Clear direction on this element. |
| 108 | element.removeStyle( 'direction' ); |
| 109 | |
| 110 | // Do the second check when computed state is ON, to check |
| 111 | // if we need to apply explicit direction on this element. |
| 112 | if ( useComputedState ) |
| 113 | { |
| 114 | element.removeAttribute( 'dir' ); |
| 115 | if ( dir != element.getComputedStyle( 'direction' ) ) |
| 116 | element.setAttribute( 'dir', dir ); |
| 117 | } |
| 118 | else |
| 119 | // Set new direction for this element. |
| 120 | element.setAttribute( 'dir', dir ); |
130 | | if ( selectedElement ) |
131 | | { |
132 | | if ( !selectedElement.isReadOnly() ) |
133 | | switchDir( selectedElement, dir, editor, this.state ); |
134 | | } |
135 | | else |
136 | | { |
137 | | // Creates bookmarks for selection, as we may split some blocks. |
138 | | var bookmarks = selection.createBookmarks(); |
| 167 | if ( selectedElement && !selectedElement.isReadOnly() ) |
| 168 | switchDir( selectedElement, dir, editor, database ); |
| 169 | |
| 170 | // Creates bookmarks for selection, as we may split some blocks. |
| 171 | var bookmarks = selection.createBookmarks(); |
143 | | for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) |
144 | | { |
145 | | // Array of elements processed as guardElements. |
146 | | var processedElements = []; |
147 | | // Walker searching for guardElements. |
148 | | var walker = new CKEDITOR.dom.walker( ranges[ i ] ); |
149 | | walker.evaluator = function( node ){ |
150 | | return node.type == CKEDITOR.NODE_ELEMENT |
151 | | && node.getName() in guardElements |
152 | | && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' |
153 | | && node.getParent().type == CKEDITOR.NODE_ELEMENT |
154 | | && node.getParent().getName() == 'blockquote' |
155 | | ); |
156 | | }; |
| 176 | for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) |
| 177 | { |
| 178 | // Array of elements processed as guardElements. |
| 179 | var processedElements = []; |
| 180 | // Walker searching for guardElements. |
| 181 | var walker = new CKEDITOR.dom.walker( ranges[ i ] ); |
| 182 | walker.evaluator = function( node ) |
| 183 | { |
| 184 | return node.type == CKEDITOR.NODE_ELEMENT |
| 185 | && node.getName() in guardElements |
| 186 | && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' |
| 187 | && node.getParent().type == CKEDITOR.NODE_ELEMENT |
| 188 | && node.getParent().getName() == 'blockquote' |
| 189 | ); |
| 190 | }; |
174 | | // Check if block have been already processed by the walker above. |
175 | | for ( var ii = 0; ii < processedElements.length; ii++ ) |
176 | | { |
177 | | var parent = block.getParent(); |
178 | | |
179 | | while( parent && parent.getName() != 'body' ) |
180 | | { |
181 | | if ( ( parent.$.isSameNode && parent.$.isSameNode( processedElements[ ii ].$ ) ) |
182 | | || parent.$ == processedElements[ ii ].$ ) |
183 | | { |
184 | | _break = 1; |
185 | | break; |
186 | | } |
187 | | parent = parent.getParent(); |
188 | | } |
189 | | |
190 | | if ( _break ) |
191 | | break; |
192 | | } |
193 | | |
194 | | if ( !_break ) |
195 | | { |
196 | | switchDir( block, dir, editor, this.state ); |
197 | | } |
198 | | } |
199 | | } |
200 | | |