Browse Source

Fix: Link should have higher priority than all other attribute elements. Closes #121.

Aleksander Nowodzinski 8 years ago
parent
commit
0e13a4cf19

+ 8 - 1
packages/ckeditor5-link/src/linkengine.js

@@ -36,7 +36,14 @@ export default class LinkEngine extends Plugin {
 		// Build converter from model to view for data and editing pipelines.
 		// Build converter from model to view for data and editing pipelines.
 		buildModelConverter().for( data.modelToView, editing.modelToView )
 		buildModelConverter().for( data.modelToView, editing.modelToView )
 			.fromAttribute( 'linkHref' )
 			.fromAttribute( 'linkHref' )
-			.toElement( linkHref => new LinkElement( 'a', { href: linkHref } ) );
+			.toElement( linkHref => {
+				const linkElement = new LinkElement( 'a', { href: linkHref } );
+
+				// https://github.com/ckeditor/ckeditor5-link/issues/121
+				linkElement.priority = 5;
+
+				return linkElement;
+			} );
 
 
 		// Build converter from view to model for data pipeline.
 		// Build converter from view to model for data pipeline.
 		buildViewConverter().for( data.viewToModel )
 		buildViewConverter().for( data.viewToModel )

+ 18 - 0
packages/ckeditor5-link/tests/linkengine.js

@@ -13,6 +13,8 @@ import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
 import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 import { getData as getViewData } from '@ckeditor/ckeditor5-engine/src/dev-utils/view';
 
 
+import buildModelConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildmodelconverter';
+
 describe( 'LinkEngine', () => {
 describe( 'LinkEngine', () => {
 	let editor, doc;
 	let editor, doc;
 
 
@@ -86,5 +88,21 @@ describe( 'LinkEngine', () => {
 
 
 			expect( editor.editing.view.getRoot().getChild( 0 ).getChild( 0 ) ).to.be.instanceof( LinkElement );
 			expect( editor.editing.view.getRoot().getChild( 0 ).getChild( 0 ) ).to.be.instanceof( LinkElement );
 		} );
 		} );
+
+		// https://github.com/ckeditor/ckeditor5-link/issues/121
+		it( 'should should set priority for `linkHref` higher than all other attribute elements', () => {
+			editor.document.schema.allow( { name: '$inline', attributes: [ 'foo' ], inside: '$block' } );
+
+			buildModelConverter().for( editor.data.modelToView )
+				.fromAttribute( 'foo' )
+				.toElement( 'f' );
+
+			setModelData( doc,
+				'<paragraph>' +
+					'<$text linkHref="url">a</$text><$text foo="true" linkHref="url">b</$text><$text linkHref="url">c</$text>' +
+				'</paragraph>' );
+
+			expect( editor.getData() ).to.equal( '<p><a href="url">a<f>b</f>c</a></p>' );
+		} );
 	} );
 	} );
 } );
 } );