\r
(function()\r
{\r
- var alignRemoveRegex = /(-moz-|-webkit-|start|auto)/i;\r
-\r
function getState( editor, path )\r
{\r
var firstBlock = path.block || path.blockLimit;\r
if ( !firstBlock || firstBlock.getName() == 'body' )\r
return CKEDITOR.TRISTATE_OFF;\r
\r
- var currentAlign = firstBlock.getComputedStyle( 'text-align' ).replace( alignRemoveRegex, '' );\r
- if ( ( !currentAlign && this.isDefaultAlign ) || currentAlign == this.value )\r
- return CKEDITOR.TRISTATE_ON;\r
- return CKEDITOR.TRISTATE_OFF;\r
+ return ( getAlignment( firstBlock, editor.config.useComputedState ) == this.value ) ?\r
+ CKEDITOR.TRISTATE_ON :\r
+ CKEDITOR.TRISTATE_OFF;\r
+ }\r
+\r
+ function getAlignment( element, useComputedState )\r
+ {\r
+ useComputedState = useComputedState === undefined || useComputedState;\r
+\r
+ var align = useComputedState ?\r
+ element.getComputedStyle( 'text-align' ) :\r
+ element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || '';\r
+\r
+ align && ( align = align.replace( /-moz-|-webkit-|start|auto/i, '' ) );\r
+\r
+ !align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' );\r
+\r
+ return align;\r
}\r
\r
function onSelectionChange( evt )\r
this.name = name;\r
this.value = value;\r
\r
- var contentDir = editor.config.contentsLangDirection;\r
- this.isDefaultAlign = ( value == 'left' && contentDir == 'ltr' ) ||\r
- ( value == 'right' && contentDir == 'rtl' );\r
-\r
var classes = editor.config.justifyClasses;\r
if ( classes )\r
{\r
return;\r
\r
var bookmarks = selection.createBookmarks(),\r
- ranges = selection.getRanges();\r
-\r
+ ranges = selection.getRanges( true );\r
\r
var cssClassName = this.cssClassName,\r
iterator,\r
block;\r
+\r
+ var useComputedState = editor.config.useComputedState;\r
+ useComputedState = useComputedState === undefined || useComputedState;\r
+\r
for ( var i = ranges.length - 1 ; i >= 0 ; i-- )\r
{\r
iterator = ranges[ i ].createIterator();\r
while ( ( block = iterator.getNextParagraph() ) )\r
{\r
block.removeAttribute( 'align' );\r
+ block.removeStyle( 'text-align' );\r
+\r
+ // Remove any of the alignment classes from the className.\r
+ var className = cssClassName && ( block.$.className =\r
+ CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) );\r
+\r
+ var apply =\r
+ ( this.state == CKEDITOR.TRISTATE_OFF ) &&\r
+ ( !useComputedState || ( getAlignment( block, true ) != this.value ) );\r
\r
if ( cssClassName )\r
{\r
- // Remove any of the alignment classes from the className.\r
- var className = block.$.className =\r
- CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );\r
-\r
// Append the desired class name.\r
- if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )\r
+ if ( apply )\r
block.addClass( cssClassName );\r
else if ( !className )\r
block.removeAttribute( 'class' );\r
}\r
- else\r
- {\r
- if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )\r
- block.setStyle( 'text-align', this.value );\r
- else\r
- block.removeStyle( 'text-align' );\r
- }\r
+ else if ( apply )\r
+ block.setStyle( 'text-align', this.value );\r
}\r
\r
}\r