JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.5.1
[ckeditor.git] / _source / plugins / link / plugin.js
index 26a8cb3..e5b7044 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -30,6 +30,7 @@ CKEDITOR.plugins.add( 'link',
                CKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' );\r
 \r
                // Add the CSS styles for anchor placeholders.\r
+               var side = editor.lang.dir == 'rtl' ? 'right' : 'left';\r
                editor.addCss(\r
                        'img.cke_anchor' +\r
                        '{' +\r
@@ -37,16 +38,16 @@ CKEDITOR.plugins.add( 'link',
                                'background-position: center center;' +\r
                                'background-repeat: no-repeat;' +\r
                                'border: 1px solid #a9a9a9;' +\r
-                               'width: 18px;' +\r
-                               'height: 18px;' +\r
+                               'width: 18px !important;' +\r
+                               'height: 18px !important;' +\r
                        '}\n' +\r
                        'a.cke_anchor' +\r
                        '{' +\r
                                'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/anchor.gif' ) + ');' +\r
-                               'background-position: 0 center;' +\r
+                               'background-position: ' + side + ' center;' +\r
                                'background-repeat: no-repeat;' +\r
                                'border: 1px solid #a9a9a9;' +\r
-                               'padding-left: 18px;' +\r
+                               'padding-' + side + ': 18px;' +\r
                        '}'\r
                        );\r
 \r
@@ -58,13 +59,26 @@ CKEDITOR.plugins.add( 'link',
                                 * for this in Firefox. So we must detect the state by element paths.\r
                                 */\r
                                var command = editor.getCommand( 'unlink' ),\r
-                                       element = evt.data.path.lastElement.getAscendant( 'a', true );\r
+                                       element = evt.data.path.lastElement && evt.data.path.lastElement.getAscendant( 'a', true );\r
                                if ( element && element.getName() == 'a' && element.getAttribute( 'href' ) )\r
                                        command.setState( CKEDITOR.TRISTATE_OFF );\r
                                else\r
                                        command.setState( CKEDITOR.TRISTATE_DISABLED );\r
                        } );\r
 \r
+               editor.on( 'doubleclick', function( evt )\r
+                       {\r
+                               var element = CKEDITOR.plugins.link.getSelectedLink( editor ) || evt.data.element;\r
+\r
+                               if ( !element.isReadOnly() )\r
+                               {\r
+                                       if ( element.is( 'a' ) )\r
+                                               evt.data.dialog =  ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) ) ? 'anchor' : 'link';\r
+                                       else if ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' )\r
+                                               evt.data.dialog = 'anchor';\r
+                               }\r
+                       });\r
+\r
                // If the "menu" plugin is loaded, register the menu items.\r
                if ( editor.addMenuItems )\r
                {\r
@@ -100,10 +114,10 @@ CKEDITOR.plugins.add( 'link',
                {\r
                        editor.contextMenu.addListener( function( element, selection )\r
                                {\r
-                                       if ( !element )\r
+                                       if ( !element || element.isReadOnly() )\r
                                                return null;\r
 \r
-                                       var isAnchor = ( element.is( 'img' ) && element.getAttribute( '_cke_real_element_type' ) == 'anchor' );\r
+                                       var isAnchor = ( element.is( 'img' ) && element.data( 'cke-real-element-type' ) == 'anchor' );\r
 \r
                                        if ( !isAnchor )\r
                                        {\r
@@ -166,13 +180,22 @@ CKEDITOR.plugins.link =
         */\r
        getSelectedLink : function( editor )\r
        {\r
-               var range;\r
-               try { range  = editor.getSelection().getRanges()[ 0 ]; }\r
+               try\r
+               {\r
+                       var selection = editor.getSelection();\r
+                       if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT )\r
+                       {\r
+                               var selectedElement = selection.getSelectedElement();\r
+                               if ( selectedElement.is( 'a' ) )\r
+                                       return selectedElement;\r
+                       }\r
+\r
+                       var range = selection.getRanges( true )[ 0 ];\r
+                       range.shrink( CKEDITOR.SHRINK_TEXT );\r
+                       var root = range.getCommonAncestor();\r
+                       return root.getAscendant( 'a', true );\r
+               }\r
                catch( e ) { return null; }\r
-\r
-               range.shrink( CKEDITOR.SHRINK_TEXT );\r
-               var root = range.getCommonAncestor();\r
-               return root.getAscendant( 'a', true );\r
        }\r
 };\r
 \r