8
0
فهرست منبع

Merge branch t/engine/1172

Internal: Update API usage after merge t/1172 on engine.
Piotr Jasiun 8 سال پیش
والد
کامیت
d13fe62778

+ 5 - 9
packages/ckeditor5-image/src/image/converters.js

@@ -72,9 +72,7 @@ export function viewFigureToModel() {
  */
 export function createImageAttributeConverter( dispatchers, attributeName, converter = modelToViewAttributeConverter ) {
 	for ( const dispatcher of dispatchers ) {
-		dispatcher.on( `addAttribute:${ attributeName }:image`, converter() );
-		dispatcher.on( `changeAttribute:${ attributeName }:image`, converter() );
-		dispatcher.on( `removeAttribute:${ attributeName }:image`, converter() );
+		dispatcher.on( `attribute:${ attributeName }:image`, converter() );
 	}
 }
 
@@ -95,9 +93,8 @@ export function srcsetAttributeConverter() {
 
 		const figure = conversionApi.mapper.toViewElement( modelImage );
 		const img = figure.getChild( 0 );
-		const type = parts[ 0 ];
 
-		if ( type == 'removeAttribute' ) {
+		if ( data.attributeNewValue === null ) {
 			const srcset = data.attributeOldValue;
 
 			if ( srcset.data ) {
@@ -139,12 +136,11 @@ function modelToViewAttributeConverter() {
 
 		const figure = conversionApi.mapper.toViewElement( modelImage );
 		const img = figure.getChild( 0 );
-		const type = parts[ 0 ];
 
-		if ( type == 'removeAttribute' ) {
-			img.removeAttribute( data.attributeKey );
-		} else {
+		if ( data.attributeNewValue !== null ) {
 			img.setAttribute( data.attributeKey, data.attributeNewValue );
+		} else {
+			img.removeAttribute( data.attributeKey );
 		}
 	};
 }

+ 1 - 1
packages/ckeditor5-image/src/imagecaption/imagecaptionengine.js

@@ -83,7 +83,7 @@ export default class ImageCaptionEngine extends Plugin {
 		editing.modelToView.on( 'insert', ( evt, data ) => this._fixCaptionVisibility( data.item ), { priority: 'high' } );
 
 		// Hide caption when everything is removed from it.
-		editing.modelToView.on( 'remove', ( evt, data ) => this._fixCaptionVisibility( data.sourcePosition.parent ), { priority: 'high' } );
+		editing.modelToView.on( 'remove', ( evt, data ) => this._fixCaptionVisibility( data.position.parent ), { priority: 'high' } );
 
 		// Update view before each rendering.
 		this.listenTo( viewDocument, 'render', () => this._updateCaptionVisibility(), { priority: 'high' } );

+ 7 - 40
packages/ckeditor5-image/src/imagestyle/converters.js

@@ -21,21 +21,22 @@ export function modelToViewStyleAttribute( styles ) {
 		const eventType = evt.name.split( ':' )[ 0 ];
 		const consumableType = eventType + ':imageStyle';
 
-		if ( !consumable.test( data.item, consumableType ) ) {
+		if ( !consumable.consume( data.item, consumableType ) ) {
 			return;
 		}
 
 		// Check if there is class name associated with given value.
 		const newStyle = getStyleByName( data.attributeNewValue, styles );
 		const oldStyle = getStyleByName( data.attributeOldValue, styles );
+
 		const viewElement = conversionApi.mapper.toViewElement( data.item );
 
-		const isRemovalHandled = handleRemoval( eventType, oldStyle, viewElement );
-		const isAdditionHandled = handleAddition( eventType, newStyle, viewElement );
+		if ( oldStyle ) {
+			viewElement.removeClass( oldStyle.className );
+		}
 
-		// https://github.com/ckeditor/ckeditor5-image/issues/132
-		if ( isRemovalHandled || isAdditionHandled ) {
-			consumable.consume( data.item, consumableType );
+		if ( newStyle ) {
+			viewElement.addClass( newStyle.className );
 		}
 	};
 }
@@ -103,37 +104,3 @@ function getStyleByName( name, styles ) {
 		}
 	}
 }
-
-// Handles converting removal of the attribute.
-// Returns `true` when handling was processed correctly and further conversion can be performed.
-//
-// @param {String} eventType Type of the event.
-// @param {module:image/imagestyle/imagestyleengine~ImageStyleFormat} style
-// @param {module:engine/view/element~Element} viewElement
-// @returns {Boolean} Whether the change was handled.
-function handleRemoval( eventType, style, viewElement ) {
-	if ( style && ( eventType == 'changeAttribute' || eventType == 'removeAttribute' ) ) {
-		viewElement.removeClass( style.className );
-
-		return true;
-	}
-
-	return false;
-}
-
-// Handles converting addition of the attribute.
-// Returns `true` when handling was processed correctly and further conversion can be performed.
-//
-// @param {String} eventType Type of the event.
-// @param {module:image/imagestyle/imagestyleengine~ImageStyleFormat} style
-// @param {module:engine/view/element~Element} viewElement
-// @returns {Boolean} Whether the change was handled.
-function handleAddition( evenType, style, viewElement ) {
-	if ( style && ( evenType == 'addAttribute' || evenType == 'changeAttribute' ) ) {
-		viewElement.addClass( style.className );
-
-		return true;
-	}
-
-	return false;
-}

+ 2 - 6
packages/ckeditor5-image/src/imagestyle/imagestyleengine.js

@@ -60,12 +60,8 @@ export default class ImageStyleEngine extends Plugin {
 
 		// Converters for imageStyle attribute from model to view.
 		const modelToViewConverter = modelToViewStyleAttribute( styles );
-		editing.modelToView.on( 'addAttribute:imageStyle:image', modelToViewConverter );
-		data.modelToView.on( 'addAttribute:imageStyle:image', modelToViewConverter );
-		editing.modelToView.on( 'changeAttribute:imageStyle:image', modelToViewConverter );
-		data.modelToView.on( 'changeAttribute:imageStyle:image', modelToViewConverter );
-		editing.modelToView.on( 'removeAttribute:imageStyle:image', modelToViewConverter );
-		data.modelToView.on( 'removeAttribute:imageStyle:image', modelToViewConverter );
+		editing.modelToView.on( 'attribute:imageStyle:image', modelToViewConverter );
+		data.modelToView.on( 'attribute:imageStyle:image', modelToViewConverter );
 
 		// Converter for figure element from view to model.
 		data.viewToModel.on( 'element:figure', viewToModelStyleAttribute( styles ), { priority: 'low' } );

+ 4 - 9
packages/ckeditor5-image/tests/image/converters.js

@@ -172,20 +172,15 @@ describe( 'Image converters', () => {
 			);
 		} );
 
-		it( 'should not change attribute if change is already consumed', () => {
-			editor.editing.modelToView.on( 'changeAttribute:alt:image', ( evt, data, consumable ) => {
-				consumable.consume( data.item, 'changeAttribute:alt' );
+		it( 'should not set attribute if change was already consumed', () => {
+			editor.editing.modelToView.on( 'attribute:alt:image', ( evt, data, consumable ) => {
+				consumable.consume( data.item, 'attribute:alt' );
 			}, { priority: 'high' } );
 
 			setModelData( model, '<image src="" alt="foo bar"></image>' );
-			const image = document.getRoot().getChild( 0 );
-
-			model.change( writer => {
-				writer.setAttribute( 'alt', 'baz quix', image );
-			} );
 
 			expect( getViewData( viewDocument, { withoutSelection: true } ) ).to.equal(
-				'<figure class="ck-widget image" contenteditable="false"><img alt="foo bar" src=""></img></figure>'
+				'<figure class="ck-widget image" contenteditable="false"><img src=""></img></figure>'
 			);
 		} );
 	} );

+ 4 - 4
packages/ckeditor5-image/tests/image/imageengine.js

@@ -80,7 +80,7 @@ describe( 'ImageEngine', () => {
 			} );
 
 			it( 'should not convert srcset attribute if is already consumed', () => {
-				editor.data.modelToView.on( 'addAttribute:srcset:image', ( evt, data, consumable ) => {
+				editor.data.modelToView.on( 'attribute:srcset:image', ( evt, data, consumable ) => {
 					const parts = evt.name.split( ':' );
 					const consumableType = parts[ 0 ] + ':' + parts[ 1 ];
 					const modelImage = data.item;
@@ -441,8 +441,8 @@ describe( 'ImageEngine', () => {
 				setModelData( model, '<image src="foo.png" alt="alt text"></image>' );
 				const image = document.getRoot().getChild( 0 );
 
-				editor.editing.modelToView.on( 'removeAttribute:alt:image', ( evt, data, consumable ) => {
-					consumable.consume( data.item, 'removeAttribute:alt' );
+				editor.editing.modelToView.on( 'attribute:alt:image', ( evt, data, consumable ) => {
+					consumable.consume( data.item, 'attribute:alt' );
 				}, { priority: 'high' } );
 
 				model.change( writer => {
@@ -540,7 +540,7 @@ describe( 'ImageEngine', () => {
 			} );
 
 			it( 'should not convert srcset attribute if is already consumed', () => {
-				editor.editing.modelToView.on( 'addAttribute:srcset:image', ( evt, data, consumable ) => {
+				editor.editing.modelToView.on( 'attribute:srcset:image', ( evt, data, consumable ) => {
 					const parts = evt.name.split( ':' );
 					const consumableType = parts[ 0 ] + ':' + parts[ 1 ];
 					const modelImage = data.item;

+ 7 - 28
packages/ckeditor5-image/tests/imagestyle/imagestyleengine.js

@@ -98,6 +98,7 @@ describe( 'ImageStyleEngine', () => {
 
 			expect( getModelData( model, { withoutSelection: true } ) )
 				.to.equal( '<image imageStyle="sideStyle" src="foo.png"></image>' );
+
 			expect( getViewData( viewDocument, { withoutSelection: true } ) ).to.equal(
 				'<figure class="ck-widget image side-class" contenteditable="false">' +
 					'<img src="foo.png"></img>' +
@@ -186,8 +187,8 @@ describe( 'ImageStyleEngine', () => {
 		} );
 
 		it( 'should not convert from model to view if already consumed: adding attribute', () => {
-			editor.editing.modelToView.on( 'addAttribute:imageStyle', ( evt, data, consumable ) => {
-				consumable.consume( data.item, 'addAttribute:imageStyle' );
+			editor.editing.modelToView.on( 'attribute:imageStyle', ( evt, data, consumable ) => {
+				consumable.consume( data.item, 'attribute:imageStyle' );
 			}, { priority: 'high' } );
 
 			setModelData( model, '<image src="foo.png"></image>' );
@@ -202,37 +203,15 @@ describe( 'ImageStyleEngine', () => {
 			);
 		} );
 
-		it( 'should not convert from model to view if already consumed: removing attribute', () => {
-			editor.editing.modelToView.on( 'removeAttribute:imageStyle', ( evt, data, consumable ) => {
-				consumable.consume( data.item, 'removeAttribute:imageStyle' );
-			}, { priority: 'high' } );
-
-			setModelData( model, '<image src="foo.png" imageStyle="sideStyle"></image>' );
-			const image = document.getRoot().getChild( 0 );
-
-			model.change( writer => {
-				writer.removeAttribute( 'imageStyle', image );
-			} );
-
-			expect( getViewData( viewDocument, { withoutSelection: true } ) ).to.equal(
-				'<figure class="ck-widget image side-class" contenteditable="false"><img src="foo.png"></img></figure>'
-			);
-		} );
-
-		it( 'should not convert from model to view if already consumed: change attribute', () => {
-			editor.editing.modelToView.on( 'changeAttribute:imageStyle', ( evt, data, consumable ) => {
-				consumable.consume( data.item, 'changeAttribute:imageStyle' );
+		it( 'should not set attribute if change was already consumed', () => {
+			editor.editing.modelToView.on( 'attribute:imageStyle', ( evt, data, consumable ) => {
+				consumable.consume( data.item, 'attribute:imageStyle' );
 			}, { priority: 'high' } );
 
 			setModelData( model, '<image src="foo.png" imageStyle="dummyStyle"></image>' );
-			const image = document.getRoot().getChild( 0 );
-
-			model.change( writer => {
-				writer.setAttribute( 'imageStyle', 'sideStyle', image );
-			} );
 
 			expect( getViewData( viewDocument, { withoutSelection: true } ) ).to.equal(
-				'<figure class="ck-widget dummy-class image" contenteditable="false"><img src="foo.png"></img></figure>'
+				'<figure class="ck-widget image" contenteditable="false"><img src="foo.png"></img></figure>'
 			);
 		} );