Ticket #4513: 4513_5.patch

File 4513_5.patch, 4.0 KB (added by garry.yao, 4 years ago)
  • _source/plugins/link/dialogs/link.js

     
    1 /* 
     1/* 
    22Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
    44*/ 
    55 
    66CKEDITOR.dialog.add( 'link', function( editor ) 
    77{ 
     8        var plugin = CKEDITOR.plugins.link; 
    89        // Handles the event when the "Target" selection box is changed. 
    910        var targetChanged = function() 
    1011        { 
     
    9394 
    9495        var parseLink = function( editor, element ) 
    9596        { 
    96                 var href = element ? ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) : '', 
     97                var href = ( element  && ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) ) || '', 
    9798                        javascriptMatch, 
    9899                        emailMatch, 
    99100                        anchorMatch, 
     
    11361137 
    11371138                        var editor = this.getParentEditor(), 
    11381139                                selection = editor.getSelection(), 
    1139                                 ranges = selection.getRanges(), 
    1140                                 element = null, 
    1141                                 me = this; 
    1142                         // Fill in all the relevant fields if there's already one link selected. 
    1143                         if ( ranges.length == 1 ) 
    1144                         { 
     1140                                element = null; 
    11451141 
    1146                                 var rangeRoot = ranges[0].getCommonAncestor( true ); 
    1147                                 element = rangeRoot.getAscendant( 'a', true ); 
    1148                                 if ( element && element.getAttribute( 'href' ) ) 
    1149                                 { 
    1150                                         selection.selectElement( element ); 
    1151                                 } 
    1152                                 else if ( ( element = rangeRoot.getAscendant( 'img', true ) ) && 
    1153                                                  element.getAttribute( '_cke_real_element_type' ) && 
    1154                                                  element.getAttribute( '_cke_real_element_type' ) == 'anchor' ) 
    1155                                 { 
    1156                                         this.fakeObj = element; 
    1157                                         element = editor.restoreRealElement( this.fakeObj ); 
    1158                                         selection.selectElement( this.fakeObj ); 
    1159                                 } 
    1160                                 else 
    1161                                         element = null; 
    1162                         } 
     1142                        // Fill in all the relevant fields if there's already one link selected. 
     1143                        if ( ( element = plugin.getSelectedLink( editor ) ) && element.hasAttribute( 'href' ) ) 
     1144                                selection.selectElement( element ); 
     1145                        else if ( ( element = selection.getSelectedElement() ) && element.is( 'img' ) 
     1146                                        && element.getAttribute( '_cke_real_element_type' ) 
     1147                                        && element.getAttribute( '_cke_real_element_type' ) == 'anchor' ) 
     1148                        { 
     1149                                this.fakeObj = element; 
     1150                                element = editor.restoreRealElement( this.fakeObj ); 
     1151                                selection.selectElement( this.fakeObj ); 
     1152                        } 
     1153                        else 
     1154                                element = null; 
    11631155 
    11641156                        this.setupContent( parseLink.apply( this, [ editor, element ] ) ); 
    11651157                }, 
  • _source/plugins/link/plugin.js

     
    107107 
    108108                                        if ( !isAnchor ) 
    109109                                        { 
    110                                                 if ( !( element = element.getAscendant( 'a', true ) ) ) 
     110                                                if ( !( element = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) 
    111111                                                        return null; 
    112112 
    113113                                                isAnchor = ( element.getAttribute( 'name' ) && !element.getAttribute( 'href' ) ); 
     
    147147        requires : [ 'fakeobjects' ] 
    148148} ); 
    149149 
     150CKEDITOR.plugins.link = 
     151{ 
     152        /** 
     153         *  Get the surrounding link element of current selection. 
     154         * @param editor 
     155         * @example CKEDITOR.plugins.link.getSelectedLink( editor ); 
     156         * @since 3.2.1 
     157         * The following selection will all return the link element.    
     158         *       <pre> 
     159         *  <a href="#">li^nk</a> 
     160         *  <a href="#">[link]</a> 
     161         *  text[<a href="#">link]</a> 
     162         *  <a href="#">li[nk</a>] 
     163         *  [<b><a href="#">li]nk</a></b>] 
     164         *  [<a href="#"><b>li]nk</b></a> 
     165         * </pre> 
     166         */ 
     167        getSelectedLink : function( editor ) 
     168        { 
     169                var range; 
     170                try { range  = editor.getSelection().getRanges()[ 0 ]; } 
     171                catch( e ) { return null; } 
     172 
     173                range.shrink( CKEDITOR.SHRINK_TEXT ); 
     174                var root = range.getCommonAncestor(); 
     175                return root.getAscendant( 'a', true ); 
     176        } 
     177}; 
     178 
    150179CKEDITOR.unlinkCommand = function(){}; 
    151180CKEDITOR.unlinkCommand.prototype = 
    152181{ 
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy