JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.2.1
[ckeditor.git] / _source / plugins / link / plugin.js
index 7993a0f..26a8cb3 100644 (file)
@@ -107,7 +107,7 @@ CKEDITOR.plugins.add( 'link',
 \r
                                        if ( !isAnchor )\r
                                        {\r
-                                               if ( !( element = element.getAscendant( 'a', true ) ) )\r
+                                               if ( !( element = CKEDITOR.plugins.link.getSelectedLink( editor ) ) )\r
                                                        return null;\r
 \r
                                                isAnchor = ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) );\r
@@ -147,6 +147,35 @@ CKEDITOR.plugins.add( 'link',
        requires : [ 'fakeobjects' ]\r
 } );\r
 \r
+CKEDITOR.plugins.link =\r
+{\r
+       /**\r
+        *  Get the surrounding link element of current selection.\r
+        * @param editor\r
+        * @example CKEDITOR.plugins.link.getSelectedLink( editor );\r
+        * @since 3.2.1\r
+        * The following selection will all return the link element.\r
+        *       <pre>\r
+        *  <a href="#">li^nk</a>\r
+        *  <a href="#">[link]</a>\r
+        *  text[<a href="#">link]</a>\r
+        *  <a href="#">li[nk</a>]\r
+        *  [<b><a href="#">li]nk</a></b>]\r
+        *  [<a href="#"><b>li]nk</b></a>\r
+        * </pre>\r
+        */\r
+       getSelectedLink : function( editor )\r
+       {\r
+               var range;\r
+               try { range  = editor.getSelection().getRanges()[ 0 ]; }\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
 CKEDITOR.unlinkCommand = function(){};\r
 CKEDITOR.unlinkCommand.prototype =\r
 {\r
@@ -178,7 +207,9 @@ CKEDITOR.unlinkCommand.prototype =
                selection.selectRanges( ranges );\r
                editor.document.$.execCommand( 'unlink', false, null );\r
                selection.selectBookmarks( bookmarks );\r
-       }\r
+       },\r
+\r
+       startDisabled : true\r
 };\r
 \r
 CKEDITOR.tools.extend( CKEDITOR.config,\r