Преглед на файлове

Fix: The media embed attribute:url:media converter should not purge the entire content of a widget (including type around UI).

Aleksander Nowodzinski преди 5 години
родител
ревизия
baab4475e8
променени са 2 файла, в които са добавени 14 реда и са изтрити 4 реда
  1. 7 2
      packages/ckeditor5-media-embed/src/converters.js
  2. 7 2
      packages/ckeditor5-media-embed/src/mediaregistry.js

+ 7 - 2
packages/ckeditor5-media-embed/src/converters.js

@@ -46,9 +46,14 @@ export function modelToViewUrlAttributeConverter( registry, options ) {
 		const url = data.attributeNewValue;
 		const viewWriter = conversionApi.writer;
 		const figure = conversionApi.mapper.toViewElement( data.item );
+		const children = [ ...figure.getChildren() ].reverse();
 
-		// TODO: removing it and creating it from scratch is a hack. We can do better than that.
-		viewWriter.remove( viewWriter.createRangeIn( figure ) );
+		for ( const child of children ) {
+			if ( child.getCustomProperty( 'media-content' ) ) {
+				// TODO: removing the wrapper and creating it from scratch is a hack. We can do better than that.
+				viewWriter.remove( viewWriter.createRangeOn( child ) );
+			}
+		}
 
 		const mediaViewElement = registry.getMediaViewElement( viewWriter, url, options );
 

+ 7 - 2
packages/ckeditor5-media-embed/src/mediaregistry.js

@@ -221,6 +221,7 @@ class Media {
 	 */
 	getViewElement( writer, options ) {
 		const attributes = {};
+		let viewElement;
 
 		if ( options.renderForEditingView || ( options.renderMediaPreview && this.url && this._previewRenderer ) ) {
 			if ( this.url ) {
@@ -233,7 +234,7 @@ class Media {
 
 			const mediaHtml = this._getPreviewHtml( options );
 
-			return writer.createUIElement( 'div', attributes, function( domDocument ) {
+			viewElement = writer.createUIElement( 'div', attributes, function( domDocument ) {
 				const domElement = this.toDomElement( domDocument );
 
 				domElement.innerHTML = mediaHtml;
@@ -245,8 +246,12 @@ class Media {
 				attributes.url = this.url;
 			}
 
-			return writer.createEmptyElement( 'oembed', attributes );
+			viewElement = writer.createEmptyElement( 'oembed', attributes );
 		}
+
+		writer.setCustomProperty( 'media-content', true, viewElement );
+
+		return viewElement;
 	}
 
 	/**