JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4b
[ckeditor.git] / _source / plugins / justify / plugin.js
index a3ff0dd..8d306b9 100644 (file)
@@ -9,8 +9,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \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
@@ -18,10 +16,24 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                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
@@ -36,10 +48,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                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
@@ -73,12 +81,15 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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
@@ -87,26 +98,26 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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