X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2Fpackagist%2Fludivine-ckeditor-component.git;a=blobdiff_plain;f=sources%2Fplugins%2Flink%2Fdialogs%2Fanchor.js;fp=sources%2Fplugins%2Flink%2Fdialogs%2Fanchor.js;h=04a4abedea68dcc3423aed16bf8e57d32edd8378;hp=2b32b71938e2d605db30ff3a4befdfbe05745b77;hb=1794320dcfdfcd19572fb1676294f9853a6bbc20;hpb=7183f6a6a21ad9124e70c997e0168459f377a9f2 diff --git a/sources/plugins/link/dialogs/anchor.js b/sources/plugins/link/dialogs/anchor.js index 2b32b71..04a4abe 100644 --- a/sources/plugins/link/dialogs/anchor.js +++ b/sources/plugins/link/dialogs/anchor.js @@ -18,6 +18,21 @@ CKEDITOR.dialog.add( 'anchor', function( editor ) { } ), 'cke_anchor', 'anchor' ); } + + function getSelectedAnchor( selection ) { + var range = selection.getRanges()[ 0 ], + element = selection.getSelectedElement(); + + // In case of table cell selection, we want to shrink selection from td to a element. + range.shrink( CKEDITOR.SHRINK_ELEMENT ); + element = range.getEnclosedNode(); + + if ( element && element.type === CKEDITOR.NODE_ELEMENT && + ( element.data( 'cke-real-element-type' ) === 'anchor' || element.is( 'a' ) ) ) { + return element; + } + } + return { title: editor.lang.link.anchor.title, minWidth: 300, @@ -35,9 +50,10 @@ CKEDITOR.dialog.add( 'anchor', function( editor ) { var newFake = createFakeAnchor( editor, attributes ); newFake.replace( this._.selectedElement ); - // Selecting fake element for IE. (#11377) - if ( CKEDITOR.env.ie ) + // Selecting fake element for IE. (http://dev.ckeditor.com/ticket/11377) + if ( CKEDITOR.env.ie ) { editor.getSelection().selectElement( newFake ); + } } else { this._.selectedElement.setAttributes( attributes ); } @@ -56,7 +72,7 @@ CKEDITOR.dialog.add( 'anchor', function( editor ) { // Apply style. var style = new CKEDITOR.style( { element: 'a', attributes: attributes } ); style.type = CKEDITOR.STYLE_INLINE; - editor.applyStyle( style ); + style.applyToRange( range ); } } }, @@ -67,7 +83,7 @@ CKEDITOR.dialog.add( 'anchor', function( editor ) { onShow: function() { var sel = editor.getSelection(), - fullySelected = sel.getSelectedElement(), + fullySelected = getSelectedAnchor( sel ), fakeSelected = fullySelected && fullySelected.data( 'cke-realelement' ), linkElement = fakeSelected ? CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, fullySelected ) : @@ -77,8 +93,9 @@ CKEDITOR.dialog.add( 'anchor', function( editor ) { loadElements.call( this, linkElement ); !fakeSelected && sel.selectElement( linkElement ); - if ( fullySelected ) + if ( fullySelected ) { this._.selectedElement = fullySelected; + } } this.getContentElement( 'info', 'txtName' ).focus();