X-Git-Url: https://jasonwoof.com/gitweb/?p=ckeditor.git;a=blobdiff_plain;f=_source%2Fplugins%2Fjustify%2Fplugin.js;h=8d306b995aaa12acf78b827d1a07ccb6bf8e5840;hp=a3ff0ddd192aad332bdff771e0d5d85d7b720fc1;hb=e371ddf8abcb89013e20e6d0dd746adec344d0e5;hpb=055b6b0792ce7dc53d47af606b367c04b927c2ab diff --git a/_source/plugins/justify/plugin.js b/_source/plugins/justify/plugin.js index a3ff0dd..8d306b9 100644 --- a/_source/plugins/justify/plugin.js +++ b/_source/plugins/justify/plugin.js @@ -9,8 +9,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license (function() { - var alignRemoveRegex = /(-moz-|-webkit-|start|auto)/i; - function getState( editor, path ) { var firstBlock = path.block || path.blockLimit; @@ -18,10 +16,24 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( !firstBlock || firstBlock.getName() == 'body' ) return CKEDITOR.TRISTATE_OFF; - var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' ); - if ( ( !currentAlign && this.isDefaultAlign ) || currentAlign == this.value ) - return CKEDITOR.TRISTATE_ON; - return CKEDITOR.TRISTATE_OFF; + return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ? + CKEDITOR.TRISTATE_ON : + CKEDITOR.TRISTATE_OFF; + } + + function getAlignment( element, useComputedState ) + { + useComputedState = useComputedState === undefined || useComputedState; + + var align = useComputedState ? + element.getComputedStyle( 'text-align' ) : + element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || ''; + + align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) ); + + !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' ); + + return align; } function onSelectionChange( evt ) @@ -36,10 +48,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license this.name = name; this.value = value; - var contentDir = editor.config.contentsLangDirection; - this.isDefaultAlign = ( value == 'left' && contentDir == 'ltr' ) || - ( value == 'right' && contentDir == 'rtl' ); - var classes = editor.config.justifyClasses; if ( classes ) { @@ -73,12 +81,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license return; var bookmarks = selection.createBookmarks(), - ranges = selection.getRanges(); - + ranges = selection.getRanges( true ); var cssClassName = this.cssClassName, iterator, block; + + var useComputedState = editor.config.useComputedState; + useComputedState = useComputedState === undefined || useComputedState; + for ( var i = ranges.length - 1 ; i >= 0 ; i-- ) { iterator = ranges[ i ].createIterator(); @@ -87,26 +98,26 @@ For licensing, see LICENSE.html or http://ckeditor.com/license while ( ( block = iterator.getNextParagraph() ) ) { block.removeAttribute( 'align' ); + block.removeStyle( 'text-align' ); + + // Remove any of the alignment classes from the className. + var className = cssClassName && ( block.$.className = + CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) ); + + var apply = + ( this.state == CKEDITOR.TRISTATE_OFF ) && + ( !useComputedState || ( getAlignment( block, true ) != this.value ) ); if ( cssClassName ) { - // Remove any of the alignment classes from the className. - var className = block.$.className = - CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ); - // Append the desired class name. - if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign ) + if ( apply ) block.addClass( cssClassName ); else if ( !className ) block.removeAttribute( 'class' ); } - else - { - if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign ) - block.setStyle( 'text-align', this.value ); - else - block.removeStyle( 'text-align' ); - } + else if ( apply ) + block.setStyle( 'text-align', this.value ); } }