JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.3
[ckeditor.git] / _source / plugins / image / plugin.js
index 7285b0f..f3c6d6d 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -7,6 +7,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
  * @file Image plugin\r
  */\r
 \r
+(function()\r
+{\r
+\r
 CKEDITOR.plugins.add( 'image',\r
 {\r
        init : function( editor )\r
@@ -53,14 +56,94 @@ CKEDITOR.plugins.add( 'image',
                {\r
                        editor.contextMenu.addListener( function( element, selection )\r
                                {\r
-                                       if ( !element || !element.is( 'img' ) || element.data( 'cke-realelement' ) || element.isReadOnly() )\r
-                                               return null;\r
-\r
-                                       return { image : CKEDITOR.TRISTATE_OFF };\r
+                                       if ( getSelectedImage( editor, element ) )\r
+                                               return { image : CKEDITOR.TRISTATE_OFF };\r
                                });\r
                }\r
+       },\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
+\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
+       }\r
+\r
+       if ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )\r
+               return element;\r
+}\r
+\r
+function getImageAlignment( element )\r
+{\r
+       var align = element.getStyle( 'float' );\r
+\r
+       if ( align == 'inherit' || align == 'none' )\r
+               align = 0;\r
+\r
+       if ( !align )\r
+               align = element.getAttribute( 'align' );\r
+\r
+       return align;\r
+}\r
+\r
+})();\r
 \r
 /**\r
  * Whether to remove links when emptying the link URL field in the image dialog.\r