| 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 | // Set new direction for this element. |
| | 111 | 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(); |
| | 159 | if ( selectedElement && !selectedElement.isReadOnly() ) |
| | 160 | switchDir( selectedElement, dir, editor, database ); |
| | 161 | |
| | 162 | // Creates bookmarks for selection, as we may split some blocks. |
| | 163 | 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 | | }; |
| | 168 | for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) |
| | 169 | { |
| | 170 | // Array of elements processed as guardElements. |
| | 171 | var processedElements = []; |
| | 172 | // Walker searching for guardElements. |
| | 173 | var walker = new CKEDITOR.dom.walker( ranges[ i ] ); |
| | 174 | walker.evaluator = function( node ) |
| | 175 | { |
| | 176 | return node.type == CKEDITOR.NODE_ELEMENT |
| | 177 | && node.getName() in guardElements |
| | 178 | && !( node.getName() == ( enterMode == CKEDITOR.ENTER_P ) ? 'p' : 'div' |
| | 179 | && node.getParent().type == CKEDITOR.NODE_ELEMENT |
| | 180 | && node.getParent().getName() == 'blockquote' |
| | 181 | ); |
| | 182 | }; |
| 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 | | |