Ticket #6082: 6082_3.patch
File 6082_3.patch, 6.8 KB (added by , 14 years ago) |
---|
-
_source/core/config.js
330 330 baseFloatZIndex : 10000 331 331 }; 332 332 333 /** 334 * Indicates that some of the editor features, like alignement and text 335 * direction, should used the "computed value" of the feature to indicate it's 336 * on/off state, instead of using the "real value". 337 * 338 * If enabled, in a left to right written document, the "Left Justify" 339 * alignment button will show as active, even if the aligment style is not 340 * explicitly applied to the current paragraph in the editor. 341 * @name CKEDITOR.config.useComputedState 342 * @type Boolean 343 * @default true 344 * @example 345 * config.useComputedState = false; 346 */ 347 333 348 // PACKAGER_RENAME( CKEDITOR.config ) -
_source/plugins/bidi/plugin.js
17 17 18 18 function getState( editor, path, dir ) 19 19 { 20 var selection = editor.getSelection(),21 ranges = selection.getRanges();20 var useComputedState = editor.config.useComputedState, 21 selectedElement; 22 22 23 var selectedElement = ranges && ranges[ 0 ].getEnclosedNode();23 useComputedState = useComputedState === undefined || useComputedState; 24 24 25 // If this is not our element of interest, apply to fully selected elements from guardElements. 26 if ( !selectedElement || selectedElement 27 && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements ) 28 ) 29 selectedElement = getFullySelected( selection, guardElements ); 25 if ( useComputedState ) 26 { 27 var selection = editor.getSelection(), 28 ranges = selection.getRanges(); 30 29 30 selectedElement = ranges && ranges[ 0 ].getEnclosedNode(); 31 32 // If this is not our element of interest, apply to fully selected elements from guardElements. 33 if ( !selectedElement || selectedElement 34 && !( selectedElement.type == CKEDITOR.NODE_ELEMENT && selectedElement.getName() in directSelectionGuardElements ) 35 ) 36 selectedElement = getFullySelected( selection, guardElements ); 37 } 38 31 39 selectedElement = selectedElement || path.block || path.blockLimit; 32 40 33 41 if ( !selectedElement || selectedElement.getName() == 'body' ) 34 42 return CKEDITOR.TRISTATE_OFF; 35 43 36 return ( selectedElement.getComputedStyle( 'direction' ) == dir ) ? 44 selectedElement = useComputedState ? 45 selectedElement.getComputedStyle( 'direction' ) : 46 selectedElement.getStyle( 'direction' ) || selectedElement.getAttribute( 'dir' ); 47 48 return ( selectedElement == dir ) ? 37 49 CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF; 38 50 } 39 51 40 52 function switchDir( element, dir, editor ) 41 53 { 42 var dirBefore = element.getComputedStyle( 'direction' ); 54 var dirBefore = element.getComputedStyle( 'direction' ), 55 currentDir = element.getStyle( 'direction' ) || element.getAttribute( 'dir' ) || ''; 43 56 44 if ( element.hasAttribute( 'dir' ) && element.getAttribute( 'dir' ).toLowerCase() == dir ) 57 element.removeStyle( 'direction' ); 58 59 if ( currentDir.toLowerCase() == dir ) 45 60 element.removeAttribute( 'dir' ); 46 61 else 47 62 element.setAttribute( 'dir', dir ); -
_source/plugins/justify/plugin.js
18 18 if ( !firstBlock || firstBlock.getName() == 'body' ) 19 19 return CKEDITOR.TRISTATE_OFF; 20 20 21 var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' ); 22 if ( ( !currentAlign && isDefaultAlign( this, firstBlock ) ) || currentAlign == this.value ) 23 return CKEDITOR.TRISTATE_ON; 24 return CKEDITOR.TRISTATE_OFF; 21 return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ? 22 CKEDITOR.TRISTATE_ON : 23 CKEDITOR.TRISTATE_OFF; 25 24 } 26 25 26 function getAlignment( element, useComputedState ) 27 { 28 useComputedState = useComputedState === undefined || useComputedState; 29 30 var align = useComputedState ? 31 element.getComputedStyle( 'text-align' ) : 32 element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || ''; 33 34 align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) ); 35 36 !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' ); 37 38 return align; 39 } 40 27 41 function onSelectionChange( evt ) 28 42 { 29 43 var command = evt.editor.getCommand( this.name ); … … 31 45 command.fire( 'state' ); 32 46 } 33 47 34 function isDefaultAlign( command, element )35 {36 var direction = element.getComputedStyle( 'direction' ),37 val = command.value;38 return ( direction == 'rtl' && val == 'right' ) || ( direction == 'ltr' && val == 'left' );39 40 }41 42 48 function justifyCommand( editor, name, value ) 43 49 { 44 50 this.name = name; … … 79 85 var bookmarks = selection.createBookmarks(), 80 86 ranges = selection.getRanges( true ); 81 87 82 83 88 var cssClassName = this.cssClassName, 84 89 iterator, 85 90 block; 91 92 var useComputedState = editor.config.useComputedState; 93 useComputedState = useComputedState === undefined || useComputedState; 94 86 95 for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) 87 96 { 88 97 iterator = ranges[ i ].createIterator(); … … 91 100 while ( ( block = iterator.getNextParagraph() ) ) 92 101 { 93 102 block.removeAttribute( 'align' ); 103 block.removeStyle( 'text-align' ); 94 104 95 var isDefault = isDefaultAlign( this, block ); 105 // Remove any of the alignment classes from the className. 106 var className = cssClassName && ( block.$.className = 107 CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) ); 96 108 109 var apply = 110 ( this.state == CKEDITOR.TRISTATE_OFF ) && 111 ( !useComputedState || ( getAlignment( block, true ) == this.value ) ); 112 97 113 if ( cssClassName ) 98 114 { 99 // Remove any of the alignment classes from the className.100 var className = block.$.className =101 CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );102 103 115 // Append the desired class name. 104 if ( this.state == CKEDITOR.TRISTATE_OFF && !isDefault)116 if ( apply ) 105 117 block.addClass( cssClassName ); 106 118 else if ( !className ) 107 119 block.removeAttribute( 'class' ); 108 120 } 109 else 110 { 111 if ( this.state == CKEDITOR.TRISTATE_OFF && !isDefault ) 112 block.setStyle( 'text-align', this.value ); 113 else 114 block.removeStyle( 'text-align' ); 115 } 121 else if ( apply ) 122 block.setStyle( 'text-align', this.value ); 116 123 } 117 124 118 125 }