소스 검색

[WIP] Marker conversion for table cells.

Szymon Cofalik 5 년 전
부모
커밋
e052923f2c
1개의 변경된 파일21개의 추가작업 그리고 1개의 파일을 삭제
  1. 21 1
      packages/ckeditor5-table/src/converters/downcast.js

+ 21 - 1
packages/ckeditor5-table/src/converters/downcast.js

@@ -8,7 +8,7 @@
  */
  */
 
 
 import TableWalker from './../tablewalker';
 import TableWalker from './../tablewalker';
-import { toWidgetEditable } from '@ckeditor/ckeditor5-widget/src/utils';
+import { toWidgetEditable, setHighlightHandling } from '@ckeditor/ckeditor5-widget/src/utils';
 import { toTableWidget } from '../utils';
 import { toTableWidget } from '../utils';
 
 
 /**
 /**
@@ -330,6 +330,13 @@ function renameViewTableCell( tableCell, desiredCellElementName, conversionApi,
 		const editable = viewWriter.createEditableElement( desiredCellElementName, viewCell.getAttributes() );
 		const editable = viewWriter.createEditableElement( desiredCellElementName, viewCell.getAttributes() );
 		renamedCell = toWidgetEditable( editable, viewWriter );
 		renamedCell = toWidgetEditable( editable, viewWriter );
 
 
+		setHighlightHandling(
+			renamedCell,
+			viewWriter,
+			( element, descriptor, writer ) => writer.addClass( normalizeToArray( descriptor.classes ), element ),
+			( element, descriptor, writer ) => writer.removeClass( normalizeToArray( descriptor.classes ), element )
+		);
+
 		viewWriter.insert( viewWriter.createPositionAfter( viewCell ), renamedCell );
 		viewWriter.insert( viewWriter.createPositionAfter( viewCell ), renamedCell );
 		viewWriter.move( viewWriter.createRangeIn( viewCell ), viewWriter.createPositionAt( renamedCell, 0 ) );
 		viewWriter.move( viewWriter.createRangeIn( viewCell ), viewWriter.createPositionAt( renamedCell, 0 ) );
 		viewWriter.remove( viewWriter.createRangeOn( viewCell ) );
 		viewWriter.remove( viewWriter.createRangeOn( viewCell ) );
@@ -341,6 +348,10 @@ function renameViewTableCell( tableCell, desiredCellElementName, conversionApi,
 	conversionApi.mapper.bindElements( tableCell, renamedCell );
 	conversionApi.mapper.bindElements( tableCell, renamedCell );
 }
 }
 
 
+function normalizeToArray( classes ) {
+	return Array.isArray( classes ) ? classes : [ classes ];
+}
+
 // Renames a table cell element in the view according to its location in the table.
 // Renames a table cell element in the view according to its location in the table.
 //
 //
 // @param {module:table/tablewalker~TableSlot} tableSlot
 // @param {module:table/tablewalker~TableSlot} tableSlot
@@ -375,6 +386,15 @@ function createViewTableCellElement( tableSlot, tableAttributes, insertPosition,
 		toWidgetEditable( conversionApi.writer.createEditableElement( cellElementName ), conversionApi.writer ) :
 		toWidgetEditable( conversionApi.writer.createEditableElement( cellElementName ), conversionApi.writer ) :
 		conversionApi.writer.createContainerElement( cellElementName );
 		conversionApi.writer.createContainerElement( cellElementName );
 
 
+	if ( asWidget ) {
+		setHighlightHandling(
+			cellElement,
+			conversionApi.writer,
+			( element, descriptor, writer ) => writer.addClass( normalizeToArray( descriptor.classes ), element ),
+			( element, descriptor, writer ) => writer.removeClass( normalizeToArray( descriptor.classes ), element )
+		);
+	}
+
 	const tableCell = tableSlot.cell;
 	const tableCell = tableSlot.cell;
 
 
 	const firstChild = tableCell.getChild( 0 );
 	const firstChild = tableCell.getChild( 0 );