This repository has been archived by the owner on Jun 26, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 29
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #132 from ckeditor/t/85
Fix: Linking an entire image should not be possible. Closes #85.
- Loading branch information
Showing
3 changed files
with
173 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,153 @@ | ||
/** | ||
* @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. | ||
* For licensing, see LICENSE.md. | ||
*/ | ||
|
||
/* global document */ | ||
|
||
import Link from '../src/link'; | ||
import Image from '@ckeditor/ckeditor5-image/src/image'; | ||
import ImageCaption from '@ckeditor/ckeditor5-image/src/imagecaption'; | ||
import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; | ||
|
||
import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor'; | ||
import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model'; | ||
|
||
describe( 'Link', () => { | ||
let editor, doc, element, linkCommand, unlinkCommand; | ||
|
||
beforeEach( () => { | ||
element = document.createElement( 'div' ); | ||
document.body.appendChild( element ); | ||
|
||
return ClassicTestEditor.create( element, { | ||
plugins: [ Paragraph, Image, ImageCaption, Link ] | ||
} ) | ||
.then( newEditor => { | ||
editor = newEditor; | ||
doc = editor.document; | ||
|
||
linkCommand = editor.commands.get( 'link' ); | ||
unlinkCommand = editor.commands.get( 'unlink' ); | ||
} ); | ||
} ); | ||
|
||
afterEach( () => { | ||
element.remove(); | ||
|
||
return editor.destroy(); | ||
} ); | ||
|
||
describe( 'compatibility with images', () => { | ||
it( 'does not link a caption–less image', () => { | ||
element = document.createElement( 'div' ); | ||
document.body.appendChild( element ); | ||
|
||
return ClassicTestEditor.create( element, { | ||
plugins: [ Paragraph, Image, Link ] | ||
} ) | ||
.then( newEditor => { | ||
editor = newEditor; | ||
doc = editor.document; | ||
|
||
linkCommand = editor.commands.get( 'link' ); | ||
unlinkCommand = editor.commands.get( 'unlink' ); | ||
|
||
setModelData( doc, | ||
'<paragraph>fo[o</paragraph>' + | ||
'<image src="foo.png"></image>' + | ||
'<paragraph>b]ar</paragraph>' | ||
); | ||
|
||
editor.execute( 'link', 'url' ); | ||
|
||
expect( getModelData( doc ) ).to.equal( | ||
'<paragraph>fo[<$text linkHref="url">o</$text></paragraph>' + | ||
'<image src="foo.png"></image>' + | ||
'<paragraph><$text linkHref="url">b</$text>]ar</paragraph>' | ||
); | ||
|
||
expect( linkCommand.isEnabled ).to.be.true; | ||
expect( linkCommand.value ).to.equal( 'url' ); | ||
expect( unlinkCommand.isEnabled ).to.be.true; | ||
|
||
element.remove(); | ||
|
||
return editor.destroy(); | ||
} ); | ||
} ); | ||
|
||
it( 'links the image caption text if selection contains more than an image', () => { | ||
setModelData( doc, | ||
'<paragraph>fo[o</paragraph>' + | ||
'<image src="foo.png">' + | ||
'<caption>abc</caption>' + | ||
'</image>' + | ||
'<paragraph>baz</paragraph>' + | ||
'<image src="bar.png">' + | ||
'<caption>abc</caption>' + | ||
'</image>' + | ||
'<paragraph>b]ar</paragraph>' | ||
); | ||
|
||
editor.execute( 'link', 'url' ); | ||
|
||
expect( getModelData( doc ) ).to.equal( | ||
'<paragraph>fo[<$text linkHref="url">o</$text></paragraph>' + | ||
'<image src="foo.png">' + | ||
'<caption><$text linkHref="url">abc</$text></caption>' + | ||
'</image>' + | ||
'<paragraph><$text linkHref="url">baz</$text></paragraph>' + | ||
'<image src="bar.png">' + | ||
'<caption><$text linkHref="url">abc</$text></caption>' + | ||
'</image>' + | ||
'<paragraph><$text linkHref="url">b</$text>]ar</paragraph>' | ||
); | ||
|
||
expect( linkCommand.isEnabled ).to.be.true; | ||
expect( linkCommand.value ).to.equal( 'url' ); | ||
expect( unlinkCommand.isEnabled ).to.be.true; | ||
} ); | ||
|
||
it( 'links the image caption text if selection is in the image caption', () => { | ||
setModelData( doc, | ||
'<paragraph>foo</paragraph>' + | ||
'<image src="foo.png">' + | ||
'<caption>a[b]c</caption>' + | ||
'</image>' + | ||
'<paragraph>bar</paragraph>' | ||
); | ||
|
||
editor.execute( 'link', 'url' ); | ||
|
||
expect( getModelData( doc ) ).to.equal( | ||
'<paragraph>foo</paragraph>' + | ||
'<image src="foo.png">' + | ||
'<caption>a[<$text linkHref="url">b</$text>]c</caption>' + | ||
'</image>' + | ||
'<paragraph>bar</paragraph>' | ||
); | ||
|
||
expect( linkCommand.isEnabled ).to.be.true; | ||
expect( linkCommand.value ).to.equal( 'url' ); | ||
expect( unlinkCommand.isEnabled ).to.be.true; | ||
} ); | ||
|
||
// https://github.com/ckeditor/ckeditor5-link/issues/85 | ||
it( 'is disabled when only the image is the only selected element', () => { | ||
setModelData( doc, '[<image src="foo.png"></image>]' ); | ||
expect( linkCommand.isEnabled ).to.be.false; | ||
|
||
setModelData( doc, '[<image src="foo.png"><caption>abc</caption></image>]' ); | ||
expect( linkCommand.isEnabled ).to.be.false; | ||
|
||
setModelData( doc, | ||
'[<image src="foo.png">' + | ||
'<caption><$text linkHref="url">abc</$text></caption>' + | ||
'</image>]' | ||
); | ||
expect( linkCommand.isEnabled ).to.be.false; | ||
expect( unlinkCommand.isEnabled ).to.be.false; | ||
} ); | ||
} ); | ||
} ); |