|
|
@@ -178,7 +178,8 @@ describe( 'table clipboard', () => {
|
|
|
|
|
|
const table = viewTable( [
|
|
|
[ 'aa', 'ab' ],
|
|
|
- [ 'ba', 'bb' ] ] );
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
|
|
|
const data = {
|
|
|
dataTransfer: createDataTransfer(),
|
|
|
@@ -204,7 +205,8 @@ describe( 'table clipboard', () => {
|
|
|
|
|
|
const table = viewTable( [
|
|
|
[ 'aa', 'ab' ],
|
|
|
- [ 'ba', 'bb' ] ] );
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
|
|
|
const data = {
|
|
|
dataTransfer: createDataTransfer(),
|
|
|
@@ -230,7 +232,8 @@ describe( 'table clipboard', () => {
|
|
|
|
|
|
const table = viewTable( [
|
|
|
[ 'aa', 'ab' ],
|
|
|
- [ 'ba', 'bb' ] ] );
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
|
|
|
const data = {
|
|
|
dataTransfer: createDataTransfer(),
|
|
|
@@ -248,6 +251,162 @@ describe( 'table clipboard', () => {
|
|
|
] ) );
|
|
|
} );
|
|
|
|
|
|
+ it( 'should alter model.insertContent if mixed content is pasted (table + empty paragraph)', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ const table = viewTable( [
|
|
|
+ [ 'aa', 'ab' ],
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ dataTransfer: createDataTransfer(),
|
|
|
+ preventDefault: sinon.spy(),
|
|
|
+ stopPropagation: sinon.spy()
|
|
|
+ };
|
|
|
+ data.dataTransfer.setData( 'text/html', `${ table }<p> </p>` );
|
|
|
+ viewDocument.fire( 'paste', data );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'aa', 'ab', '02', '03' ],
|
|
|
+ [ 'ba', 'bb', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should alter model.insertContent if mixed content is pasted (table + br)', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ const table = viewTable( [
|
|
|
+ [ 'aa', 'ab' ],
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ dataTransfer: createDataTransfer(),
|
|
|
+ preventDefault: sinon.spy(),
|
|
|
+ stopPropagation: sinon.spy()
|
|
|
+ };
|
|
|
+ data.dataTransfer.setData( 'text/html', `${ table }<br>` );
|
|
|
+ viewDocument.fire( 'paste', data );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'aa', 'ab', '02', '03' ],
|
|
|
+ [ 'ba', 'bb', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should alter model.insertContent if mixed content is pasted (empty paragraph + table)', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ const table = viewTable( [
|
|
|
+ [ 'aa', 'ab' ],
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ dataTransfer: createDataTransfer(),
|
|
|
+ preventDefault: sinon.spy(),
|
|
|
+ stopPropagation: sinon.spy()
|
|
|
+ };
|
|
|
+ data.dataTransfer.setData( 'text/html', `<p> </p>${ table }` );
|
|
|
+ viewDocument.fire( 'paste', data );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'aa', 'ab', '02', '03' ],
|
|
|
+ [ 'ba', 'bb', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should alter model.insertContent if mixed content is pasted (br + table)', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ const table = viewTable( [
|
|
|
+ [ 'aa', 'ab' ],
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ dataTransfer: createDataTransfer(),
|
|
|
+ preventDefault: sinon.spy(),
|
|
|
+ stopPropagation: sinon.spy()
|
|
|
+ };
|
|
|
+ data.dataTransfer.setData( 'text/html', `<br>${ table }` );
|
|
|
+ viewDocument.fire( 'paste', data );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'aa', 'ab', '02', '03' ],
|
|
|
+ [ 'ba', 'bb', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should alter model.insertContent if mixed content is pasted (p + p + table + p + br)', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ const table = viewTable( [
|
|
|
+ [ 'aa', 'ab' ],
|
|
|
+ [ 'ba', 'bb' ]
|
|
|
+ ] );
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ dataTransfer: createDataTransfer(),
|
|
|
+ preventDefault: sinon.spy(),
|
|
|
+ stopPropagation: sinon.spy()
|
|
|
+ };
|
|
|
+ data.dataTransfer.setData( 'text/html', `<p> </p><p> </p>${ table }<p> </p><br>` );
|
|
|
+ viewDocument.fire( 'paste', data );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'aa', 'ab', '02', '03' ],
|
|
|
+ [ 'ba', 'bb', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
+ it( 'should not alter model.insertContent if element other than a table is passed directly', () => {
|
|
|
+ tableSelection.setCellSelection(
|
|
|
+ modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|
|
|
+ modelRoot.getNodeByPath( [ 0, 1, 1 ] )
|
|
|
+ );
|
|
|
+
|
|
|
+ model.change( writer => {
|
|
|
+ const element = writer.createElement( 'paragraph' );
|
|
|
+
|
|
|
+ writer.insertText( 'foo', element, 0 );
|
|
|
+ model.insertContent( element );
|
|
|
+ } );
|
|
|
+
|
|
|
+ assertEqualMarkup( getModelData( model, { withoutSelection: true } ), modelTable( [
|
|
|
+ [ 'foo', '', '02', '03' ],
|
|
|
+ [ '', '', '12', '13' ],
|
|
|
+ [ '20', '21', '22', '23' ],
|
|
|
+ [ '30', '31', '32', '33' ]
|
|
|
+ ] ) );
|
|
|
+ } );
|
|
|
+
|
|
|
it( 'should alter model.insertContent if selectable is a document selection', () => {
|
|
|
tableSelection.setCellSelection(
|
|
|
modelRoot.getNodeByPath( [ 0, 0, 0 ] ),
|