X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fjustify%2Fplugin.js;h=036434ddd4e8d6535c5056e047f81c78d3a74e02;hb=c9fdde67e6384bd5a66adc2b3bba5c4ce9db56c7;hp=a3ff0ddd192aad332bdff771e0d5d85d7b720fc1;hpb=c6e377a02b54abc07129d72b632763c727476a15;p=ckeditor.git diff --git a/_source/plugins/justify/plugin.js b/_source/plugins/justify/plugin.js index a3ff0dd..036434d 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,35 @@ 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; + if ( useComputedState ) + align = element.getComputedStyle( 'text-align' ); + else + { + while ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) ) + { + var parent = element.getParent(); + if ( !parent ) + break; + element = parent; + } + 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 +59,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 +92,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 +109,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 ); } }