+ },\r
+ afterInit : function( editor )\r
+ {\r
+ // Customize the behavior of the alignment commands. (#7430)\r
+ setupAlignCommand( 'left' );\r
+ setupAlignCommand( 'right' );\r
+ setupAlignCommand( 'center' );\r
+ setupAlignCommand( 'block' );\r
+\r
+ function setupAlignCommand( value )\r
+ {\r
+ var command = editor.getCommand( 'justify' + value );\r
+ if ( command )\r
+ {\r
+ if ( value == 'left' || value == 'right' )\r
+ {\r
+ command.on( 'exec', function( evt )\r
+ {\r
+ var img = getSelectedImage( editor ), align;\r
+ if ( img )\r
+ {\r
+ align = getImageAlignment( img );\r
+ if ( align == value )\r
+ {\r
+ img.removeStyle( 'float' );\r
+\r
+ // Remove "align" attribute when necessary.\r
+ if ( value == getImageAlignment( img ) )\r
+ img.removeAttribute( 'align' );\r
+ }\r
+ else\r
+ img.setStyle( 'float', value );\r
+\r
+ evt.cancel();\r
+ }\r
+ });\r
+ }\r
+\r
+ command.on( 'refresh', function( evt )\r
+ {\r
+ var img = getSelectedImage( editor ), align;\r
+ if ( img )\r
+ {\r
+ align = getImageAlignment( img );\r
+\r
+ this.setState(\r
+ ( align == value ) ? CKEDITOR.TRISTATE_ON :\r
+ ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF :\r
+ CKEDITOR.TRISTATE_DISABLED );\r
+\r
+ evt.cancel();\r
+ }\r
+ });\r
+ }\r
+ }\r
+ }\r
+});\r
+\r
+function getSelectedImage( editor, element )\r
+{\r
+ if ( !element )\r
+ {\r
+ var sel = editor.getSelection();\r
+ element = ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && sel.getSelectedElement();\r