tableselection-integration.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. /* globals document */
  6. import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph';
  7. import { getData as getModelData, setData as setModelData } from '@ckeditor/ckeditor5-engine/src/dev-utils/model';
  8. import TableEditing from '../src/tableediting';
  9. import TableSelection from '../src/tableselection';
  10. import { modelTable } from './_utils/utils';
  11. import { assertEqualMarkup } from '@ckeditor/ckeditor5-utils/tests/_utils/utils';
  12. import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';
  13. import Delete from '@ckeditor/ckeditor5-typing/src/delete';
  14. import ClassicTestEditor from '@ckeditor/ckeditor5-core/tests/_utils/classictesteditor';
  15. describe( 'table selection', () => {
  16. let editor, model, tableSelection, modelRoot, element;
  17. describe( 'TableSelection - input integration', () => {
  18. afterEach( async () => {
  19. element.remove();
  20. await editor.destroy();
  21. } );
  22. describe( 'on delete', () => {
  23. beforeEach( async () => {
  24. await setupEditor( [ Delete ] );
  25. } );
  26. it( 'should clear contents of the selected table cells', () => {
  27. tableSelection.startSelectingFrom( modelRoot.getNodeByPath( [ 0, 0, 0 ] ) );
  28. tableSelection.setSelectingTo( modelRoot.getNodeByPath( [ 0, 1, 1 ] ) );
  29. const domEventData = new DomEventData( editor.editing.view.document, {
  30. preventDefault: sinon.spy()
  31. }, {
  32. direction: 'backward',
  33. unit: 'character',
  34. sequence: 1
  35. } );
  36. editor.editing.view.document.fire( 'delete', domEventData );
  37. assertEqualMarkup( getModelData( model ), modelTable( [
  38. [ { contents: '', isSelected: true }, { contents: '', isSelected: true }, '13' ],
  39. [ { contents: '', isSelected: true }, { contents: '', isSelected: true }, '23' ],
  40. [ '31', '32', '33' ]
  41. ] ) );
  42. } );
  43. it( 'should not interfere with default key handler if no table selection', () => {
  44. const domEventData = new DomEventData( editor.editing.view.document, {
  45. preventDefault: sinon.spy()
  46. }, {
  47. direction: 'backward',
  48. unit: 'character',
  49. sequence: 1
  50. } );
  51. editor.editing.view.document.fire( 'delete', domEventData );
  52. assertEqualMarkup( getModelData( model ), modelTable( [
  53. [ '1[]', '12', '13' ],
  54. [ '21', '22', '23' ],
  55. [ '31', '32', '33' ]
  56. ] ) );
  57. } );
  58. } );
  59. } );
  60. async function setupEditor( plugins ) {
  61. element = document.createElement( 'div' );
  62. document.body.appendChild( element );
  63. editor = await ClassicTestEditor.create( element, {
  64. plugins: [ TableEditing, TableSelection, Paragraph, ...plugins ]
  65. } );
  66. model = editor.model;
  67. modelRoot = model.document.getRoot();
  68. tableSelection = editor.plugins.get( TableSelection );
  69. setModelData( model, modelTable( [
  70. [ '11[]', '12', '13' ],
  71. [ '21', '22', '23' ],
  72. [ '31', '32', '33' ]
  73. ] ) );
  74. }
  75. } );