converters.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
  4. */
  5. /**
  6. * @module table/tableselection/converters
  7. */
  8. /**
  9. * Adds a visual highlight style to selected table cells.
  10. *
  11. * @param {module:core/editor/editor~Editor} editor
  12. * @param {module:table/tableselection~TableSelection} tableSelection
  13. */
  14. export function setupTableSelectionHighlighting( editor, tableSelection ) {
  15. const highlighted = new Set();
  16. editor.conversion.for( 'editingDowncast' ).add( dispatcher => dispatcher.on( 'selection', ( evt, data, conversionApi ) => {
  17. const view = editor.editing.view;
  18. const viewWriter = conversionApi.writer;
  19. const viewSelection = viewWriter.document.selection;
  20. if ( tableSelection.hasMultiCellSelection ) {
  21. clearHighlightedTableCells( highlighted, view );
  22. for ( const tableCell of tableSelection.getSelectedTableCells() ) {
  23. const viewElement = conversionApi.mapper.toViewElement( tableCell );
  24. viewWriter.addClass( 'ck-editor__editable_selected', viewElement );
  25. highlighted.add( viewElement );
  26. }
  27. viewWriter.setSelection( viewSelection.getRanges(), { fake: true, label: 'TABLE' } );
  28. } else {
  29. clearHighlightedTableCells( highlighted, view );
  30. }
  31. }, { priority: 'lowest' } ) );
  32. }
  33. function clearHighlightedTableCells( highlighted, view ) {
  34. const previous = [ ...highlighted.values() ];
  35. view.change( writer => {
  36. for ( const previouslyHighlighted of previous ) {
  37. writer.removeClass( 'ck-editor__editable_selected', previouslyHighlighted );
  38. }
  39. } );
  40. }