JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.1
[ckeditor.git] / _source / plugins / link / plugin.js
index c7f7adb..3cdc6fb 100644 (file)
@@ -58,7 +58,7 @@ 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
@@ -110,7 +110,7 @@ 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
@@ -176,13 +176,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